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.
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.
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
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:
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:
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.
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:
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: