Vim med YAML-stöd för Kubernetes

Notera. transl.: Den ursprungliga artikeln skrevs av Josh Rosso, en arkitekt på VMware som tidigare arbetat på företag som CoreOS och Heptio, och är också medförfattare till Kubernetes alb-ingress-controller. Författaren delar med sig av ett litet recept som kan vara mycket användbart för "old school" driftingenjörer som föredrar vim även i den segerrika molninfödingens tid.

Vim med YAML-stöd för Kubernetes

Skriver du YAML-manifest för Kubernetes in vim? Tillbringade otaliga timmar på att försöka lista ut var nästa fält skulle vara i den här specifikationen? Eller så kanske du kommer att uppskatta en snabb påminnelse om skillnaden args и command? Det finns goda nyheter! Vim är lätt att länka till yaml-språkserverför att få automatisk komplettering, validering och andra bekvämligheter. I den här artikeln kommer vi att prata om hur man ställer in en språkserverklient för detta.

(Och originalartikeln finns det en video, där författaren talar och demonstrerar innehållet i materialet.)

Språkserver

Språkservrar (språkservrar) prata om funktionerna hos programmeringsspråk till redaktörer och IDE:er, för vilka de interagerar med varandra med hjälp av ett speciellt protokoll - Språk Serverprotokoll (LSP). Detta är ett utmärkt tillvägagångssätt eftersom det tillåter en implementering att tillhandahålla data till många redaktörer/IDEer samtidigt. jag har redan jag skrev про gopls - en språkserver för Golang - och hur den kan användas i vim. Stegen för att få autoslutförande i YAML för Kubernetes är liknande.

Vim med YAML-stöd för Kubernetes

För att vim ska fungera på det beskrivna sättet måste du installera en språkserverklient. De två metoderna jag känner till är LanguageClient-neovim и coc.vim. I artikeln kommer jag att överväga coc.vim – Det här är den mest populära plugin för tillfället. Du kan installera den via vim-plugg:

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

Till start coc (och därmed yaml-language-servern) kommer att kräva att node.js är installerat:

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

När coc.vim konfigurerat, installera servertillägget coc-yaml från vim:

:CocInstall coc-yaml

Vim med YAML-stöd för Kubernetes

Slutligen vill du troligen börja med konfigurationen coc-vim, presenteras som ett exempel. I synnerhet aktiverar det kombinationen +mellanslag för att anropa autokomplettering.

Konfigurera yaml-language-server-detektion

Att coc kan använda yaml-language-server, måste den uppmanas att ladda schemat från Kubernetes när man redigerar YAML-filer. Detta görs genom redigering coc-config:

:CocConfig

I konfigurationen måste du lägga till kubernetes för alla filer yaml. Jag använder dessutom en språkserver för golangså min allmänna konfiguration ser ut så här:

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

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

kubernetes — ett reserverat fält som talar om för språkservern att ladda ner Kubernetes-schemat från den URL som definieras i denna konstant. yaml.schemas kan utökas för att stödja ytterligare system - för mer information, se relevant dokumentation.

Nu kan du skapa en YAML-fil och börja använda autokomplettering. Brådskande +mellanslag (eller annan kombination konfigurerad i vim) bör visa tillgängliga fält och dokumentation enligt det aktuella sammanhanget:

Vim med YAML-stöd för Kubernetes
Jobbar här +mellanslag eftersom jag har konfigurerat inoremap <silent><expr> <c-space> coc#refresh(). Om du inte har gjort detta, se coc.nvim LÄS MIG för en exempelkonfiguration.

Väljer Kubernetes API-version

När detta skrivs levereras yaml-language-server med Kubernetes 1.14.0-scheman. Jag hittade inget sätt att dynamiskt välja ett schema, så jag öppnade motsvarande GitHub-problem. Lyckligtvis, eftersom språkservern är skriven i typskript, är det ganska enkelt att manuellt ändra versionen. För att göra detta, hitta bara filen server.ts.

För att upptäcka det på din maskin, öppna helt enkelt YAML-filen med vim och hitta 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

Den relevanta processen för oss är process 2380: det är vad vim använder när vi redigerar en YAML-fil.

Som du lätt kan se finns filen i /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Redigera det bara genom att ändra värdet KUBERNETES_SCHEMA_URL, till exempel för 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 som används coc-yaml Variabelns placering i koden kan variera. Observera också att jag ändrade arkivet från garethrinstrumenta. Det verkar som garethr bytte till stödkretsar där.

För att kontrollera att ändringen har trätt i kraft, se om ett fält dyker upp som inte fanns där tidigare [i tidigare versioner av Kubernetes]. Till exempel, i diagrammet för K8s 1.14 fanns det ingen startProbe:

Vim med YAML-stöd för Kubernetes

Sammanfattning

Jag hoppas att denna möjlighet gläder dig lika mycket som den gjorde mig. Glad YAMLing! Var noga med att kolla in dessa förråd för att bättre förstå de verktyg som nämns i artikeln:

PS från översättaren

Och där är vikube, vim-kubernetes и vimkubectl.

Läs även på vår blogg:

Källa: will.com

Lägg en kommentar