Vim con supporto YAML per Kubernetes

Nota di traduzione.: l'articolo originale è stato scritto da Josh Rosso — architetto di VMware, in precedenza impiegato in aziende come CoreOS e Heptio, ed è anche co-autore del controller ingress alb di Kubernetes. L'autore condivide una piccola ricetta che può risultare molto utile per gli ingegneri operativi "old school" che preferiscono vim anche nell'era del cloud native.

Vim con supporto YAML per Kubernetes

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

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

Server linguistico

I server linguistici (language servers) forniscono informazioni sulle capacità dei linguaggi di programmazione agli editor e IDE, per cui interagiscono tra loro tramite un protocollo speciale — Language Server Protocol (LSP). È un approccio fantastico: infatti, consente a una singola implementazione di fornire dati a molti editor/IDE. Io ho già scritto parlato di gopls — server linguistico per Golang — e di come può essere utilizzato in vim. Le operazioni per ottenere completamento automatico in YAML per Kubernetes sono simili.

Vim con supporto YAML per Kubernetes

Affinché vim funzioni come descritto, è necessario installare il client del server linguistico. Due metodi a me noti sono LanguageClient-neovim e coc.vim. In questo articolo esaminerò coc.vim — è il plugin più popolare al momento. È possibile installarlo tramite vim-plug:

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

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

Per avviare coc (e quindi, il server yaml-language-server) richiederà l'installazione di node.js:

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

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

:CocInstall coc-yaml

Vim con supporto YAML per Kubernetes

Infine, probabilmente vorrete iniziare dalla configurazione coc-vim, presentata come esempio. In particolare, attiva la combinazione +spazio per richiamare il completamento automatico.

Configurazione della rilevazione del server linguistico YAML

Per coc Per utilizzare il server yaml-language-server, è necessario chiedergli di caricare lo schema da Kubernetes quando si modificano file YAML. Questo si fa modificando coc-config:

:CocConfig

Nella configurazione sarà necessario aggiungere kubernetes per tutti i file yaml. Utilizzo inoltre un linguaggio server per golang, quindi la mia configurazione generale appare così:

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

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

kubernetes — campo riservato che informa il linguaggio server sulla necessità di caricare lo schema Kubernetes dall'URL specificato in questa costante. yaml.schemas può essere esteso con il supporto per schemi aggiuntivi — per maggiori dettagli, vedere la documentazione pertinente.

Ora puoi creare un file YAML e iniziare a usare il completamento automatico. Premendo +spazio (o un'altra combinazione impostata in vim) dovrebbero apparire 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.

Selezione della 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 lo schema, quindi ho aperto il corrispondente problema su GitHub. Per fortuna, poiché il linguaggio server è scritto in typescript, è abbastanza facile cambiarne manualmente la versione. Basta trovare il file server.ts.

Per trovarlo sulla tua macchina, apri semplicemente un 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 che vim utilizza durante la modifica del file YAML.

Come puoi facilmente vedere, 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 in instrumenta. Sembra che garethr sia passato al supporto degli schemi proprio lì.

Per verificare che la modifica sia stata applicata, controlla se compare un campo che prima [nelle versioni precedenti di Kubernetes] non c'era. Ad esempio, nello schema per K8s 1.14 non c'era startupProbe:

Vim con supporto YAML per Kubernetes

Riepilogo

Spero che questa opportunità ti abbia rallegrato tanto quanto ha fatto con me. Buon YAML’ing! Non dimenticare di dare un'occhiata a questi repository per comprendere meglio gli strumenti menzionati nell'articolo:

P.S. dal traduttore

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

Leggi 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