Opmerking vertaler.: het originele artikel is geschreven door Josh Rosso - een architect bij VMware, die eerder heeft gewerkt bij bedrijven als CoreOS en Heptio, en mede-auteur is van de Kubernetes alb-ingress-controller. De auteur deelt een kort recept dat erg nuttig kan zijn voor 'old-school' systeembeheerders die zelfs in het tijdperk van cloud native voorkeur geven aan vim.

Schrijf je YAML-manifesten voor Kubernetes in vim? Heb je talloze uren besteed om te begrijpen waar dit veld in de specificatie moet komen? Of misschien ben je blij met een snelle herinnering over het verschil args en command? Есть хорошие новости! Vim легко привязать к , om automatische aanvulling, validatie en andere gemakken te krijgen. In dit artikel bespreken we hoe je de taalserver-client hiervoor kunt instellen.
(In het originele artikel is er ook , waarin de auteur de inhoud van het materiaal uitlegt en demonstreert.)
Taalserver
Taalservers (language servers) vertellen over de mogelijkheden van programmeertalen aan editors en IDE’s, waarvoor zij met elkaar communiceren via een speciaal protocol - (LSP). Dit is een geweldige aanpak: het stelt één implementatie in staat om gegevens aan meerdere editors/IDE’s te bieden. Ik heb al over — de taalserver voor Golang — en hoe deze kan worden gebruikt in . De stappen om automatische aanvulling te krijgen in YAML voor Kubernetes zijn vergelijkbaar.

Om vim op de beschreven manier te laten werken, moet je een taalserver-client installeren. Twee bekende opties zijn en . In dit artikel bespreek ik coc.vim — dit is momenteel de populairste plug-in. Je kunt het installeren via :
" Gebruik de release tak (aanbevolen)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Of bouw het vanaf de source-code met yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Om te starten coc (en, dus, de server yaml-language-server) heeft een geïnstalleerde node.js nodig:
curl -sL install-node.now.sh/lts | bash Wanneer coc.vim Zodra dit is ingesteld, installeer je de serverextensie coc-yaml uit vim:
:CocInstall coc-yaml 
Ten slotte wil je waarschijnlijk beginnen met de configuratie coc-vim, gepresenteerd . In het bijzonder activeert het de combinatie +spatie om de automatische aanvulling aan te roepen.
Instelling van detectie van yaml-language-server
Om coc kan gebruik maken van yaml-language-server; je moet het vragen om het schema van Kubernetes te laden bij het bewerken van YAML-bestanden. Dit doe je door coc-config:
:CocConfig Toe te voegen aan de configuratie kubernetes voor alle bestanden yaml. Ik gebruik daarnaast een taalsserver voor golang, dus mijn volledige configuratie ziet er als volgt uit:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": ".yaml"
}
} kubernetes — een gereserveerd veld dat het taalsserver meldt dat het de Kubernetes-schema moet laden via de URL die is gedefinieerd in . yaml.schemas kan worden uitgebreid met ondersteuning voor extra schema's — zie meer in de .
Nu kun je een YAML-bestand maken en beginnen met autocompleteren. Het indrukken van +spatie of een andere combinatie ingesteld in vim zou de beschikbare velden en documentatie moeten tonen in overeenstemming met de huidige context:

Hier werkt +spatie, omdat ik heb ingesteld inoremap coc#refresh(). Als je dit niet hebt gedaan — zie voor een voorbeeld van configuratie.
Keuze versie van Kubernetes API
Op het moment van schrijven wordt yaml-language-server geleverd met Kubernetes-schemas 1.14.0. Ik heb geen manier gevonden om dynamisch een schema te kiezen, dus ik opende . Gelukkig, omdat de taalsserver is geschreven in typescript, is het vrij eenvoudig om de versie handmatig te wijzigen. Het enige wat je hoeft te doen is het bestand te vinden server.ts.
Om het op jouw machine te vinden, open je gewoon een YAML-bestand met vim en zoek je naar het proces met 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-serverVoor ons is proces 2380 relevant: dat is degene die vim gebruikt tijdens het bewerken van het YAML-bestand.
Zoals je kunt zien, bevindt het bestand zich in /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Het is voldoende om het te bewerken en de waarde te wijzigen KUBERNETES_SCHEMA_URL, bijvoorbeeld, naar versie 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"; Afhankelijk van de versie van de gebruikte coc-yaml de locatie van de variabele in de code kan variëren. Houd er ook rekening mee dat ik de repository heb gewijzigd van garethr en een werkende opdracht krijgen. instrumenta. Het lijkt erop dat garethr is overgestapt op ondersteuning voor schema's daar.
Om te controleren of de wijziging effect heeft gehad, kijk of het veld verschijnt dat eerder [in eerdere versies van Kubernetes] niet aanwezig was. Bijvoorbeeld, in het schema voor K8s 1.14 was het niet aanwezig. :

Samenvatting
Ik hoop dat deze mogelijkheid je net zo blij maakt als mij. Fijne YAML-ervaring! Vergeet niet om deze repositories te bekijken om meer te leren over de tools die in het artikel worden genoemd:
- coc-vim: ;
- coc-yaml: .
P.S. van de vertaler
En er is ook , en .
Lees ook op onze blog:
- «»;
- «».
Bron: habr.com
