Vim s podrškom za YAML za Kubernetes

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.

Vim s podrškom za YAML za Kubernetes

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 легко привязать к yaml-language-server, 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ž video, 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 – Language Server Protocol (LSP). Je to skvelý prístup: pretože umožňuje jednej implementácii poskytovať údaje viacerým editorom/IDE. Ja už písal o gopls – jazykový server pre Golang – a ako ho možno využiť v vim. Kroky na získanie automatického doplňovania v YAML pre Kubernetes sú podobné.

Vim s podrškom za YAML za Kubernetes

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ú LanguageClient-neovim a coc.vim. V článku sa budem zaoberať coc.vim – to je v súčasnosti najpopulárnejší plugin. Nainštalovať ho môžete cez vim-plug:

" 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

Vim s podrškom za YAML za Kubernetes

Nakoniec, pravdepodobne chcete začať s konfiguráciou coc-vim, prezentovanou ako príklad. 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 tejto konštante. yaml.schemas môže byť rozšírené o podporu ďalších schém — viac pozrite v zodpovedajúcej dokumentácii.

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:

Vim s podrškom za YAML za Kubernetes
Tu funguje +medzerník, pretože som nastavil inoremap coc#refresh(). Ak ste tak neurobili — pozrite sa na coc.nvim README 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 zodpovedajúci GitHub issue. 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-server

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

Vim s podrškom za YAML za Kubernetes

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:

P.S. od prekladateľa

A ešte existuje vikube, vim-kubernetes a vimkubectl.

Prečítajte si tiež na našom blogu:

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster