рдиреЛрдЯред рдЕрдиреБрд╡рд╛рджред: рдореВрд▓ рд▓реЗрдЦ рдЬреЛрд╢ рд░реЛрд╕реЛ рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдерд┐рдпреЛ, VMware рдорд╛ рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд╛рд░ рдЬрд╕рд▓реЗ рдкрд╣рд┐рд▓реЗ CoreOS рд░ Heptio рдЬрд╕реНрддрд╛ рдХрдореНрдкрдиреАрд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрдпреЛ, рд░ Kubernetes alb-ingress-controller рдХреЛ рд╕рд╣-рд▓реЗрдЦрдХ рдкрдирд┐ рд╣реЛред рд▓реЗрдЦрдХрд▓реЗ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдиреБрд╕реНрдЦрд╛ рд╕рд╛рдЭрд╛ рдЧрд░реНрджрдЫ рдЬреБрди "рдкреБрд░рд╛рдиреЛ рд╡рд┐рджреНрдпрд╛рд▓рдп" рдЕрдкрд░реЗрд╢рди рдЗрдиреНрдЬрд┐рдирд┐рдпрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдЙрдкрдпреЛрдЧреА рд╣реБрди рд╕рдХреНрдЫ рдЬрд╕рд▓реЗ рд╡рд┐рдЬрдпреА рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рднрдХреЛ рдпреБрдЧрдорд╛ рдкрдирд┐ рднрд┐рдорд▓рд╛рдИ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджрд┐рдиреНрдЫред
Vim рдорд╛ Kubernetes рдХреЛ рд▓рд╛рдЧрд┐ YAML рдкреНрд░рдХрдЯ рд╣реБрдиреНрдЫ? рдпрд╕ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдирдорд╛ рдЕрд░реНрдХреЛ рдлрд┐рд▓реНрдб рдХрд╣рд╛рдБ рд╣реБрдиреБрдкрд░реНрдЫ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдЕрдирдЧрд┐рдиреНрддреА рдШрдгреНрдЯрд╛ рдмрд┐рддрд╛рдП? рд╡рд╛ рд╣реБрдирд╕рдХреНрдЫ рддрдкрд╛рдИрдВрд▓реЗ рднрд┐рдиреНрдирддрд╛рдХреЛ рджреНрд░реБрдд рд░рд┐рдорд╛рдЗрдиреНрдбрд░рдХреЛ рдХрджрд░ рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫ args
╨╕ command
? рддреНрдпрд╣рд╛рдБ рд░рд╛рдореНрд░реЛ рдЦрдмрд░ рдЫ! Vim рд▓рд┐рдЩреНрдХ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫ
(рдореВрд▓ рд▓реЗрдЦ рдкрдирд┐
рднрд╛рд╖рд╛ рд╕рд░реНрднрд░
рднрд╛рд╖рд╛ рд╕рд░реНрднрд░рд╣рд░реВ (рднрд╛рд╖рд╛ рд╕рд░реНрднрд░рд╣рд░реВ) рд╕рдореНрдкрд╛рджрдХрд╣рд░реВ рд░ IDEs рд▓рд╛рдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рднрд╛рд╖рд╛рд╣рд░реВрдХреЛ рдХреНрд╖рдорддрд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рддрд┐рдиреАрд╣рд░реВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЯреЛрдХрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдПрдХ рдЕрд░реНрдХрд╛рд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрдЫрдиреН -
vim рд▓рд╛рдИ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рддрд░рд┐рдХрд╛рдорд╛ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рднрд╛рд╖рд╛ рд╕рд░реНрднрд░ рдХреНрд▓рд╛рдЗрдиреНрдЯ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫред рдорд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рджреБрдИ рддрд░рд┐рдХрд╛рд╣рд░реВ coc.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
рдЕрдиреНрддрдорд╛, рддрдкрд╛рдЗрдБ рдкреНрд░рд╛рдп: рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╕рд╛рде рд╕реБрд░реБ рдЧрд░реНрди рдЪрд╛рд╣рд╛рдиреБрд╣реБрдиреНрдЫ coc-vim
, рдкреНрд░рд╕реНрддреБрдд
yaml-рднрд╛рд╖рд╛-рд╕рд░реНрднрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреЗ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ
рдХрд┐ 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 рдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреНрдп рд╕рдВрдпреЛрдЬрди) рд╣рд╛рд▓рдХреЛ рд╕рдиреНрджрд░реНрдн рдЕрдиреБрд╕рд╛рд░ рдЙрдкрд▓рдмреНрдз рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд░ рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рджреЗрдЦрд╛рдЙрдиреБрдкрд░реНрджрдЫ:
рдпрд╣рд╛рдБ рдХрд╛рдо рдЧрд░реНрдЫ +рд╕реНрдкреЗрд╕ рдХрд┐рдирднрдиреЗ рдореИрд▓реЗ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реЗрдВ inoremap <silent><expr> <c-space> coc#refresh()
ред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫреИрди рднрдиреЗ, рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН
Kubernetes API рд╕рдВрд╕реНрдХрд░рдг рдЪрдпрди рдЧрд░реНрджреИ
рдпреЛ рд▓реЗрдЦрдирдХреЛ рд░реВрдкрдорд╛, yaml-language-server ships Kubernetes 1.14.0 schemas рд╕рдБрдЧред рдореИрд▓реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рд╕реНрдХрд┐рдорд╛ рдЪрдпрди рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реЗрди, рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рдЦреЛрд▓реЗрдВ server.ts
.
рдпрд╕рд▓рд╛рдИ рддрдкрд╛рдЗрдБрдХреЛ рдореЗрд╕рд┐рдирдорд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди, рдХреЗрд╡рд▓ Vim рдХреЛ рд╕рд╛рде YAML рдлрд╛рдЗрд▓ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реН рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН 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
рддреНрдпрд╣рд╛рдБ рд╕рдорд░реНрдерди рд╕рд░реНрдХрд┐рдЯрд╣рд░реВрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░рд┐рдпреЛред
рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рднрдПрдХреЛ рдЫ рдХрд┐ рдЫреИрди рднрдиреА рдЬрд╛рдБрдЪ рдЧрд░реНрди, рдкрд╣рд┐рд▓реЗ [рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдХреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдорд╛] рддреНрдпрд╣рд╛рдБ рдирднрдПрдХреЛ рдлрд┐рд▓реНрдб рджреЗрдЦрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, K8s 1.14 рдХреЛ рд▓рд╛рдЧрд┐ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рдорд╛ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдерд┐рдПрди
рд╕рд╛рд░рд╛рдВрд╢
рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдХрд┐ рдпреЛ рдЕрд╡рд╕рд░рд▓реЗ рдорд▓рд╛рдИ рдЬрддрд┐ рдЦреБрд╢реА рдкрд╛рд░реНрдЫред рд╢реБрдн YAMLing! рд▓реЗрдЦрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдХрд╛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВрд▓рд╛рдИ рдЕрдЭ рд░рд╛рдореНрд░рд░реА рдмреБрдЭреНрди рдпреА рднрдгреНрдбрд╛рд░рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрди рдирд┐рд╢реНрдЪрд┐рдд рд╣реБрдиреБрд╣реЛрд╕реН:
- coc-vim:
https://github.com/neoclide/coc.nvim ; - coc-yaml:
https://github.com/neoclide/coc-yaml .
рдЕрдиреБрд╡рд╛рджрдХрдмрд╛рдЯ PS
рд░ рддреНрдпрд╣рд╛рдБ рдкрдирд┐ рдЫ
рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:
- ┬л
kubebox рд░ Kubernetes рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреНрдп рдЧреЛрд▓рд╛рд╣рд░реВ ┬╗; - ┬л
kubectl рдорд╛рд░реНрдлрдд Kubernetes рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдХрдиреНрд╕реЛрд▓ рд╕рд╣рдпреЛрдЧреАрд╣рд░реВ "ред
рд╕реНрд░реЛрдд: www.habr.com