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 diferenciaargs
ycommand
? ¡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.vim
esté configurado, instale la extensión coc-yaml
del servidor desde vim::CocInstall coc-yaml
Finalmente, lo más probable es que desee comenzar con la configuración coc-vim
presentada 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 coc
usar 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 kubernetes
todos 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.schemas
se 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:
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-yaml
ubicación de la variable en el código puede ser diferente. También tenga en cuenta que cambié el repositorio de garethr
a instrumenta
. Parece que garethr
cambió 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: