Vim na may suporta sa YAML para sa Kubernetes

Tandaan. transl.: Ang orihinal na artikulo ay isinulat ni Josh Rosso, isang arkitekto sa VMware na dating nagtrabaho sa mga kumpanya tulad ng CoreOS at Heptio, at siya rin ang co-author ng Kubernetes alb-ingress-controller. Nagbabahagi ang may-akda ng isang maliit na recipe na maaaring maging lubhang kapaki-pakinabang para sa mga inhinyero ng operasyon ng "lumang paaralan" na mas gusto ang vim kahit na sa panahon ng matagumpay na cloud native.

Vim na may suporta sa YAML para sa Kubernetes

Pagsusulat ng YAML manifests para sa Kubernetes sa vim? Gumugol ng hindi mabilang na oras sa pagsubok na alamin kung saan dapat ang susunod na field sa detalyeng ito? O baka mapapahalagahan mo ang isang mabilis na paalala ng pagkakaiba args ΠΈ command? May magandang balita! Madaling i-link si Vim yaml-language-serverupang makakuha ng awtomatikong pagkumpleto, pagpapatunay at iba pang kaginhawahan. Sa artikulong ito, pag-uusapan natin kung paano mag-set up ng client ng server ng wika para dito.

(Ang orihinal na artikulo din may video ba, kung saan ang may-akda ay nagsasalita at nagpapakita ng mga nilalaman ng materyal.)

Server ng wika

Mga server ng wika (mga server ng wika) makipag-usap tungkol sa mga kakayahan ng mga programming language sa mga editor at IDE, kung saan nakikipag-ugnayan sila sa isa't isa gamit ang isang espesyal na protocol - Protocol ng Wika Server (LSP). Ito ay isang mahusay na diskarte dahil pinapayagan nito ang isang pagpapatupad na magbigay ng data sa maraming mga editor/IDE nang sabay-sabay. Meron na ako ako wrote tungkol sa gopls - isang server ng wika para sa Golang - at kung paano ito magagamit sa kalakasan. Ang mga hakbang upang makakuha ng autocompletion sa YAML para sa Kubernetes ay magkatulad.

Vim na may suporta sa YAML para sa Kubernetes

Upang gumana ang vim sa inilarawang paraan, kakailanganin mong mag-install ng client ng server ng wika. Ang dalawang paraan na alam ko ay LanguageClient-neovim ΠΈ coc.vim. Sa artikulong isasaalang-alang ko coc.vim - Ito ang pinakasikat na plugin sa ngayon. Maaari mong i-install ito sa pamamagitan ng 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'}

Sa umpisa coc (at sa gayon ang yaml-language-server) ay mangangailangan ng node.js na naka-install:

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

Kapag coc.vim na-configure, i-install ang extension ng server coc-yaml mula sa vim:

:CocInstall coc-yaml

Vim na may suporta sa YAML para sa Kubernetes

Sa wakas, malamang na gusto mong magsimula sa pagsasaayos coc-vim, iniharap bilang halimbawa. Sa partikular, pinapagana nito ang kumbinasyon +espasyo para tumawag sa autocompletion.

Pagse-set up ng yaml-language-server detection

Na coc Maaaring gumamit ng yaml-language-server, kailangan itong hilingin na i-load ang schema mula sa Kubernetes kapag nag-e-edit ng mga YAML file. Ginagawa ito sa pamamagitan ng pag-edit coc-config:

:CocConfig

Sa pagsasaayos kakailanganin mong idagdag kubernetes para sa lahat ng mga file yaml. Gumagamit din ako ng server ng wika para sa golangkaya ganito ang aking pangkalahatang config:

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

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

kubernetes β€” isang nakareserbang field na nagsasabi sa server ng wika na i-download ang Kubernetes schema mula sa URL na tinukoy sa ito pare-pareho. yaml.schemas maaaring palawakin upang suportahan ang mga karagdagang scheme - para sa higit pang mga detalye, tingnan kaugnay na dokumentasyon.

Ngayon ay maaari kang lumikha ng isang YAML file at simulan ang paggamit ng autocompletion. Pagpindot +espasyo (o iba pang kumbinasyong na-configure sa vim) ay dapat magpakita ng mga available na field at dokumentasyon ayon sa kasalukuyang konteksto:

Vim na may suporta sa YAML para sa Kubernetes
Gumagana dito +space dahil na-configure ko inoremap <silent><expr> <c-space> coc#refresh(). Kung hindi mo pa nagawa ito, tingnan mo coc.nvim README para sa isang halimbawang pagsasaayos.

Pagpili ng bersyon ng Kubernetes API

Sa pagsulat na ito, ang yaml-language-server ay nagpapadala ng mga schema ng Kubernetes 1.14.0. Hindi ako nakahanap ng paraan para dynamic na pumili ng schema, kaya binuksan ko kaukulang isyu sa GitHub. Sa kabutihang palad, dahil ang server ng wika ay nakasulat sa typescript, medyo madali itong manu-manong baguhin ang bersyon. Upang gawin ito, hanapin lamang ang file server.ts.

Upang makita ito sa iyong makina, buksan lang ang YAML file gamit ang vim at hanapin ang proseso gamit ang 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

Ang nauugnay na proseso para sa amin ay proseso 2380: ito ang ginagamit ng vim kapag nag-e-edit ng YAML file.

Tulad ng madali mong nakikita, ang file ay matatagpuan sa /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. I-edit lamang ito sa pamamagitan ng pagbabago ng halaga KUBERNETES_SCHEMA_URL, halimbawa, para sa bersyon 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";

Depende sa bersyon na ginamit coc-yaml Ang lokasyon ng variable sa code ay maaaring mag-iba. Pakitandaan din na binago ko ang repositoryo mula sa garethr sa instrumenta. Mukhang na garethr lumipat sa mga sumusuportang circuit doon.

Upang matiyak na ang pagbabago ay nagkaroon ng bisa, tingnan kung may lalabas na field na wala pa noon [sa mga nakaraang bersyon ng Kubernetes]. Halimbawa, sa diagram para sa K8s 1.14 ay walang startupProbe:

Vim na may suporta sa YAML para sa Kubernetes

Buod

Umaasa ako na ang pagkakataong ito ay nagpapasaya sa iyo tulad ng ginawa nito sa akin. Maligayang YAMLing! Siguraduhing tingnan ang mga repository na ito para mas maunawaan ang mga utility na binanggit sa artikulo:

PS mula sa tagasalin

At meron din vikube, vim-kubernetes ΠΈ vimkubectl.

Basahin din sa aming blog:

Pinagmulan: www.habr.com

Magdagdag ng komento