Vim med YAML-understøttelse til Kubernetes

Bem. overs.: Den originale artikel blev skrevet af Josh Rosso – en arkitekt fra VMware, tidligere ansat hos virksomheder som CoreOS og Heptio, og også medforfatter til Kubernetes alb-ingress-controller. Forfatteren deler en lille opskrift, som kan vise sig at være meget nyttig for ”old school” driftsingeniører, der foretrækker vim, selv i en tid, hvor cloud native har vundet frem.

Vim med YAML-understøttelse til Kubernetes

Skriver du YAML-manifestfiler til Kubernetes i vim? Har du tilbragt utallige timer på at forstå, hvor i denne specifikation det næste felt skal være? Måske vil du være glad for en hurtig påmindelse om forskellen args og command? Есть хорошие новости! Vim легко привязать к yaml-language-server, for at få automatisk udfyldning, validering og andre bekvemmeligheder. I artiklen vil vi diskutere, hvordan man opsætter en sprogklient til dette.

(Den originale artikel har også en video, hvor forfatteren forklarer og demonstrerer indholdet af materialet.)

Sprogserver

Sprogservere (language servers) fortæller om programmeringssprog mængder til redaktører og IDE'er, derfor interagerer de med hinanden via en særlig protokol – Language Server Protocol (LSP). Dette er en fantastisk tilgang: det gør det muligt for én implementering at levere data til mange redaktører/IDE'er på én gang. Jeg har allerede skrev about gopls – en sprogserver til Golang – og hvordan den kan anvendes i vim. Handlingerne for at få automatisk udfyldning i YAML til Kubernetes er ens.

Vim med YAML-understøttelse til Kubernetes

For at vim skal fungere som beskrevet, skal du installere en sprogserverklient. To kendte metoder jeg kender til er LanguageClient-neovim og coc.vim. I artiklen vil jeg se nærmere på coc.vim – dette er den mest populære plugin i øjeblikket. Du kan installere det via vim-plug:

" Brug stabil version (anbefales)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Eller byg det fra kildekoden ved at bruge yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

For at starte coc (og dermed vil serveren yaml-language-server have brug for, at node.js er installeret:

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

Når coc.vim er opsat, skal du installere serverudvidelsen coc-yaml fra vim:

:CocInstall coc-yaml

Vim med YAML-understøttelse til Kubernetes

Endelig vil du højst sandsynligt gerne starte med konfigurationen coc-vim, præsenteret som et eksempel. Især aktiverer den kombinationen +mellemrum til at kalde automatisk udfyldning.

Opsætning af opdagelse af yaml-language-server

For at coc kunne drage fordel af yaml-language-server, du skal bede det om at hente skemaet fra Kubernetes, når du redigerer YAML-filer. Dette gøres ved at redigere coc-config:

:CocConfig

I konfigurationen er det nødvendigt at tilføje kubernetes til alle filer yaml. Jeg bruger desuden sprogserveren til golang, derfor ser min samlede konfiguration sådan ud:

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

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

kubernetes — et reserveret felt, der informerer sprogserveren om at hente Kubernetes-skemaet fra den URL, der er defineret i denne konstant. yaml.schemas kan udvides med understøttelse af yderligere skemaer — læs mere i den relevante dokumentation.

Nu kan du oprette en YAML-fil og begynde at bruge autocompletion. Tryk på +mellemrum (eller en anden kombination, der er indstillet i vim), skal vise de tilgængelige felter og dokumentationen i forhold til den aktuelle kontekst:

Vim med YAML-understøttelse til Kubernetes
Her fungerer <Ctrl>+mellemrum, fordi jeg har indstillet inoremap <silent><expr> <c-space> coc#refresh(). Hvis du ikke har gjort det — se coc.nvim README for et eksempel på konfiguration.

Valg af version af Kubernetes API

På tidspunktet for denne artikel leveres yaml-language-server med skemaer til Kubernetes 1.14.0. Jeg fandt ikke en måde at vælge skemaet dynamisk, så jeg åbnede den relevante GitHub issue. Heldigvis, da sprogserveren er skrevet i typescript, er det ret nemt at ændre versionen manuelt. Det er nok bare at finde filen server.ts.

For at finde den på din maskine skal du bare åbne YAML-filen i vim og finde 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

Processen 2380 er relevant for os: det er den, vim bruger under redigering af YAML-filen.

Som det er let at se, er filen placeret i /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Det er tilstrækkeligt at redigere den ved at ændre værdien KUBERNETES_SCHEMA_URL, f.eks. til 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";

Afhængig af hvilken version der bruges, kan placeringen af variablen i koden være forskellig. Bemærk også, at jeg har ændret depotet fra coc-yaml garethr instrumenta og få en fungerende kommando. . Det ser ud til, ater blevet skiftet til at støtte skemaer der. instrumenta For at kontrollere, at ændringen har trådt i kraft, skal du se, om det felt, som tidligere [i tidligere versioner af Kubernetes] ikke var til stede, nu vises. For eksempel var der ikke noget felt i skemaet for K8s 1.14.

For at kontrollere, om ændringen er trådt i kraft, skal du se, om feltet, der før [i tidligere versioner af Kubernetes] ikke var til stede, nu vises. For eksempel var der ikke noget felt i skemaet for K8s 1.14. startupProbe:

Vim med YAML-understøttelse til Kubernetes

CV

Jeg håber, den mulighed glæder dig lige så meget som mig. God YAML!”! Glem ikke at tjekke disse repositories for bedre at forstå de værktøjer, der er nævnt i artiklen:

P.S. fra oversætteren

Og der er også vikube, vim-kubernetes og vimkubectl.

Læs også på vores blog:

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster