Vim com suporte YAML para Kubernetes

Observação. trad.: O artigo original foi escrito por Josh Rosso, arquiteto da VMware que já trabalhou em empresas como CoreOS e Heptio, e também é coautor do Kubernetes alb-ingress-controller. O autor compartilha uma pequena receita que pode ser muito útil para engenheiros de operações da “velha escola” que preferem o vim mesmo na era da nuvem nativa vitoriosa.

Vim com suporte YAML para Kubernetes

Escrevendo manifestos YAML para Kubernetes no vim? Passou inúmeras horas tentando descobrir onde o próximo campo deveria estar nesta especificação? Ou talvez você goste de um rápido lembrete da diferença args и command? Há boas notícias! Vim é fácil de vincular servidor de linguagem yamlpara obter preenchimento automático, validação e outras conveniências. Neste artigo falaremos sobre como configurar um cliente servidor de linguagem para isso.

(O artigo original também tem um video, onde o autor fala e demonstra o conteúdo do material.)

Servidor de idioma

Servidores de idiomas (servidores de idiomas) fale sobre os recursos das linguagens de programação para editores e IDEs, para os quais eles interagem entre si usando um protocolo especial - Protocolo de Servidor de Linguagem (LSP). Esta é uma ótima abordagem porque permite que uma implementação forneça dados para vários editores/IDEs de uma só vez. eu já escreveu sobre gopls - um servidor de linguagem para Golang - e como ele pode ser usado em vitalidade. As etapas para obter o preenchimento automático no YAML para Kubernetes são semelhantes.

Vim com suporte YAML para Kubernetes

Para que o vim funcione da maneira descrita, você precisará instalar um cliente de servidor de linguagem. Os dois métodos que conheço são LanguageClient-neovim и coc.vim. No artigo irei considerar coc.vim - Este é o plugin mais popular no momento. Você pode instalá-lo através plug-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 começar coc (e, portanto, o servidor de linguagem yaml) exigirá o node.js instalado:

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

Quando coc.vim configurado, instale a extensão do servidor coc-yaml do vim:

:CocInstall coc-yaml

Vim com suporte YAML para Kubernetes

Finalmente, você provavelmente desejará começar com a configuração coc-vim, apresentado como exemplo. Em particular, ativa a combinação +espaço para chamar o preenchimento automático.

Configurando a detecção do servidor de linguagem yaml

Que coc Se você puder usar o yaml-language-server, será necessário solicitar que ele carregue o esquema do Kubernetes ao editar arquivos YAML. Isso é feito editando coc-config:

:CocConfig

Na configuração você precisará adicionar kubernetes para todos os arquivos yaml. Além disso, uso um servidor de idiomas para golangentão minha configuração geral fica assim:

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

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

kubernetes — um campo reservado que informa ao servidor de linguagem para baixar o esquema Kubernetes da URL definida em esta constante. yaml.schemas pode ser expandido para suportar esquemas adicionais - para mais detalhes, consulte documentação relevante.

Agora você pode criar um arquivo YAML e começar a usar o preenchimento automático. Pressionando +espaço (ou outra combinação configurada no vim) deverá mostrar os campos e documentação disponíveis de acordo com o contexto atual:

Vim com suporte YAML para Kubernetes
Funciona aqui +espaço porque configurei inoremap <silent><expr> <c-space> coc#refresh(). Se você ainda não fez isso, veja LEIA-ME coc.nvim para obter um exemplo de configuração.

Selecionando a versão da API Kubernetes

No momento em que este livro foi escrito, o yaml-language-server era fornecido com esquemas Kubernetes 1.14.0. Não encontrei uma maneira de selecionar um esquema dinamicamente, então abri problema correspondente do GitHub. Felizmente, como o servidor de idioma é escrito em texto datilografado, é muito fácil alterar manualmente a versão. Para fazer isso, basta encontrar o arquivo server.ts.

Para detectá-lo em sua máquina, basta abrir o arquivo YAML com vim e encontrar o processo com 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 processo relevante para nós é o processo 2380: é o que o vim usa ao editar um arquivo YAML.

Como você pode ver facilmente, o arquivo está localizado em /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Basta editá-lo alterando o valor KUBERNETES_SCHEMA_URL, por exemplo, para a versão 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 versão usada coc-yaml A localização da variável no código pode variar. Observe também que mudei o repositório de garethr em instrumenta. Parece que garethr mudou para circuitos de suporte lá.

Para verificar se a alteração entrou em vigor, veja se aparece um campo que não existia antes [nas versões anteriores do Kubernetes]. Por exemplo, no diagrama para K8s 1.14 não havia startupProbe:

Vim com suporte YAML para Kubernetes

Resumo

Espero que esta oportunidade agrade a você tanto quanto a mim. Feliz YAMLing! Não deixe de conferir estes repositórios para entender melhor os utilitários mencionados no artigo:

PS do tradutor

E tem vikube, vim-kubernetes и vimkubectl.

Leia também em nosso blog:

Fonte: habr.com

Adicionar um comentário