Vim con supporto YAML per Kubernetes

Nota. trad.: L'articolo originale è stato scritto da Josh Rosso, un architetto di VMware che ha precedentemente lavorato presso aziende come CoreOS e Heptio, ed è anche il coautore del controller alb-ingress Kubernetes. L'autore condivide una piccola ricetta che può essere molto utile per gli ingegneri operativi della “vecchia scuola” che preferiscono vim anche nell'era del vittorioso cloud native.

Vim con supporto YAML per Kubernetes

Scrivere manifest YAML per Kubernetes in vim? Hai passato innumerevoli ore cercando di capire dove dovrebbe essere il campo successivo in questa specifica? O forse apprezzerai un rapido promemoria della differenza args и command? Ci sono buone notizie! Vim è facile da collegare server-linguaggio-yamlper ottenere il completamento automatico, la convalida e altre comodità. In questo articolo parleremo di come configurare un client del server linguistico per questo.

(Anche l'articolo originale c'è un video, dove l'autore parla e dimostra il contenuto del materiale.)

Server linguistico

Server linguistici (server linguistici) parlare delle capacità dei linguaggi di programmazione agli editor e agli IDE, per i quali interagiscono tra loro utilizzando un protocollo speciale - Protocollo del server della lingua (LSP). Questo è un ottimo approccio perché consente a un'implementazione di fornire dati a molti editor/IDE contemporaneamente. ho già ho scritto circa gopls - un server linguistico per Golang - e come può essere utilizzato vim. I passaggi per ottenere il completamento automatico in YAML per Kubernetes sono simili.

Vim con supporto YAML per Kubernetes

Affinché Vim funzioni nel modo descritto, sarà necessario installare un client del server linguistico. I due metodi che conosco sono LanguageClient-neovim и coc.vim. Nell'articolo prenderò in considerazione coc.vim - Questo è il plugin più popolare al momento. Puoi installarlo tramite plug 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'}

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

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

Quando coc.vim configurato, installare l'estensione del server coc-yaml da vim:

:CocInstall coc-yaml

Vim con supporto YAML per Kubernetes

Infine, molto probabilmente vorrai iniziare con la configurazione coc-vim, presentata come esempio. In particolare attiva la combinazione +spazio per chiamare il completamento automatico.

Configurazione del rilevamento del server in linguaggio yaml

Che coc potrebbe utilizzare yaml-lingual-server, è necessario che gli venga chiesto di caricare lo schema da Kubernetes durante la modifica dei file YAML. Questo viene fatto modificando coc-config:

:CocConfig

Nella configurazione dovrai aggiungere kubernetes per tutti i file yaml. Utilizzo inoltre un server linguistico per golangquindi la mia configurazione generale è simile a questa:

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

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

kubernetes — un campo riservato che indica al server della lingua di scaricare lo schema Kubernetes dall'URL definito in questa costante. yaml.schemas può essere espanso per supportare schemi aggiuntivi - per maggiori dettagli, vedere documentazione pertinente.

Ora puoi creare un file YAML e iniziare a utilizzare il completamento automatico. Premendo +spazio (o altra combinazione configurata in vim) dovrebbe mostrare i campi disponibili e la documentazione in base al contesto corrente:

Vim con supporto YAML per Kubernetes
Funziona qui +spazio perché ho configurato inoremap <silent><expr> <c-space> coc#refresh(). Se non l'hai fatto, vedi coc.nvim README per una configurazione di esempio.

Selezione della versione dell'API Kubernetes

Al momento della stesura di questo documento, yaml-lingual-server viene fornito con gli schemi Kubernetes 1.14.0. Non ho trovato un modo per selezionare dinamicamente uno schema, quindi ho aperto problema GitHub corrispondente. Fortunatamente, poiché il server della lingua è scritto in dattiloscritto, è abbastanza semplice modificare manualmente la versione. Per fare ciò, basta trovare il file server.ts.

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

Il processo rilevante per noi è il processo 2380: è quello che vim usa quando modifica un 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, per la 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. Tieni inoltre presente che ho cambiato il repository da garethr su instrumenta. Sembra che garethr passato ai circuiti di supporto lì.

Per verificare che la modifica abbia avuto effetto, controlla se appare un campo che prima non c'era [nelle versioni precedenti di Kubernetes]. Ad esempio, nel diagramma per K8s 1.14 non c'era startupProbe:

Vim con supporto YAML per Kubernetes

Riassunto

Spero che questa opportunità piaccia a voi tanto quanto a me. Buon YAMLing! Assicurati di controllare questi repository per comprendere meglio le utilità menzionate nell'articolo:

PS da traduttore

E c'è vikube, vim-kubernetes и vimkubectl.

Leggi anche sul nostro blog:

Fonte: habr.com

Aggiungi un commento