Bem. overs.: Den originale artikel blev skrevet af Josh Rosso – en arkitekt fra VMware, tidligere ansat hos virksomheder som CoreOS og Heptio, og også medforfatter til Kubernetes alb-ingress-controller. Forfatteren deler en lille opskrift, som kan vise sig at være meget nyttig for ”old school” driftsingeniører, der foretrækker vim, selv i en tid, hvor cloud native har vundet frem.

Skriver du YAML-manifestfiler til Kubernetes i vim? Har du tilbragt utallige timer på at forstå, hvor i denne specifikation det næste felt skal være? Måske vil du være glad for en hurtig påmindelse om forskellen args og command? Есть хорошие новости! Vim легко привязать к , for at få automatisk udfyldning, validering og andre bekvemmeligheder. I artiklen vil vi diskutere, hvordan man opsætter en sprogklient til dette.
(Den originale artikel har også , hvor forfatteren forklarer og demonstrerer indholdet af materialet.)
Sprogserver
Sprogservere (language servers) fortæller om programmeringssprog mængder til redaktører og IDE'er, derfor interagerer de med hinanden via en særlig protokol – (LSP). Dette er en fantastisk tilgang: det gør det muligt for én implementering at levere data til mange redaktører/IDE'er på én gang. Jeg har allerede about – en sprogserver til Golang – og hvordan den kan anvendes i . Handlingerne for at få automatisk udfyldning i YAML til Kubernetes er ens.

For at vim skal fungere som beskrevet, skal du installere en sprogserverklient. To kendte metoder jeg kender til er og . I artiklen vil jeg se nærmere på coc.vim – dette er den mest populære plugin i øjeblikket. Du kan installere det via :
" Brug stabil version (anbefales)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Eller byg det fra kildekoden ved at bruge yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} For at starte coc (og dermed vil serveren yaml-language-server have brug for, at node.js er installeret:
curl -sL install-node.now.sh/lts | bash Når coc.vim er opsat, skal du installere serverudvidelsen coc-yaml fra vim:
:CocInstall coc-yaml 
Endelig vil du højst sandsynligt gerne starte med konfigurationen coc-vim, præsenteret . Især aktiverer den kombinationen +mellemrum til at kalde automatisk udfyldning.
Opsætning af opdagelse af yaml-language-server
For at coc kunne drage fordel af yaml-language-server, du skal bede det om at hente skemaet fra Kubernetes, når du redigerer YAML-filer. Dette gøres ved at redigere coc-config:
:CocConfig I konfigurationen er det nødvendigt at tilføje kubernetes til alle filer yaml. Jeg bruger desuden sprogserveren til golang, derfor ser min samlede konfiguration sådan ud:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
} kubernetes — et reserveret felt, der informerer sprogserveren om at hente Kubernetes-skemaet fra den URL, der er defineret i . yaml.schemas kan udvides med understøttelse af yderligere skemaer — læs mere i .
Nu kan du oprette en YAML-fil og begynde at bruge autocompletion. Tryk på +mellemrum (eller en anden kombination, der er indstillet i vim), skal vise de tilgængelige felter og dokumentationen i forhold til den aktuelle kontekst:

Her fungerer <Ctrl>+mellemrum, fordi jeg har indstillet inoremap <silent><expr> <c-space> coc#refresh(). Hvis du ikke har gjort det — se for et eksempel på konfiguration.
Valg af version af Kubernetes API
På tidspunktet for denne artikel leveres yaml-language-server med skemaer til Kubernetes 1.14.0. Jeg fandt ikke en måde at vælge skemaet dynamisk, så jeg åbnede . Heldigvis, da sprogserveren er skrevet i typescript, er det ret nemt at ændre versionen manuelt. Det er nok bare at finde filen server.ts.
For at finde den på din maskine skal du bare åbne YAML-filen i vim og finde processen med 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-serverProcessen 2380 er relevant for os: det er den, vim bruger under redigering af YAML-filen.
Som det er let at se, er filen placeret i /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Det er tilstrækkeligt at redigere den ved at ændre værdien KUBERNETES_SCHEMA_URL, f.eks. til version 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"; Afhængig af hvilken version der bruges, kan placeringen af variablen i koden være forskellig. Bemærk også, at jeg har ændret depotet fra coc-yaml garethr instrumenta og få en fungerende kommando. . Det ser ud til, ater blevet skiftet til at støtte skemaer der. instrumenta For at kontrollere, at ændringen har trådt i kraft, skal du se, om det felt, som tidligere [i tidligere versioner af Kubernetes] ikke var til stede, nu vises. For eksempel var der ikke noget felt i skemaet for K8s 1.14.
For at kontrollere, om ændringen er trådt i kraft, skal du se, om feltet, der før [i tidligere versioner af Kubernetes] ikke var til stede, nu vises. For eksempel var der ikke noget felt i skemaet for K8s 1.14. :

CV
Jeg håber, den mulighed glæder dig lige så meget som mig. God YAML!”! Glem ikke at tjekke disse repositories for bedre at forstå de værktøjer, der er nævnt i artiklen:
- coc-vim: ;
- coc-yaml: .
P.S. fra oversætteren
Og der er også , og .
Læs også på vores blog:
- «»;
- «».
Kilde: habr.com
