Vim sa YAML podrškom za Kubernetes

Bilješka. transl.: Originalni članak je napisao Josh Rosso, arhitekta u VMware-u koji je prethodno radio u kompanijama kao što su CoreOS i Heptio, a također je i koautor Kubernetes alb-ingress-kontrolera. Autor dijeli mali recept koji može biti vrlo koristan za operativne inženjere „stare škole“ koji preferiraju vim čak i u eri pobjedničkog cloud native.

Vim sa YAML podrškom za Kubernetes

Pisanje YAML manifesta za Kubernetes u vim? Proveo bezbroj sati pokušavajući da shvatim gde bi sledeće polje trebalo da bude u ovoj specifikaciji? Ili ćete možda cijeniti brzi podsjetnik na razliku args и command? Ima dobrih vijesti! Vim je jednostavan za povezivanje yaml-jezik-serverda dobijete automatsko dovršavanje, validaciju i druge pogodnosti. U ovom članku ćemo govoriti o tome kako postaviti klijent jezičkog poslužitelja za ovo.

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

Jezički server

Jezički serveri (jezički serveri) govoriti o mogućnostima programskih jezika urednicima i IDE-ovima, za koje oni međusobno komuniciraju pomoću posebnog protokola - Language Server Protocol (LSP). Ovo je odličan pristup jer omogućava jednoj implementaciji da pruži podatke mnogim uređivačima/IDE odjednom. Već jesam napisao je oko gopls - jezički server za Golang - i kako se može koristiti u energija. Koraci za automatsko dovršavanje u YAML-u za Kubernetes su slični.

Vim sa YAML podrškom za Kubernetes

Da bi vim radio na opisani način, moraćete da instalirate klijent jezičkog servera. Dvije metode koje znam su LanguageClient-neovim и coc.vim. U članku ću razmotriti coc.vim - Ovo je trenutno najpopularniji dodatak. Možete ga instalirati putem vim-plug:

" 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 samim tim i yaml-language-server) će zahtijevati instaliran node.js:

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

Kada coc.vim konfigurisan, instalirajte proširenje servera coc-yaml od vim:

:CocInstall coc-yaml

Vim sa YAML podrškom za Kubernetes

Konačno, najvjerovatnije ćete htjeti početi s konfiguracijom coc-vim, predstavljeno kao primjer. Konkretno, aktivira kombinaciju +prostor za pozivanje automatskog dovršavanja.

Postavljanje detekcije yaml-language-server

da coc može koristiti yaml-language-server, potrebno je od njega tražiti da učita šemu iz Kubernetes-a prilikom uređivanja YAML datoteka. Ovo se radi uređivanjem coc-config:

:CocConfig

U konfiguraciji ćete morati dodati kubernetes za sve fajlove yaml. Dodatno koristim jezički server za golangtako da moja opšta konfiguracija izgleda ovako:

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

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

kubernetes — rezervisano polje koje govori jezičkom serveru da preuzme Kubernetes šemu sa URL-a definisanog u ova konstanta. yaml.schemas može se proširiti da podrži dodatne šeme - za više detalja pogledajte relevantnu dokumentaciju.

Sada možete kreirati YAML datoteku i početi koristiti automatsko dovršavanje. Pritiskom +prostor (ili druga kombinacija konfigurisana u vim) treba da pokaže dostupna polja i dokumentaciju prema trenutnom kontekstu:

Vim sa YAML podrškom za Kubernetes
Radi ovdje +prostor jer sam konfigurisao inoremap <silent><expr> <c-space> coc#refresh(). Ako ovo niste uradili, pogledajte coc.nvim README za primjer konfiguracije.

Odabir verzije Kubernetes API-ja

Od ovog pisanja, yaml-language-server se isporučuje sa Kubernetes 1.14.0 šemama. Nisam našao način da dinamički izaberem šemu, pa sam otvorio odgovarajući problem GitHub-a. Na sreću, pošto je jezički server napisan kucanim pismom, prilično je lako ručno promijeniti verziju. Da biste to učinili, samo pronađite datoteku server.ts.

Da biste ga otkrili na svom stroju, jednostavno otvorite YAML datoteku pomoću vim-a 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

Relevantan proces za nas je proces 2380: to je ono što vim koristi prilikom uređivanja YAML datoteke.

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 Lokacija varijable u kodu može varirati. Takođe imajte na umu da sam promijenio spremište iz garethr na instrumenta. Čini se da garethr prešao na potporna kola tamo.

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

Vim sa YAML podrškom za Kubernetes

Rezime

Nadam se da će vam ova prilika biti zadovoljna kao i meni. Sretan YAMLing! Obavezno provjerite ova spremišta kako biste bolje razumjeli uslužne programe spomenute u članku:

PS od prevodioca

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

Pročitajte i na našem blogu:

izvor: www.habr.com

Dodajte komentar