Vim z obsługą YAML dla Kubernetes

Notatka. przeł.: Oryginalny artykuł został napisany przez Josha Rosso, architekta w VMware, który wcześniej pracował w CoreOS i Heptio, i jest współautorem Kubernetes alb-ingress-controller. Autor dzieli się małym przepisem, który może być bardzo przydatny dla inżynierów operacyjnych starej szkoły, którzy wolą vim nawet w erze natywnej chmury.

Vim z obsługą YAML dla Kubernetes

Czy piszesz manifesty YAML dla Kubernetes w vim? Czy spędziłeś niezliczone godziny próbując ustalić, gdzie powinno być następne pole w tej specyfikacji? A może doceniłbyś szybkie przypomnienie różnicy args и command? Są dobre wieści! Vim jest łatwy do powiązania serwer-języka-yaml, aby uzyskać automatyczne uzupełnianie, walidację i inne udogodnienia. W tym artykule omówimy, jak skonfigurować klienta serwera językowego w tym celu.

(Oryginalny artykuł ma również czy jest wideo(w którym autor opowiada i demonstruje treść materiału.)

Serwer językowy

Serwery językowe (serwery językowe) poinformować edytorów i IDE o możliwościach języków programowania, dzięki którym komunikują się one ze sobą za pomocą specjalnego protokołu - Protokół serwera językowego (LSP) To świetne podejście, ponieważ pozwala jednej implementacji na dostarczanie danych do wielu edytorów/IDE jednocześnie. Już to zrobiłem pisałem o gopls — serwer języka dla Golang — i jak można go wykorzystać w vimKroki wymagane do uzyskania funkcji automatycznego uzupełniania plików YAML dla Kubernetes są podobne.

Vim z obsługą YAML dla Kubernetes

Aby vim działał w opisany sposób, musisz zainstalować klienta serwera językowego. Dwie znane mi metody to: JęzykKlient-neovim и coc.vimW artykule rozważę coc.vim — jest obecnie najpopularniejszą wtyczką. Możesz ją zainstalować za pomocą wtyczka vim:

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

Na początek coc (a zatem również serwer języka yaml) będzie wymagał zainstalowania node.js:

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

Kiedy coc.vim skonfigurowano, zainstaluj rozszerzenie serwera coc-yaml z vim:

:CocInstall coc-yaml

Vim z obsługą YAML dla Kubernetes

Na koniec prawdopodobnie zechcesz rozpocząć konfigurację. coc-vim, zaprezentowano jako przykład. W szczególności aktywuje kombinację +spacja aby wywołać funkcję autouzupełniania.

Konfigurowanie wykrywania serwera języka yaml

Że coc można użyć yaml-language-server, należy poprosić o załadowanie schematu z Kubernetes podczas edycji plików YAML. Można to zrobić poprzez edycję coc-config:

:CocConfig

W konfiguracji należy dodać kubernetes dla wszystkich plików yamlDodatkowo korzystam z serwera językowego golang, więc moja ogólna konfiguracja wygląda tak:

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

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

kubernetes — pole zarezerwowane, które informuje serwer języka o konieczności pobrania schematu Kubernetes z adresu URL zdefiniowanego w ta stała. yaml.schemas można rozszerzyć o obsługę dodatkowych schematów – szczegóły w odpowiednia dokumentacja.

Teraz możesz utworzyć plik YAML i zacząć używać autouzupełniania. Kliknij +spacja (lub dowolna kombinacja skonfigurowana w vim) powinna pokazać dostępne pola i dokumentację zgodnie z bieżącym kontekstem:

Vim z obsługą YAML dla Kubernetes
Działa tutaj +spacja, bo to ustawiłem inoremap <silent><expr> <c-space> coc#refresh()Jeśli tego nie zrobiłeś, zobacz coc.nvim PRZECZYTAJ MNIE przykładowa konfiguracja.

Wybieranie wersji interfejsu API Kubernetes

W momencie pisania tego tekstu yaml-language-server jest dostarczany ze schematami Kubernetes 1.14.0. Nie mogłem znaleźć sposobu na dynamiczny wybór schematu, więc otworzyłem odpowiedni problem GitHub. Na szczęście, ponieważ serwer językowy jest napisany w TypeScript, dość łatwo jest ręcznie zmienić wersję. Aby to zrobić, wystarczy znaleźć plik server.ts.

Aby znaleźć go na swoim komputerze, wystarczy otworzyć plik YAML za pomocą programu vim i wyszukać proces za pomocą 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

Dla nas istotny jest proces 2380: to proces, którego vim używa podczas edycji pliku YAML.

Jak łatwo zauważyć, plik znajduje się w /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.jsWystarczy go edytować zmieniając wartość KUBERNETES_SCHEMA_URLna przykład do wersji 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";

W zależności od użytej wersji coc-yaml lokalizacja zmiennej w kodzie może być inna. Należy również zauważyć, że zmieniłem repozytorium z garethr na instrumenta. Wygląda na to że garethr przestawił się tam na systemy wsparcia.

Aby sprawdzić, czy zmiana została wprowadzona, poszukaj pola, którego wcześniej nie było [w poprzednich wersjach Kubernetes]. Na przykład schemat dla K8s 1.14 go nie zawierał. sonda startowa:

Vim z obsługą YAML dla Kubernetes

Streszczenie

Mam nadzieję, że ta funkcja była dla Ciebie tak ekscytująca, jak dla mnie. Miłego YAMLing! Koniecznie sprawdź te repozytoria, aby lepiej zrozumieć narzędzia wymienione w tym artykule:

PS od tłumacza

I jest wikube, vim kubernetes и wimbektl.

Przeczytaj także na naszym blogu:

Źródło: www.habr.com

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster