Vim con soporte YAML para Kubernetes

Nota. traducir: El artículo original fue escrito por Josh Rosso, arquitecto de VMware que anteriormente trabajó en empresas como CoreOS y Heptio, y también es coautor del alb-ingress-controller de Kubernetes. El autor comparte una pequeña receta que puede resultar muy útil para los ingenieros de operaciones de la “vieja escuela” que prefieren vim incluso en la era del victorioso nativo de la nube.

Vim con soporte YAML para Kubernetes

¿Escribir manifiestos YAML para Kubernetes en vim? ¿Pasó innumerables horas tratando de descubrir dónde debería estar el siguiente campo en esta especificación? O tal vez aprecies un rápido recordatorio de la diferencia. args и command? ¡Hay buenas noticias! Vim es fácil de vincular servidor-idioma-yamlpara obtener finalización automática, validación y otras comodidades. En este artículo hablaremos sobre cómo configurar un cliente de servidor de idiomas para esto.

(El artículo original también hay un video, donde el autor habla y demuestra el contenido del material.)

Servidor de idiomas

Servidores de idiomas (servidores de idiomas) hablar sobre las capacidades de los lenguajes de programación para editores e IDE, para los cuales interactúan entre sí mediante un protocolo especial. Protocolo de servidor de idioma (LSP). Este es un gran enfoque porque permite que una implementación proporcione datos a muchos editores/IDE a la vez. Ya tengo писал sobre gopls - un servidor de idiomas para Golang - y cómo se puede utilizar en empuje. Los pasos para completar automáticamente en YAML para Kubernetes son similares.

Vim con soporte YAML para Kubernetes

Para que vim funcione de la forma descrita, deberá instalar un cliente de servidor de idiomas. Los dos métodos que conozco son LanguageClient-neovim и coc.vim. En el artículo consideraré. coc.vim - Este es el complemento más popular en este momento. Puedes instalarlo a través de enchufe 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'}

Para empezar coc (y por lo tanto el servidor de lenguaje yaml) requerirá que node.js esté instalado:

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

¿Cuándo coc.vim configurado, instale la extensión del servidor coc-yaml de vim:

:CocInstall coc-yaml

Vim con soporte YAML para Kubernetes

Finalmente, lo más probable es que quieras comenzar con la configuración. coc-vim, presentado como ejemplo. En particular, activa la combinación +espacio para llamar al autocompletado.

Configurar la detección del servidor en idioma yaml

Que coc podría usar yaml-language-server, se le debe solicitar que cargue el esquema desde Kubernetes al editar archivos YAML. Esto se hace editando coc-config:

:CocConfig

En la configuración deberás agregar kubernetes para todos los archivos yaml. Además utilizo un servidor de idiomas para golangentonces mi configuración general se ve así:

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

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

kubernetes — un campo reservado que le indica al servidor de idioma que descargue el esquema de Kubernetes desde la URL definida en esta constante. yaml.schemas se puede ampliar para admitir esquemas adicionales; para obtener más detalles, consulte documentación relevante.

Ahora puede crear un archivo YAML y comenzar a usar la función de autocompletar. Prensado +espacio (u otra combinación configurada en vim) debería mostrar los campos y la documentación disponibles según el contexto actual:

Vim con soporte YAML para Kubernetes
Trabaja aquí +espacio porque configuré inoremap <silent><expr> <c-space> coc#refresh(). Si no has hecho esto, mira coc.nvim LÉAME para ver una configuración de ejemplo.

Seleccionar la versión de la API de Kubernetes

Al momento de escribir este artículo, yaml-language-server se entrega con esquemas Kubernetes 1.14.0. No encontré una manera de seleccionar dinámicamente un esquema, así que abrí problema de GitHub correspondiente. Afortunadamente, dado que el servidor de idiomas está escrito a máquina, es bastante fácil cambiar la versión manualmente. Para hacer esto, simplemente busque el archivo. server.ts.

Para detectarlo en su máquina, simplemente abra el archivo YAML con vim y busque el 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

El proceso relevante para nosotros es el proceso 2380: es lo que usa vim al editar un archivo YAML.

Como puede ver fácilmente, el archivo se encuentra en /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Simplemente edítelo cambiando el valor. KUBERNETES_SCHEMA_URL, por ejemplo, para la 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";

Dependiendo de la versión utilizada coc-yaml La ubicación de la variable en el código puede variar. Tenga en cuenta también que cambié el repositorio de garethr en instrumenta. Parece que garethr cambió a circuitos de soporte allí.

Para comprobar que el cambio ha surtido efecto, vea si aparece un campo que no estaba antes [en versiones anteriores de Kubernetes]. Por ejemplo, en el diagrama de K8s 1.14 no había sonda de inicio:

Vim con soporte YAML para Kubernetes

Resumen

Espero que esta oportunidad te guste tanto como a mí. ¡Feliz YAMLing! Asegúrese de consultar estos repositorios para comprender mejor las utilidades mencionadas en el artículo:

PD del traductor

Y luego está vikube, vim-kubernetes и vimkubectl.

Lea también en nuestro blog:

Fuente: habr.com

Añadir un comentario