Vim dengan dukungan YAML untuk Kubernetes

Catatan. terjemahan: Artikel asli ditulis oleh Josh Rosso, seorang arsitek di VMware yang sebelumnya bekerja di perusahaan seperti CoreOS dan Heptio, dan juga salah satu penulis Kubernetes alb-ingress-controller. Penulis membagikan resep kecil yang bisa sangat berguna bagi para insinyur operasi “jadul” yang lebih memilih vim bahkan di era cloud native yang berjaya.

Vim dengan dukungan YAML untuk Kubernetes

Menulis manifes YAML untuk Kubernetes di vim? Menghabiskan waktu berjam-jam untuk mencari tahu di mana bidang selanjutnya harus berada dalam spesifikasi ini? Atau mungkin Anda akan menghargai pengingat singkat tentang perbedaannya args и command? Ada kabar baik! Vim mudah untuk ditautkan server bahasa yamluntuk mendapatkan penyelesaian otomatis, validasi dan kemudahan lainnya. Pada artikel ini kita akan membahas tentang cara menyiapkan klien server bahasa untuk ini.

(Artikel aslinya juga punya video, dimana penulis berbicara dan mendemonstrasikan isi materi.)

Server bahasa

Server bahasa (server bahasa) berbicara tentang kemampuan bahasa pemrograman kepada editor dan IDE, yang mana mereka berinteraksi satu sama lain menggunakan protokol khusus - Protokol Server Bahasa (LSP). Ini adalah pendekatan yang bagus karena memungkinkan satu implementasi menyediakan data ke banyak editor/IDE sekaligus. Aku sudah saya menulis tentang gopls - server bahasa untuk Golang - dan cara menggunakannya semangat. Langkah-langkah untuk mendapatkan pelengkapan otomatis di YAML untuk Kubernetes serupa.

Vim dengan dukungan YAML untuk Kubernetes

Agar vim berfungsi seperti yang dijelaskan, Anda perlu menginstal klien server bahasa. Dua metode yang saya tahu adalah BahasaKlien-neovim и coc.vim. Dalam artikel saya akan mempertimbangkannya coc.vim Merupakan 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) akan memerlukan node.js diinstal:

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

Ketika coc.vim dikonfigurasi, instal ekstensi server coc-yaml dari vim:

:CocInstall coc-yaml

Vim dengan dukungan YAML untuk Kubernetes

Terakhir, kemungkinan besar Anda ingin memulai dengan konfigurasi coc-vim, disajikan sebagai contoh. Secara khusus, ini mengaktifkan kombinasi tersebut +ruang untuk memanggil pelengkapan otomatis.

Menyiapkan deteksi server bahasa yaml

Bahwa coc dapat menggunakan server bahasa yaml, perlu diminta untuk memuat skema dari Kubernetes saat mengedit file YAML. Ini dilakukan dengan mengedit coc-config:

:CocConfig

Dalam konfigurasi Anda perlu menambahkan kubernetes untuk semua file yaml. Saya juga menggunakan server bahasa untuk golangjadi konfigurasi umum saya terlihat seperti ini:

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

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

kubernetes — bidang khusus yang memberitahu server bahasa untuk mengunduh skema Kubernetes dari URL yang ditentukan konstan ini. yaml.schemas dapat diperluas untuk mendukung skema tambahan - untuk lebih jelasnya, lihat dokumentasi yang relevan.

Sekarang Anda dapat membuat file YAML dan mulai menggunakan pelengkapan otomatis. Mendesak +ruang (atau kombinasi lain yang dikonfigurasi dalam vim) harus menampilkan kolom dan dokumentasi yang tersedia sesuai dengan konteks saat ini:

Vim dengan dukungan YAML untuk Kubernetes
Bekerja di sini +spasi karena saya mengonfigurasinya inoremap <silent><expr> <c-space> coc#refresh(). Jika Anda belum melakukan ini, lihat coc.nvim README untuk contoh konfigurasi.

Memilih versi Kubernetes API

Pada tulisan ini, server bahasa yaml dikirimkan dengan skema Kubernetes 1.14.0. Saya tidak menemukan cara untuk memilih skema secara dinamis, jadi saya membukanya masalah GitHub yang sesuai. Untungnya, karena server bahasa ditulis dalam skrip ketikan, cukup mudah untuk mengubah versi secara manual. Untuk melakukan ini, cukup cari filenya server.ts.

Untuk mendeteksinya 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 yang relevan bagi kami adalah proses 2380: inilah yang digunakan vim saat mengedit file YAML.

Seperti yang dapat Anda lihat dengan mudah, file tersebut terletak di /Users/joshrosso/.config/coc/extensions/node_modules/coc-yaml/node_modules/yaml-language-server/out/server/src/server.js. Edit saja dengan mengubah nilainya KUBERNETES_SCHEMA_URL, misalnya, 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";

Tergantung pada versi yang digunakan coc-yaml Lokasi variabel dalam kode mungkin berbeda. Harap perhatikan juga bahwa saya mengubah repositori dari garethr pada instrumenta. Tampaknya garethr dialihkan ke sirkuit pendukung di sana.

Untuk memeriksa apakah perubahan telah diterapkan, lihat apakah muncul kolom yang sebelumnya tidak ada [di Kubernetes versi sebelumnya]. Misalnya pada diagram untuk K8s 1.14 tidak ada startupProbe:

Vim dengan dukungan YAML untuk Kubernetes

Ringkasan

Saya harap kesempatan ini menyenangkan Anda sama seperti saya. Selamat YAMling! Pastikan untuk memeriksa repositori berikut untuk lebih memahami utilitas yang disebutkan dalam artikel:

PS dari penerjemah

Dan ada vikube, vim-kubernetes и vimkubectl.

Baca juga di blog kami:

Sumber: www.habr.com

Tambah komentar