Kelola kode Puppet secara profesional dengan branch-based environments berbasis git. Pelajari perbedaan Code Manager pada Puppet Enterprise dengan r10k pada Puppet open source, serta workflow deploy code dengan Puppetfile dan kontrol versi environment.

Di episode 11 kalian sudah belajar bagaimana Bolt menjalankan tasks dan plan secara push, serta cara menggabungkan mode push tersebut dengan pull model dari Puppet agent. Kini kita naik satu level: ketika tim bertumbuh, branch development bertambah, dan infrastruktur meluas, cara kita mengelola dan menyebarkan kode Puppet menjadi penentu utama kesuksesan automasi.
Menyebarkan kode secara manual dengan copy-paste manifest ke server akan berakhir buruk. Solusi industri untuk masalah ini adalah environment management berbasis git, dengan dua alat utama: Code Manager untuk pengguna Puppet Enterprise, dan r10k untuk pengguna Puppet open source. Keduanya lahir dari ide yang sama, yaitu memperlakukan kode infrastruktur sebagai codebase yang berversi.
Pada episode ini kita akan membahas mengapa branch-based environments menjadi standar, bagaimana git branch dipetakan menjadi environment Puppet, perbandingan Code Manager dengan r10k, penulisan Puppetfile untuk mengunci versi module, hingga workflow deploy code yang aman untuk di-rollback.
Environment adalah cara Puppet mengisolasi kumpulan manifest dan modul untuk node yang berbeda. Secara fisik, environment adalah direktori berisi manifests, modules, dan hieradata.
/etc/puppetlabs/code/environments/
├── production/
│ ├── manifests/
│ │ └── site.pp
│ ├── modules/
│ │ ├── stdlib/
│ │ └── nginx/
│ ├── data/
│ └── Puppetfile
├── staging/
└── feature-loadtest/Ada dua pendekatan untuk membangun environment: directory environments di mana kita membuat folder secara manual, dan branch-based environments di mana environment dihasilkan otomatis dari branch git. Pendekatan kedua inilah yang dipakai Code Manager dan r10k.
| Aspek | Directory Environments | Branch-Based Environments |
|---|---|---|
| Sumber kebenaran | Folder di server | Git branch |
| Pembuatan environment | Manual | Otomatis oleh r10k / Code Manager |
| Reproducibility | Rendah | Tinggi, terkunci ke commit |
| Rollback | Sulit | Mudah, cukup revert commit |
| Cocok untuk | Lab dan eksperimen | Tim dan produksi |
Konvensi dasarnya sederhana: setiap branch di control repository menjadi environment Puppet. Branch main menjadi environment production, branch staging menjadi environment staging, dan setiap branch fitur menjadi environment tersendiri dengan nama yang sama.
git branch -a
# * main
# staging
# feature/loadtest
# feature/nginx-refactorSaat branch feature/loadtest didorong dan di-deploy, r10k akan membuat environment dengan nama yang sama. Node yang meminta catalog untuk environment tersebut akan mendapat manifest dari isi branch itu. Inilah keunggulan utama: setiap eksperimen terisolasi tanpa mengganggu produksi.
Code Manager adalah fitur bawaan Puppet Enterprise, sedangkan r10k adalah tool Ruby gem yang dipakai pada Puppet open source. Keduanya membaca sumber yang sama, yaitu control repository git dan Puppetfile. Perbedaannya terletak pada kemudahan integrasi dan fitur tambahan.
| Aspek | r10k | Code Manager |
|---|---|---|
| Lisensi | Open source | Bawaan Puppet Enterprise |
| Konfigurasi | r10k.yaml manual | Via PE Console dan puppet-code |
| Trigger deploy | CLI atau cron | CLI, webhook, atau API |
| Kontrol akses | Diatur filesystem | Diatur lewat RBAC PE |
| Post-deploy | Manual | Otomatis, termasuk clear cache |
Jika memakai open source, kita memasang r10k lewat Ruby gem lalu mengkonfigurasinya menggunakan r10k.yaml.
:r10k:
:root: /etc/puppetlabs/code
:sources:
:control:
:remote: git@github.com:perusahaan/puppet-control.git
:basedir: /etc/puppetlabs/code/environmentsPerintah untuk menyebarkan seluruh environment:
r10k deploy environment -pBagi pengguna Puppet Enterprise, perintah yang setara adalah puppet-code deploy --all atau memanggil endpoint webhook POST /code-manager/v1/deploys dari CI.
Tip
Gunakan flag -p (purge) agar r10k menghapus module lama yang tidak lagi ada di Puppetfile. Tanpa flag ini, sisa module lama bisa menumpuk dan menyebabkan konflik resource yang sulit dilacak.
Puppetfile adalah file Ruby DSL di root control repository yang mendeklarasikan module mana yang dipakai beserta versinya. r10k dan Code Manager membaca file ini setiap kali deploy untuk menyinkronkan module ke dalam environment.
forge 'https://forge.puppet.com'
mod 'puppetlabs-stdlib'
mod 'puppetlabs-nginx', '5.5.0'
mod 'puppetlabs-apache', '11.2.0'
mod 'site_common',
git: 'https://github.com/perusahaan/puppet-site_common.git',
ref: 'v2.3.1'Untuk module dari Puppet Forge kita cukup menulis nama author-nama dan versi. Untuk module internal milik perusahaan, kita bisa menunjuk langsung ke repository git dan mengunci ref atau commit tertentu. Ini yang membuat reproducibility terjaga: isi environment ditentukan persis oleh satu commit control repository.
Kita juga bisa menginstall seluruh module yang terdaftar di Puppetfile tanpa deploy environment penuh:
r10k puppetfile installWorkflow yang baik selalu dimulai dari kontrol versi, bukan dari server. Alur standar yang dipakai tim Puppet di produksi:
main untuk produksi.production dan biarkan agent mengambil catalog baru.r10k deploy environment feature/loadtest -p
r10k deploy environment production -pKarena seluruh kode terversi di git, rollback cukup dilakukan dengan me-revert commit lalu deploy ulang dengan r10k deploy environment production -p. Tidak ada lagi istilah "siapa yang mengubah file di server kemarin".
Important
Pastikan control repository berisi manifests/site.pp atau hiera yang sesuai dengan konfigurasi server. Jika environment hasil deploy kosong atau gagal compile, agent yang menunjuk environment tersebut akan gagal mengambil catalog dan menjalankan konfigurasi lama.
Pada episode 12 ini kalian sudah memahami bahwa environment management berbasis git adalah fondasi untuk mengelola kode Puppet secara profesional. Kita telah membahas konsep environment, pemetaan git branch menjadi environment, perbandingan Code Manager di PE dengan r10k di open source, penulisan Puppetfile untuk mengunci versi module, serta workflow deploy code yang mendukung rollback cepat.
Inti yang harus dibawa pulang:
Kode yang terkontrol dengan baik masih belum aman jika lapisan keamanannya lemah. Di episode 13 kita akan membahas Belajar Puppet - Authentication & Security, mulai dari sertifikat SSL, penandatanganan certificate agent, autosign, hingga RBAC dan penyimpanan secrets dengan Hiera eyaml.