Belajar Puppet - Modules & Forge
Episode 14 of 23

Belajar Puppet - Modules & Forge

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.

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

Pendahuluan

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.

Mengenal Puppet Forge

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:

Cari module nginx di Forge
puppet module search nginx

Hasil pencarian menampilkan nama module, versi terbaru, dan ringkasan. Setelah menemukan module yang cocok, kita bisa menginstallnya:

Install module dari Forge
puppet module install puppetlabs-nginx

Untuk mengunci ke versi spesifik, tambahkan flag --version:

Install module versi tertentu
puppet module install puppetlabs-nginx --version 5.5.0

Module yang diinstall di sisi server disimpan di direktori environment masing-masing, misalnya /etc/puppetlabs/code/environments/production/modules/nginx.

Mengevaluasi Kualitas Module

Tidak semua module di Forge diciptakan setara. Sebelum memakai module publik, evaluasi dengan kriteria berikut:

KriteriaPertanyaan yang Diajukan
Maintainer aktifKapan terakhir kali update? Ada release terbaru?
PopularitasBerapa jumlah downloads dan endorsements?
KompatibilitasMendukung versi Puppet dan OS yang kita pakai?
PengujianAda hasil test otomatis yang ditampilkan di halaman module?
LisensiLisensi apa yang dipakai? Cocok dengan kebijakan perusahaan?
DokumentasiREADME 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:

Puppetfile
forge 'https://forge.puppet.com'
 
mod 'puppetlabs-nginx', '5.5.0'
mod 'puppetlabs-apache', '11.2.0'

Anatomi Module Standar

Module publik yang baik mengikuti struktur konvensi Puppet:

Struktur direktori module
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 module

Aturan 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.

Pengembangan Module dengan PDK

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:

Buat module baru dengan PDK
pdk new module profile_nginx

PDK 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:

Tambahkan class ke module
pdk new class profile_nginx::server

Validasi kode dilakukan dengan pdk validate:

Validasi sintaks dan style
pdk validate

Dan unit test dijalankan dengan pdk test unit:

Jalankan unit test
pdk test unit

Important

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.

metadata.json: Identitas Module

File metadata.json adalah identitas setiap module. PDK membuat file ini otomatis, dan isinya menentukan nama, versi, dependensi, serta sistem operasi yang didukung.

metadata.json hasil scaffold PDK
{
  "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.

Versioning dengan Semver

Semua module Puppet mengikuti Semantic Versioning (semver) dengan format MAJOR.MINOR.PATCH. Memahami ini penting saat memilih versi yang aman:

VersiPerubahanRisiko
MAJOR naikAPI dan behavior berubah, ada breaking changeTinggi, wajib baca changelog
MINOR naikFitur baru, masih backward compatibleRendah
PATCH naikPerbaikan bug dan security, tanpa fitur baruSangat 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.

Penutup

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:

  • Puppet Forge adalah registry utama untuk menemukan module siap pakai.
  • Evaluasi kualitas selalu dilakukan sebelum memakai module publik, terutama aspek maintainer dan lisensi.
  • PDK menghasilkan skeleton module standar plus tooling validasi dan unit test.
  • metadata.json menyimpan identitas, dependensi, dan dukungan OS module.
  • Semver menentukan tingkat risiko setiap upgrade versi module.

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.

Belajar Puppet - Modules & Forge | Belajar Puppet