Vim mit YAML-Unterstützung für Kubernetes

Notiz. übersetzen: Der Originalartikel wurde von Josh Rosso verfasst, einem Architekten bei VMware, der zuvor bei Unternehmen wie CoreOS und Heptio gearbeitet hat und außerdem Co-Autor des Kubernetes alb-ingress-controllers ist. Der Autor teilt ein kleines Rezept mit, das für Betriebsingenieure der „alten Schule“, die auch im Zeitalter der siegreichen Cloud Natives Vim bevorzugen, sehr nützlich sein kann.

Vim mit YAML-Unterstützung für Kubernetes

YAML-Manifeste für Kubernetes in vim schreiben? Haben Sie unzählige Stunden damit verbracht, herauszufinden, wo sich das nächste Feld in dieser Spezifikation befinden sollte? Oder vielleicht freuen Sie sich über eine kurze Erinnerung an den Unterschied args и command? Es gibt gute Neuigkeiten! Vim lässt sich leicht verlinken Yaml-Sprachserverum automatische Vervollständigung, Validierung und andere Annehmlichkeiten zu erhalten. In diesem Artikel sprechen wir darüber, wie man dafür einen Sprachserver-Client einrichtet.

(Der Originalartikel auch Es gibt ein Video, wo der Autor spricht und den Inhalt des Materials demonstriert.)

Sprachserver

Sprachserver (Sprachserver) Sprechen Sie über die Fähigkeiten von Programmiersprachen für Editoren und IDEs, für die sie über ein spezielles Protokoll miteinander interagieren - Sprachserver-Protokoll (LSP). Dies ist ein großartiger Ansatz, da er es einer Implementierung ermöglicht, Daten gleichzeitig für viele Editoren/IDEs bereitzustellen. Ich habe bereits писал über gopls - ein Sprachserver für Golang - und wie er verwendet werden kann vim. Die Schritte zum Erhalten der automatischen Vervollständigung in YAML für Kubernetes sind ähnlich.

Vim mit YAML-Unterstützung für Kubernetes

Damit vim auf die beschriebene Weise funktioniert, müssen Sie einen Sprachserver-Client installieren. Die beiden Methoden, die ich kenne, sind LanguageClient-neovim и coc.vim. In dem Artikel werde ich darüber nachdenken coc.vim - Dies ist derzeit das beliebteste Plugin. Sie können es über installieren vim-stecker:

" Use release branch (Recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Or build from source code by use yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Für den Anfang coc (und damit der Yaml-Sprachserver) erfordert die Installation von node.js:

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

Wenn coc.vim konfiguriert ist, installieren Sie die Servererweiterung coc-yaml von vim:

:CocInstall coc-yaml

Vim mit YAML-Unterstützung für Kubernetes

Abschließend möchten Sie höchstwahrscheinlich mit der Konfiguration beginnen coc-vim, vorgeführt als ein Beispiel. Insbesondere aktiviert es die Kombination +Leerzeichen um die Autovervollständigung aufzurufen.

Einrichten der Yaml-Sprachserver-Erkennung

Dass coc Könnte den Yaml-Language-Server verwenden, muss er beim Bearbeiten von YAML-Dateien aufgefordert werden, das Schema von Kubernetes zu laden. Dies geschieht durch Bearbeiten coc-config:

:CocConfig

In der Konfiguration müssen Sie hinzufügen kubernetes für alle Dateien yaml. Ich verwende zusätzlich einen Sprachserver für golangalso meine allgemeine Konfiguration sieht so aus:

{
  "languageserver": {
      "golang": {
        "command": "gopls",
        "rootPatterns": ["go.mod"],
        "filetypes": ["go"]
      }
  },

  "yaml.schemas": {
      "kubernetes": "/*.yaml"
  }
}

kubernetes – ein reserviertes Feld, das den Sprachserver anweist, das Kubernetes-Schema von der in definierten URL herunterzuladen diese Konstante. yaml.schemas kann erweitert werden, um zusätzliche Schemata zu unterstützen – weitere Einzelheiten finden Sie unter entsprechende Dokumentation.

Jetzt können Sie eine YAML-Datei erstellen und mit der Verwendung der Autovervollständigung beginnen. Drücken +Leerzeichen (oder eine andere in vim konfigurierte Kombination) sollte die verfügbaren Felder und Dokumentation entsprechend dem aktuellen Kontext anzeigen:

Vim mit YAML-Unterstützung für Kubernetes
Funktioniert hier +Leerzeichen, weil ich es konfiguriert habe inoremap <silent><expr> <c-space> coc#refresh(). Wenn Sie dies noch nicht getan haben, lesen Sie coc.nvim README für eine Beispielkonfiguration.

Auswahl der Kubernetes-API-Version

Zum jetzigen Zeitpunkt wird Yaml-Language-Server mit Kubernetes 1.14.0-Schemas ausgeliefert. Ich habe keine Möglichkeit gefunden, ein Schema dynamisch auszuwählen, also habe ich es geöffnet entsprechendes GitHub-Problem. Da der Sprachserver glücklicherweise in Typoskript geschrieben ist, ist es recht einfach, die Version manuell zu ändern. Suchen Sie dazu einfach die Datei server.ts.

Um es auf Ihrem Computer zu erkennen, öffnen Sie einfach die YAML-Datei mit vim und suchen Sie den Prozess mit 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-server

Der für uns relevante Prozess ist Prozess 2380: Er wird von vim beim Bearbeiten einer YAML-Datei verwendet.

Wie Sie leicht erkennen können, befindet sich die Datei in /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Bearbeiten Sie es einfach, indem Sie den Wert ändern KUBERNETES_SCHEMA_URL, zum Beispiel für 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";

Abhängig von der verwendeten Version coc-yaml Die Position der Variablen im Code kann variieren. Bitte beachten Sie auch, dass ich das Repository von geändert habe garethr auf instrumenta. Es scheint, dass garethr dort auf unterstützende Schaltungen umgestellt.

Um zu überprüfen, ob die Änderung wirksam wurde, prüfen Sie, ob ein Feld angezeigt wird, das zuvor [in früheren Versionen von Kubernetes] nicht vorhanden war. Im Diagramm für K8s 1.14 gab es beispielsweise nein StartupProbe:

Vim mit YAML-Unterstützung für Kubernetes

Zusammenfassung

Ich hoffe, diese Gelegenheit gefällt Ihnen genauso gut wie mir. Viel Spaß beim YAMLing! Schauen Sie sich unbedingt diese Repositorys an, um die im Artikel erwähnten Dienstprogramme besser zu verstehen:

PS vom Übersetzer

Und da ist vikube, vim-kubernetes и vimkubectl.

Lesen Sie auch auf unserem Blog:

Source: habr.com

Kommentar hinzufügen