Vim með YAML stuðningi fyrir Kubernetes

Athugið. þýð.: Upprunalega greinin var skrifuð af Josh Rosso, arkitekt hjá VMware sem starfaði áður hjá fyrirtækjum eins og CoreOS og Heptio, og er einnig meðhöfundur Kubernetes alb-ingress-controller. Höfundur deilir lítilli uppskrift sem getur verið mjög gagnleg fyrir „gamla skóla“ rekstrartæknifræðinga sem kjósa vim jafnvel á tímum hins sigursæla skýjabúa.

Vim með YAML stuðningi fyrir Kubernetes

Að skrifa YAML birtingaskrá fyrir Kubernetes í vim? Eyddi óteljandi klukkustundum í að reyna að finna út hvar næsti reitur ætti að vera í þessari forskrift? Eða kannski muntu þakka fljótlega áminningu um muninn args и command? Það eru góðar fréttir! Auðvelt er að tengja við Vim yaml-tungumálaþjónntil að fá sjálfvirka útfyllingu, staðfestingu og önnur þægindi. Í þessari grein munum við tala um hvernig á að setja upp tungumálaþjónaforrit fyrir þetta.

(Upprunalega greinin líka er til myndband, þar sem höfundur talar og sýnir innihald efnisins.)

Tungumálaþjónn

Tungumálaþjónar (tungumálaþjónar) tala um getu forritunarmála við ritstjóra og IDE, sem þeir hafa samskipti sín á milli með því að nota sérstaka samskiptareglur - Bókun tungumálamiðlara (LSP). Þetta er frábær nálgun vegna þess að hún gerir einni útfærslu kleift að veita gögnum til margra ritstjóra/IDE í einu. ég hef núþegar skrifaði um gopls - tungumálaþjónn fyrir Golang - og hvernig hægt er að nota hann í Vim. Skrefin til að fá sjálfvirka útfyllingu í YAML fyrir Kubernetes eru svipuð.

Vim með YAML stuðningi fyrir Kubernetes

Til þess að vim virki á þann hátt sem lýst er þarftu að setja upp tungumálaþjónn. Þær tvær aðferðir sem ég veit um eru LanguageClient-neovim и coc.vim. Í greininni mun ég íhuga coc.vim - Þetta er vinsælasta viðbótin í augnablikinu. Þú getur sett það upp í gegnum vim-stinga:

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

Til að byrja coc (og þar með yaml-tungumálsþjónninn) mun krefjast þess að node.js sé uppsett:

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

Þegar coc.vim stillt, settu upp netþjónsviðbótina coc-yaml frá vim:

:CocInstall coc-yaml

Vim með YAML stuðningi fyrir Kubernetes

Að lokum, þú munt líklega vilja byrja með uppsetninguna coc-vim, kynnt sem dæmi. Sérstaklega virkjar það samsetninguna +bil að kalla sjálfvirka útfyllingu.

Setja upp yaml-tungumál-miðlara uppgötvun

Það coc gæti notað yaml-language-server, það þarf að biðja um að hlaða stefinu frá Kubernetes þegar verið er að breyta YAML skrám. Þetta er gert með klippingu coc-config:

:CocConfig

Í uppsetningunni þarftu að bæta við kubernetes fyrir allar skrár yaml. Ég nota að auki tungumálaþjón fyrir golangsvo almenna stillingin mín lítur svona út:

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

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

kubernetes — frátekinn reitur sem segir tungumálaþjóninum að hlaða niður Kubernetes skema af slóðinni sem er skilgreind í þetta fasta. yaml.schemas hægt að stækka til að styðja við viðbótarkerfi - fyrir frekari upplýsingar, sjá viðeigandi skjöl.

Nú geturðu búið til YAML skrá og byrjað að nota sjálfvirka útfyllingu. Þrýsta +bil (eða önnur samsetning stillt í vim) ætti að sýna tiltæka reiti og skjöl í samræmi við núverandi samhengi:

Vim með YAML stuðningi fyrir Kubernetes
Vinnur hér +bil vegna þess að ég stillti inoremap <silent><expr> <c-space> coc#refresh(). Ef þú hefur ekki gert þetta, sjáðu coc.nvim README fyrir dæmi um uppsetningu.

Að velja Kubernetes API útgáfu

Þegar þetta er skrifað er yaml-tungumálsþjónn með Kubernetes 1.14.0 skema. Ég fann ekki leið til að velja skema á virkan hátt, svo ég opnaði samsvarandi GitHub mál. Sem betur fer, þar sem tungumálaþjónninn er skrifaður með vélriti, er frekar auðvelt að breyta útgáfunni handvirkt. Til að gera þetta skaltu bara finna skrána server.ts.

Til að greina það á vélinni þinni skaltu einfaldlega opna YAML skrána með vim og finna ferlið með 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

Viðkomandi ferli fyrir okkur er ferli 2380: það er það sem vim notar þegar verið er að breyta YAML skrá.

Eins og þú getur auðveldlega séð er skráin staðsett í /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Breyttu því bara með því að breyta gildinu KUBERNETES_SCHEMA_URL, til dæmis, fyrir útgáfu 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";

Fer eftir útgáfunni sem notuð er coc-yaml Staðsetning breytunnar í kóðanum getur verið mismunandi. Vinsamlegast athugaðu líka að ég breytti geymslunni úr garethr á instrumenta. Svo virðist sem garethr skipt yfir í stoðrásir þar.

Til að athuga hvort breytingin hafi tekið gildi, athugaðu hvort reitur birtist sem ekki var þar áður [í fyrri útgáfum af Kubernetes]. Til dæmis, í skýringarmyndinni fyrir K8s 1.14 var nr gangsetningProbe:

Vim með YAML stuðningi fyrir Kubernetes

Yfirlit

Ég vona að þetta tækifæri gleðji þig eins mikið og ég. Til hamingju með YAMLing! Vertu viss um að skoða þessar geymslur til að skilja betur tólin sem nefnd eru í greininni:

PS frá þýðanda

Og það er líka vikube, vim-kubernetes и vimkubectl.

Lestu líka á blogginu okkar:

Heimild: www.habr.com

Bæta við athugasemd