Nota traducătorului.: articolul original a fost scris de Josh Rosso — arhitect de la VMware, care a lucrat anterior la companii precum CoreOS și Heptio, fiind de asemenea coautor al Kubernetes alb-ingress-controller. Autorul împărtășește o rețetă simplă care ar putea fi de mare ajutor pentru inginerii de sistem „vechi”, care preferă vim chiar și în epoca cloud native.

Scrieți manifesturi YAML pentru Kubernetes în vim? Ați petrecut nenumărate ore încercând să înțelegeți unde ar trebui să fie următorul câmp în această specificație? Poate că ați fi bucuroși de o reamintire rapidă a diferenței args și command? Есть хорошие новости! Vim легко привязать к , pentru a obține completare automată, validare și alte facilități. În acest articol, vom discuta despre cum să configurați clientul serverului de limbaj pentru aceasta.
(Articolul original are de asemenea , unde autorul vorbește și demonstrează conținutul materialului.)
Serverul de limbaj
Serverele de limbaj (language servers) informează editorii și IDE-urile despre capabilitățile limbajelor de programare, interacționând între ele printr-un protocol special — (LSP). Aceasta este o abordare excelentă: permite unei implementări să furnizeze date simultan pentru mai multe editoare/IDE-uri. Eu deja despre — serverul de limbaj pentru Golang — și cum poate fi utilizat în . Acțiunile pentru a obține completarea automată în YAML pentru Kubernetes sunt similare.

Pentru ca vim să funcționeze așa cum este descris, va trebui să instalați clientul serverului de limbaj. Două metode cunoscute pentru mine sunt și . În acest articol voi discuta coc.vim — acesta este cel mai popular plugin în prezent. Poate fi instalat prin :
" Folosiți ramura de lansare (Recomandat)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Sau construiți din codul sursă folosind yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Pentru a rula coc (și, astfel, serverul yaml-language-server) va necesita instalarea node.js:
curl -sL install-node.now.sh/lts | bash Când coc.vim după ce este configurat, instalați extensia de server coc-yaml din vim:
:CocInstall coc-yaml 
În cele din urmă, probabil că veți dori să începeți cu configurația coc-vim, prezentată . În special, activează combinația +spațiu pentru a invoca completarea automată.
Configurarea detectării yaml-language-server
Pentru a coc a putut folosi yaml-language-server, trebuie să îi cerem să încarce schema de la Kubernetes în timpul editării fișierelor YAML. Acest lucru se face prin editarea coc-config:
:CocConfig În configurație va trebui să adăugați kubernetes pentru toate fișierele yaml. De asemenea, folosesc serverul de limbaj pentru golang, astfel încât configurația mea generală arată astfel:
{
"languageserver": {
"golang": {
"command": "gopls",
"rootPatterns": ["go.mod"],
"filetypes": ["go"]
}
},
"yaml.schemas": {
"kubernetes": "
/*.yaml"
}
} kubernetes — câmp rezervat, care informa serverul de limbaj despre necesitatea de a încărca schema Kubernetes de la URL-ul definit în . yaml.schemas poate fi extins cu suport pentru scheme suplimentare — mai multe detalii în .
Acum poți crea un fișier YAML și începe să folosești completarea automată. Apăsarea +spațiu (sau altă combinație, configurată în vim) ar trebui să afișeze câmpurile disponibile și documentația în funcție de contextul curent:

Aici funcționează +spațiu, deoarece am configurat inoremap coc#refresh(). Dacă nu ai făcut asta — vezi pentru un exemplu de configurare.
Alegerea versiunii API Kubernetes
La momentul scrierii acestui articol, yaml-language-server vine cu scheme Kubernetes 1.14.0. Nu am găsit o modalitate de a alege schema dinamic, așa că am deschis Din fericire, deoarece serverul de limbaj este scris în typescript, este destul de ușor să schimbi manual versiunea. Este suficient să găsești fișierul server.ts.
Pentru a-l găsi pe mașina ta, deschide pur și simplu fișierul YAML cu vim și caută procesul cu 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-serverPentru noi, procesul relevant este 2380: acesta este folosit de vim în timpul editării fișierului YAML.
Așa cum se poate observa cu ușurință, fișierul se află în /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Este suficient să-l editezi, schimbând valoarea KUBERNETES_SCHEMA_URL, de exemplu, la versiunea 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"; În funcție de versiunea folosită, coc-yaml locația variabilei în cod poate fi diferită. Observă de asemenea că am schimbat repository-ul de la garethr pe instrumenta.Se pare că garethr a trecut la suportul pentru scheme tocmai acolo.
Pentru a verifica dacă modificarea a avut efect, vezi dacă apare câmpul care anterior [în versiunile anterioare Kubernetes] nu exista. De exemplu, în schema pentru K8s 1.14 nu a existat :

Rezumat
Sper că această oportunitate v-a bucurat la fel de mult cum m-a bucurat pe mine. Să aveți o experiență plăcută cu YAML! Nu uitați să consultați aceste depozite pentru a înțelege mai bine utilitarele menționate în articol:
- coc-vim: ;
- coc-yaml: .
P.S. de la traducător
Și mai există , și .
Citiți și în blogul nostru:
- «»;
- «».
Sursa: habr.com
