Vim dengan sokongan YAML untuk Kubernetes

Catatan. terjemah: Artikel asal ditulis oleh Josh Rosso, seorang arkitek di VMware yang sebelum ini bekerja di syarikat seperti CoreOS dan Heptio, dan juga pengarang bersama Kubernetes alb-ingress-controller. Pengarang berkongsi resipi kecil yang boleh menjadi sangat berguna untuk jurutera operasi "sekolah lama" yang lebih suka vim walaupun dalam era awan yang menang.

Vim dengan sokongan YAML untuk Kubernetes

Menulis manifes YAML untuk Kubernetes dalam vim? Menghabiskan berjam-jam mencuba untuk mengetahui di mana medan seterusnya harus berada dalam spesifikasi ini? Atau mungkin anda akan menghargai peringatan cepat tentang perbezaan itu args ΠΈ command? Ada berita baik! Vim mudah dipautkan yaml-bahasa-pelayanuntuk mendapatkan penyiapan automatik, pengesahan dan kemudahan lain. Dalam artikel ini kita akan bercakap tentang cara menyediakan klien pelayan bahasa untuk ini.

(Artikel asal juga ada video, di mana pengarang bercakap dan menunjukkan kandungan bahan.)

Pelayan bahasa

Pelayan bahasa (pelayan bahasa) bercakap tentang keupayaan bahasa pengaturcaraan kepada editor dan IDE, yang mana mereka berinteraksi antara satu sama lain menggunakan protokol khas - Protokol Pelayan Bahasa (LSP). Ini adalah pendekatan yang hebat kerana ia membolehkan satu pelaksanaan menyediakan data kepada banyak editor/IDE sekaligus. saya sudah saya menulis mengenai gopls - pelayan bahasa untuk Golang - dan bagaimana ia boleh digunakan dalam VIM. Langkah-langkah untuk mendapatkan autolengkap dalam YAML untuk Kubernetes adalah serupa.

Vim dengan sokongan YAML untuk Kubernetes

Untuk membolehkan vim berfungsi dengan cara yang diterangkan, anda perlu memasang klien pelayan bahasa. Dua kaedah yang saya tahu ialah LanguageClient-neovim ΠΈ coc.vim. Dalam artikel saya akan pertimbangkan coc.vim - Ini adalah pemalam yang paling popular pada masa ini. Anda boleh memasangnya melalui palam 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'}

Sebagai permulaan coc (dan dengan itu yaml-language-server) akan memerlukan node.js dipasang:

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

Apabila coc.vim dikonfigurasikan, pasang sambungan pelayan coc-yaml daripada vim:

:CocInstall coc-yaml

Vim dengan sokongan YAML untuk Kubernetes

Akhir sekali, anda berkemungkinan besar ingin memulakan dengan konfigurasi coc-vim, dibentangkan sebagai contoh. Khususnya, ia mengaktifkan gabungan +ruang untuk memanggil autolengkap.

Menyediakan pengesanan pelayan bahasa-yaml

Itu coc boleh menggunakan yaml-language-server, ia perlu diminta untuk memuatkan skema daripada Kubernetes semasa mengedit fail YAML. Ini dilakukan dengan menyunting coc-config:

:CocConfig

Dalam konfigurasi anda perlu menambah kubernetes untuk semua fail yaml. Saya juga menggunakan pelayan bahasa untuk golangjadi konfigurasi umum saya kelihatan seperti ini:

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

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

kubernetes β€” medan terpelihara yang memberitahu pelayan bahasa untuk memuat turun skema Kubernetes daripada URL yang ditakrifkan dalam pemalar ini. yaml.schemas boleh dikembangkan untuk menyokong skim tambahan - untuk butiran lanjut, lihat dokumentasi yang berkaitan.

Kini anda boleh mencipta fail YAML dan mula menggunakan autolengkap. Menekan +ruang (atau gabungan lain yang dikonfigurasikan dalam vim) harus menunjukkan medan dan dokumentasi yang tersedia mengikut konteks semasa:

Vim dengan sokongan YAML untuk Kubernetes
Bekerja di sini +ruang kerana saya mengkonfigurasi inoremap <silent><expr> <c-space> coc#refresh(). Jika anda belum melakukan ini, lihat coc.nvim README untuk konfigurasi contoh.

Memilih versi API Kubernetes

Sehingga penulisan ini, yaml-language-server dihantar dengan skema Kubernetes 1.14.0. Saya tidak menemui cara untuk memilih skema secara dinamik, jadi saya membukanya isu GitHub yang sepadan. Nasib baik, kerana pelayan bahasa ditulis dalam skrip taip, agak mudah untuk menukar versi secara manual. Untuk melakukan ini, cari sahaja fail server.ts.

Untuk mengesannya pada mesin anda, cuma buka fail YAML dengan vim dan cari proses dengan 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

Proses yang berkaitan untuk kami ialah proses 2380: inilah yang digunakan oleh vim semasa mengedit fail YAML.

Seperti yang anda boleh lihat dengan mudah, fail itu terletak di /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Hanya edit dengan menukar nilai KUBERNETES_SCHEMA_URL, sebagai contoh, untuk versi 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";

Bergantung pada versi yang digunakan coc-yaml Lokasi pembolehubah dalam kod mungkin berbeza-beza. Sila ambil perhatian juga bahawa saya menukar repositori daripada garethr pada instrumenta. Ia seolah-olah bahawa garethr bertukar kepada litar sokongan di sana.

Untuk menyemak sama ada perubahan telah berkuat kuasa, lihat jika medan muncul yang tidak ada sebelum ini [dalam versi Kubernetes sebelumnya]. Sebagai contoh, dalam rajah untuk K8s 1.14 tiada startupProbe:

Vim dengan sokongan YAML untuk Kubernetes

Ringkasan

Saya harap peluang ini menggembirakan anda sama seperti saya. Selamat YAMLing! Pastikan anda menyemak repositori ini untuk lebih memahami utiliti yang disebut dalam artikel:

PS daripada penterjemah

Dan ada juga vikube, vim-kubernetes ΠΈ vimkubectl.

Baca juga di blog kami:

Sumber: www.habr.com

Tambah komen