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