Vim med støtte for YAML for Kubernetes

Obs. overs.: Den originale artikkelen ble skrevet av Josh Rosso — en arkitekt fra VMware, tidligere ansatt i selskaper som CoreOS og Heptio, og også medforfatter av Kubernetes alb-ingress-controller. Forfatteren deler en liten oppskrift som kan være veldig nyttig for «den gamle skolen» ingeniører som foretrekker vim selv i en tid hvor cloud native dominerer.

Vim med støtte for YAML for Kubernetes

Skriver du YAML-manifest for Kubernetes i vim? Har du tilbrakt utallige timer på å prøve å forstå hvor i spesifikasjonen neste felt skal være? Kanskje du vil sette pris på en rask påminnelse om forskjellen args og command? Есть хорошие новости! Vim легко привязать к yaml-language-server, for å få automatisk fullføring, validering og andre bekvemmeligheter. I denne artikkelen vil vi se på hvordan man setter opp klienten for språkserveren.

(Den originale artikkelen har også en video, der forfatteren forklarer og demonstrerer innholdet.)

Språkserver

Språkservere (language servers) forteller redaktører og IDE-er om mulighetene i programmeringsspråk, for å oppnå dette kommuniserer de seg imellom via en spesiell protokoll - Language Server Protocol (LSP). Dette er en fantastisk tilnærming: det lar en enkelt implementering gi data til mange redaktører/IDE-er. Jeg har allerede har skrevet om gopls — en språkserver for Golang — og hvordan den kan brukes i vim. Handlingene for å få autocompletion i YAML for Kubernetes er de samme.

Vim med støtte for YAML for Kubernetes

For at vim skal fungere beskrevet på denne måten, er det nødvendig å installere klienten til språkserveren. To kjente metoder jeg kjenner til er LanguageClient-neovim og coc.vim. I artikkelen vil jeg se på coc.vim — er den mest populære pluginen for øyeblikket. Den kan installeres via vim-plug:

" Bruk utgivelsesgrenen (Anbefalt)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Eller bygg fra kildekoden ved å bruke yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

For kjøring coc (og dermed serveren yaml-language-server) krever at node.js er installert:

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

Når coc.vim når du er konfigurert, installer serverer utvidelsen coc-yaml fra vim:

:CocInstall coc-yaml

Vim med støtte for YAML for Kubernetes

Til slutt vil du sannsynligvis ønske å begynne med konfigurasjonen coc-vim, presentert som et eksempel. Spesielt aktiverer den kombinasjonen +mellomrom for å kalle opp automatisk fullføring.

Innstilling av oppdagelsen av yaml-language-server

For å coc kan benytte yaml-language-server, da må det be om å laste inn 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 all files yaml. I additionally use a language server for golang, so my overall config looks like this:

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

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

kubernetes — a reserved field, informing the language server to load the Kubernetes schema from the URL specified in this constant. yaml.schemas can be expanded with additional schema support — see more in the relevant documentation.

Now you can create a YAML file and start using autocomplete. Pressing +mellomrom (or another combination set in vim) should show available fields and documentation according to the current context:

Vim med støtte for YAML for Kubernetes
Here +space works because I configured inoremap coc#refresh(). If you haven't done this — see coc.nvim README for a configuration example.

Choosing a Kubernetes API version

At the time of writing this article, the yaml-language-server comes with Kubernetes schemas 1.14.0. I haven't found a way to dynamically choose the schema, so I opened the relevant GitHub issue. Luckily, since the language server is written in TypeScript, it's quite easy to manually change the version. You just need to find the file server.ts.

To locate it on your machine, just open a YAML file with vim and find the process with 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 us, the process 2380 is relevant: this is the one that vim uses during YAML file editing.

As you can easily see, the file is located in /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Just edit it by changing the value KUBERNETES_SCHEMA_URL, for example, to 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";

Depending on the version of the used coc-yaml the variable's location in the code may differ. Also note that I changed the repository from garethr En funksjon har blitt instrumenta. It seems that garethr switched to support the schemas there.

To check that the change has taken effect, see if the field that was previously [not there in earlier Kubernetes versions] appears. startupProbe:

Vim med støtte for YAML for Kubernetes

Sammendrag

Eg håpar denne moglegheita gledde deg like mykje som meg. God YAML'ing! Ikkje gløym å sjå på desse repositoria for å bli betre kjend med verktøya nevnt i artikkelen:

P.S. from the translator

Og det finst også vikube, vim-kubernetes og vimkubectl.

Also read in our blog:

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster