Nota de traducción.: el artículo original fue escrito por Josh Rosso, un arquitecto de VMware que anteriormente trabajó en empresas como CoreOS y Heptio, y es coautor de Kubernetes alb-ingress-controller. El autor comparte una pequeña receta que puede resultar muy útil para los ingenieros de operaciones "a la antigua", que prefieren vim incluso en la era del cloud native.

¿Escribes manifiestos YAML para Kubernetes en vim? ¿Has pasado incontables horas tratando de entender dónde en esta especificación debe ir otro campo? Tal vez te alegraría un rápido recordatorio sobre la diferencia args y command? Есть хорошие новости! Vim легко привязать к , para obtener autocompletado, validación y otras comodidades. En el artículo hablaremos sobre cómo configurar el cliente del servidor de lenguaje para esto.
(El artículo original también , donde el autor explica y demuestra el contenido del material.)
Servidor de lenguaje
Servidores de lenguaje (language servers) informan sobre las capacidades de los lenguajes de programación a los editores y IDE, para lo cual interactúan entre sí a través de un protocolo especial — (LSP). Este es un enfoque excelente: permite que una única implementación proporcione datos a múltiples editores/IDE. Ya he hablado de — el servidor de lenguaje para Golang — y cómo se puede utilizar en . Las acciones para obtener autocompletado en YAML para Kubernetes son similares.

Para que vim funcione de la manera descrita, será necesario instalar el cliente del servidor de lenguaje. Dos maneras que conozco son y . En el artículo consideraré coc.vim — este es el complemento más popular en la actualidad. Se puede instalar a través de :
" Use release branch (Recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
" O construye desde el código fuente usando yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'} Para iniciar coc (y, por lo tanto, el servidor yaml-language-server) se requiere tener instalado node.js:
curl -sL install-node.now.sh/lts | bash Cuando coc.vim esté configurado, instala la extensión del servidor coc-yaml desde vim:
:CocInstall coc-yaml 
Finalmente, probablemente querrás comenzar con la configuración coc-vim, presentada . En particular, activa la combinación +espacio para invocar el autocompletado.
La configuración para detectar el yaml-language-server
Para coc puede utilizar el yaml-language-server, necesita solicitarle que cargue el esquema de Kubernetes al editar archivos YAML. Esto se hace editando coc-config:
:CocConfig En la configuración, será necesario añadir kubernetes para todos los archivos yaml. Además, utilizo un servidor de lenguaje 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 le indica al servidor de lenguaje que necesita cargar el esquema de Kubernetes desde la URL especificada en . yaml.schemas se puede ampliar para soportar esquemas adicionales; consulte más en .
Ahora puedes crear un archivo YAML y comenzar a usar la autocompletación. Presionar +espacio (o otra combinación configurada en vim) debería mostrar los campos disponibles y la documentación según el contexto actual:

Aquí funciona +espacio, porque configuré inoremap coc#refresh(). Si no lo hiciste, consulta para un ejemplo de configuración.
Selección de la versión de la API de Kubernetes
Hasta el momento de escribir este artículo, el yaml-language-server viene con esquemas de Kubernetes 1.14.0. No encontré una manera de seleccionar el esquema dinámicamente, así que abrí . Afortunadamente, dado que el servidor de lenguaje está escrito en typescript, es bastante fácil cambiar la versión manualmente. Solo necesitas encontrar el archivo server.ts.
Para localizarlo en tu máquina, simplemente abre un archivo YAML con vim y busca 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-serverEl proceso 2380 es relevante para nosotros: ese es el que utiliza vim mientras edita el archivo YAML.
Como se 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. Solo hay que editarlo, cambiando el valor de 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, coc-yaml la ubicación de la variable en el código puede variar. También ten en cuenta que cambié el repositorio de garethr en instrumenta. Parece que garethr ha pasado a soportar esquemas allí.
Para verificar que el cambio ha surtido efecto, observa si aparece el campo que antes [en versiones anteriores de Kubernetes] no estaba. :

Currículum
Espero que esta oportunidad te entusiasme tanto como a mí. ¡Feliz YAML-ing! No olvides revisar estos repositorios para entender mejor las herramientas mencionadas en el artículo:
- coc-vim: ;
- coc-yaml: .
P.D. del traductor
Y también hay , y .
También puedes leer en nuestro blog:
- «»;
- «».
Fuente: habr.com
