Vim бо дастгирии YAML барои Kubernetes

Шарҳ. тарҷума.: Мақолаи аслӣ аз ҷониби Ҷош Россо, меъмори VMware навишта шудааст, ки қаблан дар ширкатҳое мисли CoreOS ва Heptio кор мекард ва ҳаммуаллифи Kubernetes alb-ingress-controller мебошад. Муаллиф як рецепти хурдеро нақл мекунад, ки метавонад барои муҳандисони амалиёти "мактаби кӯҳна", ки ҳатто дар даврони абрҳои пирӯзманд vim-ро афзалтар медонанд, хеле муфид бошад.

Vim бо дастгирии YAML барои Kubernetes

Навиштани манифестҳои YAML барои Kubernetes дар vim? Соатҳои бешуморро барои фаҳмидани он, ки майдони оянда бояд дар ин мушаххасот дар куҷо бошад? Ё шояд шумо ёдраскунии зудро дар бораи фарқият қадр кунед args и command? Хабари хуш ҳаст! Пайвастшавӣ ба Vim осон аст yaml-language-serverба даст овардани ба таври автоматикӣ анҷом додан, тасдиқкунӣ ва дигар қулайҳо. Дар ин мақола мо дар бораи чӣ гуна сохтани муштарии сервери забонӣ барои ин сӯҳбат хоҳем кард.

(Мақолаи аслӣ низ видео ҳаст, ки дар он чо муаллиф сухбат карда, мазмуни материалро нишон медихад.)

Сервери забон

Серверҳои забон (серверҳои забонӣ) дар бораи имкониятҳои забонҳои барномасозӣ ба муҳаррирон ва IDEҳо сӯҳбат кунед, ки барои онҳо онҳо бо истифода аз протоколи махсус бо ҳамдигар ҳамкорӣ мекунанд - Протоколи сервери забон (LSP). Ин як равиши олӣ аст, зеро он ба як татбиқ имкон медиҳад, ки якбора ба бисёр муҳаррир/IDE маълумот дода шавад. Ман аллакай навиштааст дар бораи гоплс - сервери забон барои Голанг - ва чӣ гуна онро дар он истифода бурдан мумкин аст зеро. Қадамҳо барои ба даст овардани худкор дар YAML барои Kubernetes шабеҳанд.

Vim бо дастгирии YAML барои Kubernetes

Барои он ки vim ба таври тавсифшуда кор кунад, шумо бояд мизоҷи сервери забонро насб кунед. Ду усуле, ки ман медонам, инҳоянд LanguageClient-neovim и coc.vim. Дар мақола ман баррасӣ хоҳам кард coc.vim - Ин плагини маъмултарин дар айни замон аст. Шумо метавонед онро тавассути vim-plug:

" 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

Vim бо дастгирии YAML барои Kubernetes

Дар ниҳоят, шумо эҳтимолан мехоҳед, ки бо конфигуратсия оғоз кунед 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 — майдони ҳифзшуда, ки ба сервери забон мегӯяд, ки схемаи Kubernetes-ро аз URL-и дар ин доимӣ. yaml.schemas метавонад барои дастгирии схемаҳои иловагӣ васеъ карда шавад - барои тафсилоти бештар нигаред ҳуҷҷатҳои дахлдор.

Акнун шумо метавонед як файли YAML эҷод кунед ва ба истифода аз пуркунии худкор оғоз кунед. Пахш кардан + фазо (ё дигар комбинатсияи дар vim танзимшуда) бояд майдонҳо ва ҳуҷҷатҳои дастрасро мувофиқи контексти ҷорӣ нишон диҳад:

Vim бо дастгирии YAML барои Kubernetes
Дар ин ҷо кор мекунад +фазо, зеро ман танзим кардам inoremap <silent><expr> <c-space> coc#refresh(). Агар шумо ин корро накарда бошед, бубинед coc.nvim README барои мисоли конфигуратсия.

Интихоби версияи API Kubernetes

Ҳангоми навиштан, yaml-language-server бо схемаҳои 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 аст: он чизест, ки 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 вуҷуд надошт startupProbe:

Vim бо дастгирии YAML барои Kubernetes

Натиҷа

Умедворам, ки ин фурсат ба мисли ман ба шумо низ писанд меояд. YAMLing муборак! Боварӣ ҳосил кунед, ки ин анборҳоро тафтиш кунед, то ки утилитаҳои дар мақола зикршударо беҳтар дарк кунед:

PS аз тарҷумон

Ва низ ҳаст викубе, vim-kubernetes и vimkubectl.

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ