Vim amb suport YAML per a Kubernetes

Nota. transl.: L'article original va ser escrit per Josh Rosso, un arquitecte de VMware que abans va treballar en empreses com CoreOS i Heptio, i també és el coautor del Kubernetes alb-ingress-controller. L'autor comparteix una petita recepta que pot ser molt útil per als enginyers d'operacions de la "vella escola" que prefereixen vim fins i tot a l'era del nadiu del núvol victoriós.

Vim amb suport YAML per a Kubernetes

Escriure manifests YAML per a Kubernetes a vim? Heu passat innombrables hores intentant esbrinar on hauria de ser el següent camp d'aquesta especificació? O potser apreciaràs un recordatori ràpid de la diferència args и command? Hi ha bones notícies! Vim és fàcil d'enllaçar servidor-idioma-yamlper obtenir la finalització automàtica, la validació i altres comoditats. En aquest article parlarem de com configurar un client de servidor d'idiomes per a això.

(L'article original també hi ha un vídeo?, on l'autor parla i demostra el contingut del material.)

Servidor d'idiomes

Servidors d'idiomes (servidors d'idiomes) parlar de les capacitats dels llenguatges de programació als editors i IDE, per als quals interactuen entre ells mitjançant un protocol especial - Protocol de servidor d'idiomes (LSP). Aquest és un gran enfocament perquè permet que una implementació proporcioni dades a molts editors/IDE alhora. Ja tinc va escriure про gopls - un servidor d'idiomes per a Golang - i com es pot utilitzar empenta. Els passos per obtenir l'emplenament automàtic a YAML per a Kubernetes són similars.

Vim amb suport YAML per a Kubernetes

Perquè vim funcioni de la manera descrita, haureu d'instal·lar un client de servidor d'idiomes. Els dos mètodes que conec són LanguageClient-neovim и coc.vim. En l'article tindré en compte coc.vim - Aquest és el connector més popular del moment. Podeu instal·lar-lo mitjançant vim-endoll:

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

Per començar coc (i, per tant, el servidor de llenguatge yaml) requerirà instal·lat node.js:

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

Quan coc.vim configurat, instal·leu l'extensió del servidor coc-yaml de vim:

:CocInstall coc-yaml

Vim amb suport YAML per a Kubernetes

Finalment, probablement voldreu començar amb la configuració coc-vim, presentat com un exemple. En particular, activa la combinació + espai per trucar a l'autocompleció.

Configuració de la detecció del servidor de llenguatge yaml

Que coc podria utilitzar yaml-language-server, s'ha de demanar que carregui l'esquema de Kubernetes quan editeu fitxers YAML. Això es fa mitjançant l'edició coc-config:

:CocConfig

A la configuració caldrà afegir kubernetes per a tots els fitxers yaml. A més, faig servir un servidor d'idiomes per golangaixí que la meva configuració general és així:

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

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

kubernetes — un camp reservat que indica al servidor d'idiomes que baixi l'esquema de Kubernetes de l'URL definit a aquesta constant. yaml.schemas es pot ampliar per admetre esquemes addicionals; per a més detalls, vegeu documentació pertinent.

Ara podeu crear un fitxer YAML i començar a utilitzar l'emplenament automàtic. Prement + espai (o una altra combinació configurada a vim) hauria de mostrar els camps i la documentació disponibles segons el context actual:

Vim amb suport YAML per a Kubernetes
Funciona aquí +espai perquè he configurat inoremap <silent><expr> <c-space> coc#refresh(). Si no ho has fet, mira coc.nvim README per a un exemple de configuració.

Seleccionant la versió de l'API de Kubernetes

En el moment d'escriure aquest article, yaml-language-server s'envia amb esquemes Kubernetes 1.14.0. No vaig trobar una manera de seleccionar dinàmicament un esquema, així que vaig obrir problema de GitHub corresponent. Afortunadament, com que el servidor d'idioma està escrit a màquina, és bastant fàcil canviar manualment la versió. Per fer-ho, només cal que busqueu el fitxer server.ts.

Per detectar-lo a la vostra màquina, només heu d'obrir el fitxer YAML amb vim i trobar el procés amb 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

El procés rellevant per a nosaltres és el procés 2380: és el que fa servir vim quan edita un fitxer YAML.

Com podeu veure fàcilment, el fitxer es troba a /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Només cal editar-lo canviant el valor KUBERNETES_SCHEMA_URL, per exemple, per a la versió 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";

Depenent de la versió utilitzada coc-yaml La ubicació de la variable al codi pot variar. Tingueu en compte també que he canviat el repositori de garethr en instrumenta. Sembla que garethr es va canviar als circuits de suport allà.

Per comprovar que el canvi ha tingut efecte, comproveu si apareix un camp que no hi havia abans [en versions anteriors de Kubernetes]. Per exemple, al diagrama per a K8s 1.14 no hi havia cap startupProbe:

Vim amb suport YAML per a Kubernetes

Resum

Espero que aquesta oportunitat us agradi tant com a mi. Feliç YAMling! Assegureu-vos de consultar aquests dipòsits per entendre millor les utilitats esmentades a l'article:

PS del traductor

I també n'hi ha vikube, vim-kubernetes и vimkubectl.

Llegeix també al nostre blog:

Font: www.habr.com

Afegeix comentari