Vim con soporte YAML para Kubernetes

Nota perev. : El artículo original fue escrito por Josh Rosso, un arquitecto de VMware que trabajó anteriormente para compañías como CoreOS y Heptio, así como coautor de Kubernetes alb-ingress-controller. El autor comparte una pequeña receta, que puede ser muy útil para los ingenieros de mantenimiento de la "vieja escuela" que prefieren vim incluso en la era de la victoriosa nube nativa.



¿Escribir manifiestos de YAML para Kubernetes en vim? ¿Ha pasado innumerables horas tratando de averiguar dónde debería estar el siguiente campo en esta especificación? ¿O tal vez estarás contento con un recordatorio rápido de la diferenciaargsycommand? ¡Hay buenas noticias! Vim es fácil de vincular a yaml-language-serverpara obtener finalización automática, validación y otras comodidades. En este artículo, hablaremos sobre cómo configurar el cliente del servidor de idiomas para esto.

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

Servidor de idiomas


Los servidores de idiomas ( servidores de idiomas) hablan sobre las posibilidades de los lenguajes de programación para editores e IDE, para lo cual interactúan entre sí mediante un protocolo especial: el Protocolo de servidor de idiomas (LSP). Este es un gran enfoque: permite una sola implementación para proporcionar múltiples editores / IDE con datos a la vez. Ya escribí sobre gopls , el servidor de idiomas para Golang, y cómo se puede usar en vim . Los pasos para obtener la finalización automática en YAML para Kubernetes son similares.



Para que vim funcione de la manera descrita, debe instalar el cliente del servidor de idiomas. Dos métodos que conozco son LanguageClient-neovim y coc.vim. En el artículo que consideraré coc.vim, este es el complemento más popular en este momento. Puede instalarlo 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 iniciar coc(y, por lo tanto, el servidor de idiomas yaml), necesita instalar node.js instalado:

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

Cuando coc.vimesté configurado, instale la extensión coc-yamldel servidor desde vim:

:CocInstall coc-yaml



Finalmente, lo más probable es que desee comenzar con la configuración coc-vimpresentada como ejemplo . En particular, activa la combinación <Ctrl> + espacio para llamar a la finalización automática.

Configurar el descubrimiento de yaml-language-server


Para cocusar yaml-language-server, debe pedirle que descargue el esquema de Kubernetes al editar archivos YAML. Esto se hace editando coc-config:

:CocConfig

En la configuración, debe agregar kubernetestodos los archivos yaml. También uso el servidor de idiomas para golang, por lo que 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 informa al servidor de idiomas sobre la necesidad de descargar el esquema de Kubernetes utilizando la URL definida en esta constante . yaml.schemasse puede ampliar al admitir esquemas adicionales; para obtener más detalles, consulte la documentación relevante .

Ahora puede crear un archivo YAML y comenzar a usar el autocompletado. Al presionar <Ctrl> + espacio (u otra combinación configurada en vim) debería mostrar los campos y la documentación disponibles de acuerdo con el contexto actual:


<Ctrl> + espacio funciona aquí, porque lo configuré inoremap <silent><expr> <c-space> coc#refresh(). Si no lo ha hecho, consulte coc.nvim README para obtener una configuración de ejemplo.

Selección de versión de API de Kubernetes


Al momento de escribir esto, yaml-language-server se entrega con esquemas Kubernetes 1.14.0. No encontré una manera de seleccionar dinámicamente un esquema, así que abrí el problema de GitHub correspondiente . Afortunadamente, dado que el servidor de idiomas está escrito en mecanografiado, es muy fácil cambiar manualmente la versión. Para hacer esto, solo encuentra el archivo server.ts.

Para encontrarlo 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 2380 es relevante para nosotros: es vim el que lo utiliza al editar un archivo YAML.

Como puede ver, el archivo se encuentra en /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Es suficiente editarlo, cambiando el valor KUBERNETES_SCHEMA_URL, por ejemplo, a 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, la coc-yamlubicación de la variable en el código puede ser diferente. También tenga en cuenta que cambié el repositorio de garethra instrumenta. Parece que garethrcambió a circuitos de soporte allí.

Para verificar que el cambio haya tenido efecto, observe si aparece un campo que no estaba allí antes [en versiones anteriores de Kubernetes]. Por ejemplo, no había startupProbe en el circuito para K8s 1.14 :



Resumen


Espero que esta oportunidad te haya complacido no menos que a mí. Feliz YAML'ing! Asegúrese de revisar estos repositorios para comprender mejor las utilidades mencionadas en el artículo:


PD del traductor


Y hay vikube , vim-kubernetes y vimkubectl .

Lea también en nuestro blog:


All Articles