Napomena za prijevod.: Izvorni članak je napisao Josh Rosso — arhitekt iz VMware-a, koji je ranije radio u kompanijama kao što su CoreOS i Heptio, a također je i suosnivač Kubernetes alb-ingress-controller-a. Autor dijeli mali trik koji može biti vrlo koristan inženjerima održavanja 'stare škole', koji i dalje preferiraju vim čak i u doba cloud native.

Pišete YAML manifestacije za Kubernetes u vim-u? Proveli ste bezbroj sati pokušavajući shvatiti gdje u ovoj specifikaciji treba biti sljedeće polje? A možda ćete biti sretni sa brzim podsjetnikom na razliku args i naredba? Есть хорошие новости! Vim легко привязать к , kako biste dobili automatsko dovršavanje, validaciju i druge pogodnosti. U članku ćemo razgovarati o tome kako postaviti klijent jezičnog poslužitelja za ovo.
(Izvorni članak također , u kojem autor objašnjava i prikazuje sadržaj materijala.)
Jezični poslužitelj
Jezični poslužitelji (language servers) pružaju informacije o mogućnostima programskih jezika uređivačima i IDE-ima, kako bi međusobno komunicirali putem posebnog protokola — (LSP). Ovo je izvrstan pristup: omogućava jednoj implementaciji da opskrbi podatke odmah za više uređivača/IDE-a. Već sam govorio — jezični poslužitelj za Golang — i kako ga možete koristiti u . Postupci za dobivanje automatskog dovršavanja u YAML-u za Kubernetes su slični.

Da bi vim radio na opisani način, potrebno je instalirati klijent jezičnog poslužitelja. Dva poznata načina su i . U članku ću raspraviti coc.vim — to je trenutno najpopularniji dodatak. Možete ga instalirati putem :
" Koristite izdanje grane (Preporučeno)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Ili izgradite iz izvornog koda koristeći yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Za pokretanje coc (i, tako, poslužitelja yaml-language-server) potrebno je imati instaliran node.js:
curl -sL install-node.now.sh/lts | bash Kada coc.vim postavljen, instalirajte proširenje poslužitelja coc-yaml iz vim-a:
:CocInstall coc-yaml 
Na kraju, najvjerojatnije ćete htjeti početi s konfiguracijom coc-vim, prikazanom . Konkretno, aktivira kombinaciju +razmak za pozivanje automatskog dovršavanja.
Postavka otkrivanja yaml-language-server
Da coc moguće je koristiti yaml-language-server, treba ga zamoliti da učita shemu iz Kubernetes-a prilikom uređivanja YAML datoteka. To se radi uređivanjem coc-config:
:CocConfig U konfiguraciji treba dodati kubernetes za sve datoteke yaml. Dodatno koristim jezični poslužitelj za golang, stoga moj cjelokupni config izgleda ovako:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "
*.yaml"
}
} kubernetes — rezervirano polje koje obavještava jezični poslužitelj o potrebi preuzimanja Kubernetes sheme putem URL-a navedenog u . yaml.schemas može se proširiti podrškom za dodatne sheme — više informacija potražite u .
Sada možete kreirati YAML datoteku i početi koristiti automatsko dovršavanje. Pritisak +razmak (ili druge kombinacije postavljene u vim) trebao bi prikazati dostupna polja i dokumentaciju u skladu s trenutnim kontekstom:

Ovdje radi +razmak, jer sam postavio inoremap coc#refresh(). Ako to niste učinili — pogledajte za primjer konfiguracije.
Odabir verzije Kubernetes API
U trenutku pisanja ovog članka yaml-language-server dolazi sa shemama Kubernetes 1.14.0. Nisam pronašao način za dinamičko odabiranje sheme, pa sam otvorio . Na sreću, budući da je jezični poslužitelj napisan u typescriptu, vrlo je lako ručno promijeniti verziju. Dovoljno je pronaći datoteku server.ts.
Kako biste je pronašli na svom računaru, samo otvorite YAML datoteku pomoću vim i pronađite 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-serverZa nas je relevantan proces 2380: točno taj koristi vim tijekom uređivanja YAML datoteke.
Kao što se lako može vidjeti, datoteka se nalazi u /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Dovoljno je urediti ga, promijenivši vrijednost KUBERNETES_SCHEMA_URL, na primjer, na verziju 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"; Ovisno o verziji koja se koristi, coc-yaml mjesto varijable u kodu može biti različito. Također, imajte na umu da sam promijenio repozitorij s garethr na instrumenta. Čini se da garethr je prešao na podršku shema upravo tamo.
Da biste provjerili je li promjena stupila na snagu, pogledajte prikazuje li se polje koje ranije [u prethodnim verzijama Kubernetes] nije bilo. Na primjer, u shemi za K8s 1.14 nije bilo :

Sažetak
Nadam se da vam je ova mogućnost donijela isto toliko radosti koliko i meni. Sretno s YAML-om! Ne zaboravite provjeriti ove repozitorije kako biste bolje razumjeli alate spomenute u članku:
- coc-vim: ;
- coc-yaml: .
P.S. od prevodioca
A tu je i , i .
Pročitajte i na našem blogu:
- «»;
- «».
Izvor: habr.com
