Pozn. prekl.: originálny článok napísal Josh Rosso – architekt z VMware, ktorý predtým pracoval v spoločnostiach ako CoreOS a Heptio, a tiež je spoluautorom Kubernetes alb-ingress-controller. Autor sa delí o malý recept, ktorý môže byť veľmi užitočný pre inžinierov „starého školenia“, ktorí preferujú vim aj v ére víťazného cloud native.

Píšete YAML manifesty pre Kubernetes vo vim? Strávili ste nespočetné hodiny pokusmi pochopiť, kde v tejto špecifikácii má byť ďalšie pole? Alebo by ste ocenili rýchlu pripomienku o rozdiele args a command? Есть хорошие новости! Vim легко привязать к , aby ste získali automatické doplňovanie, validáciu a ďalšie pohodlnosti. V článku si povieme, ako nastaviť klienta jazykového servera na tento účel.
(Originálny článok má tiež , kde autor rozpráva a demonštruje obsah materiálu.)
Jazykový server
Jazykové servery (language servers) informujú editory a IDE o možnostiach programovacích jazykov, pričom medzi sebou komunikujú cez špeciálny protokol – (LSP). Je to skvelý prístup: pretože umožňuje jednej implementácii poskytovať údaje viacerým editorom/IDE. Ja už o – jazykový server pre Golang – a ako ho možno využiť v . Kroky na získanie automatického doplňovania v YAML pre Kubernetes sú podobné.

Aby vim fungoval popísaným spôsobom, je potrebné nainštalovať klienta jazykového servera. Dve známe možnosti, ktoré poznám, sú a . V článku sa budem zaoberať coc.vim – to je v súčasnosti najpopulárnejší plugin. Nainštalovať ho môžete cez :
" Použiť stabilnú verziu (odporúčané)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Alebo zostaviť zo zdrojového kódu pomocou yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Na spustenie coc (a teda servera yaml-language-server) bude potrebné mať nainštalovaný node.js:
curl -sL install-node.now.sh/lts | bash Keď coc.vim nastavený, nainštalujte serverové rozšírenie coc-yaml z vim:
:CocInstall coc-yaml 
Nakoniec, pravdepodobne chcete začať s konfiguráciou coc-vim, prezentovanou . Konkrétne aktivuje kombináciu +medzerník na vyvolanie automatického doplňovania.
Nastavenie detekcie yaml-language-server
Aby coc mohol využiť yaml-language-server, je potrebné požiadať ho, aby načítal schému z Kubernetes pri úprave YAML súborov. To sa robí úpravou coc-config:
:CocConfig V konfigurácii bude potrebné pridať kubernetes pre všetky súbory yaml. Ja dodatočne používam jazykový server pre golang, preto moja celková konfigurácia vyzerá takto:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
} kubernetes — rezervované pole, informujúce jazykový server o potrebe načítať Kubernetes schému z URL definovanej v . yaml.schemas môže byť rozšírené o podporu ďalších schém — viac pozrite v .
Teraz môžete vytvoriť YAML súbor a začať používať automatické doplňovanie. Stlačenie +medzerník (alebo inej kombinácie, nastavenej v vim) by malo zobraziť dostupné polia a dokumentáciu podľa aktuálneho kontextu:

Tu funguje +medzerník, pretože som nastavil inoremap coc#refresh(). Ak ste tak neurobili — pozrite sa na pre príklad konfigurácie.
Výber verzie API Kubernetes
V čase písania tohto článku yaml-language-server je dodávaný so schémami Kubernetes 1.14.0. Nenašiel som spôsob, ako dynamicky vybrať schému, preto som otvoril . Našťastie, keďže jazykový server je napísaný v typescripte, je veľmi jednoduché ručne zmeniť verziu. Stačí nájsť súbor server.ts.
Aby ste ho našli vo svojej stanici, jednoducho otvorte YAML súbor pomocou vim a vyhľadajte proces s 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-serverPre nás je relevantný proces 2380: práve ten používa vim počas úpravy YAML súboru.
Ako je ľahko vidieť, súbor sa nachádza v /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Stačí ho upraviť a zmeniť hodnotu KUBERNETES_SCHEMA_URL, napríklad na verziu 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"; V závislosti od verzie používaného coc-yaml umiestnenie premennej v kóde môže byť rôzne. Všimnite si tiež, že som zmenil repozitár z garethr na instrumenta. Zdá sa, že garethr prešiel na podporu schém práve tam.
Aby ste overili, že zmena nadobudla účinnosť, pozrite sa, či sa objaví pole, ktoré predtým [v predchádzajúcich verziách Kubernetes] neexistovalo. Napríklad, v schéme pre K8s 1.14 nebolo :

Zhrnutie
Dúfam, že táto možnosť vás potešila rovnako ako mňa. Šťastné YAML’ovanie! Nezabudnite sa oboznámiť s týmito repoziťármi, aby ste sa lepšie oboznámili s nástrojmi uvedenými v článku:
- coc-vim: ;
- coc-yaml: .
P.S. od prekladateľa
A ešte existuje , a .
Prečítajte si tiež na našom blogu:
- «»;
- «».
Zdroj: habr.com
