Vim z obsługą YAML dla Kubernetes

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.

Vim z obsługą YAML dla Kubernetes

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 легко привязать к yaml-language-server, aby uzyskać automatyczne uzupełnianie, walidację i inne udogodnienia. W artykule omówimy, jak skonfigurować klienta językowego serwera.

(Oryginalny artykuł również ma wideo, 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 — Language Server Protocol (LSP). To wspaniałe podejście: pozwala jednej realizacji dostarczać dane od razu wielu edytorom/IDE. Już napisałem mówiłem gopls — językowy serwer dla Golang — i jak można go wykorzystać w vim. Działania w celu uzyskania autouzupełniania w YAML dla Kubernetes są podobne.

Vim z obsługą YAML dla Kubernetes

Aby vim działał opisanym sposobem, trzeba zainstalować klienta językowego serwera. Dwa znane mi sposoby to LanguageClient-neovim i coc.vim. W artykule omówię to — to obecnie najpopularniejszy plugin. Można go zainstalować za pomocą coc.vim vim-plug " Użyj gałęzi wydania (Zalecane) Plug 'neoclide/coc.nvim', {'branch': 'release'}" Lub zbuduj z kodu źródłowego używając yarn: https://yarnpkg.com Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}:

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

Vim z obsługą YAML dla Kubernetes

coc-vim , przedstawionejjako przykład . W szczególności aktywuje ona kombinację+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 tej stałej. yaml.schemas można rozszerzyć o dodatkowe schematy — więcej informacji w odpowiedniej dokumentacji.

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:

Vim z obsługą YAML dla Kubernetes
Tutaj działa +spacja, ponieważ skonfigurowałem inoremap coc#refresh(). Jeśli tego nie zrobiłeś — zobacz coc.nvim README 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 odpowiedni problem na GitHubie. 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-server

Dla 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 startupProbe:

Vim z obsługą YAML dla Kubernetes

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:

P.S. od tłumacza

A dodatkowo jest vikube, vim-kubernetes i vimkubectl.

Przeczytaj także na naszym blogu:

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster