Vim s podporou YAML pro Kubernetes

Poznámka. přel.: Původní článek napsal Josh Rosso, architekt z VMware, který dříve pracoval ve společnostech jako CoreOS a Heptio, a je také spoluautorem Kubernetes alb-ingress-controller. Autor sdílí malý recept, který může být velmi užitečný pro provozní inženýry ze „staré školy“, kteří preferují vim i v době vítězného cloudového domorodce.

Vim s podporou YAML pro Kubernetes

Psaní YAML manifestů pro Kubernetes ve vim? Strávili jste nespočet hodin hledáním toho, kde by mělo být další pole v této specifikaci? Nebo možná oceníte rychlé připomenutí rozdílu args и command? Máme dobré zprávy! Vim lze snadno propojit yaml-jazykový-serverzískat automatické vyplňování, ověřování a další vymoženosti. V tomto článku budeme hovořit o tom, jak k tomu nastavit klienta jazykového serveru.

(Původní článek také mít video, kde autor hovoří a demonstruje obsah materiálu.)

Jazykový server

Jazykové servery (jazykové servery) mluvit o možnostech programovacích jazyků s editory a IDE, pro které vzájemně komunikují pomocí speciálního protokolu - Jazykový serverový protokol (LSP). To je skvělý přístup, protože umožňuje jedné implementaci poskytovat data mnoha editorům/IDE najednou. už mám napsal jsem про gopls - jazykový server pro Golang - a jak jej lze použít v elán. Kroky k získání automatického dokončování v YAML pro Kubernetes jsou podobné.

Vim s podporou YAML pro Kubernetes

Aby vim fungoval popsaným způsobem, budete muset nainstalovat klienta jazykového serveru. Dvě metody, které znám, jsou JazykKlient-neovim и coc.vim. V článku budu uvažovat coc.vim - Toto je v současnosti nejoblíbenější plugin. Můžete jej nainstalovat přes vim-plug:

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

Pro začátek coc (a tedy i yaml-language-server) bude vyžadovat nainstalovaný node.js:

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

Kdy coc.vim nakonfigurováno, nainstalujte serverové rozšíření coc-yaml od vim:

:CocInstall coc-yaml

Vim s podporou YAML pro Kubernetes

Nakonec budete s největší pravděpodobností chtít začít s konfigurací coc-vim, předloženo jako příklad. Zejména aktivuje kombinaci +prostor zavolat automatické dokončování.

Nastavení detekce yaml-language-server

Že coc může používat yaml-language-server, je třeba jej při úpravě souborů YAML požádat o načtení schématu z Kubernetes. To se provádí úpravou coc-config:

:CocConfig

V konfiguraci budete muset přidat kubernetes pro všechny soubory yaml. Navíc používám jazykový server golangtakže moje obecná konfigurace vypadá takto:

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

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

kubernetes — vyhrazené pole, které říká jazykovému serveru, aby si stáhl schéma Kubernetes z adresy URL definované v tato konstanta. yaml.schemas lze rozšířit o podporu dalších schémat – více podrobností viz příslušnou dokumentaci.

Nyní můžete vytvořit soubor YAML a začít používat automatické dokončování. Lisování +prostor (nebo jiná kombinace nakonfigurovaná ve vim) by měla zobrazovat dostupná pole a dokumentaci podle aktuálního kontextu:

Vim s podporou YAML pro Kubernetes
Funguje zde +mezera, protože jsem nakonfiguroval inoremap <silent><expr> <c-space> coc#refresh(). Pokud jste to neudělali, viz coc.nvim README pro příklad konfigurace.

Výběr verze rozhraní Kubernetes API

V době psaní tohoto článku se yaml-language-server dodává se schématy Kubernetes 1.14.0. Nenašel jsem způsob, jak dynamicky vybrat schéma, tak jsem otevřel odpovídající problém GitHubu. Naštěstí, protože jazykový server je napsán strojopisem, je docela snadné ručně změnit verzi. Chcete-li to provést, stačí najít soubor server.ts.

Chcete-li to zjistit na svém počítači, jednoduše otevřete soubor YAML pomocí vim a najděte proces pomocí 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

Relevantní proces pro nás je proces 2380: to je to, co vim používá při úpravě souboru YAML.

Jak můžete snadno vidět, soubor se nachází v /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Stačí jej upravit změnou hodnoty KUBERNETES_SCHEMA_URL, například pro verzi 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";

Podle použité verze coc-yaml Umístění proměnné v kódu se může lišit. Vezměte prosím také na vědomí, že jsem změnil úložiště z garethr na instrumenta. Zdá se, že garethr tam přešel na podpůrné obvody.

Chcete-li zkontrolovat, zda se změna projevila, podívejte se, zda se neobjeví pole, které tam dříve nebylo [v předchozích verzích Kubernetes]. Například v diagramu pro K8s 1.14 nebylo žádné startupProbe:

Vim s podporou YAML pro Kubernetes

Shrnutí

Doufám, že vás tato příležitost potěší stejně jako mě. Šťastný YAMLing! Nezapomeňte se podívat na tato úložiště, abyste lépe porozuměli utilitám zmíněným v článku:

PS od překladatele

A existuje vikube, vim-kubernetes и vimkubectl.

Přečtěte si také na našem blogu:

Zdroj: www.habr.com

Přidat komentář