Vim s podporo za YAML za Kubernetes

Op. prev.: Izvirni članek je napisal Josh Rosso - arhitekt iz VMware, ki je prej delal v podjetjih, kot sta CoreOS in Heptio, ter je soavtor Kubernetes alb-ingress-controller. Avtor deli majhen recept, ki je lahko zelo uporaben za inženirje „stare šole“, ki še vedno raje uporabljajo vim, tudi v dobi prevladujočega cloud native.

Vim s podporo za YAML za Kubernetes

Pišete YAML manifestacije za Kubernetes v vim? Ste preživeli nešteto ur, poskušajoč razumeti, kje v tej specifikaciji pripada naslednje polje? Morda bi bili veseli hitrega opomnika o razliki args in ukaz? Есть хорошие новости! Vim легко привязать к yaml-language-server, da dobite samodejno dopolnjevanje, validacijo in druge funkcionalnosti. V članku bomo govorili o tem, kako nastaviti odjemalca jezikovnega strežnika za to.

(Izvirni članek vsebuje tudi video, kjer avtor razlaga in prikazuje vsebino gradiva.)

Jezikovni strežnik

Jezikovni strežniki (language servers) razkrivajo zmožnosti programskih jezikov urejevalnikom in IDE-jem, kar pomeni, da med seboj komunicirajo po posebnem protokolu - Language Server Protocol (LSP). To je odličen pristop: omogoča eni implementaciji, da hkrati oskrbuje podatke več urejevalnikom/IDE-jem. Že sem napisal o gopls - jezikovnem strežniku za Golang - in kako ga lahko uporabimo v vim. Koraki za pridobitev samodejnega dopolnjevanja v YAML za Kubernetes so enaki.

Vim s podporo za YAML za Kubernetes

Da vim deluje na opisani način, je potrebno namestiti odjemalca jezikovnega strežnika. Dva znana načina sta LanguageClient-neovim in coc.vim. V članku bom obravnaval coc.vim — to je trenutno najbolj priljubljen vtičnik. Namestite ga lahko prek vim-plug:

" Uporabite različico (Priporočljivo)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Ali zgradite iz izvorne kode s pomočjo yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Za pokretanje coc (in, tako rekoč, strežnika yaml-language-server) je potrebna namestitev node.js:

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

Ko coc.vim ko je nastavljen, namestite strežniško razširitev coc-yaml iz vim-a:

:CocInstall coc-yaml

Vim s podporo za YAML za Kubernetes

Nazadnje, verjetno boste želeli začeti s konfiguracijo coc-vim, predstavljeno kot primer. Zlasti aktivira kombinacijo +preslednica za klicanje samodejnega dopolnjevanja.

Nastavitev zaznavanja yaml-language-server

Da coc je potrebna za yaml-language-server, da prosi, da naloži shemo iz Kubernetes pri urejanju YAML datotek. To storimo z urejanjem coc-config:

:CocConfig

V konfiguraciji bo potrebno dodati kubernetes za vse datoteke yaml. Dodatno uporabljam jezikovni strežnik za golang, zato moj celoten konfiguracijski dokument izgleda takole:

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

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

kubernetes — rezervirano polje, ki obvešča jezikovni strežnik o potrebi po nalaganju Kubernetes sheme prek URL-ja, določenega v tem konstantu. yaml.schemas lahko razširimo s podporo za dodatne sheme — več informacij najdete v pravilni dokumentaciji.

Sedaj lahko ustvarite YAML datoteko in začnete uporabljati samodejno dopolnjevanje. Pritisnite +preslednica (ali drugo kombinacijo, nastavljeno v vim) bo prikazalo razpoložljiva polja in dokumentacijo v skladu s trenutnim kontekstom:

Vim s podporo za YAML za Kubernetes
Tu deluje +presledek, ker sem nastavil inoremap coc#refresh(). Če tega niste storili — glejte coc.nvim README za primer konfiguracije.

Izbira različice Kubernetes API

Ob trenutku pisanja tega članka yaml-language-server prihaja z shemami Kubernetes 1.14.0. Nisem našel načina za dinamično izbiro sheme, zato sem odprl ustrezno GitHub težavo. Na srečo, ker je jezikovni strežnik napisan v typescriptu, je zelo enostavno ročno spremeniti različico. Za to zadostuje, da najdete datoteko server.ts.

Da ga odkrijete na svojem računalniku, preprosto odprite YAML datoteko s programom vim in poiščite postopek 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 pomemben postopek 2380: prav tega uporablja vim med urejanjem YAML datoteke.

Kot lahko enostavno vidite, se datoteka nahaja v /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Preprosto jo uredite in spremenite vrednost KUBERNETES_SCHEMA_URL, na primer na 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 različice uporabljenega coc-yaml lokacija spremenljivke v kodi se lahko razlikuje. Prav tako upoštevajte, da sem spremenil repozitorij z garethr na instrumenta. Zdi se, da garethr je prešel na podporo shem prav tam.

Da preverite, ali je sprememba stopila v veljavo, poglejte, ali se pojavi polje, ki ga prej [v prejšnjih različicah Kubernetes] ni bilo. Na primer, v shemi za K8s 1.14 ni bilo startupProbe:

Vim s podporo za YAML za Kubernetes

Резюме

Upam, da vas je ta možnost razveselila vsaj toliko kot mene. Srečno pri YAML’ingu! Ne pozabite si ogledati teh repozitorijev, da bolje razumete orodja, omenjena v članku:

P.S. od prevajalca

In še je vikube, vim-kubernetes in vimkubectl.

Preberite tudi na našem blogu:

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster