Vim con supporto YAML per Kubernetes

Nota del traduttore.: l'articolo originale è stato scritto da Josh Rosso, un architetto di VMware, precedentemente impiegato in aziende come CoreOS e Heptio, ed è anche coautore di Kubernetes alb-ingress-controller. L'autore condivide una piccola ricetta che potrebbe rivelarsi molto utile per gli ingegneri operativi “old school” che preferiscono vim anche nell'era del cloud native.

Vim con supporto YAML per Kubernetes

Scrivete manifesti YAML per Kubernetes in vim? Avete trascorso innumerevoli ore cercando di capire dove nella specifica deve andare un altro campo? O forse sareste felici di avere un rapido promemoria sulla differenza args e comando? Есть хорошие новости! Vim легко привязать к yaml-language-server, per ottenere completamento automatico, validazione e altre comodità. Nell'articolo parleremo di come configurare il client del server linguistico per questo.

(L'articolo originale ha anche un video, in cui l'autore parla e dimostra il contenuto del materiale.)

Server linguistico

Server linguistici (language servers) forniscono informazioni sulle capacità dei linguaggi di programmazione a editor e IDE, interagendo tra loro tramite un protocollo specifico — Language Server Protocol (LSP). È un approccio fantastico: consente a un'unica implementazione di fornire dati a molti editor/IDE contemporaneamente. Già parlato su gopls — il server linguistico per Golang — e come può essere utilizzato in vim. Le azioni per ottenere il completamento automatico in YAML per Kubernetes sono simili.

Vim con supporto YAML per Kubernetes

Per far funzionare vim in questo modo, è necessario installare un client del server linguistico. Due modi noti per farlo sono LanguageClient-neovim e coc.vim. In questo articolo esaminerò coc.vim — attualmente il plugin più popolare. Puoi installarlo tramite vim-plug:

" Usa il ramo di rilascio (consigliato)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Oppure costruisci da codice sorgente usando yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Per avviare coc (e quindi il server yaml-language-server) è necessario avere installato node.js:

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

Quando coc.vim una volta configurato, installa l'estensione server coc-yaml da vim:

:CocInstall coc-yaml

Vim con supporto YAML per Kubernetes

Infine, è probabile che tu voglia iniziare con la configurazione coc-vim, fornita come esempio. In particolare, attiva la combinazione +spazio per richiamare il completamento automatico.

Configurazione del rilevamento del yaml-language-server

Per creare un file di esportazione del database di gestione sul server di origine: coc puoi utilizzare yaml-language-server, è necessario chiedergli di caricare lo schema da Kubernetes durante la modifica dei file YAML. Questo si fa modificando coc-config:

:CocConfig

nella configurazione sarà necessario aggiungere kubernetes per tutti i file yaml. Uso anche un server linguistico per golang, quindi la mia configurazione generale è simile a questa:

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

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

kubernetes — campo riservato, che comunica al server linguistico la necessità di caricare lo schema Kubernetes dall'URL definito in questa costante. yaml.schemas può essere esteso con il supporto di schemi aggiuntivi — per ulteriori dettagli vedere la documentazione pertinente.

Ora puoi creare un file YAML e iniziare a usare il completamento automatico. Premere +spazio (o un'altra combinazione impostata in vim) dovrebbe mostrare i campi disponibili e la documentazione in base al contesto attuale:

Vim con supporto YAML per Kubernetes
Qui funziona +spazio, perché ho configurato inoremap coc#refresh(). Se non lo hai fatto — vedi coc.nvim README per un esempio di configurazione.

Seleziona la versione dell'API Kubernetes

Al momento della scrittura di questo articolo, il yaml-language-server viene fornito con schemi Kubernetes 1.14.0. Non ho trovato un modo per selezionare dinamicamente uno schema, quindi ho aperto il corrispondente problema su GitHub. Fortunatamente, poiché il server linguistico è scritto in typescript, è abbastanza facile modificare manualmente la versione. È sufficiente trovare il file server.ts.

Per trovarlo sul tuo computer, apri semplicemente il file YAML con vim e cerca il processo con 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

Per noi è rilevante il processo 2380: è quello utilizzato da vim durante la modifica del file YAML.

Come puoi vedere facilmente, il file si trova in /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Basta modificarlo, cambiando il valore KUBERNETES_SCHEMA_URL, ad esempio, alla versione 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";

A seconda della versione utilizzata, coc-yaml la posizione della variabile nel codice può variare. Nota anche che ho cambiato il repository da garethr con instrumenta. Sembra che garethr abbia iniziato a supportare gli schemi proprio lì.

Per verificare che la modifica sia stata applicata, controlla se appare il campo che non esisteva prima [nelle versioni precedenti di Kubernetes]. Ad esempio, nella scheda per K8s 1.14 non c'era. startupProbe:

Vim con supporto YAML per Kubernetes

Riepilogo

Spero che questa possibilità ti abbia reso felice quanto me. Buon YAML’ing! Non dimenticare di dare un'occhiata a questi repository per scoprire meglio gli strumenti menzionati nell'articolo:

P.S. dal traduttore

E c'è anche vikube, vim-kubernetes e vimkubectl.

Leggete anche nel nostro blog:

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster