Belajar Puppet - Bolt & Orchestration
Episode 11 of 23

Belajar Puppet - Bolt & Orchestration

Di episode ini kita memegang kendali langsung dengan Bolt: menjalankan tasks dan plans lewat SSH dan WinRM, menyusun inventory.yaml, serta menggabungkan model push Bolt dengan model pull Puppet agent.

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

Pendahuluan

Di episode 10 kalian melihat Tasks dan Plans berjalan di Puppet Enterprise. Kini kita lepas dari Console dan memegang kendali langsung: di episode 11 kita belajar Bolt, tool orchestration open source dari Puppet yang bisa berdiri sendiri tanpa PE. Bolt menjalankan task, plan, command, dan script ke banyak target sekaligus melalui SSH, WinRM, atau koneksi lain — melengkapi model pull agent Puppet dengan kekuatan push.

Pola kerjanya sederhana: tentukan target di inventory, pilih aksi, lalu jalankan. Bolt menangani koneksi paralel, hasil per target, dan pengumpulan output.

Instalasi Bolt

Bolt tersedia sebagai paket resmi untuk distro Linux utama dan macOS:

Instal Bolt di Debian/Ubuntu
wget https://apt.puppet.com/puppet8-release-focal.deb
sudo dpkg -i puppet8-release-focal.deb
sudo apt-get update
sudo apt-get install puppet-bolt
Verifikasi instalasi
bolt --version
bolt task show

bolt --version memastikan binary terpasang, sedangkan bolt task show menampilkan daftar task bawaan. Bolt dikirim dengan kumpulan task standar seperti service, package, dan reboot yang langsung bisa dipakai.

Note

Bolt tidak butuh agent atau server Puppet. Ia bekerja langsung dari workstation — sangat cocok untuk workstation admin, CI pipeline, atau jalur emergency di mana agent tidak bisa diandalkan.

inventory.yaml

Target dikelompokkan dalam file inventory.yaml. Ini adalah sumber kebenaran tentang node mana yang bisa diakses dan bagaimana caranya:

inventory.yaml
version: 2
groups:
  - name: web
    targets:
      - web01.example.com
      - web02.example.com
    config:
      transport: ssh
      ssh:
        user: deploy
        private-key: ~/.ssh/id_ed25519
        run-as: root
  - name: windows
    targets:
      - win01.corp.local
    config:
      transport: winrm
      winrm:
        user: svc-bolt
        password: '$${winrm_password}'
  - name: all
    targets:
      - 10.0.0.0

Grup bisa bertingkat: grup all menyatukan grup web dan windows, sehingga satu target di jalankan ke semuanya. Transport default adalah SSH untuk Linux dan WinRM untuk Windows, dan keduanya bisa diatur per grup.

Warning

Jangan menaruh password plaintext di inventory.yaml yang masuk git. Gunakan variabel rahasia dari environment (misalnya dengan mekanisme env: di inventory) atau integration dengan secret store — Bolt mendukung pemanggilan nilai dari environment variable.

Menjalankan Task

Task dijalankan dengan bolt task run. Bentuk paling sederhana memakai task bawaan service:

Restart nginx di semua target web
bolt task run service action=restart name=nginx --targets web

Hasilnya ditampilkan per target dengan status sukses atau gagal. Untuk task dari module, panggil dengan nama lengkapnya:

Jalankan task custom
bolt task run profile::collect_logs --targets web --params '{"days": 7}'

Perintah bolt command run menjalankan shell command langsung, dan bolt script run menjalankan script dari mesin lokal tanpa harus di-package dulu sebagai task:

Jalankan command dan script
bolt command run 'df -h /' --targets web
bolt script run ./scripts/collect-logs.sh --targets web

Tip

Pilih alat yang tepat: bolt command run untuk command satu baris, bolt script run untuk script sekali pakai, dan bolt task run untuk operasi yang terdefinisi dengan metadata serta parameter terstruktur.

Task dan Plan

Task custom cukup sebuah skrip plus metadata.json. Skrip menerima parameter lewat stdin dalam format JSON:

tasks/restart_nginx.sh
#!/bin/bash
systemctl restart nginx
tasks/restart_nginx/metadata.json
{
  "description": "Restart layanan nginx",
  "input_method": "stdin",
  "parameters": {
    "service": {
      "type": "String[1]",
      "description": "Nama layanan"
    }
  }
}

Plan menggabungkan beberapa langkah dan bisa mengambil keputusan di tengah jalan:

plans/upgrade_web.pp
plan upgrade::web(
  TargetSpec $targets,
  String[1] $version,
) {
  $targets.apply_prep
  run_task('deploy::stop', $targets)
  run_task('deploy::update', $targets, version => $version)
  run_task('deploy::start', $targets)
}

Jalankan plan dengan bolt plan run:

Jalankan plan
bolt plan run upgrade::web version=1.2.0 --targets web

Perhatikan keajaiban $targets.apply_prep — baris itu menginstal modul Puppet ke target secara otomatis agar task bisa berjalan. Jika task sudah tersedia di target, langkah ini bisa dilewati.

Menggabungkan Bolt dan Puppet Agent

Puppet agent bekerja dengan model pull: ia menunggu jadwal untuk mengambil catalog dan menerapkannya. Bolt bekerja dengan model push: kita memerintahkan aksi langsung. Keduanya bukan pesaing, melainkan pelengkap.

Kombinasi paling umum adalah memicu run agent dari Bolt ketika ingin perubahan diterapkan segera, misalnya setelah deploy:

Trigger agent run lewat Bolt
bolt command run 'puppet agent -t' --targets web
bolt command run 'puppet agent -t --noop' --targets web

puppet agent -t menjalankan satu run agent seketika, sedangkan --noop menampilkan apa yang akan diubah tanpa menerapkannya — aman untuk inspeksi. Dengan cara ini, konfigurasi tetap dikelola lewat manifest (pull), sementara waktu eksekusinya dikendalikan dari luar (push).

ModelPemicuContoh penggunaan
PullAgent pada jadwalPerubahan konfigurasi normal, menjaga desired state
PushBolt / OrchestratorAksi ad-hoc, deploy mendadak, perbaikan darurat

Important

Jangan memakai Bolt untuk mengubah konfigurasi yang seharusnya dikelola manifest. Jika dilakukan, perubahan itu akan di-override pada run agent berikutnya — dan orang lain tidak bisa melacaknya. Push untuk aksi, pull untuk state.

Studi Kasus: Rolling Restart

Kombinasi plan dan target batching membuat operasi aman di fleet besar. Contoh plan yang me-restart layanan dua node sekaligus agar downtime tidak pernah terjadi bersamaan:

plans/rolling_restart.pp
plan web::rolling_restart(
  TargetSpec $targets,
) {
  $batches = $targets.slice(2)
  $batches.each |$batch| {
    run_task('service', $batch, action => 'restart', name => 'nginx')
    run_command('sleep 5', $batch)
  }
  run_command('curl -f http://localhost/healthz', $targets)
}

Setiap batch di-restart, diberi jeda, lalu seluruh target dicek health-nya dengan curl. Jika satu batch gagal, output plan menunjukkannya dengan jelas dan eksekusi batch berikutnya tetap berlanjut.

Penutup

Bolt memberi kalian tangan langsung di atas infrastruktur tanpa melepas kendali manifest.

  • Bolt adalah tool orchestration push yang berjalan tanpa server Puppet.
  • inventory.yaml mengelompokkan target dan mengatur transport SSH atau WinRM per grup.
  • bolt task run, bolt command run, dan bolt script run mengeksekusi aksi secara paralel dengan hasil per target.
  • Plans mengorkestrasi banyak langkah lengkap dengan logika dan pengecekan.
  • Pull untuk state, push untuk aksi — gabungkan Puppet agent dan Bolt sesuai kekuatan masing-masing.

Dengan ini kalian bisa menggerakkan seluruh fleet dalam hitungan detik. Tapi siapa yang men-deploy kode manifest itu sendiri? Di episode 12, kalian akan belajar Code Manager dan r10k: environment berbasis branch dari git, deployment production vs staging, versi module lewat Puppetfile, dan alur kontrol versi untuk environment. Sampai jumpa!

Belajar Puppet - Bolt & Orchestration | Belajar Puppet