Kubernetes үшін YAML қолдауы бар Vim

Ескерту. аударма: Бастапқы мақаланы бұрын CoreOS және Heptio сияқты компанияларда жұмыс істеген, сонымен қатар Kubernetes alb-ingress-controller авторларының бірі болып табылатын VMware сәулетшісі Джош Россо жазған. Автор бұлттың жеңіске жеткен дәуірінде де вимді ұнататын «ескі мектеп» операциялық инженерлері үшін өте пайдалы болатын шағын рецептпен бөліседі.

Kubernetes үшін YAML қолдауы бар Vim

Kubernetes үшін vim-де YAML манифесттерін жазу керек пе? Осы спецификациядағы келесі өріс қай жерде болуы керек екенін анықтауға сансыз сағат жұмсадыңыз ба? Немесе айырмашылықты жылдам еске түсіруді бағалайтын шығарсыз args и command? Жақсы жаңалық бар! Vim-ге сілтеме жасау оңай yaml-тіл-серверавтоматты түрде толтыру, валидация және басқа да ыңғайлылықтарды алу. Бұл мақалада біз бұл үшін тіл серверінің клиентін қалай орнату керектігін айтатын боламыз.

(Мақаланың түпнұсқасы да видеосы бар ма, мұнда автор сөйлейді және материалдың мазмұнын көрсетеді.)

Тіл сервері

Тіл серверлері (тіл серверлері) редакторлар мен IDE-ге бағдарламалау тілдерінің мүмкіндіктері туралы әңгімелеу, олар үшін олар бір-бірімен арнайы хаттама арқылы өзара әрекеттеседі - Тілдік сервер протоколы (LSP). Бұл тамаша тәсіл, себебі ол бір іске асыруға бірден көптеген редакторларға/IDE деректерін беруге мүмкіндік береді. Менде бар жазды туралы gopls - Голанг тілінің сервері - және оны қалай пайдалануға болады ВИМ. Kubernetes үшін YAML жүйесінде автотолтыруды алу қадамдары ұқсас.

Kubernetes үшін YAML қолдауы бар Vim

Vim сипатталған жолмен жұмыс істеуі үшін сізге тіл серверінің клиентін орнату қажет. Мен білетін екі әдіс LanguageClient-neovim и coc.vim. Мақалада мен қарастырамын coc.vim - Бұл қазіргі уақытта ең танымал плагин. арқылы орнатуға болады 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'}

Бастау үшін coc (және осылайша yaml-language-server) node.js орнатуды қажет етеді:

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

Қашан coc.vim конфигурацияланған болса, сервер кеңейтімін орнатыңыз coc-yaml vim ішінен:

:CocInstall coc-yaml

Kubernetes үшін YAML қолдауы бар Vim

Ақырында, сіз конфигурациядан бастағыңыз келуі мүмкін coc-vim, ұсынылған мысал ретінде. Атап айтқанда, ол комбинацияны белсендіреді +кеңістік автотолтыруды шақыру.

yaml-language-server анықтауын орнату

сол coc yaml-language-server пайдалана алады, YAML файлдарын өңдеу кезінде оған Kubernetes-тен схеманы жүктеуді сұрау керек. Бұл өңдеу арқылы жасалады coc-config:

:CocConfig

Конфигурацияда сіз қосуыңыз керек kubernetes барлық файлдар үшін yaml. Мен қосымша тіл серверін қолданамын golangсондықтан менің жалпы конфигурациям келесідей көрінеді:

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

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

kubernetes — тіл серверіне келесіде анықталған URL мекенжайынан Kubernetes схемасын жүктеп алу керектігін айтатын резервтелген өріс бұл тұрақты. yaml.schemas қосымша схемаларды қолдау үшін кеңейтілуі мүмкін - толығырақ ақпаратты қараңыз тиісті құжаттама.

Енді сіз YAML файлын жасай аласыз және автотолтыруды пайдалана аласыз. басу +кеңістік (немесе vim ішінде конфигурацияланған басқа комбинация) ағымдағы контекстке сәйкес қол жетімді өрістер мен құжаттаманы көрсетуі керек:

Kubernetes үшін YAML қолдауы бар Vim
Мұнда жұмыс істейді +бос орын, себебі мен конфигурацияладым inoremap <silent><expr> <c-space> coc#refresh(). Егер сіз мұны жасамаған болсаңыз, қараңыз coc.nvim README мысалы конфигурация үшін.

Kubernetes API нұсқасын таңдау

Осы жазу кезінде yaml-тіл-сервері Kubernetes 1.14.0 схемаларымен жеткізіледі. Мен схеманы динамикалық түрде таңдаудың жолын таппадым, сондықтан мен аштым сәйкес GitHub мәселесі. Бақытымызға орай, тіл сервері типографияда жазылғандықтан, нұсқаны қолмен өзгерту оңай. Мұны істеу үшін файлды табу жеткілікті 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 процесс: бұл YAML файлын өңдеу кезінде vim пайдаланатын процесс.

Көріп отырғаныңыздай, файл мына жерде орналасқан /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 диаграммасында жоқ startupProbe:

Kubernetes үшін YAML қолдауы бар Vim

Резюме

Бұл мүмкіндік мен сияқты сізді де қуантады деп үміттенемін. YAMLing құтты болсын! Мақалада айтылған утилиталарды жақсырақ түсіну үшін мына репозиторийлерді тексеріңіз:

Аудармашыдан PS

Және де бар викубе, vim-kubernetes и vimkubectl.

Біздің блогта да оқыңыз:

Ақпарат көзі: www.habr.com

пікір қалдыру