Vim avec prise en charge de YAML pour Kubernetes.

Note de traduction.: L'article original a été écrit par Josh Rosso — un architecte de VMware, anciennement employé par des entreprises telles que CoreOS et Heptio, et co-auteur du contrôleur d'entrées Kubernetes alb-ingress-controller. L'auteur partage une petite recette qui pourrait être très utile pour les ingénieurs dOps « old school », préférant vim même à l'ère du cloud native.

Vim avec prise en charge de YAML pour Kubernetes.

Vous rédigez des manifestes YAML pour Kubernetes dans vim ? Vous avez passé d'innombrables heures à essayer de comprendre où doit se trouver le prochain champ dans cette spécification ? Peut-être apprécierez-vous un rapide rappel de la différence. args et commande? Есть хорошие новости! Vim легко привязать к yaml-language-server, pour obtenir une autocomplétion, une validation et d'autres commodités. Dans cet article, nous parlerons de la façon de configurer le client du serveur de langage pour cela.

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

Serveur de langage

Serveurs de langage (language servers) informent les éditeurs et les IDE sur les capacités des langages de programmation, interagissant entre eux via un protocole spécial — Language Server Protocol (LSP). C'est une approche formidable : elle permet à une seule implémentation de fournir des données à de nombreux éditeurs/IDE en même temps. Je suis déjà a écrit sur gopls — un serveur de langage pour Golang — et comment il peut être utilisé dans vim. Les étapes pour obtenir l'autocomplétion dans YAML pour Kubernetes sont similaires.

Vim avec prise en charge de YAML pour Kubernetes.

Pour que vim fonctionne de cette manière, vous devrez installer le client du serveur de langage. Les deux méthodes que je connais bien sont LanguageClient-neovim et coc.vim. Dans cet article, je vais examiner coc.vim — c'est le plugin le plus populaire à ce jour. Vous pouvez l'installer via vim-plug:

" Utiliser la branche de publication (Recommandé)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Ou construire à partir du code source en utilisant yarn : https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Pour le déploiement coc (et, de cette façon, le serveur yaml-language-server) nécessite que node.js soit installé :

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

Lorsque coc.vim une fois configuré, installez l'extension serveur coc-yaml depuis vim :

:CocInstall coc-yaml

Vim avec prise en charge de YAML pour Kubernetes.

Enfin, vous voudrez probablement commencer par la configuration coc-vim, présentée comme exemple. En particulier, elle active la combinaison +espace pour appeler l'autocomplétion.

Configuration pour découvrir le yaml-language-server

Pour que coc a pu utiliser le yaml-language-server, vous devez lui demander de charger le schéma de Kubernetes lors de l'édition des fichiers YAML. Cela se fait en modifiant coc-config:

:CocConfig

Vous devrez ajouter à la configuration kubernetes pour tous les fichiers yaml. J'utilise en plus un serveur de langage pour golang, donc ma configuration générale ressemble à ceci :

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

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

kubernetes — un champ réservé qui informe le serveur de langage de charger le schéma Kubernetes à l'URL définie dans cette constante. yaml.schemas peut être étendu avec un support pour des schémas supplémentaires — pour plus de détails, voir la documentation correspondante.

Vous pouvez maintenant créer un fichier YAML et commencer à profiter de l'auto-complétion. En appuyant sur +espace (ou une autre combinaison configurée dans vim) vous devriez voir les champs disponibles et la documentation en fonction du contexte actuel :

Vim avec prise en charge de YAML pour Kubernetes.
Ici, +espace fonctionne, car j'ai configuré inoremap coc#refresh(). Si vous ne l'avez pas fait — voir coc.nvim README pour un exemple de configuration.

Choix de la version de l'API Kubernetes

Au moment de la rédaction de cet article, le yaml-language-server est fourni avec des schémas Kubernetes 1.14.0. Je n'ai pas trouvé de moyen de choisir la version dynamiquement, alors j'ai ouvert l'issue GitHub correspondante. Heureusement, puisque le serveur de langage est écrit en typescript, il est très facile de modifier manuellement la version. Il suffit de trouver le fichier server.ts.

Pour le localiser sur votre machine, ouvrez simplement un fichier YAML avec vim et trouvez 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

Pour nous, le processus 2380 est pertinent : c'est celui que vim utilise lors de l'édition d'un fichier YAML.

Comme vous pouvez le voir facilement, le fichier est situé dans /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Il suffit de l'éditer, en changeant la valeur KUBERNETES_SCHEMA_URL, par exemple, à 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";

En fonction de la version utilisée, coc-yaml la position de la variable dans le code peut varier. Notez également que j'ai changé le dépôt de garethr sur instrumenta. Il semble que garethr a commencé à prendre en charge les schémas là-bas.

Pour vérifier que le changement a pris effet, regardez si le champ qui n'était pas [dans les anciennes versions de Kubernetes] apparaît maintenant. Par exemple, le schéma pour K8s 1.14 ne contenait pas startupProbe:

Vim avec prise en charge de YAML pour Kubernetes.

Résumé

J'espère que cette opportunité vous ravit autant que moi. Bon YAML’ing! N'oubliez pas de consulter ces dépôts pour mieux comprendre les utilitaires mentionnés dans l'article :

P.S. de l'auteur

Et il y a aussi vikube, vim-kubernetes et vimkubectl.

Lisez aussi dans notre blog :

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster