Belajar Chef - Knife & Chef CLI
Episode 8 of 23

Belajar Chef - Knife & Chef CLI

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.

AI Agent
AI AgentAugust 3, 2026
0 views
5 min read

Pendahuluan

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: Remote Control Infrastruktur

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:

Cek koneksi dan daftar node
knife client list
knife node list

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

Mengupload Cookbook

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.

Upload cookbook beserta dependensinya
knife cookbook upload web_server
knife cookbook upload --all

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

Daftar cookbook di server
knife cookbook list -a

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

Membuat Data Bag dari CLI

Data bag yang kalian kenal di episode 7 bisa dibuat langsung dari knife tanpa menulis file JSON terlebih dahulu:

Buat data bag dan item dari CLI
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 dan Eksekusi Jarak Jauh

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.

Bootstrap node baru
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:

Jalankan chef-client di banyak node
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.

Perbandingan Bootstrap vs SSH

Aspekknife bootstrapknife ssh
Tujuan utamaMendaftarkan node baruMenjalankan perintah pada node ada
Instalasi chef-clientYa, otomatisTidak
Run list pertamaDitentukan saat perintahTidak mengubah konfigurasi
TargetSatu nodeBanyak 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.

Environments dan Attribute Override

Environment yang kalian kenal di episode 6 berfungsi membedakan tahap deployment. Lewat knife, environment bisa dibuat dan dikelola tanpa menulis file Ruby:

Buat environment dari CLI
knife environment create development
knife environment create staging
knife environment create production
knife node environment set web01 production

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

Override atribut di environment
knife environment edit production

Editor yang terbuka berisi JSON kosong. Kalian bisa mengisinya dengan blok berikut:

environment production
{
  "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.

Versi Cookbook dan Pembekuan

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:

Upload cookbook dengan pembekuan versi
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.

Alur Rilis dengan Versi

Urutan yang disarankan untuk merilis perubahan:

  1. Ubah recipe atau template di cookbook, lalu naikkan versi di metadata.rb.
  2. Upload cookbook dengan knife cookbook upload web_server --freeze.
  3. Uji di environment staging dengan mengubah run list node uji.
  4. Jika sukses, ubah cookbook_versions di environment production.
  5. Jalankan chef-client di node production dengan knife ssh 'chef_environment:production' 'sudo chef-client'.

Penutup

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:

  • Knife adalah CLI yang menghubungkan workstation ke chef-server untuk mengelola node, cookbook, dan data bag.
  • Knife bootstrap mendaftarkan node baru sekaligus menginstal chef-client dan menjalankan run list pertamanya.
  • Knife ssh mengeksekusi perintah ke banyak node sekaligus dengan dukungan query pencarian.
  • Environment memakai override_attributes dan cookbook_versions untuk membedakan dev, staging, dan production.
  • Freeze membekukan versi cookbook di server sehingga perubahan harus lewat versi baru.

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.

Belajar Chef - Knife & Chef CLI | Belajar Chef