Przyp. tłum.: oryginalny artykuł napisał Josh Rosso — architekt z VMware, wcześniej pracujący w takich firmach jak CoreOS i Heptio, a także współautor Kubernetes alb-ingress-controller. Autor dzieli się małym przepisem, który może okazać się bardzo pomocny dla inżynierów operacyjnych „starej szkoły”, preferujących vim nawet w epoce dominacji cloud native.

Piszesz YAML-manifesty dla Kubernetes w vim? Spędziłeś niezliczone godziny próbując zrozumieć, gdzie w tej specyfikacji powinno znajdować się kolejne pole? A może ucieszyłbyś się z szybkiego przypomnienia różnicy args i komenda? Есть хорошие новости! Vim легко привязать к , aby uzyskać automatyczne uzupełnianie, walidację i inne udogodnienia. W artykule omówimy, jak skonfigurować klienta językowego serwera.
(Oryginalny artykuł również , w którym autor opowiada i demonstruje zawartość materiału.)
Językowy serwer
Językowe serwery (language servers) informują edytory i IDE o możliwościach języków programowania, współpracując ze sobą za pośrednictwem specjalnego protokołu — (LSP). To wspaniałe podejście: pozwala jednej realizacji dostarczać dane od razu wielu edytorom/IDE. Już mówiłem — językowy serwer dla Golang — i jak można go wykorzystać w . Działania w celu uzyskania autouzupełniania w YAML dla Kubernetes są podobne.

Aby vim działał opisanym sposobem, trzeba zainstalować klienta językowego serwera. Dwa znane mi sposoby to i . W artykule omówię to — to obecnie najpopularniejszy plugin. Można go zainstalować za pomocą coc.vim vim-plug :
coc Aby uruchomić (a w ten sposób, serwera yaml-language-server) wymaga zainstalowanego node.js: curl -sL install-node.now.sh/lts | bash
skonfigurowany, zainstaluj rozszerzenie serwerowe Kiedy coc.vim coc-yaml z poziomu vim’a: :CocInstall coc-yaml
Na koniec, najprawdopodobniej będziesz chciał zacząć od konfiguracji 
coc-vim , przedstawionejjako przykład +spacja do wywołania autouzupełniania. Konfiguracja wykrywania yaml-language-server
mógł skorzystać z yaml-language-server, trzeba go poprosić o ładowanie schemy od Kubernetes podczas edytowania plików YAML. Robi się to poprzez edytowanie
Aby (a w ten sposób, serwera yaml-language-server) wymaga zainstalowanego node.js: coc-config :CocConfig:
W konfiguracji trzeba dodać W konfiguracji należy dodać kubernetes dla wszystkich plików yaml. Dodatkowo korzystam z serwera językowego dla golang, dlatego mój ogólny konfiguracja wygląda tak:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
} kubernetes — zarezerwowane pole, informujące serwer językowy o konieczności załadowania schematy Kubernetes z URL określonego w . yaml.schemas można rozszerzyć o dodatkowe schematy — więcej informacji w .
Teraz można utworzyć plik YAML i zacząć korzystać z automatycznego uzupełniania. Naciśnięcie do wywołania autouzupełniania. (lub innej kombinacji, skonfigurowanej w vim) powinno pokazać dostępne pola i dokumentację zgodną z aktualnym kontekstem:

Tutaj działa +spacja, ponieważ skonfigurowałem inoremap coc#refresh(). Jeśli tego nie zrobiłeś — zobacz dla przykładu konfiguracji.
Wybór wersji API Kubernetes
W momencie pisania tego artykułu yaml-language-server dostarczany jest ze schematami Kubernetes 1.14.0. Nie znalazłem sposobu na dynamiczny wybór schematu, dlatego otworzyłem . Na szczęście, ponieważ serwer językowy jest napisany w TypeScript, łatwo jest ręcznie zmienić wersję. Wystarczy znaleźć plik server.ts.
Aby go znaleźć na swoim komputerze, po prostu otwórz plik YAML za pomocą vim i znajdź proces z 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-serverDla nas istotny jest proces 2380: to właśnie jego używa vim podczas edytowania pliku YAML.
Jak łatwo zobaczyć, plik znajduje się w /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Wystarczy edytować go, zmieniając wartość KUBERNETES_SCHEMA_URL, na przykład na wersję 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 wersji używanego z poziomu vim’a: lokalizacja zmiennej w kodzie może się różnić. Zauważ także, że zmieniłem repozytorium z garethr na instrumenta. Wygląda na to, że garethr przeszedł na wsparcie schematów właśnie tam.
Aby sprawdzić, czy zmiana weszła w życie, sprawdź, czy pojawia się pole, którego wcześniej [w poprzednich wersjach Kubernetes] nie było. Na przykład, w schemacie dla K8s 1.14 nie było :

Podsumowanie
Mam nadzieję, że ta możliwość ucieszyła was nie mniej niż mnie. Szczęśliwego YAML’ing! Nie zapomnijcie zajrzeć do tych repozytoriów, aby lepiej zrozumieć narzędzia wspomniane w artykule:
- coc-vim: ;
- coc-yaml: .
P.S. od tłumacza
A dodatkowo jest , i .
Przeczytaj także na naszym blogu:
- «»;
- «».
Źródło: habr.com
