Vim met YAML-ondersteuning voor Kubernetes

Opmerking vertaler.: het originele artikel is geschreven door Josh Rosso - een architect bij VMware, die eerder heeft gewerkt bij bedrijven als CoreOS en Heptio, en mede-auteur is van de Kubernetes alb-ingress-controller. De auteur deelt een kort recept dat erg nuttig kan zijn voor 'old-school' systeembeheerders die zelfs in het tijdperk van cloud native voorkeur geven aan vim.

Vim met YAML-ondersteuning voor Kubernetes

Schrijf je YAML-manifesten voor Kubernetes in vim? Heb je talloze uren besteed om te begrijpen waar dit veld in de specificatie moet komen? Of misschien ben je blij met een snelle herinnering over het verschil args en command? Есть хорошие новости! Vim легко привязать к yaml-language-server, om automatische aanvulling, validatie en andere gemakken te krijgen. In dit artikel bespreken we hoe je de taalserver-client hiervoor kunt instellen.

(In het originele artikel is er ook een video, waarin de auteur de inhoud van het materiaal uitlegt en demonstreert.)

Taalserver

Taalservers (language servers) vertellen over de mogelijkheden van programmeertalen aan editors en IDE’s, waarvoor zij met elkaar communiceren via een speciaal protocol - Language Server Protocol (LSP). Dit is een geweldige aanpak: het stelt één implementatie in staat om gegevens aan meerdere editors/IDE’s te bieden. Ik heb al dat iedereen ver achterloopt op Saudi Aramco. Dus de waardering van het Arabische oliebedrijf voor de beursgang over gopls — de taalserver voor Golang — en hoe deze kan worden gebruikt in vim. De stappen om automatische aanvulling te krijgen in YAML voor Kubernetes zijn vergelijkbaar.

Vim met YAML-ondersteuning voor Kubernetes

Om vim op de beschreven manier te laten werken, moet je een taalserver-client installeren. Twee bekende opties zijn LanguageClient-neovim en coc.vim. In dit artikel bespreek ik coc.vim — dit is momenteel de populairste plug-in. Je kunt het installeren via vim-plug:

" Gebruik de release tak (aanbevolen)
Plug 'neoclide/coc.nvim', {'branch': 'release'}

" Of bouw het vanaf de source-code met yarn: https://yarnpkg.com
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}

Om te starten coc (en, dus, de server yaml-language-server) heeft een geïnstalleerde node.js nodig:

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

Wanneer coc.vim Zodra dit is ingesteld, installeer je de serverextensie coc-yaml uit vim:

:CocInstall coc-yaml

Vim met YAML-ondersteuning voor Kubernetes

Ten slotte wil je waarschijnlijk beginnen met de configuratie coc-vim, gepresenteerd als voorbeeld. In het bijzonder activeert het de combinatie +spatie om de automatische aanvulling aan te roepen.

Instelling van detectie van yaml-language-server

Om coc kan gebruik maken van yaml-language-server; je moet het vragen om het schema van Kubernetes te laden bij het bewerken van YAML-bestanden. Dit doe je door coc-config:

:CocConfig

Toe te voegen aan de configuratie kubernetes voor alle bestanden yaml. Ik gebruik daarnaast een taalsserver voor golang, dus mijn volledige configuratie ziet er als volgt uit:

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

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

kubernetes — een gereserveerd veld dat het taalsserver meldt dat het de Kubernetes-schema moet laden via de URL die is gedefinieerd in deze constante. yaml.schemas kan worden uitgebreid met ondersteuning voor extra schema's — zie meer in de bijbehorende documentatie.

Nu kun je een YAML-bestand maken en beginnen met autocompleteren. Het indrukken van +spatie of een andere combinatie ingesteld in vim zou de beschikbare velden en documentatie moeten tonen in overeenstemming met de huidige context:

Vim met YAML-ondersteuning voor Kubernetes
Hier werkt +spatie, omdat ik heb ingesteld inoremap coc#refresh(). Als je dit niet hebt gedaan — zie coc.nvim README voor een voorbeeld van configuratie.

Keuze versie van Kubernetes API

Op het moment van schrijven wordt yaml-language-server geleverd met Kubernetes-schemas 1.14.0. Ik heb geen manier gevonden om dynamisch een schema te kiezen, dus ik opende de betreffende GitHub-issue. Gelukkig, omdat de taalsserver is geschreven in typescript, is het vrij eenvoudig om de versie handmatig te wijzigen. Het enige wat je hoeft te doen is het bestand te vinden server.ts.

Om het op jouw machine te vinden, open je gewoon een YAML-bestand met vim en zoek je naar het proces met 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

Voor ons is proces 2380 relevant: dat is degene die vim gebruikt tijdens het bewerken van het YAML-bestand.

Zoals je kunt zien, bevindt het bestand zich in /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Het is voldoende om het te bewerken en de waarde te wijzigen KUBERNETES_SCHEMA_URL, bijvoorbeeld, naar versie 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";

Afhankelijk van de versie van de gebruikte coc-yaml de locatie van de variabele in de code kan variëren. Houd er ook rekening mee dat ik de repository heb gewijzigd van garethr en een werkende opdracht krijgen. instrumenta. Het lijkt erop dat garethr is overgestapt op ondersteuning voor schema's daar.

Om te controleren of de wijziging effect heeft gehad, kijk of het veld verschijnt dat eerder [in eerdere versies van Kubernetes] niet aanwezig was. Bijvoorbeeld, in het schema voor K8s 1.14 was het niet aanwezig. startupProbe:

Vim met YAML-ondersteuning voor Kubernetes

Samenvatting

Ik hoop dat deze mogelijkheid je net zo blij maakt als mij. Fijne YAML-ervaring! Vergeet niet om deze repositories te bekijken om meer te leren over de tools die in het artikel worden genoemd:

P.S. van de vertaler

En er is ook vikube, vim-kubernetes en vimkubectl.

Lees ook op onze blog:

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster