Vim kun YAML-subteno por Kubernetes

Notu. transl.: La originala artikolo estis skribita de Josh Rosso, arkitekto ĉe VMware kiu antaŭe laboris ĉe kompanioj kiel CoreOS kaj Heptio, kaj ankaŭ estas la kunaŭtoro de la Kubernetes alb-ingress-controller. La aŭtoro dividas malgrandan recepton, kiu povas esti tre utila por "malnovlernejaj" operaciaj inĝenieroj, kiuj preferas vim eĉ en la epoko de la venka nuba indiĝeno.

Vim kun YAML-subteno por Kubernetes

Ĉu verki YAML-manifestojn por Kubernetes en vim? Pasigis sennombrajn horojn provante eltrovi kie la sekva kampo devus esti en ĉi tiu specifo? Aŭ eble vi aprezos rapidan rememorigon pri la diferenco args и command? Estas bona novaĵo! Vim estas facile ligebla al yaml-lingvo-serviloakiri aŭtomatan kompletigon, validigon kaj aliajn oportunojn. En ĉi tiu artikolo ni parolos pri kiel agordi lingvoservilan klienton por ĉi tio.

(Ankaŭ la originala artikolo ĉu estas video, kie la aŭtoro parolas kaj montras la enhavon de la materialo.)

Lingvoservilo

Lingvaj serviloj (lingvaj serviloj) parolu pri la kapabloj de programlingvoj al redaktantoj kaj IDEoj, por kiuj ili interagas unu kun la alia uzante specialan protokolon - Protokolo pri Lingvoservilo (LSP). Ĉi tio estas bonega aliro ĉar ĝi permesas al unu efektivigo provizi datumojn al multaj redaktantoj/IDEoj samtempe. mi jam havas skribis pri gopls - lingvoservilo por Golang - kaj kiel ĝi povas esti uzata en vim. La paŝoj por akiri aŭtomatan kompletigon en YAML por Kubernetes estas similaj.

Vim kun YAML-subteno por Kubernetes

Por ke vim funkciu laŭ la priskribita maniero, vi devos instali lingvoservilan klienton. La du metodoj kiujn mi konas estas LingvoKliento-neovim и coc.vim. En la artikolo mi konsideros coc.vim - Ĉi tiu estas la plej populara kromaĵo nuntempe. Vi povas instali ĝin per 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'}

Por komenco coc (kaj tiel la yaml-language-server) postulos node.js instalita:

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

Kiam coc.vim agordita, instalu la servilan etendon coc-yaml de vim:

:CocInstall coc-yaml

Vim kun YAML-subteno por Kubernetes

Fine, vi plej verŝajne volas komenci per la agordo coc-vim, prezentita kiel ekzemplon. Precipe ĝi aktivigas la kombinaĵon +spaco voki aŭtomatan kompleton.

Agordi detekton de yaml-language-server

ke coc povus uzi yaml-language-server, oni devas peti ĝin ŝargi la skemon de Kubernetes dum redaktado de YAML-dosieroj. Ĉi tio estas farita per redaktado coc-config:

:CocConfig

En la agordo vi devos aldoni kubernetes por ĉiuj dosieroj yaml. Mi aldone uzas lingvoservilon por golangdo mia ĝenerala agordo aspektas jene:

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

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

kubernetes — rezervita kampo, kiu diras al la lingvoservilo elŝuti la Kubernetes-skemon de la URL difinita en ĉi tiu konstanto. yaml.schemas povas esti vastigita por subteni pliajn skemojn - por pliaj detaloj, vidu koncerna dokumentaro.

Nun vi povas krei YAML-dosieron kaj komenci uzi aŭtomatan kompletigo. Premante +spaco (aŭ alia kombinaĵo agordita en vim) devus montri la disponeblajn kampojn kaj dokumentadon laŭ la nuna kunteksto:

Vim kun YAML-subteno por Kubernetes
Laboras ĉi tie +spaco ĉar mi agordis inoremap <silent><expr> <c-space> coc#refresh(). Se vi ne faris tion, vidu koc.nvim LEGU MI por ekzemplo agordo.

Elektante la Kubernetes API-version

Ekde ĉi tiu skribo, yaml-language-server ekspediĝas kun Kubernetes 1.14.0 skemoj. Mi ne trovis manieron dinamike elekti skemon, do mi malfermis responda GitHub-problemo. Feliĉe, ĉar la lingvoservilo estas skribita per tajpskribo, estas sufiĉe facile mane ŝanĝi la version. Por fari tion, simple trovu la dosieron server.ts.

Por detekti ĝin sur via maŝino, simple malfermu la YAML-dosieron kun vim kaj trovu la procezon per 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

La koncerna procezo por ni estas procezo 2380: ĝi estas tio, kion vim uzas dum redaktado de YAML-dosiero.

Kiel vi povas facile vidi, la dosiero troviĝas en /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Nur redaktu ĝin ŝanĝante la valoron KUBERNETES_SCHEMA_URL, ekzemple, por versio 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";

Depende de la versio uzata coc-yaml La loko de la variablo en la kodo povas varii. Bonvolu noti ankaŭ, ke mi ŝanĝis la deponejon de garethr sur instrumenta. Ŝajnas ke garethr ŝanĝis al subtenaj cirkvitoj tie.

Por kontroli, ke la ŝanĝo efektiviĝis, vidu ĉu aperas kampo, kiu ne estis tie antaŭe [en antaŭaj versioj de Kubernetes]. Ekzemple, en la diagramo por K8s 1.14 estis ne startupProbe:

Vim kun YAML-subteno por Kubernetes

Resumo

Mi esperas, ke ĉi tiu ŝanco plaĉas al vi tiom, kiom ĝi plaĉis al mi. Feliĉa YAMlingo! Nepre kontrolu ĉi tiujn deponejojn por pli bone kompreni la ilojn menciitajn en la artikolo:

PS de tradukisto

Kaj ekzistas ankaŭ vikube, vim-kubernetes и vimkubectl.

Legu ankaŭ en nia blogo:

fonto: www.habr.com

Aldoni komenton