Vim s podporou YAML pre Kubernetes

Poznámka. preklad.: Pôvodný článok napísal Josh Rosso, architekt vo VMware, ktorý predtým pracoval v spoločnostiach ako CoreOS a Heptio, a je tiež spoluautorom Kubernetes alb-ingress-controller. Autor zdieľa malý recept, ktorý môže byť veľmi užitočný pre prevádzkových inžinierov „starej školy“, ktorí uprednostňujú vim aj v ére víťazného cloudového domorodca.

Vim s podporou YAML pre Kubernetes

Písanie YAML manifestov pre Kubernetes vo vim? Strávili ste nespočetné hodiny hľadaním toho, kde by malo byť ďalšie pole v tejto špecifikácii? Alebo možno oceníte rýchle pripomenutie rozdielu args и command? Máme dobré správy! Vim sa dá ľahko prepojiť yaml-jazykový-serverzískať automatické dokončovanie, overovanie a ďalšie vymoženosti. V tomto článku si povieme, ako na to nastaviť klienta jazykového servera.

(Pôvodný článok tiež je tam video, kde autor rozpráva a demonštruje obsah materiálu.)

Jazykový server

Jazykové servery (jazykové servery) hovoriť o možnostiach programovacích jazykov pre editorov a IDE, pre ktoré navzájom komunikujú pomocou špeciálneho protokolu - Protokol jazykového servera (LSP). Toto je skvelý prístup, pretože umožňuje jednej implementácii poskytovať údaje viacerým editorom/IDE naraz. Už som napísal som o gopls - jazykový server pre Golang - a ako ho možno použiť v elán. Kroky na získanie automatického dokončovania v YAML pre Kubernetes sú podobné.

Vim s podporou YAML pre Kubernetes

Aby vim fungoval opísaným spôsobom, budete musieť nainštalovať klienta jazykového servera. Dva spôsoby, ktoré poznám, sú JazykKlient-neovim и coc.vim. V článku zvážim coc.vim - Toto je momentálne najpopulárnejší doplnok. Môžete ho nainštalovať cez vim-plug:

" Use release branch (Recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Or build from source code by use yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Na začiatok coc (a teda yaml-language-server) bude vyžadovať nainštalovaný node.js:

curl -sL install-node.now.sh/lts | bash

Kedy coc.vim nakonfigurované, nainštalujte rozšírenie servera coc-yaml od vim:

:CocInstall coc-yaml

Vim s podporou YAML pre Kubernetes

Nakoniec budete s najväčšou pravdepodobnosťou chcieť začať s konfiguráciou coc-vim, prezentované ako príklad. Najmä aktivuje kombináciu +medzera zavolať automatické dokončovanie.

Nastavenie detekcie yaml-jazyka-servera

Že coc môže použiť yaml-language-server, pri úprave súborov YAML je potrebné ho požiadať o načítanie schémy z Kubernetes. To sa vykonáva úpravou coc-config:

:CocConfig

V konfigurácii budete musieť pridať kubernetes pre všetky súbory yaml. Okrem toho používam jazykový server golangtakže moja všeobecná konfigurácia vyzerá takto:

{
  "languageserver": {
      "golang": {
        "command": "gopls",
        "rootPatterns": ["go.mod"],
        "filetypes": ["go"]
      }
  },

  "yaml.schemas": {
      "kubernetes": "/*.yaml"
  }
}

kubernetes — vyhradené pole, ktoré hovorí jazykovému serveru, aby si stiahol schému Kubernetes z adresy URL definovanej v túto konštantu. yaml.schemas je možné rozšíriť o podporu ďalších schém – viac podrobností viď príslušnú dokumentáciu.

Teraz môžete vytvoriť súbor YAML a začať používať automatické dopĺňanie. Lisovanie +medzera (alebo iná kombinácia nakonfigurovaná vo vim) by mala zobrazovať dostupné polia a dokumentáciu podľa aktuálneho kontextu:

Vim s podporou YAML pre Kubernetes
Funguje tu +medzera, pretože som nakonfiguroval inoremap <silent><expr> <c-space> coc#refresh(). Ak ste to neurobili, pozrite sa coc.nvim README pre príklad konfigurácie.

Výber verzie rozhrania Kubernetes API

V čase písania tohto článku sa yaml-language-server dodáva so schémami Kubernetes 1.14.0. Nenašiel som spôsob, ako dynamicky vybrať schému, tak som otvoril zodpovedajúci problém GitHub. Našťastie, keďže jazykový server je napísaný strojopisom, je celkom jednoduché manuálne zmeniť verziu. Ak to chcete urobiť, stačí nájsť súbor server.ts.

Ak to chcete zistiť na svojom počítači, jednoducho otvorte súbor YAML pomocou vim a nájdite proces pomocou 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

Relevantným procesom je pre nás proces 2380: to je to, čo vim používa pri úprave súboru YAML.

Ako môžete ľ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ť zmenou hodnoty KUBERNETES_SCHEMA_URL, napríklad pre 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 použitej verzie coc-yaml Umiestnenie premennej v kóde sa môže líšiť. Upozorňujeme tiež, že som zmenil úložisko z garethr na instrumenta. Zdá sa, že garethr tam prešli na podporné obvody.

Ak chcete skontrolovať, či sa zmena prejavila, skontrolujte, či sa neobjaví pole, ktoré tam predtým nebolo [v predchádzajúcich verziách Kubernetes]. Napríklad v diagrame pre K8s 1.14 nebolo žiadne startupProbe:

Vim s podporou YAML pre Kubernetes

Zhrnutie

Dúfam, že vás táto príležitosť poteší rovnako ako mňa. Šťastný YAMLing! Nezabudnite si pozrieť tieto úložiská, aby ste lepšie porozumeli pomôckam uvedeným v článku:

PS od prekladateľa

A tiež existuje vikube, vim-kubernetes и vimkubectl.

Prečítajte si aj na našom blogu:

Zdroj: hab.com

Pridať komentár