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.
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.
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
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:
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:
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.
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:
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: