Vim kwa msaada wa YAML kwa Kubernetes

Kumbuka. tafsiri.: Makala asilia yaliandikwa na Josh Rosso, mbunifu katika VMware ambaye hapo awali alifanya kazi katika makampuni kama CoreOS na Heptio, na pia ni mwandishi mwenza wa Kubernetes alb-ingress-controller. Mwandishi anashiriki kichocheo kidogo ambacho kinaweza kuwa muhimu sana kwa wahandisi wa shughuli za "shule ya zamani" ambao wanapendelea vim hata katika enzi ya mshindi wa asili wa wingu.

Vim kwa msaada wa YAML kwa Kubernetes

Je, unaandika maonyesho ya YAML ya Kubernetes katika vim? Je, ulitumia saa nyingi kujaribu kubaini ni wapi sehemu inayofuata inapaswa kuwa katika vipimo hivi? Au labda utathamini ukumbusho wa haraka wa tofauti hiyo args ΠΈ command? Kuna habari njema! Vim ni rahisi kuunganishwa seva-ya-lugha-yamlili kupata ukamilishaji otomatiki, uthibitisho na manufaa mengine. Katika makala hii tutazungumzia jinsi ya kuanzisha mteja wa seva ya lugha kwa hili.

(Nakala asili pia kuna video, ambapo mwandishi anazungumza na kuonyesha yaliyomo kwenye nyenzo.)

Seva ya lugha

Seva za lugha (seva za lugha) zungumza juu ya uwezo wa lugha za programu kwa wahariri na IDE, ambazo huingiliana kwa kutumia itifaki maalum - Itifaki ya Seva ya Lugha (LSP). Hii ni mbinu nzuri kwa sababu inaruhusu utekelezaji mmoja kutoa data kwa wahariri/IDE nyingi mara moja. Mimi tayari aliandika kuhusu gopls - seva ya lugha ya Golang - na jinsi inavyoweza kutumika katika vim. Hatua za kupata ukamilishaji kiotomatiki katika YAML kwa Kubernetes ni sawa.

Vim kwa msaada wa YAML kwa Kubernetes

Ili vim ifanye kazi kwa njia iliyoelezewa, utahitaji kusanikisha mteja wa seva ya lugha. Njia mbili ninazozijua ni LughaMteja-neovim ΠΈ coc.vim. Katika makala nitakayozingatia coc.vim - Hii ndiyo programu-jalizi maarufu zaidi kwa sasa. Unaweza kusakinisha kupitia 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'}

Kwa mwanzo coc (na kwa hivyo yaml-language-server) itahitaji node.js kusakinishwa:

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

Wakati coc.vim imesanidiwa, sakinisha kiendelezi cha seva coc-yaml kutoka vim:

:CocInstall coc-yaml

Vim kwa msaada wa YAML kwa Kubernetes

Hatimaye, utataka kuanza na usanidi coc-vim, iliyowasilishwa kama mfano. Hasa, huamsha mchanganyiko +nafasi kuita ukamilishaji otomatiki.

Inaweka utambuzi wa seva ya yaml-language

Hiyo coc inaweza kutumia yaml-language-server, inahitaji kuulizwa kupakia schema kutoka Kubernetes wakati wa kuhariri faili za YAML. Hii inafanywa kwa kuhariri coc-config:

:CocConfig

Katika usanidi utahitaji kuongeza kubernetes kwa faili zote yaml. Pia mimi hutumia seva ya lugha kwa golangkwa hivyo usanidi wangu wa jumla unaonekana kama hii:

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

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

kubernetes β€” sehemu iliyohifadhiwa inayoiambia seva ya lugha kupakua utaratibu wa Kubernetes kutoka kwa URL iliyofafanuliwa hii mara kwa mara. yaml.schemas inaweza kupanuliwa ili kusaidia miradi ya ziada - kwa maelezo zaidi, ona nyaraka husika.

Sasa unaweza kuunda faili ya YAML na kuanza kutumia ukamilishaji kiotomatiki. Kubonyeza +nafasi (au mchanganyiko mwingine uliosanidiwa katika vim) inapaswa kuonyesha sehemu na nyaraka zinazopatikana kulingana na muktadha wa sasa:

Vim kwa msaada wa YAML kwa Kubernetes
Inafanya kazi hapa +nafasi kwa sababu nilisanidi inoremap <silent><expr> <c-space> coc#refresh(). Kama hujafanya hivi, unaona coc.nvim README kwa usanidi wa mfano.

Kuchagua toleo la Kubernetes API

Kufikia wakati huu wa kuandika, meli-yaml-language-server na Kubernetes 1.14.0 schemas. Sikupata njia ya kuchagua schema kwa nguvu, kwa hivyo nilifungua toleo linalolingana la GitHub. Kwa bahati nzuri, kwa kuwa seva ya lugha imeandikwa kwa maandishi, ni rahisi sana kubadilisha toleo hilo. Ili kufanya hivyo, pata faili tu server.ts.

Ili kuigundua kwenye mashine yako, fungua faili ya YAML na vim na utafute mchakato nayo 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

Mchakato unaofaa kwetu ni mchakato 2380: ndio vim hutumia wakati wa kuhariri faili ya YAML.

Kama unaweza kuona kwa urahisi, faili iko ndani /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Ihariri tu kwa kubadilisha thamani KUBERNETES_SCHEMA_URL, kwa mfano, kwa toleo la 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";

Kulingana na toleo lililotumiwa coc-yaml Eneo la kutofautisha katika msimbo linaweza kutofautiana. Tafadhali pia kumbuka kuwa nilibadilisha hazina kutoka garethr juu ya instrumenta. Inaonekana hivyo garethr imebadilishwa kwa mizunguko ya kusaidia huko.

Ili kuangalia kama mabadiliko yamefanyika, angalia kama sehemu inaonekana ambayo haikuwepo hapo awali [katika matoleo ya awali ya Kubernetes]. Kwa mfano, katika mchoro wa K8s 1.14 hapakuwa na startupProbe:

Vim kwa msaada wa YAML kwa Kubernetes

Muhtasari

Natumai fursa hii itakufurahisha kama ilivyonifurahisha mimi. Furaha YAMLing! Hakikisha kuangalia hazina hizi ili kuelewa vyema huduma zilizotajwa katika makala:

PS kutoka kwa mtafsiri

Na pia kuna vikube, vim-kubernetes ΠΈ vimkubectl.

Soma pia kwenye blogi yetu:

Chanzo: mapenzi.com

Kuongeza maoni