Vim s YAML podrškom za Kubernetes

Bilješka. prev.: Izvorni članak napisao je Josh Rosso, arhitekt u VMwareu koji je prethodno radio u tvrtkama kao što su CoreOS i Heptio, a također je i koautor Kubernetes alb-ingress-controllera. Autor dijeli mali recept koji može biti vrlo koristan za operativne inženjere "stare škole" koji preferiraju vim čak iu eri pobjedničkog cloud native-a.

Vim s YAML podrškom za Kubernetes

Pisanje YAML manifesta za Kubernetes u vim-u? Proveli ste nebrojene sate pokušavajući shvatiti gdje bi trebalo biti sljedeće polje u ovoj specifikaciji? Ili ćete možda cijeniti brzi podsjetnik na razliku args и command? Ima dobrih vijesti! Lako se povezati s Vimom yaml-jezični-poslužiteljkako biste dobili automatsko dovršavanje, provjeru valjanosti i druge pogodnosti. U ovom ćemo članku govoriti o tome kako za to postaviti klijenta jezičnog poslužitelja.

(Originalni članak također postoji li video, gdje autor govori i demonstrira sadržaj materijala.)

Jezični poslužitelj

Jezični poslužitelji (jezični poslužitelji) govoriti o mogućnostima programskih jezika uređivačima i IDE-ima, za koje oni međusobno komuniciraju pomoću posebnog protokola - Protokol jezičnog poslužitelja (LSP). Ovo je izvrstan pristup jer omogućuje da jedna implementacija pruži podatke mnogim editorima/IDE-ima odjednom. Već sam napisao sam oko gopls - jezični poslužitelj za Golang - i kako se može koristiti u energija. Koraci za dobivanje automatskog dovršavanja u YAML-u za Kubernetes su slični.

Vim s YAML podrškom za Kubernetes

Kako bi vim radio na opisani način, morat ćete instalirati klijenta jezičnog poslužitelja. Dvije metode za koje znam su LanguageClient-neovim и coc.vim. U članku ću razmotriti coc.vim - Ovo je trenutno najpopularniji dodatak. Možete ga instalirati putem vim-utikač:

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

Za početak coc (a time i yaml-language-server) će zahtijevati instaliran node.js:

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

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

:CocInstall coc-yaml

Vim s YAML podrškom za Kubernetes

Konačno, najvjerojatnije ćete htjeti započeti s konfiguracijom coc-vim, predstavili kao primjer. Konkretno, aktivira kombinaciju +razmak za pozivanje automatskog dovršavanja.

Postavljanje otkrivanja yaml-language-servera

Da coc mogao koristiti yaml-language-server, potrebno ga je zamoliti da učita shemu iz Kubernetesa prilikom uređivanja YAML datoteka. To se postiže uređivanjem coc-config:

:CocConfig

U konfiguraciji ćete morati dodati kubernetes za sve datoteke yaml. Dodatno koristim jezični poslužitelj za golangpa moja opća konfiguracija izgleda ovako:

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

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

kubernetes — rezervirano polje koje jezičnom poslužitelju govori da preuzme Kubernetes shemu s URL-a definiranog u ova konstanta. yaml.schemas može se proširiti za podršku dodatnim shemama - za više detalja, pogledajte relevantnu dokumentaciju.

Sada možete stvoriti YAML datoteku i početi koristiti automatsko dovršavanje. Pritiskom +razmak (ili druga kombinacija konfigurirana u vim-u) trebala bi prikazati dostupna polja i dokumentaciju prema trenutnom kontekstu:

Vim s YAML podrškom za Kubernetes
Radi ovdje +razmak jer sam konfigurirao inoremap <silent><expr> <c-space> coc#refresh(). Ako to niste učinili, pogledajte coc.nvim README za primjer konfiguracije.

Odabir verzije Kubernetes API-ja

Od pisanja ovog teksta, yaml-language-server isporučuje se sa Kubernetes 1.14.0 shemama. Nisam našao način da dinamički odaberem shemu, pa sam otvorio odgovarajući problem GitHuba. Srećom, budući da je jezični poslužitelj napisan tipkopisom, prilično je jednostavno ručno promijeniti verziju. Da biste to učinili, samo pronađite datoteku server.ts.

Da biste ga otkrili na svom računalu, jednostavno otvorite YAML datoteku pomoću vima i pronađite proces pomoću 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 je ono što vim koristi kada uređuje YAML datoteku.

Kao što možete lako vidjeti, datoteka se nalazi u /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Samo ga uredite promjenom vrijednosti KUBERNETES_SCHEMA_URL, na primjer, za 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 korištenoj verziji coc-yaml Mjesto varijable u kodu može varirati. Također imajte na umu da sam promijenio spremište iz garethr na instrumenta. Čini se da je garethr prebacio se na prateće krugove tamo.

Kako biste provjerili je li promjena stupila na snagu, pogledajte pojavljuje li se polje koje prije nije bilo [u prethodnim verzijama Kubernetesa]. Na primjer, u dijagramu za K8s 1.14 nije bilo br startupProbe:

Vim s YAML podrškom za Kubernetes

Rezime

Nadam se da će vam se ova prilika svidjeti koliko i meni. Sretno YAMLing! Obavezno provjerite ova spremišta kako biste bolje razumjeli pomoćne programe spomenute u članku:

PS od prevoditelja

A također postoji vikube, vim-kubernetes и vimkubectl.

Pročitajte i na našem blogu:

Izvor: www.habr.com

Dodajte komentar