Märk. tõlge.: originaali kirjutas Josh Rosso — VMware'i arhitekt, kes on varem töötanud ettevõtetes nagu CoreOS ja Heptio, ning on ka Kubernetes alb-ingress-controlleri kaasautor. Autor jagab väikest retsepti, mis võib osutuda väga kasulikuks 'vana kooli' süsteemiadministraatoritele, kes eelistavad vim'i isegi cloud native'i ajastul.

Kas kirjutate Kubernetes'e YAML-manifeste vim'is? Olete veetnud lugematuid tunde, püüdes mõista, kuhu peaks see spetsifikatsioonis järgmine väli minema? Võib-olla oleks teile meeltmööda kiire meenutus erinevuste kohta args ja command? Есть хорошие новости! Vim легко привязать к , et saada automaatset täiendamist, valideerimist ja muid mugavusi. Artiklis arutame, kuidas selle jaoks keeltserveri klient seadistada.
(Algse artikli juures on ka , kus autor räägib ja demonstreerib materjali sisu.)
Keeltserver
Keeltserverid (language servers) räägivad programmeerimiskeelte võimalustest redaktoritele ja IDE-dele, millega nad suhtlevad spetsiaalse protokolli kaudu — (LSP). See on suurepärane lähenemine: see võimaldab ühel teostusel andmeid pakkuda mitmele redaktorile/IDE-le. Mina olen juba rääkinud — Go keele server — ja kuidas seda saab kasutada . YAML automaatse täitmise saamiseks Kuberneteses on toimingud sarnased.

Et vim töötaks kirjeldatud viisil, tuleb installida keeleserveri klient. Kaks mulle teadaolevat meetodit on ja . Artiklis käsitlen coc.vim — see on praegu kõige populaarsem plugin. Selle saab installida läbi :
" Kasuta väljaandmise haru (Soovitatav)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Või ehita allikakoodist yarni abil: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Käivitamiseks coc (ja seega yaml-language-serveri serveri) on vajalik, et oleks installitud node.js:
curl -sL install-node.now.sh/lts | bash Kui coc.vim Kui see on seadistatud, installige serverilaiendus coc-yaml vim’ist:
:CocInstall coc-yaml 
Lõpuks soovite tõenäoliselt alustada coc-vimkonfiguratsiooniga, mis on esitatud . Eelkõige aktiveerib see kombinatsiooni +tühik autotäidete kutsumiseks.
yaml-language-serveri tuvastamise seadistamine
Et coc sa võid kasutada yaml-language-server'i, seda tuleb taotleda, et laadida Kubernetes'i skeem YAML-failide redigeerimisel. See toimub redigeerimise teel. coc-config:
:CocConfig Konfiguratsioonis tuleb lisada kubernetes kõikidele failidele yaml. Ma kasutan ka keele serverit golang, seega näeb mu üldine konfiguratsioon välja selline:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
} kubernetes — reservitud väli, mis teavitab keele serverit vajadusest laadida Kubernetes'i skeem URL-ilt, mis on määratud . yaml.schemas võib laiendada täiendavate skeemide toe lisamisega — lisainfot leiate .
Nüüd saab luua YAML-faili ja hakata kasutama autokomplekteerimist. Klahvi vajutamine +tühik (või mõne muu kombinatsiooni, mis on seadistatud vim'is) peaks näitama praegusele kontekstile vastavaid saadaolevaid välju ja dokumentatsiooni:

Siin töötab +tühik, sest olen seadistanud inoremap coc#refresh(). Kui te seda ei teinud — vaadake konfiguratsiooni näite jaoks.
Kubernetes API versiooni valimine
Käesoleva artikli kirjutamise ajal tarnib yaml-language-server Kubernetes 1.14.0 skeemid. Ma ei leidnud viisi skeemi dünaamiliseks valimiseks, seega avasin . Õnneks, kuna keeleserver on kirjutatud typescriptis, on versiooni käsitsi muutmine üsna lihtne. Selleks tuleb lihtsalt leida fail server.ts.
Selle leidmiseks oma masinas avage YAML-fail vimiga ja otsige protsessi, millel on 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-serverMeie jaoks on oluline protsess 2380: just seda kasutab vim YAML-faili redigeerimisel.
Kuidas näha, on fail asukoht /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Piisab selle redigeerimisest, muutes väärtuse KUBERNETES_SCHEMA_URL, näiteks versiooniks 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"; Sõltuvalt kasutatavast coc-yaml muutuja asukoht koodis võib erineda. Pange tähele, et olen samuti muutnud repository't garethr järgnevaga instrumenta. Tundub, et garethr on seal üle läinud skeemide toetamisse.
Kontrollige, kas muudatus on kehtestatud, vaadates, kas ilmub välja, mida varem [Kubernetes'i varasemates versioonides] ei olnud. Näiteks K8s 1.14 skeemis ei olnud :

Kokkuvõte
Loodan, et see võimalus rõõmustas teid mitte vähem kui mind. Head YAML'i kirjutamist! Ära unusta tutvuda nende hoidlate ja tööriistadega, millest artiklis räägiti:
- coc-vim: ;
- coc-yaml: .
P.S. tõlkija märkused
Ja veel on olemas , ja .
Lugege ka meie blogist:
- «»;
- «».
Allikas: habr.com
