Hinweis.: Der ursprüngliche Artikel wurde von Josh Rosso verfasst – einem Architekten von VMware, der zuvor bei Unternehmen wie CoreOS und Heptio gearbeitet hat und Mitautor des Kubernetes alb-ingress-controller ist. Der Autor teilt ein kleines Rezept, das für «Old-School»-Betriebsingenieure, die auch in der Ära der Cloud-Native-Lösungen Vim bevorzugen, sehr nützlich sein kann.

Erstellen Sie YAML-Manifestdateien für Kubernetes in Vim? Haben Sie unzählige Stunden damit verbracht zu verstehen, wo in dieser Spezifikation das nächste Feld sein sollte? Oder freuen Sie sich über eine schnelle Erinnerung an die Unterschiede .) Wir können dieses Rezept mit dem vorherigen kombinieren, um den Test im Debugger zu starten: und command? Есть хорошие новости! Vim легко привязать к , um automatisches Vervollständigen, Validation und andere Annehmlichkeiten zu erhalten. Im Artikel sprechen wir darüber, wie Sie den Sprachserver-Client dafür konfigurieren können.
(Der ursprüngliche Artikel hat auch , in dem der Autor den Inhalt des Materials erklärt und demonstriert.)
Sprachserver
Sprachserver (language servers) informieren Editoren und IDEs über die Funktionen von Programmiersprachen und interagieren dazu über ein spezielles Protokoll - (LSP). Dies ist ein hervorragender Ansatz: Er ermöglicht es einer einzigen Implementierung, mehrere Editoren/IDEs mit Daten zu versorgen. Ich habe bereits über — den Sprachserver für Golang — und wie man ihn verwenden kann in . Die Schritte zur Aktivierung der Autovervollständigung in YAML für Kubernetes sind ähnlich.

Damit vim wie beschrieben funktioniert, muss ein Sprachclient installiert werden. Zwei mir bekannte Optionen sind und . In diesem Artikel werde ich coc.vim behandeln — das ist momentan das beliebteste Plugin. Man kann es über :
" Verwenden Sie den Release-Zweig (empfohlen)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Oder bauen Sie es aus dem Quellcode mit yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Um coc (und damit den Server yaml-language-server) zu starten, ist eine installierte node.js-Version erforderlich:
curl -sL install-node.now.sh/lts | bash Wenn coc.vim Wenn Sie es eingerichtet haben, installieren Sie die serverseitige Erweiterung coc-yaml aus vim:
:CocInstall coc-yaml 
Schließlich möchten Sie wahrscheinlich mit der Konfiguration beginnen coc-vim, die als gegeben wird. Insbesondere aktiviert sie die Kombination +Leertaste zur Aktivierung der Autovervollständigung.
Konfiguration zur Erkennung des yaml-language-server
Um coc Ich konnte den yaml-language-server nutzen, indem ich ihn darum bat, das Schema von Kubernetes beim Bearbeiten von YAML-Dateien zu laden. Dies geschieht durch Bearbeitung coc-config:
:CocConfig In der Konfiguration muss kubernetes für alle Dateien yaml. Zusätzlich verwende ich den Sprachserver für golang, daher sieht meine allgemeine Konfiguration so aus:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
} kubernetes — ein reserviertes Feld, das dem Sprachserver mitteilt, dass er das Kubernetes-Schema von der in . yaml.schemas kann durch die Unterstützung zusätzlicher Schemata erweitert werden – weitere Informationen finden Sie in der .
Jetzt können Sie eine YAML-Datei erstellen und die Autovervollständigung nutzen. Ein Drücken von +Leertaste (oder einer anderen, im vim eingerichteten Kombination) sollte die verfügbaren Felder und die Dokumentation im aktuellen Kontext anzeigen:

Hier funktioniert +Leertaste, weil ich eingestellt habe inoremap coc#refresh(). Wenn Sie dies nicht getan haben – siehe für ein Beispielkonfiguration.
Auswahl der Kubernetes API-Version
Zum Zeitpunkt dieses Artikels wird der yaml-language-server mit Schemas für Kubernetes 1.14.0 ausgeliefert. Ich habe keinen Weg gefunden, um das Schema dynamisch auszuwählen, also habe ich . Glücklicherweise ist es, da der Sprachserver in TypeScript geschrieben ist, relativ einfach, die Version manuell zu ändern. Dafür muss man lediglich die Datei server.ts.
finden. Um sie auf Ihrem Rechner zu entdecken, öffnen Sie einfach eine YAML-Datei mit vim und suchen Sie nach dem Prozess mit yaml-language-server.
ps aux | grep -i yaml-language-server
joshrosso 2380 45.9 0.2 5586084 69324 ?? S 21:32 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+ 21:32 0:00.00 grep -i yaml-language-serverFür uns ist der Prozess 2380 relevant: genau der wird von vim verwendet, während die YAML-Datei bearbeitet wird.
Wie leicht zu erkennen ist, befindet sich die Datei in /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Es genügt, sie zu bearbeiten, indem Sie den Wert KUBERNETES_SCHEMA_URL, zum Beispiel auf Version 1.17.0 ändern:
// 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"; Je nach der verwendeten Version kann die Position der Variablen im Code unterschiedlich sein. Beachten Sie auch, dass ich das Repository von coc-yaml garethr instrumenta findet man . Es scheint, dassdorthin gewechselt ist, um die Schemas dort zu unterstützen. instrumenta wurde auf die Unterstützung der Schemata genau dort umgestellt.
Um zu überprüfen, ob die Änderung wirksam geworden ist, schauen Sie, ob das Feld erscheint, das in früheren [Versionen von Kubernetes] nicht vorhanden war. Zum Beispiel gab es in der Schema für K8s 1.14 nicht. :

Zusammenfassung
Ich hoffe, diese Möglichkeit hat Sie ebenso erfreut wie mich. Viel Spaß beim YAML’en! Vergessen Sie nicht, sich diese Repositories anzusehen, um die in dem Artikel erwähnten Tools besser zu verstehen:
- coc-vim: ;
- coc-yaml: .
P.S. vom Übersetzer
Es gibt auch noch , und .
Lesen Sie auch in unserem Blog:
- «»;
- «».
Quelle: habr.com
