Menelusuri bagaimana Puppet lahir: dari era scripting manual, CFEngine 1993, lahirnya Puppet oleh Luke Kanies pada 2005, hingga Chef dan Ansible. Memahami masalah yang dipecahkan Puppet dan posisinya di antara tool lain.

Di episode 0 sebelumnya kalian sudah menyiapkan prasyarat dan environment — mulai dari skill dasar Linux dan Ruby, hingga instalasi Puppet Server, PDK, dan node uji. Kali ini kita akan menarik napas dari hands-on dan menyelami mengapa Puppet ada. Kita akan menelusuri sejarah configuration management, memahami masalah nyata yang melahirkannya, dan melihat posisi Puppet di antara Chef, Ansible, dan SaltStack.
Mengapa memahami sejarah ini penting? Sebagai engineer, kalian tidak hanya perlu tahu cara menulis manifest, tapi juga alasan Puppet dirancang seperti sekarang — mengapa ia pull-based, mengapa declarative, dan mengapa ekosistemnya begitu lengkap. Tanpa konteks ini, kalian akan kesulitan menilai kapan Puppet adalah pilihan yang tepat dan kapan bukan.
Sebelum ada configuration management, mengelola server adalah pekerjaan yang melelahkan dan rawan kesalahan. Bayangkan mengelola seratus server web: setiap kali ada konfigurasi baru, kalian harus login satu per satu, menjalankan skrip shell atau mengetik perintah manual, lalu berharap tidak ada yang terlewat. Skrip shell sekalipun punya kelemahan besar:
Dari frustrasi itulah lahir generasi tools yang disebut configuration management.
CFEngine karya Mark Burgess adalah tool configuration management pertama. Ia memperkenalkan konsep yang kini menjadi standar industri: mendeskripsikan keadaan yang diinginkan dan membiarkan sistem menjaga dirinya sendiri agar selalu konvergen ke keadaan itu. CFEngine sangat ringan dan efisien, tetapi bahasa konfigurasinya tergolong primitif dan ekosistemnya kecil.
Luke Kanies membangun Puppet pada tahun 2005 untuk mengatasi keterbatasan CFEngine. Puppet membawa dua terobosan besar:
Puppet juga memperkenalkan ekosistem yang lengkap: server pusat yang menyusun catalog, agent yang berjalan terjadwal, serta reporting terpusat. Inilah yang membuat Puppet menjadi salah satu tools paling dominan di era pertamanya.
Chef hadir dengan filosofi berbeda: kode ditulis dalam Ruby murni dan menganut model client-server dengan arsitektur yang mirip. Pendekatan "infrastructure as code dengan bahasa pemrograman sungguhan" ini memberi fleksibilitas besar, tapi kurva belajarnya lebih curam karena mengharuskan paham Ruby.
Ansible, karya Michael DeHaan, membalik paradigma: ia push-based dan agentless — tidak ada agent yang berjalan di node, cukup SSH. Pendekatan ini sangat sederhana untuk dipelajari dan cepat diterapkan, sehingga Ansible populer di kalangan yang menginginkan kemudahan.
| Tahun | Tool | Pelopor | Model | Keunikan |
|---|---|---|---|---|
| 1993 | CFEngine | Mark Burgess | Pull, agent | Tool pertama; policy-based |
| 2005 | Puppet | Luke Kanies | Pull, agent | Declarative, model resource, ekosistem lengkap |
| 2009 | Chef | Adam Jacob | Pull, agent | Kode Ruby murni |
| 2012 | Ansible | Michael DeHaan | Push, agentless | SSH, sederhana |
Puppet adalah sistem model-driven: semua yang dikelola direpresentasikan sebagai model resource dengan properti, bukan sebagai instruksi langkah demi langkah. Manifest Puppet menyatakan bagaimana sistem seharusnya — misalnya nginx terinstall versi tertentu, service berjalan, dan file konfigurasi berisi konten tertentu.
Sistem Puppet juga pull-based: setiap node menjalankan agent-nya secara terjadwal (default 30 menit), agent mengambil catalog dari server, lalu menerapkannya. Model ini berbeda dengan Ansible yang push — perbedaan ini penting untuk dipahami karena memengaruhi cara kalian mendesain lingkungan Puppet.
package { 'nginx':
ensure => installed,
}
service { 'nginx':
ensure => running,
enable => true,
}Perhatikan: kalian tidak menulis "jalankan apt install, lalu jalankan systemctl start". Kalian mendeklarasikan keadaan akhir — Puppet yang menentukan langkah dan mengecek apakah sudah tercapai.
Masalah inti yang dipecahkan Puppet: mendefinisikan keadaan yang diinginkan untuk tiap server — package, service, file, user — dan menjaganya tetap konvergen. Jika ada orang atau proses lain mengubah file konfigurasi, pada agent run berikutnya Puppet akan mengembalikannya ke keadaan yang dideklarasikan. Inilah arti idempotensi di dunia nyata.
Scripting manual tidak akan bertahan untuk ribuan node. Puppet didesain untuk skala itu:
Puppet bukan sekadar satu binary — ia satu ekosistem:
| Komponen | Fungsi |
|---|---|
| Puppet Server | Menyusun catalog dari manifest |
| Puppet Agent | Berjalan di tiap node, menerapkan catalog |
| PuppetDB | Penyimpanan fakta dan laporan terpusat |
| Bolt | Orchestration untuk menjalankan task on-demand |
| Puppet Enterprise | Console, RBAC, compliance di atas Puppet OSS |
| Aspek | Puppet | Ansible | Chef | SaltStack |
|---|---|---|---|---|
| Model | Pull, agent | Push, agentless | Pull, agent | Hybrid (master + agentless) |
| Bahasa | DSL mirip Ruby | YAML + Python | Ruby | YAML/Python |
| Kurva belajar | Sedang | Rendah | Tinggi | Sedang |
| Reporting | PuppetDB terpusat | AWX/plugins | Chef Automate | Salt master |
| Ideal untuk | Infrastruktur enterprise stabil | Ad-hoc & otomasi cepat | Environment Ruby-heavy | Infrastruktur besar & fleksibel |
Perbandingan mendalam akan kita bahas di episode-episode lanjutan; untuk sekarang cukup pahami posisi masing-masing.
Pada episode 1 ini, kita telah menelusuri perjalanan configuration management: dari era scripting manual yang tidak idempotent, lahirnya CFEngine pada 1993, Puppet oleh Luke Kanies pada 2005, hingga Chef dan Ansible yang datang belakangan. Kalian juga sudah memahami model declarative pull-based Puppet serta masalah besar yang dipecahkannya — desired state, konvergensi, skala ribuan node, dan ekosistem yang lengkap.
Inti yang harus dibawa pulang:
Di episode 2 berikutnya kita akan membedah konsep dasar dan arsitektur utama Puppet — alur agent run dari Facter mengumpulkan fakta, autentikasi sertifikat SSL, kompilasi catalog di server, hingga pelaporan ke PuppetDB. Siapkan kopi, karena ini episode paling fundamental untuk memahami cara kerja Puppet dari dalam!