Belajar Chef - Cookbook & Run List
Episode 6 of 23

Belajar Chef - Cookbook & Run List

Pelajari struktur lengkap sebuah cookbook beserta peran setiap direktori seperti recipes, attributes, templates, files, libraries, dan metadata.rb, serta cara menyusun run_list per node, roles, dan environments untuk mengelompokkan node secara konsisten.

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

Pendahuluan

Di episode 5 kalian sudah mengenal attributes dan Ohai, dua mekanisme yang membuat cookbook bisa menyesuaikan diri dengan kondisi tiap node. Kalian tahu cara membaca nilai seperti node['hostname'] dan node['platform'], serta memahami bagaimana atribut mengalir dari berbagai level sampai menghasilkan nilai akhir saat chef-client berjalan.

Mungkin kalian bertanya: kalau sudah punya banyak recipe, di mana seharusnya recipe itu disimpan? Bagaimana caranya server tahu recipe mana yang harus dijalankan untuk node tertentu? Jawabannya ada di cookbook, run_list, serta mekanisme pengelompokan berupa roles dan environments.

Episode 6 ini akan membedah struktur direktori cookbook, mulai dari recipes/ hingga metadata.rb, lalu menjelaskan bagaimana run list menentukan urutan eksekusi recipe per node. Di akhir episode kalian akan memahami cara mengelompokkan node dengan roles dan environments supaya satu konfigurasi bisa dipakai banyak server tanpa menulis ulang.

Anatomi Struktur Cookbook

Cookbook adalah unit distribusi terkecil di Chef. Sebuah cookbook bisa berisi recipe, atribut default, template, file statis, helper Ruby, dan metadata yang mendeskripsikan dependensinya. Ketika kalian menjalankan chef generate cookbook web_server, Chef Workstation akan membuat struktur berikut:

Struktur cookbook hasil generate
web_server/
├── attributes/      # atribut default per cookbook
├── files/           # file statis yang disalin apa adanya
├── libraries/       # helper Ruby (kode custom)
├── metadata.rb      # deskripsi cookbook & dependensi
├── recipes/         # recipe utama cookbook
├── templates/       # file konfigurasi berbasis ERB
└── TESTING.md       # dokumentasi pengujian

Berikut peran setiap direktori:

  • recipes/ — hati dari cookbook. Setiap file Ruby mendeklarasikan resource yang ingin dijamin state-nya. default.rb adalah entry point yang dijalankan ketika cookbook dipanggil tanpa nama recipe.
  • attributes/ — atribut default yang disimpan terpusat per cookbook. Nilai di sini dibaca lewat pola default['web_server']['port'] dan bisa di-override oleh role, environment, maupun atribut node.
  • templates/ — template ERB yang dirender dengan variabel node, cocok untuk file konfigurasi yang nilainya bergantung pada mesin.
  • files/ — file statis seperti binary, sertifikat, atau konfigurasi tetap yang disalin apa adanya tanpa diproses.
  • libraries/ — kode Ruby custom seperti class, module, atau helper method yang bisa dipakai ulang di seluruh recipe.
  • metadata.rb — kartu identitas cookbook: nama, versi, maintainer, dependensi, dan platform yang didukung.

metadata.rb

File metadata.rb adalah bagian yang paling sering diabaikan pemula, padahal chef-server menggunakannya untuk menyelesaikan dependensi. Contoh tipikalnya:

metadata.rb
name 'web_server'
maintainer 'Arman Dwi Pangestu'
maintainer_email 'devnull@example.com'
license 'Apache-2.0'
description 'Mengelola konfigurasi web server'
version '0.1.0'
depends 'nginx', '>= 1.18'
supports 'ubuntu', '>= 22.04'

Deklarasi depends memberitahu server bahwa cookbook ini butuh cookbook nginx versi tertentu. Tanpa metadata yang benar, upload cookbook di episode 8 bisa gagal karena dependensi tidak terpenuhi.

Note

Semua direktori di atas bersifat opsional. Cookbook terkecil hanya butuh metadata.rb dan satu file di recipes/. Direktori lain dihasilkan chef generate cookbook supaya pola kerjanya konsisten, tetapi boleh dihapus jika tidak dipakai.

Run List: Menentukan Recipe untuk Setiap Node

Run list adalah daftar berurutan dari recipe atau role yang akan dijalankan chef-client pada sebuah node. Urutan eksekusinya penting: resource pada recipe pertama dieksekusi lebih dulu, lalu dilanjutkan ke berikutnya.

Untuk menetapkan run list sebuah node dari workstation, gunakan knife node run_list set:

Set run_list untuk node web01
knife node run_list set web01 'recipe[apt],recipe[web_server]'

Setelahnya, kalian bisa memverifikasi isi run list node tersebut:

Lihat run_list sebuah node
knife node show web01 -a run_list

Notasi recipe dalam run list mengikuti dua bentuk: recipe[web_server] berarti memanggil recipes/default.rb, sedangkan recipe[web_server::nginx] berarti memanggil recipes/nginx.rb.

Tip

Simbol recipe[] dan role[] adalah contoh inline hint yang juga dipakai di dalam dokumentasi Chef: recipe[web_server::nginx] mereferensikan file recipes/nginx.rb, sedangkan recipe[web_server] sama dengan recipes/default.rb. Nama file harus persis cocok dengan bagian setelah dua titik dua.

Roles: Pengelompokan Berdasarkan Fungsi

Role mengelompokkan node berdasarkan fungsinya, misalnya webserver, database, atau load_balancer. Sebuah role berisi run list dan atribut default yang otomatis menyatu ke semua node yang memakai role tersebut. Berikut contoh file role:

roles/webserver.rb
name 'webserver'
description 'Node yang menjalankan web server'
run_list(
  'recipe[apt]',
  'recipe[web_server]'
)
default_attributes(
  'web_server' => {
    'worker_processes' => 4
  }
)

Upload role ke server, lalu pasang ke node dalam satu langkah:

Upload role dan terapkan ke node
knife role from file roles/webserver.rb
knife node run_list set web01 'role[webserver]'

Environments: Pengelompokan Berdasarkan Tahap

Environment mengelompokkan node berdasarkan tahap lifecycle: development, staging, dan production. Environment memiliki kuasa lebih tinggi dalam hierarki atribut karena memakai precedence override, dan bisa mengunci versi cookbook yang boleh dijalankan sebuah node.

environments/production.rb
name 'production'
description 'Environment produksi'
cookbook_versions(
  'web_server' => '~> 0.1.0'
)
override_attributes(
  'web_server' => {
    'worker_processes' => 16
  }
)

Upload dan tetapkan environment ke node:

Upload environment dan set node
knife environment from file environments/production.rb
knife node environment set web01 production

Perbandingan Roles vs Environments

Keduanya kerap tertukar oleh pemula. Tabel berikut merangkum perbedaan inti:

AspekRolesEnvironments
Fungsi utamaPeran node (web, database)Tahap lifecycle (dev, prod)
Isirun_list + attributesversi cookbook + attributes
Precedence atributdefaultoverride (lebih tinggi)
Jumlah per nodeBoleh banyak roleHanya satu environment
Contohrole[webserver]production

Important

Satu node hanya boleh berada dalam satu environment, tetapi boleh memiliki banyak role. Environment mengatur versi cookbook yang boleh dipakai node, sementara role menentukan fungsi dan run list node tersebut. Kombinasi keduanya menghasilkan konfigurasi yang terstruktur tanpa duplikasi.

Penutup

Pada episode 6 ini kalian sudah memahami anatomi cookbook, peran setiap direktori dari recipes/ sampai metadata.rb, serta cara kerja run list dalam menentukan urutan eksekusi. Kalian juga sudah melihat bagaimana roles dan environments memisahkan fungsi dari tahap lifecycle, sehingga satu cookbook bisa dipakai secara konsisten di ratusan node yang berbeda peran dan lingkungannya.

Inti yang harus dibawa pulang:

  • Cookbook adalah unit distribusi terkecil, dengan recipes/ sebagai entry point dan metadata.rb sebagai identitas serta daftar dependensi.
  • Run list menentukan recipe dan role mana saja yang dijalankan, beserta urutannya, pada setiap node.
  • Role mengelompokkan node berdasarkan fungsi dan bisa memuat run list serta atribut default.
  • Environment mengelompokkan node berdasarkan tahap deployment dan berkuasa atas versi cookbook.
  • Atribut dari environment (override) lebih tinggi daripada role (default), lalu ditimpa oleh atribut node.

Di episode 7 berikutnya kita akan masuk ke topik yang membuat cookbook benar-benar dinamis, yaitu Templates & Data Bags. Kalian akan belajar template ERB yang merender file konfigurasi berdasarkan atribut node, serta data bags untuk menyimpan data terstruktur di server dan chef-vault untuk mengamankan secret seperti password dan kunci API. Pastikan tetap semangat.

Belajar Chef - Cookbook & Run List | Belajar Chef