Vim mit YAML-Unterstützung für Kubernetes

Hinweis perev. : Der Originalartikel wurde von Josh Rosso verfasst, einem Architekten von VMware, der zuvor für Unternehmen wie CoreOS und Heptio gearbeitet hatte, sowie einem Co-Autor von Kubernetes Alb-Ingress-Controller. Der Autor teilt ein kleines Rezept mit, das für Betriebsingenieure der „alten Schule“ sehr nützlich sein kann, die vim auch in der Ära des siegreichen Cloud-Native bevorzugen.



Schreiben von YAML-Manifesten für Kubernetes in vim? 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 schnelle Erinnerung an den Unterschiedargsundcommand? Es gibt gute Nachrichten! Vim ist einfach an yaml-language-server zu bindenum automatische Vervollständigung, Validierung und andere Annehmlichkeiten zu erhalten. In diesem Artikel wird erläutert, wie Sie den Sprachserver-Client dafür konfigurieren.

(Der Originalartikel enthält auch ein Video, in dem der Autor spricht und den Inhalt des Materials demonstriert.)

Sprachserver


Sprachserver (Sprachserver) sprechen über die Möglichkeiten von Programmiersprachen für Editoren und IDEs, für die sie mithilfe eines speziellen Protokolls - Language Server Protocol (LSP) - miteinander interagieren . Dies ist ein großartiger Ansatz: Es ermöglicht einer einzelnen Implementierung, mehrere Editoren / IDEs gleichzeitig mit Daten zu versorgen. Ich bereits schrieb über gopls - den Sprachserver für Golang - und wie sie verwendet werden in vim . Die Schritte zum Abrufen der automatischen Vervollständigung in YAML für Kubernetes sind ähnlich.



Damit vim wie beschrieben funktioniert, müssen Sie den Sprachserver-Client installieren. Zwei Methoden, die ich kenne, sind LanguageClient-neovim und coc.vim. In dem Artikel werde ich berücksichtigen coc.vim- dies ist das derzeit beliebteste Plugin. Sie können es über vim-plug installieren :

" 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'}

Zum Starten coc(und damit des yaml-language-Servers) muss node.js installiert sein:

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

Wenn coc.vimkonfiguriert, installieren Sie die Servererweiterung coc-yamlvon vim:

:CocInstall coc-yaml



Schließlich möchten Sie höchstwahrscheinlich mit der als Beispielcoc-vim dargestellten Konfiguration beginnen . Insbesondere wird die Kombination <Strg> + Leerzeichen aktiviert , um die automatische Vervollständigung aufzurufen.

Konfigurieren der Yaml-Language-Server-Erkennung


Um cocyaml-language-server zu verwenden, müssen Sie ihn bitten, das Schema von Kubernetes herunterzuladen, wenn Sie YAML-Dateien bearbeiten. Dies erfolgt durch Bearbeiten coc-config:

:CocConfig

In der Konfiguration müssen Sie kubernetesfür alle Dateien hinzufügen yaml. Ich benutze zusätzlich den Sprachserver für golang, daher sieht meine allgemeine Konfiguration folgendermaßen aus:

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

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

kubernetes- Ein reserviertes Feld, das den Sprachserver über die Notwendigkeit informiert, das Kubernetes-Schema unter Verwendung der in dieser Konstante definierten URL herunterzuladen . yaml.schemaskann durch die Unterstützung zusätzlicher Schemata erweitert werden - weitere Einzelheiten finden Sie in der entsprechenden Dokumentation .

Jetzt können Sie eine YAML-Datei erstellen und die automatische Vervollständigung verwenden. Durch Drücken von <Strg> + Leertaste (oder einer anderen in vim konfigurierten Kombination) sollten die verfügbaren Felder und die Dokumentation gemäß dem aktuellen Kontext angezeigt werden :


<Strg> + Leertaste funktioniert hier, da ich sie konfiguriert habe inoremap <silent><expr> <c-space> coc#refresh(). Wenn Sie dies nicht getan haben, finden Sie in coc.nvim README eine Beispielkonfiguration.

Auswahl der Kubernetes API-Version


Zum Zeitpunkt dieses Schreibens wird der yaml-language-server mit Kubernetes 1.14.0-Schemas ausgeliefert. Ich habe keine Möglichkeit gefunden, ein Schema dynamisch auszuwählen, daher habe ich das entsprechende GitHub-Problem geöffnet . Glücklicherweise ist es sehr einfach, die Version manuell zu ändern, da der Sprachserver in Typoskript geschrieben ist. Suchen Sie dazu einfach die Datei server.ts.

Um es auf Ihrem Computer zu finden, ö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 Prozess 2380 ist für uns relevant: Es ist vim, der ihn beim Bearbeiten einer YAML-Datei verwendet.

Wie Sie sehen 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. Es reicht aus, es zu bearbeiten und den Wert KUBERNETES_SCHEMA_URLbeispielsweise auf Version 1.17.0 zu ä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";

Abhängig von der verwendeten Version kann die coc-yamlPosition der Variablen im Code unterschiedlich sein. Beachten Sie auch, dass ich das Repository von garethrauf geändert habe instrumenta. Es scheint, dass garethrer dort auf unterstützende Schaltkreise umgestellt hat.

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



Zusammenfassung


Ich hoffe, diese Gelegenheit hat Ihnen nicht weniger gefallen als mir. Viel Spaß beim YAML'ing! Schauen Sie sich unbedingt diese Repositorys an, um die im Artikel genannten Dienstprogramme besser zu verstehen:


PS vom Übersetzer


Und es gibt Vikube , Vim-Kubernetes und Vimkubectl .

Lesen Sie auch in unserem Blog:


All Articles