Vim dengan Dukungan YAML untuk Kubernetes

Catatan perev. : Artikel asli ditulis oleh Josh Rosso, seorang arsitek dari VMware yang sebelumnya bekerja untuk perusahaan-perusahaan seperti CoreOS dan Heptio, serta rekan penulis Kubernetes alb-ingress-controller. Penulis membagikan resep kecil, yang dapat sangat berguna untuk insinyur operasi "sekolah tua" yang lebih suka vim bahkan di era cloud pribumi yang menang.



Menulis manifestasi YAML untuk Kubernetes di vim? Sudah menghabiskan banyak waktu untuk mencari tahu di mana bidang selanjutnya harus dalam spesifikasi ini? Atau mungkin Anda akan senang dengan pengingat perbedaanargsdan cepatcommand? Ada berita bagus! Vim mudah diikat ke server-yaml-bahasauntuk mendapatkan penyelesaian otomatis, validasi, dan fasilitas lainnya. Di artikel ini, kita akan berbicara tentang cara mengonfigurasi klien server bahasa untuk ini.

(Artikel asli juga memiliki video di mana penulis berbicara dan menunjukkan isi materi.)

Server bahasa


Server bahasa ( server bahasa) berbicara tentang kemungkinan bahasa pemrograman untuk editor dan IDE, di mana mereka berinteraksi satu sama lain menggunakan protokol khusus - Language Server Protocol (LSP). Ini adalah pendekatan yang hebat: memungkinkan implementasi tunggal untuk menyediakan beberapa editor / IDE data sekaligus. Saya sudah menulis tentang gopl - server bahasa untuk Golang - dan bagaimana bisa digunakan dalam vim . Langkah-langkah untuk mendapatkan pelengkapan otomatis dalam YAML untuk Kubernet serupa.



Agar vim bekerja dengan cara yang dijelaskan, Anda harus menginstal klien server bahasa. Dua metode yang saya tahu adalah LanguageClient-neovim dan coc.vim. Dalam artikel yang akan saya pertimbangkan coc.vim- ini adalah plugin paling populer saat ini. Anda dapat menginstalnya melalui 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'}

Untuk memulai coc(dan dengan demikian server bahasa-yaml), Anda perlu menginstal node.js yang terinstal:

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

Saat coc.vimdikonfigurasi, instal ekstensi server coc-yamldari vim:

:CocInstall coc-yaml



Terakhir, Anda kemungkinan besar ingin memulai dengan konfigurasi yang coc-vimdisajikan sebagai contoh . Secara khusus, ini mengaktifkan kombinasi <Ctrl> + ruang untuk memanggil pelengkapan otomatis.

Mengkonfigurasi penemuan server yaml-bahasa-server


Untuk cocmenggunakan server bahasa-yaml, Anda harus memintanya untuk mengunduh skema dari Kubernetes saat mengedit file YAML. Ini dilakukan dengan mengedit coc-config:

:CocConfig

Dalam konfigurasi, Anda perlu menambahkan kubernetessemua file yaml. Saya juga menggunakan server bahasa untuk golang, jadi konfigurasi umum saya terlihat seperti ini:

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

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

kubernetes- bidang yang disediakan yang menginformasikan server bahasa tentang perlunya mengunduh skema Kubernetes menggunakan URL yang ditentukan dalam konstanta ini . yaml.schemasdapat diperluas dengan mendukung skema tambahan - untuk detail lebih lanjut, lihat dokumentasi yang relevan .

Sekarang Anda dapat membuat file YAML dan mulai menggunakan pelengkapan otomatis. Menekan <Ctrl> + spasi (atau kombinasi lain yang dikonfigurasi dalam vim) akan menampilkan bidang dan dokumentasi yang tersedia sesuai dengan konteks saat ini:


<Ctrl> + space bekerja di sini, karena saya mengonfigurasinya inoremap <silent><expr> <c-space> coc#refresh(). Jika Anda belum melakukannya, lihat coc.nvim README untuk contoh konfigurasi.

Pemilihan Versi API Kubernetes


Pada saat penulisan ini, server yaml-bahasa dikirimkan dengan skema Kubernet 1.14.0. Saya tidak menemukan cara untuk memilih skema secara dinamis, jadi saya membuka masalah GitHub yang sesuai . Untungnya, karena server bahasa ditulis dalam naskah, sangat mudah untuk mengubah versi secara manual. Untuk melakukan ini, cari saja file tersebut server.ts.

Untuk menemukannya di mesin Anda, cukup buka file YAML dengan vim dan temukan prosesnya 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 2380 relevan bagi kami: ini adalah vim yang menggunakannya saat mengedit file YAML.

Seperti yang Anda lihat, file tersebut berada di /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Cukup mengeditnya, mengubah nilainya KUBERNETES_SCHEMA_URL, misalnya, ke 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-yamllokasi variabel dalam kode mungkin berbeda. Perhatikan juga bahwa saya mengubah repositori dari garethrmenjadi instrumenta. Tampaknya garethrdia beralih ke sirkuit pendukung di sana.

Untuk memverifikasi bahwa perubahan telah berlaku, lihat untuk melihat apakah bidang muncul yang tidak ada sebelumnya [dalam versi Kubernet sebelumnya]. Misalnya, tidak ada startupProbe di sirkuit untuk K8 1.14 :



Ringkasan


Saya harap kesempatan ini membuat Anda senang tidak kurang dari saya. Senang YAML'ing! Pastikan untuk memeriksa repositori ini untuk lebih memahami utilitas yang disebutkan dalam artikel:


PS dari penerjemah


Dan ada vikube , vim-kubernetes dan vimkubectl .

Baca juga di blog kami:


All Articles