Percepat pekerjaan dengan modul publik dari Puppet Forge, mulai dari mencari, mengevaluasi kualitas, hingga menginstall dengan puppet module install. Pelajari juga pengembangan module sendiri dengan PDK, metadata.json, dan versioning semver.

Di episode 13 kalian sudah belajar mengamankan komunikasi Puppet dengan sertifikat SSL, RBAC, dan Hiera eyaml untuk secrets. Sekarang kita bicara tentang bagaimana mempercepat pekerjaan dengan kode orang lain. Puppet Forge adalah registry resmi berisi ribuan module siap pakai, sedangkan PDK (Puppet Development Kit) adalah alat resmi untuk membangun module sendiri dengan standar yang sama.
Kebanyakan pekerjaan Puppet di produksi bukan menulis semuanya dari nol. Tim justru memakai module publik untuk hal yang sudah terselesaikan dengan baik, lalu menulis module internal hanya untuk logika bisnis yang unik. Karena itu, kemampuan memilih module yang berkualitas sama pentingnya dengan kemampuan menulis module.
Pada episode ini kita akan membahas cara mencari dan menginstall module dari Forge, kriteria mengevaluasi kualitas dan maintainer, pengembangan module dengan PDK, metadata.json, serta aturan versioning semver.
Forge adalah tempat module dipublikasikan oleh Puppet dan komunitas. Setiap module mengikuti konvensi struktur yang sama, sehingga begitu kalian paham satu module, kalian bisa membaca module lain dengan mudah.
Untuk mencari module, gunakan perintah puppet module search dari CLI:
puppet module search nginxHasil pencarian menampilkan nama module, versi terbaru, dan ringkasan. Setelah menemukan module yang cocok, kita bisa menginstallnya:
puppet module install puppetlabs-nginxUntuk mengunci ke versi spesifik, tambahkan flag --version:
puppet module install puppetlabs-nginx --version 5.5.0Module yang diinstall di sisi server disimpan di direktori environment masing-masing, misalnya /etc/puppetlabs/code/environments/production/modules/nginx.
Tidak semua module di Forge diciptakan setara. Sebelum memakai module publik, evaluasi dengan kriteria berikut:
| Kriteria | Pertanyaan yang Diajukan |
|---|---|
| Maintainer aktif | Kapan terakhir kali update? Ada release terbaru? |
| Popularitas | Berapa jumlah downloads dan endorsements? |
| Kompatibilitas | Mendukung versi Puppet dan OS yang kita pakai? |
| Pengujian | Ada hasil test otomatis yang ditampilkan di halaman module? |
| Lisensi | Lisensi apa yang dipakai? Cocok dengan kebijakan perusahaan? |
| Dokumentasi | README dan referensi kelas lengkap atau minim? |
Tip
Module yang dikelola oleh Puppet (badge resmi) umumnya paling aman karena mendapat dukungan dan pembaruan keamanan. Untuk module komunitas, periksa apakah module diuji dengan berbagai versi Puppet, misalnya badge supported atau maintained dari halaman module di Forge.
Setelah menilai, jangan lupa merekam module ke Puppetfile agar versinya terkunci saat deploy environment, seperti yang sudah kita bahas di episode 12:
forge 'https://forge.puppet.com'
mod 'puppetlabs-nginx', '5.5.0'
mod 'puppetlabs-apache', '11.2.0'Module publik yang baik mengikuti struktur konvensi Puppet:
module-name/
├── manifests/
│ ├── init.pp # Class utama dengan nama sama seperti module
│ └── ...
├── lib/ # Custom facts, functions, providers
│ ├── facter/
│ ├── puppet/functions/
│ └── puppet/provider/
├── files/ # File statis
├── templates/ # Template epp (Puppet templating)
├── data/ # Hiera data internal module
├── spec/ # Unit test rspec-puppet
└── metadata.json # Metadata moduleAturan penting: nama class utama di init.pp harus sama dengan nama module. Class nginx ada di module puppetlabs-nginx, dan class tambahan seperti nginx::server ada di file manifests/server.pp.
PDK adalah toolkit resmi untuk membuat, menguji, dan memvalidasi module. PDK menghasilkan skeleton module yang sudah sesuai standar sehingga kita tidak perlu membangun struktur dari nol.
Pertama, buat module baru:
pdk new module profile_nginxPDK akan menanyakan beberapa pilihan interaktif, seperti template puppetlabs-spec dan versi minimum Puppet. Setelah selesai, kita punya struktur module lengkap beserta metadata dan spec helper.
Untuk menambahkan class:
pdk new class profile_nginx::serverValidasi kode dilakukan dengan pdk validate:
pdk validateDan unit test dijalankan dengan pdk test unit:
pdk test unitImportant
PDK memanfaatkan puppet_litmus atau rspec-puppet di belakang layar. Biasakan menjalankan pdk validate sebelum setiap commit dan pdk test unit di CI, karena ini menjaga module tetap kompatibel dengan versi Puppet yang kita dukung.
File metadata.json adalah identitas setiap module. PDK membuat file ini otomatis, dan isinya menentukan nama, versi, dependensi, serta sistem operasi yang didukung.
{
"name": "perusahaan-profile_nginx",
"version": "0.1.0",
"author": "arman",
"summary": "Module untuk profile nginx internal",
"license": "Apache-2.0",
"source": "https://github.com/perusahaan/puppet-profile_nginx",
"dependencies": [
{ "name": "puppetlabs-stdlib", "version_requirement": ">= 6.0.0 < 10.0.0" },
{ "name": "puppetlabs-nginx", "version_requirement": ">= 5.0.0" }
],
"operatingsystem_support": [
{ "operatingsystem": "Ubuntu", "operatingsystemrelease": ["20.04", "22.04"] }
]
}Field dependencies penting karena Puppet akan menolak install module jika dependensinya tidak terpenuhi. Pastikan batas versi realistis, jangan terlalu sempit agar tidak cepat usang, dan jangan terlalu lebar agar tidak pecah.
Semua module Puppet mengikuti Semantic Versioning (semver) dengan format MAJOR.MINOR.PATCH. Memahami ini penting saat memilih versi yang aman:
| Versi | Perubahan | Risiko |
|---|---|---|
MAJOR naik | API dan behavior berubah, ada breaking change | Tinggi, wajib baca changelog |
MINOR naik | Fitur baru, masih backward compatible | Rendah |
PATCH naik | Perbaikan bug dan security, tanpa fitur baru | Sangat rendah |
Warning
Hindari menginstall module dengan versi terbaru secara membabi buta tanpa membaca changelog. Upgrade MAJOR di luar semver bisa mengubah nama class atau parameter, mematahkan manifest yang sudah berjalan. Terapkan kebijakan update bertahap, dimulai dari environment staging seperti yang kita bahas di episode 12.
Pada episode 14 ini kalian sudah memahami ekosistem module Puppet: mencari di Forge dengan puppet module search, mengevaluasi kualitas modul berdasarkan maintainer, popularitas, dan lisensi, menginstall dengan puppet module install, mengembangkan module sendiri dengan PDK, serta mengunci identitas module lewat metadata.json dan aturan semver.
Inti yang harus dibawa pulang:
Module yang ditulis dengan baik tetap bisa melukai tim jika dipakai tanpa pola yang benar. Di episode 15 kita akan membahas Belajar Puppet - Best Practice: idempotency, pengelompokan resource, pola roles dan profiles, naming convention, pembatasan exec, serta kualitas kode dengan puppet-lint dan dokumentasi.