Opomba. prevod: izvirni članek je napisal Josh Rosso, arhitekt pri VMware, ki je prej delal v podjetjih, kot sta CoreOS in Heptio, in je tudi soavtor Kubernetes alb-ingress-controller. Avtor deli majhen recept, ki je lahko zelo koristen za operativne inženirje »stare šole«, ki imajo raje vim tudi v dobi zmagovitega domorodca v oblaku.
Pisanje manifestov YAML za Kubernetes v vim? Ste porabili nešteto ur, ko ste poskušali ugotoviti, kje naj bo naslednje polje v tej specifikaciji? Ali pa boste morda cenili hiter opomnik na razliko args и command? Dobra novica je! Vim se enostavno poveže yaml-jezikovni-strežnikza samodejno dokončanje, potrjevanje in druge ugodnosti. V tem članku bomo govorili o tem, kako za to nastaviti odjemalca jezikovnega strežnika.
(Tudi izvirni članek ali obstaja video, kjer avtor govori in prikazuje vsebino gradiva.)
Jezikovni strežnik
Jezikovni strežniki (jezikovni strežniki) govoriti o zmožnostih programskih jezikov urejevalnikom in IDE-jem, za katere med seboj komunicirajo s posebnim protokolom - Protokol strežnika jezika (LSP). To je odličen pristop, saj omogoča, da ena implementacija hkrati zagotovi podatke več urejevalnikom/IDE-jem. Imam že napisal sem o gopls - jezikovni strežnik za Golang - in kako ga je mogoče uporabiti v vim. Koraki za pridobitev samodokončanja v YAML za Kubernetes so podobni.
Da bi vim deloval na opisan način, boste morali namestiti odjemalca jezikovnega strežnika. Dve metodi, ki ju poznam, sta LanguageClient-neovim и coc.vim. V članku bom razmislil coc.vim - To je trenutno najbolj priljubljen vtičnik. Namestite ga lahko prek 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 začetek coc (in s tem yaml-language-server) bo zahteval nameščen node.js:
curl -sL install-node.now.sh/lts | bash
Pri coc.vim konfiguriran, namestite razširitev strežnika coc-yaml iz vima:
:CocInstall coc-yaml
Končno boste najverjetneje želeli začeti s konfiguracijo coc-vim, predstavljeno kot primer. Zlasti aktivira kombinacijo + presledek za klic samodokončanja.
Nastavitev zaznavanja yaml-language-server
To coc lahko uporablja yaml-language-server, ga je treba pri urejanju datotek YAML vprašati, naj naloži shemo iz Kubernetesa. To se naredi z urejanjem coc-config:
:CocConfig
V konfiguraciji boste morali dodati kubernetes za vse datoteke yaml. Dodatno uporabljam jezikovni strežnik za golangtorej moja splošna konfiguracija izgleda takole:
kubernetes — rezervirano polje, ki jezikovnemu strežniku sporoči, naj prenese shemo Kubernetes iz URL-ja, definiranega v ta konstanta. yaml.schemas se lahko razširi za podporo dodatnim shemam - za več podrobnosti glejte ustrezno dokumentacijo.
Zdaj lahko ustvarite datoteko YAML in začnete uporabljati samodejno dokončanje. Stiskanje + presledek (ali druga kombinacija, konfigurirana v vimu), mora prikazati razpoložljiva polja in dokumentacijo glede na trenutni kontekst:
Deluje tukaj +space ker sem konfiguriral inoremap <silent><expr> <c-space> coc#refresh(). Če tega še niste storili, glejte coc.nvim PREBERI ME za primer konfiguracije.
Izbira različice Kubernetes API
Od tega pisanja je strežnik yaml-language-server dobavljen s shemami Kubernetes 1.14.0. Nisem našel načina za dinamično izbiro sheme, zato sem odprl ustrezna težava GitHub. Ker je jezikovni strežnik napisan v tipkopisu, je na srečo zelo enostavno ročno spremeniti različico. Če želite to narediti, poiščite datoteko server.ts.
Če ga želite zaznati na vašem računalniku, preprosto odprite datoteko YAML z vim in poiščite postopek z yaml-language-server.
Ustrezen proces za nas je proces 2380: to je tisto, kar vim uporablja pri urejanju datoteke YAML.
Kot lahko vidite, se datoteka nahaja v /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Samo uredite ga tako, da spremenite vrednost KUBERNETES_SCHEMA_URL, na primer za različico 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";
Odvisno od uporabljene različice coc-yaml Lokacija spremenljivke v kodi se lahko razlikuje. Upoštevajte tudi, da sem spremenil repozitorij iz garethr o instrumenta. Zdi se, da garethr tam preklopil na podporna vezja.
Če želite preveriti, ali je sprememba začela veljati, poglejte, ali se prikaže polje, ki ga prej ni bilo [v prejšnjih različicah Kubernetesa]. Na primer, v diagramu za K8s 1.14 ni bilo št startupProbe:
Povzetek
Upam, da vam bo ta priložnost všeč tako kot meni. Srečno YAMLing! Ne pozabite preveriti teh repozitorijev, da boste bolje razumeli pripomočke, omenjene v članku: