Vim com suporte a YAML para Kubernetes

Nota do tradutor.: O artigo original foi escrito por Josh Rosso - arquiteto da VMware, que trabalhou anteriormente em empresas como CoreOS e Heptio, e é coautor do Kubernetes alb-ingress-controller. O autor compartilha uma pequena receita que pode ser muito útil para engenheiros de operações da "velha guarda", que preferem vim mesmo na era do cloud native.

Vim com suporte a YAML para Kubernetes

Você escreve manifestos YAML para Kubernetes no vim? Passou incontáveis horas tentando entender onde nesta especificação deve estar outro campo? Ou talvez você ficará feliz com um lembrete rápido sobre a diferença args e command? Есть хорошие новости! Vim легко привязать к yaml-language-server, para obter autocompletação, validação e outras conveniências. Neste artigo, vamos falar sobre como configurar o cliente do servidor de linguagem para isso.

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

Servidor de linguagem

Servidores de linguagem (language servers) informam os editores e IDEs sobre as capacidades das linguagens de programação, interagindo entre si por meio de um protocolo especial - Language Server Protocol (LSP). Esta é uma abordagem incrível: pois permite que uma única implementação forneça dados para muitos editores/IDEs ao mesmo tempo. Eu já escrevi sobre gopls — servidor de linguagem para Golang — e como ele pode ser utilizado em vim. As ações para obter autocompletação em YAML para Kubernetes são semelhantes.

Vim com suporte a YAML para Kubernetes

Para que o vim funcione da maneira descrita, será necessário instalar o cliente do servidor de linguagem. Dois que conheço são LanguageClient-neovim e coc.vim. Neste artigo, vou discutir coc.vim — este é o plugin mais popular até o momento. Você pode instalá-lo através de vim-plug:

" Use a branch de release (Recomendado)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Ou construa a partir do código-fonte usando yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Para executar coc (e, assim, o servidor yaml-language-server) será necessário ter o node.js instalado:

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

Quando coc.vim Após isso, instale a extensão do servidor coc-yaml do vim:

:CocInstall coc-yaml

Vim com suporte a YAML para Kubernetes

Por fim, você provavelmente desejará começar com a configuração coc-vim, apresentada como exemplo. Em particular, ela ativa a combinação +espaço para chamar o autocompletar.

A configuração para detectar o yaml-language-server

Para coc pode usar yaml-language-server, e você precisa pedir para carregar o esquema do Kubernetes ao editar arquivos YAML. Isso é feito editando o coc-config:

:CocConfig

Na configuração, será necessário adicionar kubernetes para todos os arquivos yaml. Eu uso adicionalmente um servidor de linguagem para golang, portanto, minha configuração geral é assim:

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

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

kubernetes — um campo reservado, informando ao servidor de linguagem sobre a necessidade de carregar o esquema do Kubernetes pelo URL especificado em esta constante. yaml.schemas pode ser expandido para suportar esquemas adicionais — veja mais na documentação correspondente.

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

Vim com suporte a YAML para Kubernetes
Aqui funciona +espaço, pois configurei inoremap coc#refresh(). Se você não fez isso — veja coc.nvim README para um exemplo de configuração.

Escolhendo a versão do Kubernetes API

No momento em que escrevi este artigo, o yaml-language-server vem com esquemas do Kubernetes 1.14.0. Não encontrei uma maneira de escolher dinamicamente o esquema, então abri uma issue correspondente no GitHub. Felizmente, como o servidor de linguagem é escrito em typescript, é bastante fácil mudar a versão manualmente. Para isso, basta encontrar o arquivo server.ts.

Para localizá-lo na sua máquina, basta abrir um arquivo YAML no vim e procurar pelo 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

Para nós, o processo 2380 é relevante: é ele que o vim usa durante a edição do arquivo YAML.

Como pode ser facilmente visto, 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, mudando 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 utilizada, coc-yaml a localização da variável no código pode variar. Observe também que mudei o repositório de garethr para instrumenta. Parece que garethr passou a dar suporte aos esquemas exatamente lá.

Para verificar se a alteração teve efeito, veja se aparece o campo que antes [nas versões passadas do Kubernetes] não existia. Por exemplo, no esquema para K8s 1.14 não havia startupProbe:

Vim com suporte a YAML para Kubernetes

Resumo

Espero que essa oportunidade tenha lhe agradado tanto quanto a mim. Feliz YAML'ando! Não se esqueça de conferir esses repositórios para entender melhor as ferramentas mencionadas no artigo:

P.S. do tradutor

E também existe vikube, vim-kubernetes e vimkubectl.

Confira também em nosso blog:

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster