Vim mit YAML-Unterstützung für Kubernetes

Anmerkung des Übersetzers.: Der Originalartikel wurde von Josh Rosso geschrieben – 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 Betriebstechniker der "alten Schule", die selbst in der Ära des Cloud Native lieber mit vim arbeiten, sehr nützlich sein könnte.

Vim mit YAML-Unterstützung für Kubernetes

Schreiben Sie YAML-Manifeste 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 vielleicht über eine kurze Erinnerung an die Unterschiede args und command? Есть хорошие новости! Vim легко привязать к yaml-language-server, um automatische Vervollständigungen, Validierung und weitere Annehmlichkeiten zu erhalten. In diesem Artikel besprechen wir, wie man den Sprachserver-Client dafür einrichtet.

(Der Originalartikel hat auch ein Video, in dem der Autor den Inhalt des Materials erläutert und demonstriert.)

Sprachserver

Sprachserver (language servers) berichten den Editoren und IDEs von den Möglichkeiten der Programmiersprachen, dabei kommunizieren sie über ein spezielles Protokoll – Language Server Protocol (LSP). Dies ist ein großartiger Ansatz: Es ermöglicht einer Implementierung, Daten für viele Editoren/IDEs bereitzustellen. Ich habe bereits geschrieben über gopls – den Sprachserver für Golang – und wie man ihn verwenden kann emacs. 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, müssen Sie den Sprachserver-Client installieren. Zwei mir bekannte Optionen sind LanguageClient-neovim und coc.vim. In diesem Artikel werde ich daher coc.vim – das ist derzeit das beliebteste Plugin. Es kann über vim-plug:

" Verwenden Sie den Release-Branch (empfohlen)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Oder bauen Sie aus dem Quellcode mit yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Für den Start coc (und somit der Server yaml-language-server) erfordert eine installierte node.js-Version:

curl -sL install-node.now.sh/lts | bash

Wenn coc.vim Nachdem dies eingerichtet ist, installieren Sie die Servererweiterung coc-yaml aus vim heraus:

: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 Beispieldient. Insbesondere aktiviert sie die Kombination +Leertaste zum Aufrufen der Autovervollständigung.

Einstellung zur Entdeckung des yaml-language-server

Um coc um yaml-language-server nutzen zu können, muss er angewiesen werden, das Schema von Kubernetes beim Bearbeiten von YAML-Dateien zu laden. Dies geschieht durch Bearbeiten coc-config:

:CocConfig

In der Konfiguration müssen Sie Folgendes hinzufügen Kubernetes für alle Dateien yaml. Ich verwende außerdem einen Sprachserver für golang, daher sieht meine gesamte 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. yaml.schemas mit zusätzlichen Schemata erweitert werden kann — siehe dazu die entsprechende Dokumentation.

Jetzt können Sie eine YAML-Datei erstellen und mit der Autovervollständigung beginnen. Drücken Sie +Leertaste (oder eine andere Kombination, die in vim eingestellt ist), um verfügbare Felder und Dokumentationen entsprechend dem aktuellen Kontext anzuzeigen:

Vim mit YAML-Unterstützung für Kubernetes
Hier funktioniert +Leertaste, weil ich inoremap coc#refresh()eingerichtet habe. Wenn Sie das nicht getan haben — siehe coc.nvim README für ein Beispiel der Konfiguration.

Wahl der Kubernetes API-Version

Zum Zeitpunkt des Schreibens dieses Artikels wird der yaml-language-server mit den Schemas für Kubernetes 1.14.0 ausgeliefert. Ich fand keinen Weg, um dynamisch das Schema auszuwählen, also habe ich das entsprechende GitHub-Problem. Zum Glück ist es, da der Sprachserver in TypeScript geschrieben ist, ziemlich einfach, die Version manuell zu ändern. Sie müssen nur die Datei finden server.ts.

Um ihn auf Ihrem Computer zu finden, öffnen Sie einfach eine YAML-Datei mit vim und suchen Sie nach einem 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 den verwendet vim während der Bearbeitung der YAML-Datei.

Wie leicht zu erkennen ist, liegt 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 und den Wert von KUBERNETES_SCHEMA_URL, beispielsweise auf 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";

Je nach Version des verwendeten coc-yaml Standorts kann die Variable im Code unterschiedlich sein. Beachten Sie auch, dass ich das Repository von garethr auf instrumentagewechselt habe. Es sieht so aus, als ob garethr es dort auf die Unterstützung der Schemas umgestellt hat.

Um zu überprüfen, ob die Änderung wirksam wurde, sehen Sie nach, ob das Feld angezeigt wird, das vorher [in früheren Versionen von Kubernetes] nicht vorhanden war. Zum Beispiel gab es in dem Schema für K8s 1.14 kein startupProbe:

Vim mit YAML-Unterstützung für Kubernetes

Zusammenfassung

Ich hoffe, diese Möglichkeit hat Ihnen ebenso Freude bereitet wie mir. Viel Spaß beim YAML’en! Vergessen Sie nicht, sich diese Repositories anzusehen, um ein besseres Verständnis für die in dem Artikel erwähnten Tools zu bekommen:

P.S. vom Übersetzer

Außerdem gibt es vikube, vim-kubernetes und vimkubectl.

Lesen Sie auch in unserem Blog:

Quelle: habr.com

60GB SSD 8Gb DDR4