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.

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 лДгĐșĐŸ ĐżŃĐžĐČŃзаŃŃ Đș , 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Ä , 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 â (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 om â sprĂ„kservern för Golang â och hur den kan anvĂ€ndas i . Ă tgĂ€rderna för att fĂ„ automatisk komplettering i YAML för Kubernetes Ă€r desamma.

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 och . I artikeln kommer jag att diskutera coc.vim â det populĂ€raste tillĂ€gget för tillfĂ€llet. Du kan installera det via :
" 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 
Slutligen vill du förmodligen börja med konfigurationen coc-vim, som presenteras . 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 . yaml.schemas kan utökas med stöd för ytterligare scheman â se mer i .
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:

HĂ€r fungerar +mellanslag, eftersom jag har konfigurerat inoremap coc#refresh(). Om du inte har gjort det â se 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 . 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-serverFö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. :

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:
- coc-vim: ;
- coc-yaml: .
P.S. frÄn översÀttaren
Det finns ocksÄ , och .
LÀs Àven i vÄr blogg:
- «»;
- «».
KĂ€lla: habr.com
