Shën. përk.: artikujin origjinal e shkroi Josh Rosso — arkitekt nga VMware, i cili më parë ka punuar në kompani si CoreOS dhe Heptio, dhe është gjithashtu bashkautori i Kubernetes alb-ingress-controller. Autori ndan një recetë të vogël që mund të jetë shumë e dobishme për inxhinierët e operacioneve "të vjetra", të cilët preferojnë vim edhe në epokën e cloud native që ka fituar terren.

A shkruani mmanifestet YAML për Kubernetes në vim? Keni kaluar orë të pafund duke u munduar të kuptoni se ku në këtë specifikim duhet të jetë fusha tjetër? Mund të jeni të lumtur për një përmbledhje të shpejtë të ndryshimeve. args dhe command? Есть хорошие новости! Vim легко привязать к , për të marrë përfundime automatike, validim dhe lehtësira të tjera. Në këtë artikull do të flasim se si ta konfiguroni klientin e serverit të gjuhës për këtë.
(Artikulli origjinal gjithashtu , ku autori tregon dhe demonstruar përmbajtjen e materialit.)
Serveri i gjuhës
Serverët e gjuhës (language servers) informojnë redaktorët dhe IDE-të për mundësitë e gjuhëve të programimit dhe për këtë arsye bashkëpunojnë me njëri-tjetrin përmes një protokolli të veçantë — (LSP). Ky është një qasje e shkëlqyer: sepse lejon që një implementim të ofrojë të dhëna për shumë editorë/IDE njëherësh. Unë tashmë për — serveri gjuhësor për Golang — dhe si mund të përdoret në . Veprimet për të marrë sugjerime në YAML për Kubernetes janë të ngjashme.

Për të bërë që vim të punojë në këtë mënyrë, nevojitet të instalohet klienti i serverit gjuhësor. Dy mënyra që njihen nga unë janë dhe . Në këtë artikull do të shqyrtoj coc.vim — ky është plugins më i popullarizuar deri tani. Mund ta instaloni përmes :
" Përdorni degën e lëshimit (Rekomandohet)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Ose ndërtoni nga kodi burimor duke përdorur yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Për të nisur coc (dhe, në këtë mënyrë, serveri yaml-language-server) kërkohet që node.js të jetë i instaluar:
curl -sL install-node.now.sh/lts | bash Kur coc.vim nëse është i konfiguruar, instaloni zgjerimin e serverit coc-yaml nga vim’i:
:CocInstall coc-yaml 
Në fund, me siguri do të dëshironit të filloni me konfigurimin coc-vim, siç paraqitet . Sidomos, ajo aktivizon kombinimin +hapësirë për të thirrur sugjerimet.
Konfigurimi i zbulimit të yaml-language-server
Për coc mund të përdorë yaml-language-server, duhet ta kërkoni të ngarkohet skema nga Kubernetes gjatë redaktimit të skedave YAML. Kjo bëhet duke redaktuar coc-config:
:CocConfig Në konfigurim nevojitet të shtohet kubernetes për të gjitha skedat yaml. Unë përveç kësaj përdor serverin gjuhësor për golang, kështu që konfigurimi im përmbledh kështu:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "/*.yaml"
}
} kubernetes — një fushë e rezervuar, e cila i tregon serverit gjuhësor se duhet të ngarkojë skemën Kubernetes nga URL-ja e përcaktuar në . yaml.schemas mund të zgjerohet me mbështetje për skema të tjera — shihni më shumë në .
Tani mund të krijoni një skedë YAML dhe të filloni të përdorni automatikun e plotësimit. Shtypja +hapësirë (ose një kombinim tjetër, i konfiguruar në vim) duhet të tregojë fushat e disponueshme dhe dokumentacionin sipas kontekstit aktual:

Këtu funksionon +hapësira, sepse unë e kam konfiguruar inoremap coc#refresh(). Nëse nuk e keni bërë këtë — shihni për një shembull të konfigurimit.
Zgjedhja e versionit të API-së së Kubernetes
Në momentin kur u shkrua ky artikull, yaml-language-server ofronte skemat Kubernetes 1.14.0. Nuk gjeta ndonjë mënyrë për të zgjedhur dinamikisht skemën, ndaj hoxha . Me fat, pasi serveri i gjuhës është shkruar në typescript, është mjaft e lehtë ta ndryshosh versionin manualisht. Për këtë, mjafton të gjejmë skedarin server.ts.
. Për ta gjetur në makinë tuaj, thjesht hapni skedarin YAML me vim dhe gjeni procesin me 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-serverPër ne, procesi 2380 është i rëndësishëm: pikërisht ai përdoret nga vim gjatë redaktimit të skedarit YAML.
Siç shihet lehtë, skedari ndodhet në /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Mjafton ta redaktoni atë, duke ndryshuar vlerën KUBERNETES_SCHEMA_URL, për shembull, në versionin 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"; Varësisht nga versioni i përdorur coc-yaml vendndodhja e variablit në kod mund të jetë e ndryshme. Vëreni gjithashtu se kam ndryshuar repositorin nga garethr në instrumenta. Duket se garethr ka kaluar në mbështetje të skemave pikërisht atje.
Për të verifikuar që ndryshimi ka hyrë në fuqi, shikoni nëse shfaqet fusha që më parë [në versionet e kaluara të Kubernetes] nuk ishte. Për shembull, në skemën për K8s 1.14 nuk kishte :

Curriculum Vitae
Shpresoj që kjo mundësi t'ju ketë kënaqur po aq sa mua. Gëzuar YAML’ing! Mos harroni të shqyrtoni këto depo për të kuptuar më mirë mjetet e përmendura në artikull:
- coc-vim: ;
- coc-yaml: .
P.S. nga përkthyesi
Dhe ka edhe , dhe .
Lexoni gjithashtu në blogun tonë:
- «»;
- «».
Burimi: habr.com
