Прим. прев.: оригиналната статия е написана от Josh Rosso — архитект от VMware, който преди е работил в компании като CoreOS и Heptio, и е съавтор на Kubernetes alb-ingress-controller. Авторът споделя малка рецепта, която може да бъде много полезна за инженери 'стара школа', които предпочитат vim дори в ерата на облачната многобройност.

Пишете YAML манифести за Kubernetes в vim? Прекарали сте безброй часове, опитвайки се да разберете къде в тази спецификация трябва да бъде поредното поле? Или може би ще се радвате на бързо напомняне за разликата args и command? Есть хорошие новости! Vim легко привязать к , за да получите автоматично допълнение, валидиране и други удобства. В статията ще говорим за това как да настроите клиента на езиковия сървър за тази цел.
(Оригиналната статия също , в което авторът описва и демонстрира съдържанието на материала.)
Езиковият сървър
Езиковите сървъри (language servers) разказват на редакторите и IDE за възможностите на програмните езици, за което те взаимодейства с помощта на специален протокол — (LSP). Това е чудесен подход: тъй като позволява на една реализация да предоставя данни на множество редактори/IDE наведнъж. Аз вече по — езиков сървър за Golang — и как може да се използва в . Действията за получаване на автодопълнение в YAML за Kubernetes са аналогични.

За да заработи vim по описания начин, ще е необходимо да инсталирате клиента на езиковия сървър. Два известни метода, за които знам, са и . В статията ще разглеждам coc.vim — това е най-популярният плъгин в момента. Можете да го инсталирате чрез :
" Използвайте release клона (Препоръчително)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Или изградете от изходния код с помощта на yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} За стартиране coc (и така, за сервера yaml-language-server) ще е необходимо да имате инсталиран node.js:
curl -sL install-node.now.sh/lts | bash Когато coc.vim настроен, инсталирайте сървърната разширение coc-yaml от vim:
:CocInstall coc-yaml 
Накрая, вероятно ще искате да започнете с конфигурацията coc-vim, представена . В частност, тя активира комбинацията +пробел за извикване на автодопълнението.
Настройка на откритие на yaml-language-server
За да coc може да ползва yaml-language-server, трябва да бъде помолен да зареди схемата от Kubernetes при редактиране на YAML файлове. Това става чрез редактиране на coc-config:
:CocConfig В конфигурацията ще трябва да добавите kubernetes за всички файлове yaml. Аз допълнително използвам езиков сървър за golang, така че моята обща конфигурация изглежда така:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
} kubernetes — резервирано поле, което уведомява езиковия сървър за необходимостта от зареждане на Kubernetes-схема по URL, определен в . yaml.schemas може да бъде разширено с поддръжка за допълнителни схеми — вижте повече в .
Сега можете да създадете YAML файл и да започнете да използвате автодовършването. Натискането на +пробел (или друга комбинация, настроена в vim) трябва да покаже наличните полета и документацията в зависимост от текущия контекст:

Тук работи +space, защото съм настроил inoremap coc#refresh(). Ако не сте го направили — вижте за примерна конфигурация.
Избор на версия на Kubernetes API
Към момента на написване на тази статия, yaml-language-server идва с Kubernetes схеми 1.14.0. Не намерих начин да избирам схема динамично, затова отворих . За щастие, тъй като езиковият сървър е написан на typescript, е доста лесно ръчно да промените версията. Просто е необходимо да намерите файл server.ts.
За да го откриете на машината си, просто отворете YAML файл с vim и намерете процес с 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За нас важен процес 2380: именно него използва vim по време на редактиране на YAML файл.
Както лесно можете да видите, файлът се намира в /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Достатъчно е да го редактирате, променяйки стойността на KUBERNETES_SCHEMA_URL, например, на версия 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"; В зависимост от версията на използвания coc-yaml разположението на променливата в кода може да е различно. Обърнете внимание, че съм променил репозитория от garethr на instrumenta. Изглежда, че garethr е преминал на поддръжка на схеми именно там.
За да проверите дали промяната е влязла в сила, вижте дали се появява поле, което преди [в предишни версии на Kubernetes] не е съществувало. Например, в схемата за K8s 1.14 нямаше :

Резюме
Надявам се, че тази възможност ви зарадва не по-малко, отколкото мен. Щастливо YAML’ing! Не забравяйте да се запознаете с тези репозитории, за да получите по-добро разбиране на инструментите, споменати в статията:
- coc-vim: ;
- coc-yaml: .
P.S. от преводача
И има още , и .
Прочетете също в нашия блог:
- «»;
- «».
Източник: habr.com
