Vim s podrškom za YAML za Kubernetes

Napomena za prijevod.: Izvorni članak je napisao Josh Rosso — arhitekt iz VMware-a, koji je ranije radio u kompanijama kao što su CoreOS i Heptio, a također je i suosnivač Kubernetes alb-ingress-controller-a. Autor dijeli mali trik koji može biti vrlo koristan inženjerima održavanja 'stare škole', koji i dalje preferiraju vim čak i u doba cloud native.

Vim s podrškom za YAML za Kubernetes

Pišete YAML manifestacije za Kubernetes u vim-u? Proveli ste bezbroj sati pokušavajući shvatiti gdje u ovoj specifikaciji treba biti sljedeće polje? A možda ćete biti sretni sa brzim podsjetnikom na razliku args i naredba? Есть хорошие новости! Vim легко привязать к yaml-language-server, kako biste dobili automatsko dovršavanje, validaciju i druge pogodnosti. U članku ćemo razgovarati o tome kako postaviti klijent jezičnog poslužitelja za ovo.

(Izvorni članak također ima video, u kojem autor objašnjava i prikazuje sadržaj materijala.)

Jezični poslužitelj

Jezični poslužitelji (language servers) pružaju informacije o mogućnostima programskih jezika uređivačima i IDE-ima, kako bi međusobno komunicirali putem posebnog protokola — Language Server Protocol (LSP). Ovo je izvrstan pristup: omogućava jednoj implementaciji da opskrbi podatke odmah za više uređivača/IDE-a. Već sam pisao govorio gopls — jezični poslužitelj za Golang — i kako ga možete koristiti u vim. Postupci za dobivanje automatskog dovršavanja u YAML-u za Kubernetes su slični.

Vim s podrškom za YAML za Kubernetes

Da bi vim radio na opisani način, potrebno je instalirati klijent jezičnog poslužitelja. Dva poznata načina su LanguageClient-neovim i coc.vim. U članku ću raspraviti coc.vim — to je trenutno najpopularniji dodatak. Možete ga instalirati putem vim-plug:

" Koristite izdanje grane (Preporučeno)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Ili izgradite iz izvornog koda koristeći yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Za pokretanje coc (i, tako, poslužitelja yaml-language-server) potrebno je imati instaliran node.js:

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

Kada coc.vim postavljen, instalirajte proširenje poslužitelja coc-yaml iz vim-a:

:CocInstall coc-yaml

Vim s podrškom za YAML za Kubernetes

Na kraju, najvjerojatnije ćete htjeti početi s konfiguracijom coc-vim, prikazanom kao primjer. Konkretno, aktivira kombinaciju +razmak za pozivanje automatskog dovršavanja.

Postavka otkrivanja yaml-language-server

Da coc moguće je koristiti yaml-language-server, treba ga zamoliti da učita shemu iz Kubernetes-a prilikom uređivanja YAML datoteka. To se radi uređivanjem coc-config:

:CocConfig

U konfiguraciji treba dodati kubernetes za sve datoteke yaml. Dodatno koristim jezični poslužitelj za golang, stoga moj cjelokupni config izgleda ovako:

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

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

kubernetes — rezervirano polje koje obavještava jezični poslužitelj o potrebi preuzimanja Kubernetes sheme putem URL-a navedenog u ovoj konstanti. yaml.schemas može se proširiti podrškom za dodatne sheme — više informacija potražite u odgovarajućoj dokumentaciji.

Sada možete kreirati YAML datoteku i početi koristiti automatsko dovršavanje. Pritisak +razmak (ili druge kombinacije postavljene u vim) trebao bi prikazati dostupna polja i dokumentaciju u skladu s trenutnim kontekstom:

Vim s podrškom za YAML za Kubernetes
Ovdje radi +razmak, jer sam postavio inoremap coc#refresh(). Ako to niste učinili — pogledajte coc.nvim README za primjer konfiguracije.

Odabir verzije Kubernetes API

U trenutku pisanja ovog članka yaml-language-server dolazi sa shemama Kubernetes 1.14.0. Nisam pronašao način za dinamičko odabiranje sheme, pa sam otvorio odgovarajući GitHub issue. Na sreću, budući da je jezični poslužitelj napisan u typescriptu, vrlo je lako ručno promijeniti verziju. Dovoljno je pronaći datoteku server.ts.

Kako biste je pronašli na svom računaru, samo otvorite YAML datoteku pomoću vim i pronađite proces s 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

Za nas je relevantan proces 2380: točno taj koristi vim tijekom uređivanja YAML datoteke.

Kao što se lako može vidjeti, datoteka se nalazi u /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Dovoljno je urediti ga, promijenivši vrijednost KUBERNETES_SCHEMA_URL, na primjer, na verziju 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";

Ovisno o verziji koja se koristi, coc-yaml mjesto varijable u kodu može biti različito. Također, imajte na umu da sam promijenio repozitorij s garethr na instrumenta. Čini se da garethr je prešao na podršku shema upravo tamo.

Da biste provjerili je li promjena stupila na snagu, pogledajte prikazuje li se polje koje ranije [u prethodnim verzijama Kubernetes] nije bilo. Na primjer, u shemi za K8s 1.14 nije bilo startupProbe:

Vim s podrškom za YAML za Kubernetes

Sažetak

Nadam se da vam je ova mogućnost donijela isto toliko radosti koliko i meni. Sretno s YAML-om! Ne zaboravite provjeriti ove repozitorije kako biste bolje razumjeli alate spomenute u članku:

P.S. od prevodioca

A tu je i vikube, vim-kubernetes i vimkubectl.

Pročitajte i na našem blogu:

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster