Vim mit YAML-Unterstützung für Kubernetes

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.

Vim mit YAML-Unterstützung für Kubernetes

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 легко привязать к yaml-language-server, 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 ein Video, 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 - Language Server Protocol (LSP). Dies ist ein hervorragender Ansatz: Er ermöglicht es einer einzigen Implementierung, mehrere Editoren/IDEs mit Daten zu versorgen. Ich habe bereits schrieb über gopls — den Sprachserver für Golang — und wie man ihn verwenden kann in vim. Die Schritte zur Aktivierung der Autovervollständigung in YAML für Kubernetes sind ähnlich.

Vim mit YAML-Unterstützung für Kubernetes

Damit vim wie beschrieben funktioniert, muss ein Sprachclient installiert werden. Zwei mir bekannte Optionen sind LanguageClient-neovim und coc.vim. In diesem Artikel werde ich coc.vim behandeln — das ist momentan das beliebteste Plugin. Man kann es über vim-plug:

" 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

Vim mit YAML-Unterstützung für Kubernetes

Schließlich möchten Sie wahrscheinlich mit der Konfiguration beginnen coc-vim, die als Beispielgegeben 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 dieser Konstante angegebenen URL laden soll.. yaml.schemas kann durch die Unterstützung zusätzlicher Schemata erweitert werden – weitere Informationen finden Sie in der entsprechenden Dokumentation..

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:

Vim mit YAML-Unterstützung für Kubernetes
Hier funktioniert +Leertaste, weil ich eingestellt habe inoremap coc#refresh(). Wenn Sie dies nicht getan haben – siehe coc.nvim README 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 das entsprechende GitHub-Issue. 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-server

Fü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. startupProbe:

Vim mit YAML-Unterstützung für Kubernetes

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:

P.S. vom Übersetzer

Es gibt auch noch vikube, vim-kubernetes und vimkubectl.

Lesen Sie auch in unserem Blog:

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster