Pozn. přek.: originální článek napsal Josh Rosso — architekt z VMware, který dříve pracoval ve firmách jako CoreOS a Heptio, a je také spolautorem Kubernetes alb-ingress-controller. Autor se dělí o malý recept, který může být velmi užitečný pro inženýry provozu „staré školy“, kteří dávají přednost vim i v éře vítězného cloud nativity.

Píšete YAML manifesty pro Kubernetes ve vim? Strávili jste bezpočtem hodin snahou pochopit, kde v této specifikaci má být další pole? Nebo byste byli rádi za rychlou připomínku rozdílu args a command? Есть хорошие новости! Vim легко привязать к , abyste získali automatické doplňování, validaci a další vymoženosti. V článku se podíváme na to, jak nastavit klienta jazykového serveru pro tuto funkci.
(Originální článek také , kde autor vypráví a demonstruje obsah materiálu.)
Jazykový server
Jazykové servery (language servers) informují o možnostech programovacích jazyků editory a IDE, přičemž spolu interagují pomocí speciálního protokolu — (LSP). Je to skvělý přístup: umožňuje jedné implementaci poskytovat data okamžitě mnoha editorům/IDE. Již jsem o — jazykový server pro Golang — a jak ho lze použít v . Krok pro získání automatického doplňování v YAML pro Kubernetes je obdobný.

Aby vim fungoval popsaným způsobem, bude potřeba nainstalovat klienta jazykového serveru. Dvě metody, které znám, jsou a . V článku budu zmiňovat coc.vim — aktuálně nejpopulárnější plugin. Můžete ho nainstalovat pomocí :
" Použijte verzi pro uvolnění (Doporučeno)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Nebo sestavit ze zdrojového kódu pomocí yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Pro spuštění coc (a tím pádem i server yaml-language-server) je potřeba mít nainstalovaný node.js:
curl -sL install-node.now.sh/lts | bash Když coc.vim jakmile je nastaven, nainstalujte serverové rozšíření coc-yaml z vimu:
:CocInstall coc-yaml 
Nakonec pravděpodobně budete chtít začít s konfigurací coc-vim, která je představena . Zejména aktivuje kombinaci +mezerník pro vyvolání automatického doplňování.
Nastavení detekce yaml-language-server
Aby coc mohl využít yaml-language-server, je třeba požádat ho, aby načítal schéma z Kubernetes při editaci YAML souborů. To se dělá úpravou coc-config:
:CocConfig V konfiguraci bude potřeba přidat kubernetes pro všechny soubory yaml. Dodatečně používám jazykový server pro golang, takže moje celková konfigurace vypadá takto:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
} kubernetes — rezervované pole, které říká jazykovému serveru, že je třeba načíst Kubernetes schéma podle URL definovaného v . yaml.schemas může být rozšířeno podporou dalších schémat — podrobnosti viz .
Nyní můžete vytvořit YAML soubor a začít používat automatické doplňování. Stisknutí +mezerník (nebo jiné kombinace nastavené ve vim) by mělo zobrazit dostupná pole a dokumentaci podle aktuálního kontextu:

Zde funguje +mezerník, protože jsem nastavil inoremap coc#refresh(). Pokud jste to neudělali — viz pro příklad konfigurace.
Výběr verze Kubernetes API
K datu napsání tohoto článku yaml-language-server přichází se schématy Kubernetes 1.14.0. Nenašel jsem způsob, jak dynamicky vybírat schéma, takže jsem otevřel . Naštěstí, protože jazykový server je napsán v typescriptu, je velmi snadné ručně změnit verzi. Stačí najít soubor server.ts.
Abyste ho našli na svém stroji, jednoduše otevřete YAML soubor pomocí vim a vyhledejte 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-serverPro nás je relevantní proces 2380: ten používá vim při úpravě YAML souboru.
Jak snadno vidět, soubor se nachází v /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Stačí ho upravit a změnit hodnotu KUBERNETES_SCHEMA_URL, například na verzi 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 na verzi používaného coc-yaml umístění proměnné v kódu se může lišit. Také si dejte pozor, že jsem změnil repozitář z garethr na instrumenta. Vypadá to, že garethr přešel na podporu schém právě tam.
Abychom zkontrolovali, že změna nabyla účinnosti, podívejte se, zda se zobrazuje pole, které dříve [v předchozích verzích Kubernetes] nebylo. Například ve schématu pro K8s 1.14 nebylo :

Shrnutí
Doufám, že vás tato možnost potěšila stejně jako mě. Šťastné YAMLování! Nezapomeňte si prohlédnout tyto repozitáře, abyste se lépe seznámili s nástroji zmíněnými v článku:
- coc-vim: ;
- coc-yaml: .
P.S. od překladatele
A také existuje , a .
Přečtěte si také náš blog:
- «»;
- «».
Zdroj: habr.com
