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.

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 легко привязать к , 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 , 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 — (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à sur — un serveur de langage pour Golang — et comment il peut être utilisé dans . Les étapes pour obtenir l'autocomplétion dans YAML pour Kubernetes sont similaires.

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 et . Dans cet article, je vais examiner coc.vim — c'est le plugin le plus populaire à ce jour. Vous pouvez l'installer via :
" 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 
Enfin, vous voudrez probablement commencer par la configuration coc-vim, présentée . 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 . yaml.schemas peut être étendu avec un support pour des schémas supplémentaires — pour plus de détails, voir la .
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 :

Ici, +espace fonctionne, car j'ai configuré inoremap coc#refresh(). Si vous ne l'avez pas fait — voir 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 . 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-serverPour 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 :

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 :
- coc-vim : ;
- coc-yaml : .
P.S. de l'auteur
Et il y a aussi , et .
Lisez aussi dans notre blog :
- «»;
- «».
Source : habr.com
