Kuasai perintah knife untuk mengelola infrastruktur dari workstation, mulai dari knife node list, knife cookbook upload, knife data bag create, knife ssh, hingga knife bootstrap, serta pelajari penggunaan environment dengan attribute override dan pembekuan versi cookbook.

Di episode 7 kalian sudah mengenal template ERB dan tiga tingkatan penyimpanan data di server: data bag, encrypted data bag, dan chef-vault. Kalian tahu cara merender file konfigurasi yang dinamis dan cara membaca secret dari dalam recipe. Semua operasi itu dilakukan lewat file cookbook, tetapi belum ada yang menghubungkan cookbook dengan node yang sebenarnya.
Penghubung itulah yang menjadi tugas knife, CLI bawaan Chef yang berjalan di workstation. Dengan knife kalian bisa mendaftarkan node baru, mengupload cookbook ke server, membuat data bag, menjalankan perintah SSH ke banyak node sekaligus, hingga mengatur environment dan versi cookbook.
Episode 8 ini akan membahas perintah-perintah knife yang paling sering dipakai sehari-hari, kemudian masuk ke environment dengan attribute override dan pembekuan versi cookbook untuk kontrol rilis yang lebih ketat.
Knife adalah utilitas baris perintah yang berkomunikasi dengan chef-server menggunakan REST API. Seluruh konfigurasi knife berada di file ~/.chef/knife.rb atau ~/.chef/config.rb, yang berisi alamat chef-server_url, nama node workstation, dan lokasi kunci privat pemanggil.
Verifikasi koneksi ke server dengan perintah paling sederhana:
knife client list
knife node listknife client list menampilkan seluruh klien yang terdaftar, sedangkan knife node list menampilkan node yang sudah terdaftar dan memiliki atribut. Sebuah node biasa biasanya juga menjadi klien, sehingga keduanya sering muncul berdampingan.
Cookbook yang sudah selesai ditulis harus diupload ke server sebelum bisa dijalankan oleh node. Tanpa upload, recipe hanya ada di workstation dan tidak akan pernah dieksekusi chef-client di mesin lain.
knife cookbook upload web_server
knife cookbook upload --allknife cookbook upload web_server mengunggah cookbook bernama web_server beserta dependensinya secara otomatis. Opsi --all mengunggah seluruh cookbook di direktori kerja. Untuk melihat versi yang sudah ada di server, gunakan knife cookbook list:
knife cookbook list -aOutputnya menampilkan nama cookbook beserta versi, misalnya web_server 0.1.0. Jika kalian mengupload ulang dengan versi yang sama, knife akan menolak karena versi tersebut sudah dipakai oleh run list tertentu, kecuali menggunakan --force.
Data bag yang kalian kenal di episode 7 bisa dibuat langsung dari knife tanpa menulis file JSON terlebih dahulu:
knife data bag create users
knife data bag create users alice -c '{"department":"engineering"}'Perintah kedua menulis item dengan id alice dan isi JSON inline. Untuk menambah item dari file, gunakan knife data bag from file users bob.json seperti yang sudah dipelajari di episode 7.
Tip
Gunakan knife data bag list untuk melihat semua data bag, dan knife data bag show users alice untuk melihat isi sebuah item. Keduanya praktis untuk memverifikasi bahwa data sudah sampai di server sebelum dipakai cookbook.
Bootstrap adalah proses mendaftarkan node baru ke chef-server sekaligus menginstal chef-client di mesin tersebut. Ini adalah cara tercepat untuk membawa server baru ke dalam manajemen Chef.
knife bootstrap 203.0.113.10 \
--ssh-user deploy \
--ssh-password 'S3cure' \
--sudo \
--node-name web01 \
--run-list 'recipe[apt],recipe[web_server]'Proses bootstrap menghubungkan ke mesin target via SSH, menginstal chef-client, mendaftarkannya sebagai node dan klien di server, lalu langsung menjalankan run list yang diberikan. Setelah bootstrap selesai, node web01 bisa dilihat dengan knife node list dan atributnya dijelajahi dengan knife node show web01.
Untuk menjalankan chef-client secara manual pada node yang sudah ada, gunakan knife ssh:
knife ssh 'name:web*' 'sudo chef-client'
knife ssh 'role:app_server' 'sudo chef-client' --manual-list '192.0.2.10,192.0.2.11'knife ssh menerima query pencarian node sebagai argumen pertama. Query name:web* memilih semua node yang namanya diawali web. Perintah kedua memakai pencarian role, dan opsi --manual-list memaksa eksekusi ke daftar IP tanpa mengacu pada data node di server.
| Aspek | knife bootstrap | knife ssh |
|---|---|---|
| Tujuan utama | Mendaftarkan node baru | Menjalankan perintah pada node ada |
| Instalasi chef-client | Ya, otomatis | Tidak |
| Run list pertama | Ditentukan saat perintah | Tidak mengubah konfigurasi |
| Target | Satu node | Banyak node via query |
Important
Pencarian node knife memakai sintaks query yang sama dengan node search di dalam recipe. Pelajari operator dasar seperti name:*, role:, dan chef_environment: karena query ini juga dipakai untuk mengatur ulang lingkungan dengan knife.
Environment yang kalian kenal di episode 6 berfungsi membedakan tahap deployment. Lewat knife, environment bisa dibuat dan dikelola tanpa menulis file Ruby:
knife environment create development
knife environment create staging
knife environment create production
knife node environment set web01 productionAtribut environment ditulis sebagai JSON. Environment berkuasa atas atribut bertipe override, yang levelnya lebih tinggi daripada default dari cookbook dan role, tetapi lebih rendah daripada atribut node:
knife environment edit productionEditor yang terbuka berisi JSON kosong. Kalian bisa mengisinya dengan blok berikut:
{
"name": "production",
"description": "Production",
"override_attributes": {
"web_server": {
"worker_processes": 16,
"port": 443
}
},
"cookbook_versions": {
"web_server": "~> 0.1.0"
}
}Blok override_attributes mengesampingkan nilai default dari cookbook untuk semua node di environment production. Blok cookbook_versions membatasi versi cookbook yang boleh dijalankan, sehingga node production tidak tiba-tiba berubah perilaku saat cookbook baru diupload.
Chef menerapkan semver pada cookbook lewat field version di metadata.rb. Setiap kali kalian mengubah perilaku cookbook, naikkan versi dengan chef exec berks atau secara manual di metadata.rb, lalu upload ulang.
Freeze mencegah cookbook dengan versi tertentu diubah setelah diupload. Saat cookbook dibekukan, server menolak upload ulang dengan versi yang sama:
knife cookbook upload web_server --freeze
knife cookbook upload web_server --force--freeze menandai cookbook sebagai immutable di server. Jika kalian lupa menaikkan versi dan mencoba upload lagi, knife akan menolak dengan pesan bahwa versi sudah dibekukan. Opsi --force melewati pembekuan, tetapi sebaiknya hanya dipakai saat benar-benar yakin karena bisa membuat node memakai versi yang tidak konsisten.
Warning
Pembekuan versi adalah pengaman, bukan pengganti kedisiplinan versi. Selalu naikkan versi cookbook untuk setiap perubahan yang mengubah perilaku, lalu bekukan saat diupload. Kombinasikan dengan cookbook_versions di environment untuk menjamin rilis yang konsisten.
Urutan yang disarankan untuk merilis perubahan:
knife cookbook upload web_server --freeze.staging dengan mengubah run list node uji.cookbook_versions di environment production.knife ssh 'chef_environment:production' 'sudo chef-client'.Pada episode 8 ini kalian sudah menguasai perintah knife yang paling sering dipakai, mulai dari knife node list, knife cookbook upload, knife data bag create, knife ssh, hingga knife bootstrap. Kalian juga sudah memahami bagaimana environment memakai attribute override dan cookbook_versions untuk membedakan tahap deployment, serta bagaimana --freeze menjaga versi cookbook tetap konsisten.
Inti yang harus dibawa pulang:
override_attributes dan cookbook_versions untuk membedakan dev, staging, dan production.Di episode 9 berikutnya kita akan menggeser fokus dari workstation ke server, yaitu Chef Infra Server. Kalian akan belajar menginstal chef-server-core, menjalankan chef-server-ctl reconfigure, membuat organisasi dan pengguna, konfigurasi SSL, hingga pencadangan dengan knife-ec-backup dan strategi high availability. Sampai jumpa.