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 takich firmach jak CoreOS i Heptio, a także jest współautorem kontrolera ruchu przychodzącego Kubernetes alb. Autor dzieli się małym przepisem, który może być bardzo przydatny dla „starej szkoły” inżynierów operacyjnych, którzy preferują vima nawet w epoce zwycięskiego natywnego rozwiązania w chmurze.

Vim z obsługą YAML dla Kubernetes

Pisanie manifestów YAML dla Kubernetes w vimie? Spędziłeś niezliczone godziny, próbując dowiedzieć się, gdzie powinno znajdować się następne pole w tej specyfikacji? A może docenisz szybkie przypomnienie różnicy args и command? Jest dobra wiadomość! Vim jest łatwy do połączenia serwer języka yamlaby uzyskać automatyczne uzupełnianie, sprawdzanie poprawności i inne udogodnienia. W tym artykule porozmawiamy o tym, jak skonfigurować w tym celu klienta serwera językowego.

(Oryginalny artykuł również czy jest wideo, gdzie autor opowiada i demonstruje treść materiału.)

Serwer językowy

Serwery językowe (serwery językowe) rozmawiać o możliwościach języków programowania z redaktorami i IDE, dla których współdziałają ze sobą za pomocą specjalnego protokołu - Protokół serwera językowego (LSP). Jest to świetne podejście, ponieważ pozwala jednej implementacji dostarczać dane do wielu edytorów/IDE jednocześnie. Już to zrobiłem pisałem o gopls - serwer językowy dla Golang - i jak można z niego korzystać vim. Kroki uzyskania autouzupełniania 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. Znam dwie metody JęzykClient-neovim и coc.vim. W artykule rozważę coc.vim - To obecnie najpopularniejsza wtyczka. Możesz go zainstalować poprzez 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 tym samym serwer języka YAML) będzie wymagał zainstalowanego node.js:

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

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

:CocInstall coc-yaml

Vim z obsługą YAML dla Kubernetes

Na koniec najprawdopodobniej będziesz chciał zacząć od konfiguracji coc-vim, przedstawione jako przykład. W szczególności aktywuje kombinację +przestrzeń wywołać autouzupełnianie.

Konfigurowanie wykrywania serwera języka YAML

Że coc mógłby użyć serwera języka yaml, należy go poprosić o załadowanie schematu z Kubernetes podczas edycji plików YAML. Odbywa się to poprzez edycję coc-config:

:CocConfig

W konfiguracji będziesz musiał dodać kubernetes dla wszystkich plików yaml. Dodatkowo korzystam z serwera językowego golangwięc moja ogólna konfiguracja wygląda następująco:

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

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

kubernetes — zarezerwowane pole, które informuje serwer językowy o pobraniu schematu Kubernetes z adresu URL zdefiniowanego w ta stała. yaml.schemas można rozbudować o obsługę dodatkowych schematów – więcej szczegółów zob odpowiednią dokumentację.

Teraz możesz utworzyć plik YAML i zacząć korzystać z autouzupełniania. Pilny +przestrzeń (lub inna kombinacja skonfigurowana w vimie) powinna pokazywać dostępne pola i dokumentację zgodnie z bieżącym kontekstem:

Vim z obsługą YAML dla Kubernetes
Pracuje tutaj + spacja, ponieważ skonfigurowałem inoremap <silent><expr> <c-space> coc#refresh(). Jeśli jeszcze tego nie zrobiłeś, zobacz coc.nvim plik README dla przykładowej konfiguracji.

Wybieranie wersji API Kubernetes

W chwili pisania tego tekstu serwer języka yaml jest dostarczany ze schematami Kubernetes 1.14.0. Nie znalazłem sposobu na dynamiczne wybieranie schematu, więc otworzyłem odpowiedni problem z GitHubem. Na szczęście, ponieważ serwer językowy jest napisany w maszynopisie, dość łatwo jest ręcznie zmienić wersję. Aby to zrobić, po prostu znajdź plik server.ts.

Aby wykryć go na swoim komputerze, po prostu otwórz plik YAML za pomocą vima i znajdź 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

Odpowiednim procesem dla nas jest proces 2380: tego właśnie używa vim 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.js. Po prostu edytuj go, zmieniając wartość KUBERNETES_SCHEMA_URLprzykładowo dla 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 się różnić. Pamiętaj również, że zmieniłem repozytorium z garethr na instrumenta. Wygląda na to że garethr przełączono tam na obwody pomocnicze.

Aby sprawdzić, czy zmiana odniosła skutek, sprawdź, czy pojawiło się pole, którego wcześniej nie było [w poprzednich wersjach Kubernetesa]. Przykładowo na schemacie dla K8s 1.14 nie było Sonda startowa:

Vim z obsługą YAML dla Kubernetes

Streszczenie

Mam nadzieję, że ta możliwość sprawi Ci tyle samo przyjemności, co mnie. Szczęśliwego YAMLingu! Koniecznie sprawdź te repozytoria, aby lepiej zrozumieć narzędzia wspomniane w artykule:

PS od tłumacza

I jest Vikube, vim-kubernetes и vimkubectl.

Przeczytaj także na naszym blogu:

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

Dodaj komentarz