Membedah arsitektur Puppet dari dalam: alur agent run dari Facter mengumpulkan fakta, autentikasi sertifikat SSL, kompilasi catalog di server, hingga pelaporan ke PuppetDB beserta sepuluh komponen utamanya.

Di episode 1 sebelumnya kalian sudah memahami sejarah configuration management dan mengapa Puppet ada — mulai dari era scripting manual hingga ekosistem lengkap yang ia bawa. Sekarang saatnya membedah arsitektur utama Puppet: bagaimana sebuah manifest sederhana bisa menjaga ribuan node tetap konvergen. Ini adalah episode paling fundamental dalam series, karena hampir semua topik lanjutan — Hiera, PuppetDB, Roles/Profiles, hingga Puppet Enterprise — berakar pada arsitektur ini.
Setiap node yang dikelola Puppet menjalankan agent run secara berkala (default 30 menit). Satu siklus agent run terdiri dari enam tahap:
Node Server PuppetDB
| 1. fakta node | |
|--------------------->| |
| 2. SSL handshake | |
|--------------------->| |
| 3. kompilasi catalog| |
| (manifest + data) | |
| | |
| 4. catalog dikirim | |
|<---------------------| |
| 5. agent terapkan | |
| 6. laporan hasil | |
|--------------------->|-------------------->|Note
Fakta yang dikumpulkan Facter ikut menentukan catalog. Karena itu, node dengan sistem operasi berbeda bisa menerima catalog berbeda dari manifest yang sama — inilah dasar data-driven configuration yang nanti diperkuat oleh Hiera.
Sebelum agent pertama kali menerima catalog, ia harus memperkenalkan diri lewat sertifikat. Alur autentikasinya:
sudo puppetserver ca sign --certname agent.example.comPuppet adalah kumpulan komponen yang saling bekerja sama. Pahami peran masing-masing:
| Komponen | Peran | Tempat berjalan |
|---|---|---|
| Puppet Server | Menyusun catalog dari manifest | Server pusat |
| Puppet Agent | Menerapkan catalog di tiap node | Setiap node |
| PuppetDB | Menyimpan fakta & laporan | Server (opsional) |
| Manifest | Kode sumber konfigurasi | Direktori module di server |
| Resource type | Abstraksi element sistem (paket, service, file) | Ditulis di manifest |
| Class | Kumpulan resource yang diberi nama | Ditulis di manifest |
| Module | Paket manifest, template, file, dan data | Direktori module di server |
| Node classification | Menentukan class mana untuk node mana | File atau classifier |
| Hiera | Basis data konfigurasi terpisah dari logic | Server |
| Facter | Pengumpul fakta node | Setiap node (agent) |
Puppet Server adalah pusat kendali. Ia menyimpan manifest, membaca node classification, mengambil data dari Hiera, dan mengompilasi catalog — satu untuk setiap node, berdasarkan fakta dan klasifikasinya. Ia juga menjadi Certificate Authority (CA) yang mengelola sertifikat semua agent.
Agent adalah proses yang berjalan di setiap node yang dikelola. Secara terjadwal (default 30 menit), agent mengambil catalog dari server, membandingkannya dengan keadaan aktual, lalu menerapkan perubahannya. Agent juga menjalankan Facter untuk mengumpulkan fakta.
PuppetDB adalah gudang data terpusat. Semua fakta dan laporan agent run disimpan di sini, sehingga kalian bisa menjawab pertanyaan seperti: node mana yang masih memakai OS lama, atau berapa banyak node yang gagal tadi malam. PuppetDB juga mendukung fitur export data untuk tool lain.
Manifest adalah file yang berisi kode konfigurasi Puppet. Inilah tempat kalian menulis resource type, class, dan pengaturan node. Ekstensi manifest adalah .pp (Puppet Program).
Resource type adalah abstraksi element sistem: package, service, file, user, group, cron, dan lainnya. Setiap resource memiliki title untuk identifikasi dan parameter yang menentukan propertinya.
package { 'nginx':
ensure => '1.18.0',
}Class adalah kumpulan resource yang diberi nama sehingga bisa dipakai ulang. Class memungkinkan kalian menulis konfigurasi sekali dan menerapkannya ke banyak node — ini dasar pemikiran di balik module.
Module adalah paket terstruktur yang berisi manifest, template, file, dan data Hiera. Module bisa diunduh dari Puppet Forge atau ditulis sendiri. Struktur internal module akan kita bedah di episode 5.
Node classification menentukan class mana yang diterapkan ke node mana. Ada beberapa mekanisme: file site.pp di server, classifier bawaan Puppet Enterprise, atau data Hiera. Tujuannya satu — memetakan node ke konfigurasi.
Hiera adalah basis data hierarkis yang memisahkan data dari logic. Alih-alih menulis nilai konfigurasi di dalam manifest, kalian menyimpannya di Hiera dan mengaksesnya lewat lookup. Ini memungkinkan satu class dipakai untuk ribuan node dengan nilai berbeda per environment.
Facter adalah tool pengumpul fakta yang berjalan di agent. Fakta seperti os.name, networking.ip, dan memory menjadi input untuk kompilasi catalog. Dengan fakta, satu manifest bisa menghasilkan catalog yang berbeda untuk node yang berbeda.
Tip
Facter bisa dijalankan manual untuk menjelajahi fakta node. Coba facter --puppet di node uji kalian dan bandingkan hasilnya dengan puppet facts — kalian akan melihat betapa banyak informasi tersedia untuk membuat keputusan konfigurasi.
Pada episode 2 ini, kalian telah memahami arsitektur Puppet dari hulu ke hilir: alur agent run enam tahap yang dimulai dari Facter mengumpulkan fakta, autentikasi sertifikat SSL, kompilasi catalog di server, hingga pelaporan ke PuppetDB — serta sepuluh komponen utama yang bekerja sama membentuk satu kesatuan.
Inti yang harus dibawa pulang:
Di episode 3 berikutnya kita akan praktek langsung — melakukan setup dan instalasi Puppet Server serta agent dari repo resmi, mengonfigurasi DNS dan sertifikat dengan puppet ssl bootstrap, melakukan puppet agent -t pertama, dan membandingkan Puppet OSS dengan Puppet Enterprise. Persiapkan node kalian, karena sekarang saatnya beraksi!