Vim med YAML-støtte for Kubernetes

Merk. overs.: Den originale artikkelen ble skrevet av Josh Rosso, en arkitekt hos VMware som tidligere jobbet i selskaper som CoreOS og Heptio, og er også medforfatter av Kubernetes alb-ingress-controller. Forfatteren deler en liten oppskrift som kan være veldig nyttig for "old school" driftsingeniører som foretrekker vim selv i en tid med den seirende skyen.

Vim med YAML-støtte for Kubernetes

Skrive YAML-manifester for Kubernetes in vim? Har du brukt utallige timer på å finne ut hvor neste felt skal være i denne spesifikasjonen? Eller kanskje du vil sette pris på en rask påminnelse om forskjellen args и command? Det er gode nyheter! Vim er lett å linke til yaml-språkserverfor å få automatisk fullføring, validering og andre bekvemmeligheter. I denne artikkelen skal vi snakke om hvordan du setter opp en språkserverklient for dette.

(Også den originale artikkelen er det en video, der forfatteren snakker og demonstrerer innholdet i materialet.)

Språkserver

Språkservere (språkservere) snakke om funksjonene til programmeringsspråk til redaktører og IDE-er, som de samhandler med hverandre ved hjelp av en spesiell protokoll - Protokoll for språkserver (LSP). Dette er en flott tilnærming fordi den lar en implementering gi data til mange redaktører/IDEer samtidig. Jeg har allerede jeg skrev про gopls - en språkserver for Golang - og hvordan den kan brukes i vim. Trinnene for å få autofullføring i YAML for Kubernetes er like.

Vim med YAML-støtte for Kubernetes

For at vim skal fungere på den beskrevne måten, må du installere en språkserverklient. De to metodene jeg kjenner til er LanguageClient-neovim и coc.vim. I artikkelen vil jeg vurdere coc.vim – Dette er den mest populære plugin for øyeblikket. Du kan installere 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'}

For start coc (og dermed yaml-language-serveren) vil kreve at node.js er installert:

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

Når coc.vim konfigurert, installer serverutvidelsen coc-yaml fra vim:

:CocInstall coc-yaml

Vim med YAML-støtte for Kubernetes

Til slutt vil du mest sannsynlig begynne med konfigurasjonen coc-vim, presentert som et eksempel. Spesielt aktiverer det kombinasjonen +mellomrom å kalle autofullføring.

Sette opp yaml-language-server-deteksjon

At coc kunne bruke yaml-language-server, må den bli bedt om å laste skjemaet fra Kubernetes når du redigerer YAML-filer. Dette gjøres ved å redigere coc-config:

:CocConfig

I konfigurasjonen må du legge til kubernetes for alle filer yaml. Jeg bruker i tillegg en språkserver for golangså min generelle konfigurasjon ser slik ut:

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

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

kubernetes — et reservert felt som ber språkserveren laste ned Kubernetes-skjemaet fra URL-en som er definert i denne konstanten. yaml.schemas kan utvides for å støtte ytterligere ordninger - for flere detaljer, se relevant dokumentasjon.

Nå kan du opprette en YAML-fil og begynne å bruke autofullføring. Pressing +mellomrom (eller annen kombinasjon konfigurert i vim) skal vise de tilgjengelige feltene og dokumentasjonen i henhold til gjeldende kontekst:

Vim med YAML-støtte for Kubernetes
Jobber her +mellomrom fordi jeg konfigurerte inoremap <silent><expr> <c-space> coc#refresh(). Hvis du ikke har gjort dette, se coc.nvim README for en eksempelkonfigurasjon.

Velge Kubernetes API-versjon

Når dette skrives, leveres yaml-language-server med Kubernetes 1.14.0-skjemaer. Jeg fant ikke en måte å dynamisk velge et skjema på, så jeg åpnet tilsvarende GitHub-problem. Heldigvis, siden språkserveren er skrevet i typescript, er det ganske enkelt å endre versjonen manuelt. For å gjøre dette, bare finn filen server.ts.

For å oppdage det på maskinen din, åpne bare YAML-filen med vim og finn prosessen 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

For oss er prosess 2380 relevant: det er det vim bruker når vi redigerer en YAML-fil.

Som du lett kan se, ligger filen i /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Bare rediger den ved å endre verdien KUBERNETES_SCHEMA_URL, for eksempel for versjon 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";

Avhengig av versjonen som brukes coc-yaml Plasseringen av variabelen i koden kan variere. Vær også oppmerksom på at jeg endret depotet fra garethrinstrumenta. Det synes som garethr byttet til støttekretser der.

For å sjekke at endringen har trådt i kraft, se om det vises et felt som ikke var der før [i tidligere versjoner av Kubernetes]. For eksempel, i diagrammet for K8s 1.14 var det ingen oppstartProbe:

Vim med YAML-støtte for Kubernetes

Oppsummering

Jeg håper denne muligheten gleder deg like mye som den gjorde meg. Glad YAMLing! Sørg for å sjekke ut disse depotene for bedre å forstå verktøyene nevnt i artikkelen:

PS fra oversetter

Og det er også vikube, vim-kubernetes и vimkubectl.

Les også på bloggen vår:

Kilde: www.habr.com

Legg til en kommentar