Vim med YAML-understøttelse til Kubernetes

Bemærk. overs.: Den originale artikel er skrevet af Josh Rosso, en arkitekt hos VMware, som tidligere har arbejdet hos virksomheder som CoreOS og Heptio, og som også er medforfatter til Kubernetes alb-ingress-controller. Forfatteren deler en lille opskrift, der kan være meget nyttig for "old school" driftsingeniører, der foretrækker vim selv i æraen med den sejrrige cloud-native.

Vim med YAML-understøttelse til Kubernetes

Skriver du YAML-manifester til Kubernetes in vim? Har du brugt utallige timer på at finde ud af, hvor det næste felt skulle være i denne specifikation? Eller måske vil du sætte pris på en hurtig påmindelse om forskellen args и command? Der er gode nyheder! Vim er let at linke til yaml-sprog-serverfor at få automatisk udfyldelse, validering og andre bekvemmeligheder. I denne artikel vil vi tale om, hvordan man konfigurerer en sprogserverklient til dette.

(Også den originale artikel er der en video, hvor forfatteren taler og demonstrerer indholdet af materialet.)

Sprog server

Sprog servere (sprogservere) tale om programmeringssprogs muligheder for redaktører og IDE'er, for hvilke de interagerer med hinanden ved hjælp af en speciel protokol - Sprogserverprotokol (LSP). Dette er en fantastisk tilgang, fordi det giver en implementering mulighed for at levere data til mange redaktører/IDE'er på én gang. Jeg har allerede jeg skrev про gopls - en sprogserver til Golang - og hvordan den kan bruges i vim. Trinnene til at få autofuldførelse i YAML for Kubernetes er ens.

Vim med YAML-understøttelse til Kubernetes

For at vim kan fungere på den beskrevne måde, skal du installere en sprogserverklient. De to metoder jeg kender til er LanguageClient-neovim и coc.vim. I artiklen vil jeg overveje coc.vim - Dette er det mest populære plugin i øjeblikket. Du kan installere det via vim-stik:

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

Til start coc (og dermed yaml-language-serveren) vil kræve node.js installeret:

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

Hvornår coc.vim konfigureret, skal du installere serverudvidelsen coc-yaml fra vim:

:CocInstall coc-yaml

Vim med YAML-understøttelse til Kubernetes

Til sidst vil du højst sandsynligt starte med konfigurationen coc-vim, forelagde som et eksempel. Det aktiverer især kombinationen +mellemrum at kalde autofuldførelse.

Opsætning af yaml-language-server detektion

Det coc kunne bruge yaml-language-server, skal den blive bedt om at indlæse skemaet fra Kubernetes, når man redigerer YAML-filer. Dette gøres ved at redigere coc-config:

:CocConfig

I konfigurationen skal du tilføje kubernetes for alle filer yaml. Jeg bruger desuden en sprogserver til golangså min generelle konfiguration ser sådan ud:

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

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

kubernetes — et reserveret felt, der fortæller sprogserveren at downloade Kubernetes-skemaet fra den URL, der er defineret i denne konstant. yaml.schemas kan udvides til at understøtte yderligere ordninger - for flere detaljer, se relevant dokumentation.

Nu kan du oprette en YAML-fil og begynde at bruge autofuldførelse. Presser +mellemrum (eller anden kombination konfigureret i vim) skal vise de tilgængelige felter og dokumentation i henhold til den aktuelle kontekst:

Vim med YAML-understøttelse til Kubernetes
+Mellemrum fungerer her, fordi jeg har konfigureret inoremap <silent><expr> <c-space> coc#refresh(). Hvis du ikke har gjort dette, så se coc.nvim LÆS MIG for et eksempel på konfiguration.

Valg af Kubernetes API-version

Når dette skrives, leveres yaml-language-server med Kubernetes 1.14.0-skemaer. Jeg fandt ikke en måde at vælge et skema dynamisk på, så jeg åbnede tilsvarende GitHub-problem. Heldigvis, da sprogserveren er skrevet i typescript, er det ret nemt manuelt at ændre versionen. For at gøre dette skal du blot finde filen server.ts.

For at opdage det på din maskine skal du blot åbne filen YAML med 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

Den relevante proces for os er proces 2380: det er, hvad vim bruger, når vi redigerer en YAML-fil.

Som du nemt kan se, er filen placeret i /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Du skal bare redigere den ved at ændre værdien KUBERNETES_SCHEMA_URL, for eksempel for 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 den anvendte version coc-yaml Placeringen af ​​variablen i koden kan variere. Bemærk også, at jeg har ændret depotet fra garethrinstrumenta. Det lader til, at garethr skiftet til understøttende kredsløb der.

For at kontrollere, at ændringen er trådt i kraft, skal du se, om der vises et felt, der ikke var der før [i tidligere versioner af Kubernetes]. For eksempel var der i diagrammet for K8s 1.14 ingen opstartProbe:

Vim med YAML-understøttelse til Kubernetes

Resumé

Jeg håber, at denne mulighed glæder dig lige så meget, som den gjorde mig. Glad YAMLing! Sørg for at tjekke disse depoter for bedre at forstå de værktøjer, der er nævnt i artiklen:

PS fra oversætteren

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

Læs også på vores blog:

Kilde: www.habr.com

Tilføj en kommentar