Vim ืขื ืชืžื™ื›ืช YAML ืขื‘ื•ืจ Kubernetes

ื”ืขืจื”. ืชืจื’ื•ื: ื”ืžืืžืจ ื”ืžืงื•ืจื™ ื ื›ืชื‘ ืขืœ ื™ื“ื™ ื’'ื•ืฉ ืจื•ืกื•, ืืจื›ื™ื˜ืงื˜ ื‘-VMware ืฉืขื‘ื“ ื‘ืขื‘ืจ ื‘ื—ื‘ืจื•ืช ื›ืžื• CoreOS ื•-Heptio, ื•ื”ื•ื ื’ื ืžื—ื‘ืจ ืฉื•ืชืฃ ืฉืœ Kubernetes alb-ingress-controller. ื”ืžื—ื‘ืจ ื—ื•ืœืง ืžืชื›ื•ืŸ ืงื˜ืŸ ืฉื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ ืžืื•ื“ ืœืžื”ื ื“ืกื™ ืชืคืขื•ืœ "ืื•ืœื“ ืกืงื•ืœ" ืฉืžืขื“ื™ืคื™ื vim ืืคื™ืœื• ื‘ืขื™ื“ืŸ ืฉืœ ื™ืœื™ื“ ื”ืขื ืŸ ื”ืžื ืฆื—.

Vim ืขื ืชืžื™ื›ืช YAML ืขื‘ื•ืจ Kubernetes

ื›ื•ืชื‘ื™ื ืžื ื™ืคืกื˜ื™ื ืฉืœ YAML ืขื‘ื•ืจ Kubernetes in vim? ื‘ื™ืœื™ืชื™ ืื™ื ืกืคื•ืจ ืฉืขื•ืช ื‘ื ื™ืกื™ื•ืŸ ืœื”ื‘ื™ืŸ ื”ื™ื›ืŸ ืฆืจื™ืš ืœื”ื™ื•ืช ื”ืฉื“ื” ื”ื‘ื ื‘ืžืคืจื˜ ื”ื–ื”? ืื• ืื•ืœื™ ืชืขืจื™ืš ืชื–ื›ื•ืจืช ืžื”ื™ืจื” ืœื”ื‘ื“ืœ args ะธ command? ื™ืฉ ื—ื“ืฉื•ืช ื˜ื•ื‘ื•ืช! ืงืœ ืœืงืฉืจ ืืœ Vim yaml-language-serverื›ื“ื™ ืœืงื‘ืœ ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช, ืื™ืžื•ืช ื•ืฉืืจ ื ื•ื—ื•ืช. ื‘ืžืืžืจ ื–ื” ื ื“ื‘ืจ ืขืœ ืื™ืš ืœื”ื’ื“ื™ืจ ืœืงื•ื— ืฉืจืช ืฉืคื” ื‘ืฉื‘ื™ืœ ื–ื”.

(ื’ื ื”ืžืืžืจ ื”ืžืงื•ืจื™ ื”ืื ื™ืฉ ืกืจื˜ื•ืŸ, ืฉื‘ื• ื”ืžื—ื‘ืจ ืžื“ื‘ืจ ื•ืžื“ื’ื™ื ืืช ืชื•ื›ืŸ ื”ื—ื•ืžืจ.)

ืฉืจืช ืฉืคื”

ืฉืจืชื™ ืฉืคื” (ืฉืจืชื™ ืฉืคื”) ืœื“ื‘ืจ ืขืœ ื”ื™ื›ื•ืœื•ืช ืฉืœ ืฉืคื•ืช ืชื›ื ื•ืช ืœืขื•ืจื›ื™ื ื•-IDE, ืฉืขื‘ื•ืจื ื”ื ืžืงื™ื™ืžื™ื ืื™ื ื˜ืจืืงืฆื™ื” ื–ื” ืขื ื–ื” ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ ืžื™ื•ื—ื“ - ืคืจื•ื˜ื•ืงื•ืœ ืฉืจืช ืฉืคื•ืช (LSP). ื–ื•ื”ื™ ื’ื™ืฉื” ืžืฆื•ื™ื ืช ืžื›ื™ื•ื•ืŸ ืฉื”ื™ื ืžืืคืฉืจืช ืœืžื™ืžื•ืฉ ืื—ื“ ืœืกืคืง ื ืชื•ื ื™ื ืœืขื•ืจื›ื™ื/IDE ืจื‘ื™ื ื‘ื‘ืช ืื—ืช. ื™ืฉ ืœื™ ื›ื‘ืจ ื›ืชื‘ืชื™ ะฟั€ะพ gopls - ืฉืจืช ืฉืคื” ืขื‘ื•ืจ Golang - ื•ื›ื™ืฆื“ ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ืžึถืจึถืฅ. ื”ืฉืœื‘ื™ื ืœืงื‘ืœืช ื”ืฉืœืžื” ืื•ื˜ื•ืžื˜ื™ืช ื‘-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

ื›ื™ 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 ืžื›ืชื•ื‘ืช ื”ืืชืจ ืฉื”ื•ื’ื“ืจื” ื‘ ื”ืงื‘ื•ืข ื”ื–ื”. 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 ืฉืžื—! ื”ืงืคื“ ืœื‘ื“ื•ืง ืืช ื”ืžืื’ืจื™ื ื”ืืœื” ื›ื“ื™ ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืืช ื›ืœื™ ื”ืฉื™ืจื•ืช ื”ืžื•ื–ื›ืจื™ื ื‘ืžืืžืจ:

ื .ื‘ ืžื”ืžืชืจื’ื

ื•ื™ืฉ vikube, vim-kubernetes ะธ vimkubectl.

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”