Vim con compatibilidade con YAML para Kubernetes

Nota. transl.: O artigo orixinal foi escrito por Josh Rosso, un arquitecto de VMware que traballou anteriormente en empresas como CoreOS e Heptio, e tamén é coautor do Kubernetes alb-ingress-controller. O autor comparte unha pequena receita que pode ser moi útil para os enxeñeiros de operacións da "vella escola" que prefiren vim mesmo na era do nativo da nube vitorioso.

Vim con compatibilidade con YAML para Kubernetes

Escribir manifestos YAML para Kubernetes en vim? Pasaches incontables horas intentando descubrir onde debería estar o seguinte campo nesta especificación? Ou quizais apreciarás un recordatorio rápido da diferenza args и command? Hai boas novas! Vim é fácil de conectar servidor de linguaxe yamlpara obter completación automática, validación e outras comodidades. Neste artigo falaremos de como configurar un cliente de servidor de idiomas para iso.

(Tamén o artigo orixinal hai un vídeo, onde o autor fala e demostra o contido do material.)

Servidor de idiomas

Servidores lingüísticos (servidores lingüísticos) falar sobre as capacidades das linguaxes de programación aos editores e IDE, para o que interactúan entre si mediante un protocolo especial - Protocolo de servidor de idiomas (LSP). Este é un excelente enfoque porque permite que unha implementación proporcione datos a moitos editores/IDE á vez. Xa o teño escribiu sobre gopls - un servidor de idiomas para Golang - e como se pode usar vitalidade. Os pasos para obter o autocompletado en YAML para Kubernetes son similares.

Vim con compatibilidade con YAML para Kubernetes

Para que vim funcione do xeito descrito, terá que instalar un cliente de servidor de idiomas. Os dous métodos que coñezo son LanguageClient-neovim и coc.vim. No artigo vou considerar coc.vim - Este é o complemento máis popular neste momento. Podes instalalo a través de vim-plug:

" 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'}

Para comezar coc (e, polo tanto, o servidor de lingua yaml) requirirá instalado node.js:

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

Cando coc.vim configurado, instale a extensión do servidor coc-yaml de vim:

:CocInstall coc-yaml

Vim con compatibilidade con YAML para Kubernetes

Finalmente, o máis probable é que queira comezar coa configuración coc-vim, presentado como exemplo. En particular, activa a combinación +espazo para chamar ao autocompletado.

Configurando a detección do servidor de idiomas yaml

Que coc podería usar yaml-language-server, hai que pedirlle que cargue o esquema de Kubernetes ao editar ficheiros YAML. Isto faise mediante a edición coc-config:

:CocConfig

Na configuración terás que engadir kubernetes para todos os ficheiros yaml. Tamén uso un servidor de idiomas para golangpolo que a miña configuración xeral é así:

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

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

kubernetes — un campo reservado que indica ao servidor de idiomas que descargue o esquema de Kubernetes desde o URL definido en esta constante. yaml.schemas pódese ampliar para admitir esquemas adicionais; para obter máis detalles, consulte documentación pertinente.

Agora podes crear un ficheiro YAML e comezar a usar o autocompletado. Presionando +espazo (ou outra combinación configurada en vim) debería mostrar os campos dispoñibles e a documentación segundo o contexto actual:

Vim con compatibilidade con YAML para Kubernetes
Traballa aquí +espazo porque o configurei inoremap <silent><expr> <c-space> coc#refresh(). Se non fixeches isto, mira coc.nvim README como exemplo de configuración.

Seleccionando a versión da API de Kubernetes

Ata o momento de escribir este documento, yaml-language-server envíase con esquemas Kubernetes 1.14.0. Non atopei unha forma de seleccionar dinámicamente un esquema, así que abrín problema de GitHub correspondente. Afortunadamente, dado que o servidor de idiomas está escrito a máquina, é bastante sinxelo cambiar manualmente a versión. Para facelo, só tes que buscar o ficheiro server.ts.

Para detectalo na súa máquina, simplemente abra o ficheiro YAML con vim e busque o proceso 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

O proceso relevante para nós é o proceso 2380: é o que usa vim ao editar un ficheiro YAML.

Como podes ver facilmente, o ficheiro está situado en /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Simplemente editalo cambiando o valor KUBERNETES_SCHEMA_URL, por exemplo, para a versión 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";

Dependendo da versión utilizada coc-yaml A localización da variable no código pode variar. Teña en conta tamén que cambiei o repositorio de garethr en instrumenta. Parece que garethr cambiou alí a circuítos de apoio.

Para comprobar que o cambio se fixo efectivo, mira se aparece un campo que non estaba alí antes [en versións anteriores de Kubernetes]. Por exemplo, no diagrama para K8s 1.14 non había startupProbe:

Vim con compatibilidade con YAML para Kubernetes

Resumo

Espero que esta oportunidade che guste tanto como a min. Feliz YAMling! Asegúrate de consultar estes repositorios para comprender mellor as utilidades mencionadas no artigo:

PS do tradutor

E tamén hai vikube, vim-kubernetes и vimkubectl.

Lea tamén no noso blog:

Fonte: www.habr.com

Engadir un comentario