Vim avec prise en charge YAML pour Kubernetes

Noter. trad.: L'article original a été écrit par Josh Rosso, un architecte chez VMware qui a déjà travaillé dans des sociétés telles que CoreOS et Heptio, et est également co-auteur du alb-ingress-controller Kubernetes. L'auteur partage une petite recette qui peut être très utile pour les ingénieurs d'exploitation « old school » qui préfèrent vim même à l'ère du cloud natif victorieux.

Vim avec prise en charge YAML pour Kubernetes

Écrire des manifestes YAML pour Kubernetes dans vim ? Vous avez passé d'innombrables heures à essayer de déterminer où devrait se trouver le prochain champ dans cette spécification ? Ou peut-être apprécierez-vous un petit rappel de la différence args и command? Il y a une bonne nouvelle ! Il est facile de créer un lien vers Vim serveur de langue yamlpour obtenir l'achèvement, la validation et d'autres commodités automatiques. Dans cet article, nous expliquerons comment configurer un client serveur de langue pour cela.

(L'article original également il y a une vidéo, où l'auteur parle et démontre le contenu du matériel.)

Serveur de langue

Serveurs de langues (serveurs de langue) parler des capacités des langages de programmation aux éditeurs et aux IDE, pour lesquels ils interagissent les uns avec les autres à l'aide d'un protocole spécial - Protocole de serveur de langue (LSP). Il s'agit d'une excellente approche car elle permet à une implémentation de fournir des données à plusieurs éditeurs/IDE à la fois. j'ai déjà écrit про gopls - un serveur linguistique pour Golang - et comment il peut être utilisé dans entrain. Les étapes pour obtenir la saisie semi-automatique dans YAML pour Kubernetes sont similaires.

Vim avec prise en charge YAML pour Kubernetes

Pour que vim fonctionne de la manière décrite, vous devrez installer un client serveur de langue. Les deux méthodes que je connais sont LangueClient-neovim и coc.vim. Dans l'article, je considérerai coc.vim - C'est le plugin le plus populaire du moment. Vous pouvez l'installer via vim-plug:

" Use release branch (Recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Or build from source code by use yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Pour courir coc (et donc le serveur de langue yaml) nécessitera l'installation de node.js :

curl -sL install-node.now.sh/lts | bash

Quand coc.vim configuré, installez l'extension du serveur coc-yaml de vim :

:CocInstall coc-yaml

Vim avec prise en charge YAML pour Kubernetes

Enfin, vous souhaiterez probablement commencer par la configuration coc-vim, présenté en exemple. En particulier, il active la combinaison +espace pour appeler la saisie semi-automatique.

Configuration de la détection du serveur de langage yaml

Que coc pourrait utiliser le serveur de langage yaml, il faut lui demander de charger le schéma depuis Kubernetes lors de la modification des fichiers YAML. Cela se fait en éditant coc-config:

:CocConfig

Dans la configuration, vous devrez ajouter kubernetes pour tous les fichiers yaml. J'utilise également un serveur de langue pour golangdonc ma config générale ressemble à ça :

{
  "languageserver": {
      "golang": {
        "command": "gopls",
        "rootPatterns": ["go.mod"],
        "filetypes": ["go"]
      }
  },

  "yaml.schemas": {
      "kubernetes": "/*.yaml"
  }
}

kubernetes — un champ réservé qui indique au serveur de langue de télécharger le schéma Kubernetes à partir de l'URL définie dans cette constante. yaml.schemas peut être étendu pour prendre en charge des programmes supplémentaires - pour plus de détails, voir documentation pertinente.

Vous pouvez maintenant créer un fichier YAML et commencer à utiliser la saisie semi-automatique. Pressage +espace (ou autre combinaison configurée dans vim) doit afficher les champs et la documentation disponibles en fonction du contexte actuel :

Vim avec prise en charge YAML pour Kubernetes
Fonctionne ici +espace car j'ai configuré inoremap <silent><expr> <c-space> coc#refresh(). Si vous ne l'avez pas fait, voyez coc.nvim README pour un exemple de configuration.

Sélection de la version de l'API Kubernetes

Au moment d'écrire ces lignes, yaml-langage-server est livré avec les schémas Kubernetes 1.14.0. Je n'ai pas trouvé de moyen de sélectionner dynamiquement un schéma, j'ai donc ouvert problème GitHub correspondant. Heureusement, comme le serveur de langue est écrit en dactylographie, il est assez simple de modifier manuellement la version. Pour ce faire, recherchez simplement le fichier server.ts.

Pour le détecter sur votre machine, ouvrez simplement le fichier YAML avec vim et recherchez le processus avec yaml-language-server.

ps aux | grep -i yaml-language-server

joshrosso         2380  45.9  0.2  5586084  69324   ??  S     9:32PM   0:00.43 /usr/local/Cellar/node/13.5.0/bin/node /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js --node-ipc --node-ipc --clientProcessId=2379
joshrosso         2382   0.0  0.0  4399352    788 s001  S+    9:32PM   0:00.00 grep -i yaml-language-server

Le processus pertinent pour nous est le processus 2380 : c'est ce que vim utilise lors de l'édition d'un fichier YAML.

Comme vous pouvez facilement le constater, le fichier se trouve dans /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Modifiez-le simplement en changeant la valeur KUBERNETES_SCHEMA_URL, par exemple, pour la version 1.17.0 :

// old 1.14.0 schema
//exports.KUBERNETES_SCHEMA_URL = "https://raw.githubusercontent.com/garethr/kubernetes-json-schema/master/v1.14.0-standalone-strict/all.json";
// new 1.17.0 schema in instrumenta repo
exports.KUBERNETES_SCHEMA_URL = "https://raw.githubusercontent.com/instrumenta/kubernetes-json-schema/master/v1.17.0-standalone-strict/all.json";

Selon la version utilisée coc-yaml L'emplacement de la variable dans le code peut varier. Veuillez également noter que j'ai modifié le référentiel de garethr sur instrumenta. Il paraît que garethr basculé vers des circuits de support là-bas.

Pour vérifier que la modification a pris effet, vérifiez si un champ apparaît qui n'existait pas auparavant [dans les versions précédentes de Kubernetes]. Par exemple, dans le diagramme du K8s 1.14, il n'y avait pas startupProbe:

Vim avec prise en charge YAML pour Kubernetes

Résumé

J'espère que cette opportunité vous plaira autant qu'à moi. Joyeux YAMling ! Assurez-vous de consulter ces référentiels pour mieux comprendre les utilitaires mentionnés dans l'article :

PS du traducteur

Et il y a vikubé, vim-kubernetes и vimkubectl.

A lire aussi sur notre blog :

Source: habr.com

Ajouter un commentaire