Kubernetes için YAML destekli Vim

Not. tercüme: Orijinal makale, daha önce CoreOS ve Heptio gibi şirketlerde çalışmış, VMware'de mimar olan ve aynı zamanda Kubernetes alb-ingress-controller'ın ortak yazarı olan Josh Rosso tarafından yazılmıştır. Yazar, muzaffer bulut yerlisi çağında bile vim'i tercih eden "eski tarz" operasyon mühendisleri için çok faydalı olabilecek küçük bir tarif paylaşıyor.

Kubernetes için YAML destekli Vim

Vim'de Kubernetes için YAML bildirimlerini mi yazıyorsunuz? Bu spesifikasyonda bir sonraki alanın nerede olması gerektiğini bulmaya çalışırken sayısız saatler mi harcadınız? Veya belki de aradaki farkın hızlı bir şekilde hatırlatılması hoşunuza gider args и command? İyi haberler var! Vim'e bağlanmak kolaydır yaml-dil-sunucusuotomatik tamamlama, doğrulama ve diğer kolaylıklardan yararlanmak için. Bu yazımızda bunun için dil sunucusu istemcisinin nasıl kurulacağından bahsedeceğiz.

(Ayrıca orijinal makale bir video var, yazarın materyalin içeriğini konuştuğu ve gösterdiği yer.)

Dil sunucusu

Dil sunucuları (dil sunucuları) Özel bir protokol kullanarak birbirleriyle etkileşime girdikleri editörlere ve IDE'lere programlama dillerinin yetenekleri hakkında konuşmak - Dil Sunucusu Protokolü (LSP). Bu harika bir yaklaşım çünkü tek bir uygulamanın birçok editöre/IDE'ye aynı anda veri sağlamasına izin veriyor. zaten var yazdı hakkında tanrılar - Golang için bir dil sunucusu - ve nasıl kullanılabileceği gayret. Kubernetes için YAML'de otomatik tamamlama alma adımları benzerdir.

Kubernetes için YAML destekli Vim

Vim'in anlatılan şekilde çalışması için bir dil sunucusu istemcisi kurmanız gerekecektir. Benim bildiğim iki yöntem Dilİstemci-neovim и coc.vim. Makalede ele alacağım coc.vim - Bu şu anda en popüler eklentidir. Aracılığıyla yükleyebilirsiniz vim fişi:

" 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'}

Başlamak için coc (ve dolayısıyla yaml-language-server) node.js'nin kurulu olmasını gerektirir:

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

Ne zaman coc.vim yapılandırıldıysa sunucu uzantısını yükleyin coc-yaml vim'den:

:CocInstall coc-yaml

Kubernetes için YAML destekli Vim

Son olarak, büyük olasılıkla yapılandırmayla başlamak isteyeceksiniz coc-vim, sundu örnek olarak. Özellikle kombinasyonu etkinleştirir +boşluk otomatik tamamlamayı çağırmak için.

yaml dili sunucusu algılamayı ayarlama

O coc yaml-language-server'ı kullanabilirse, YAML dosyalarını düzenlerken şemanın Kubernetes'ten yüklenmesinin istenmesi gerekir. Bu düzenleme ile yapılır coc-config:

:CocConfig

Yapılandırmada eklemeniz gerekecek kubernetes tüm dosyalar için yaml. Ayrıca bir dil sunucusu kullanıyorum golangyani genel yapılandırmam şöyle görünüyor:

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

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

kubernetes — dil sunucusuna Kubernetes şemasını şurada tanımlanan URL'den indirmesini söyleyen ayrılmış bir alan bu sabit. yaml.schemas ek programları destekleyecek şekilde genişletilebilir - daha fazla ayrıntı için bkz. ilgili belgeler.

Artık bir YAML dosyası oluşturabilir ve otomatik tamamlamayı kullanmaya başlayabilirsiniz. Presleme +boşluk (veya vim'de yapılandırılmış başka bir kombinasyon), mevcut bağlama göre mevcut alanları ve belgeleri göstermelidir:

Kubernetes için YAML destekli Vim
Burada çalışıyor +boşluk çünkü yapılandırdım inoremap <silent><expr> <c-space> coc#refresh(). Bunu yapmadıysanız, bkz. coc.nvim BENİOKU örnek bir yapılandırma için.

Kubernetes API sürümünü seçme

Bu yazının yazıldığı an itibariyle yaml-language-server, Kubernetes 1.14.0 şemalarıyla birlikte geliyor. Dinamik olarak şema seçmenin bir yolunu bulamadım, bu yüzden açtım karşılık gelen GitHub sorunu. Neyse ki, dil sunucusu daktilo ile yazıldığı için sürümü manuel olarak değiştirmek oldukça kolaydır. Bunu yapmak için dosyayı bulmanız yeterli server.ts.

Makinenizde algılamak için YAML dosyasını vim ile açmanız ve işlemi bulmanız yeterlidir. 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

Bizim için ilgili süreç 2380 sürecidir: vim'in YAML dosyasını düzenlerken kullandığı süreçtir.

Kolayca görebileceğiniz gibi, dosya şurada bulunur: /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Sadece değeri değiştirerek düzenleyin KUBERNETES_SCHEMA_URLörneğin 1.17.0 sürümü için:

// 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";

Kullanılan sürüme bağlı olarak coc-yaml Değişkenin koddaki konumu değişebilir. Lütfen ayrıca depoyu değiştirdiğimi de unutmayın. garethr üzerinde instrumenta. Öyle görünüyor garethr oradaki destek devrelerine geçtim.

Değişikliğin etkili olup olmadığını kontrol etmek için daha önce [Kubernetes'in önceki sürümlerinde] bulunmayan bir alanın görünüp görünmediğine bakın. Örneğin, K8s 1.14 diyagramında hiçbir şey yoktu. başlangıçprobu:

Kubernetes için YAML destekli Vim

Özet

Umarım bu fırsat beni olduğu kadar sizi de memnun eder. Mutlu YAMLing! Makalede bahsedilen yardımcı programları daha iyi anlamak için bu depolara göz atmayı unutmayın:

çevirmenden PS

Ve sonra var vikube, vim-kubernet'ler и vimkubectl.

Blogumuzda da okuyun:

Kaynak: habr.com

Yorum ekle