Vim cu suport YAML pentru Kubernetes

Notă. transl.: Articolul original a fost scris de Josh Rosso, un arhitect la VMware care a lucrat anterior la companii precum CoreOS și Heptio și este, de asemenea, co-autor al Kubernetes alb-ingress-controller. Autorul împărtășește o mică rețetă care poate fi foarte utilă pentru inginerii operaționali „vechi” care preferă vim chiar și în era nativului cloud victorios.

Vim cu suport YAML pentru Kubernetes

Scrieți manifeste YAML pentru Kubernetes în vim? Ați petrecut nenumărate ore încercând să vă dați seama unde ar trebui să fie următorul câmp din această specificație? Sau poate veți aprecia o reamintire rapidă a diferenței args и command? Sunt vești bune! Vim este ușor de conectat Yaml-language-serverpentru a obține completarea automată, validarea și alte facilități. În acest articol vom vorbi despre cum să configurați un client de server de limbă pentru aceasta.

(De asemenea, articolul original există vreun videoclip, unde autorul vorbește și demonstrează conținutul materialului.)

Server de limbă

Servere de limbă (servere de limbă) vorbiți despre capacitățile limbajelor de programare editorilor și IDE-urilor, pentru care interacționează între ele folosind un protocol special - Protocol de server de limbă (LSP). Aceasta este o abordare excelentă, deoarece permite unei implementări să furnizeze date mai multor editori/IDE-uri simultan. Am deja am scris despre gopls - un server de limbă pentru Golang - și cum poate fi utilizat în sevă. Pașii pentru a obține completarea automată în YAML pentru Kubernetes sunt similari.

Vim cu suport YAML pentru Kubernetes

Pentru ca vim să funcționeze în modul descris, va trebui să instalați un client server de limbă. Cele două metode pe care le cunosc sunt LanguageClient-neovim и coc.vim. În articol voi lua în considerare coc.vim - Acesta este cel mai popular plugin în acest moment. Îl puteți instala prin intermediul 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'}

Pentru început coc (și, prin urmare, Yaml-language-server) va necesita instalarea node.js:

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

Când coc.vim configurat, instalați extensia de server coc-yaml din vim:

:CocInstall coc-yaml

Vim cu suport YAML pentru Kubernetes

În cele din urmă, cel mai probabil veți dori să începeți cu configurarea coc-vim, prezentat ca exemplu. În special, activează combinația +spațiu pentru a apela completarea automată.

Configurarea detectării serverului de limbă yaml

coc ar putea folosi yaml-language-server, trebuie să i se solicite să încarce schema din Kubernetes atunci când editează fișierele YAML. Acest lucru se face prin editare coc-config:

:CocConfig

În configurație va trebui să adăugați kubernetes pentru toate fișierele yaml. În plus, folosesc un server de limbă pentru golangdeci configurația mea generală arată astfel:

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

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

kubernetes — un câmp rezervat care îi spune serverului de limbă să descarce schema Kubernetes de la adresa URL definită în această constantă. yaml.schemas poate fi extins pentru a sprijini scheme suplimentare - pentru mai multe detalii, vezi documentatia relevanta.

Acum puteți crea un fișier YAML și puteți începe să utilizați completarea automată. Presare +spațiu (sau altă combinație configurată în vim) ar trebui să arate câmpurile și documentația disponibile în funcție de contextul actual:

Vim cu suport YAML pentru Kubernetes
Lucrează aici +spațiu pentru că am configurat inoremap <silent><expr> <c-space> coc#refresh(). Dacă nu ai făcut asta, vezi coc.nvim README pentru un exemplu de configurare.

Selectarea versiunii API Kubernetes

În momentul scrierii acestui articol, yaml-language-server este livrat cu scheme Kubernetes 1.14.0. Nu am găsit o modalitate de a selecta dinamic o schemă, așa că am deschis problema GitHub corespunzătoare. Din fericire, deoarece serverul de limbă este scris cu dactilografia, este destul de ușor să schimbați manual versiunea. Pentru a face acest lucru, trebuie doar să găsiți fișierul server.ts.

Pentru a-l detecta pe mașina dvs., deschideți pur și simplu fișierul YAML cu vim și găsiți procesul cu 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

Procesul relevant pentru noi este procesul 2380: este ceea ce vim folosește atunci când editează un fișier YAML.

După cum puteți vedea cu ușurință, fișierul se află în /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Doar editați-l schimbând valoarea KUBERNETES_SCHEMA_URL, de exemplu, pentru versiunea 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";

În funcție de versiunea folosită coc-yaml Locația variabilei în cod poate varia. Vă rugăm să rețineți că am schimbat depozitul din garethr pe instrumenta. Se pare ca garethr a trecut la circuitele suport de acolo.

Pentru a verifica dacă modificarea a intrat în vigoare, vedeți dacă apare un câmp care nu era acolo înainte [în versiunile anterioare de Kubernetes]. De exemplu, în diagrama pentru K8s 1.14 nu exista startupProbe:

Vim cu suport YAML pentru Kubernetes

Rezumat

Sper că această oportunitate să vă mulțumească la fel de mult ca mie. Happy YAMling! Asigurați-vă că verificați aceste depozite pentru a înțelege mai bine utilitățile menționate în articol:

PS de la traducator

Si aici este vikube, vim-kubernetes и vimkubectl.

Citește și pe blogul nostru:

Sursa: www.habr.com

Adauga un comentariu