Vim med YAML-support för Kubernetes

Obs. övers.: Den ursprungliga artikeln skrevs av Josh Rosso – en arkitekt frĂ„n VMware, som tidigare arbetat för företag som CoreOS och Heptio, och Ă€ven Ă€r medförfattare till Kubernetes alb-ingress-controller. Författaren delar med sig av ett litet recept som kan vara mycket anvĂ€ndbart för ingenjörer frĂ„n "gammal skola" som föredrar vim Ă€ven i en era av segrande cloud native.

Vim med YAML-support för Kubernetes

Skriver du YAML-manifest för Kubernetes i vim? Har du tillbringat otaliga timmar med att försöka förstĂ„ var nĂ€sta fĂ€lt ska vara i denna specifikation? Kanske skulle du vara glad att fĂ„ en snabb pĂ„minnelse om skillnaden args och command? Есть Ń…ĐŸŃ€ĐŸŃˆĐžĐ” ĐœĐŸĐČĐŸŃŃ‚Đž! Vim лДгĐșĐŸ проĐČŃĐ·Đ°Ń‚ŃŒ Đș yaml-language-server, för att fĂ„ automatisk komplettering, validering och andra bekvĂ€mligheter. I artikeln kommer vi att prata om hur man stĂ€ller in klienten för sprĂ„kservern för detta.

(Den ursprungliga artikeln har ocksÄ en video, dÀr författaren förklarar och demonstrerar innehÄllet.)

SprÄkserver

SprĂ„kservrar (language servers) berĂ€ttar om möjligheterna hos programmeringssprĂ„k till redaktörer och IDE:er, vilket gör att de interagerar nedan via ett speciellt protokoll — Language Server Protocol (LSP). Det Ă€r en fantastisk metod: eftersom den tillĂ„ter en implementation att tillhandahĂ„lla data till flera redaktörer/IDE:er. Jag har redan skrev om gopls – sprĂ„kservern för Golang – och hur den kan anvĂ€ndas i vim. ÅtgĂ€rderna för att fĂ„ automatisk komplettering i YAML för Kubernetes Ă€r desamma.

Vim med YAML-support för Kubernetes

För att vim ska fungera som beskrivs ovan, behöver du installera klienten för sprĂ„kservern. TvĂ„ kĂ€nda sĂ€tt jag kĂ€nner till Ă€r LanguageClient-neovim och coc.vim. I artikeln kommer jag att diskutera coc.vim – det populĂ€raste tillĂ€gget för tillfĂ€llet. Du kan installera det via vim-plug:

" AnvÀnd release-grenen (Rekommenderas)
Plug 'neoclide\/coc.nvim', {'branch': 'release'}

" Eller bygg frÄn kÀllkod med hjÀlp av yarn: https://yarnpkg.com
Plug 'neoclide\/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

För att köra coc (och dÀrmed servern yaml-language-server) krÀvs att node.js Àr installerat:

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

NÀr coc.vim konfigurerad, installera servertillÀgget coc-yaml frÄn vim:

:CocInstall coc-yaml

Vim med YAML-support för Kubernetes

Slutligen vill du förmodligen börja med konfigurationen coc-vim, som presenteras som exempel. I synnerhet aktiverar den kombinationen +mellanrum för att kalla pÄ automatisk komplettering.

Konfigurera upptÀckten av yaml-language-server

För att coc för att kunna anvÀnda yaml-language-server mÄste du be den att ladda schemat frÄn Kubernetes nÀr du redigerar YAML-filer. Det görs genom att redigera coc-config:

:CocConfig

I konfigurationen mÄste ytterligare information lÀggas till kubernetes för alla filer yaml. Jag anvÀnder dessutom en sprÄkserver för golang, dÀrför ser min övergripande konfiguration ut sÄ hÀr:

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

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

kubernetes — ett reserverat fĂ€lt som informerar sprĂ„kservern om att ladda Kubernetes-schemat via en URL som specificeras i denna konstant. yaml.schemas kan utökas med stöd för ytterligare scheman — se mer i den relevanta dokumentationen.

Nu kan vi skapa en YAML-fil och börja anvÀnda autocompletion. Tryck pÄ +mellanrum (eller en annan kombination som Àr instÀlld i vim) för att visa tillgÀngliga fÀlt och dokumentation i enlighet med det aktuella sammanhanget:

Vim med YAML-support för Kubernetes
HĂ€r fungerar +mellanslag, eftersom jag har konfigurerat inoremap coc#refresh(). Om du inte har gjort det — se coc.nvim README för ett exempel pĂ„ konfiguration.

Val av version av Kubernetes API

Vid tidpunkten för skrivande levereras yaml-language-server med scheman för Kubernetes 1.14.0. Jag har inte funnit nÄgot sÀtt att dynamiskt vÀlja schema, sÄ jag öppnade den relevanta GitHub-issue. Som tur Àr, eftersom sprÄkservern Àr skriven i typescript, Àr det ganska enkelt att manuellt Àndra versionen. För att göra detta, hitta bara filen server.ts.

För att hitta den pÄ din maskin, öppna helt enkelt YAML-filen med vim och leta efter processen med 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

För oss Àr processen 2380 relevant: det Àr den som vim anvÀnder nÀr det redigerar YAML-filen.

Som lÀtt kan ses ligger filen i /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Det rÀcker att redigera den och Àndra vÀrdet KUBERNETES_SCHEMA_URL, till exempel till version 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";

Beroende pÄ vilken version av koden som anvÀnds kan coc-yaml platser för variabeln i koden vara olika. Observera ocksÄ att jag Àndrat lagret frÄn garethr till instrumenta. Tycks ha garethr övergÄtt till att stödja scheman dÀr.

För att kontrollera att Àndringen trÀtt i kraft, se om fÀltet som tidigare [i tidigare versioner av Kubernetes] inte fanns. startupProbe:

Vim med YAML-support för Kubernetes

Sammanfattning

Jag hoppas att denna möjlighet gladde dig lika mycket som mig. Glad YAML’ing! Glöm inte att kolla in dessa repositorier för att förstĂ„ verktygen som nĂ€mns i artikeln bĂ€ttre:

P.S. frÄn översÀttaren

Det finns ocksÄ vikube, vim-kubernetes och vimkubectl.

LÀs Àven i vÄr blogg:

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster