Op. prev.: Izvirni članek je napisal Josh Rosso - arhitekt iz VMware, ki je prej delal v podjetjih, kot sta CoreOS in Heptio, ter je soavtor Kubernetes alb-ingress-controller. Avtor deli majhen recept, ki je lahko zelo uporaben za inženirje „stare šole“, ki še vedno raje uporabljajo vim, tudi v dobi prevladujočega cloud native.

Pišete YAML manifestacije za Kubernetes v vim? Ste preživeli nešteto ur, poskušajoč razumeti, kje v tej specifikaciji pripada naslednje polje? Morda bi bili veseli hitrega opomnika o razliki args in ukaz? Есть хорошие новости! Vim легко привязать к , da dobite samodejno dopolnjevanje, validacijo in druge funkcionalnosti. V članku bomo govorili o tem, kako nastaviti odjemalca jezikovnega strežnika za to.
(Izvirni članek vsebuje tudi , kjer avtor razlaga in prikazuje vsebino gradiva.)
Jezikovni strežnik
Jezikovni strežniki (language servers) razkrivajo zmožnosti programskih jezikov urejevalnikom in IDE-jem, kar pomeni, da med seboj komunicirajo po posebnem protokolu - (LSP). To je odličen pristop: omogoča eni implementaciji, da hkrati oskrbuje podatke več urejevalnikom/IDE-jem. Že sem o - jezikovnem strežniku za Golang - in kako ga lahko uporabimo v . Koraki za pridobitev samodejnega dopolnjevanja v YAML za Kubernetes so enaki.

Da vim deluje na opisani način, je potrebno namestiti odjemalca jezikovnega strežnika. Dva znana načina sta in . V članku bom obravnaval coc.vim — to je trenutno najbolj priljubljen vtičnik. Namestite ga lahko prek :
" Uporabite različico (Priporočljivo)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Ali zgradite iz izvorne kode s pomočjo yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Za pokretanje coc (in, tako rekoč, strežnika yaml-language-server) je potrebna namestitev node.js:
curl -sL install-node.now.sh/lts | bash Ko coc.vim ko je nastavljen, namestite strežniško razširitev coc-yaml iz vim-a:
:CocInstall coc-yaml 
Nazadnje, verjetno boste želeli začeti s konfiguracijo coc-vim, predstavljeno . Zlasti aktivira kombinacijo +preslednica za klicanje samodejnega dopolnjevanja.
Nastavitev zaznavanja yaml-language-server
Da coc je potrebna za yaml-language-server, da prosi, da naloži shemo iz Kubernetes pri urejanju YAML datotek. To storimo z urejanjem coc-config:
:CocConfig V konfiguraciji bo potrebno dodati kubernetes za vse datoteke yaml. Dodatno uporabljam jezikovni strežnik za golang, zato moj celoten konfiguracijski dokument izgleda takole:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": ".yaml"
}
} kubernetes — rezervirano polje, ki obvešča jezikovni strežnik o potrebi po nalaganju Kubernetes sheme prek URL-ja, določenega v . yaml.schemas lahko razširimo s podporo za dodatne sheme — več informacij najdete v .
Sedaj lahko ustvarite YAML datoteko in začnete uporabljati samodejno dopolnjevanje. Pritisnite +preslednica (ali drugo kombinacijo, nastavljeno v vim) bo prikazalo razpoložljiva polja in dokumentacijo v skladu s trenutnim kontekstom:

Tu deluje +presledek, ker sem nastavil inoremap coc#refresh(). Če tega niste storili — glejte za primer konfiguracije.
Izbira različice Kubernetes API
Ob trenutku pisanja tega članka yaml-language-server prihaja z shemami Kubernetes 1.14.0. Nisem našel načina za dinamično izbiro sheme, zato sem odprl . Na srečo, ker je jezikovni strežnik napisan v typescriptu, je zelo enostavno ročno spremeniti različico. Za to zadostuje, da najdete datoteko server.ts.
Da ga odkrijete na svojem računalniku, preprosto odprite YAML datoteko s programom vim in poiščite postopek 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-serverZa nas je pomemben postopek 2380: prav tega uporablja vim med urejanjem YAML datoteke.
Kot lahko enostavno vidite, se datoteka nahaja v /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Preprosto jo uredite in spremenite vrednost KUBERNETES_SCHEMA_URL, na primer na različico 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"; Odvisno od različice uporabljenega coc-yaml lokacija spremenljivke v kodi se lahko razlikuje. Prav tako upoštevajte, da sem spremenil repozitorij z garethr na instrumenta. Zdi se, da garethr je prešel na podporo shem prav tam.
Da preverite, ali je sprememba stopila v veljavo, poglejte, ali se pojavi polje, ki ga prej [v prejšnjih različicah Kubernetes] ni bilo. Na primer, v shemi za K8s 1.14 ni bilo :

Резюме
Upam, da vas je ta možnost razveselila vsaj toliko kot mene. Srečno pri YAML’ingu! Ne pozabite si ogledati teh repozitorijev, da bolje razumete orodja, omenjena v članku:
- coc-vim: ;
- coc-yaml: .
P.S. od prevajalca
In še je , in .
Preberite tudi na našem blogu:
- «»;
- «».
Izvor: habr.com
