Vim s podporou YAML pro Kubernetes

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.

Vim s podporou YAML pro Kubernetes

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 легко привязать к yaml-language-server, 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é obsahuje video, 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 — Language Server Protocol (LSP). Je to skvělý přístup: umožňuje jedné implementaci poskytovat data okamžitě mnoha editorům/IDE. Již jsem psal o gopls — jazykový server pro Golang — a jak ho lze použít v vim. Krok pro získání automatického doplňování v YAML pro Kubernetes je obdobný.

Vim s podporou YAML pro Kubernetes

Aby vim fungoval popsaným způsobem, bude potřeba nainstalovat klienta jazykového serveru. Dvě metody, které znám, jsou LanguageClient-neovim a coc.vim. V článku budu zmiňovat coc.vim — aktuálně nejpopulárnější plugin. Můžete ho nainstalovat pomocí vim-plug:

" 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

Vim s podporou YAML pro Kubernetes

Nakonec pravděpodobně budete chtít začít s konfigurací coc-vim, která je představena jako příklad. 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 této konstantě. yaml.schemas může být rozšířeno podporou dalších schémat — podrobnosti viz odpovídající dokumentaci.

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:

Vim s podporou YAML pro Kubernetes
Zde funguje +mezerník, protože jsem nastavil inoremap coc#refresh(). Pokud jste to neudělali — viz coc.nvim README 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 příslušný GitHub problém. 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-server

Pro 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 startupProbe:

Vim s podporou YAML pro Kubernetes

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:

P.S. od překladatele

A také existuje vikube, vim-kubernetes a vimkubectl.

Přečtěte si také náš blog:

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster