Belajar Puppet - Code Manager & r10k
Episode 12 of 23

Belajar Puppet - Code Manager & r10k

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.

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

Pendahuluan

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.

Konsep Environment di Puppet

Environment adalah cara Puppet mengisolasi kumpulan manifest dan modul untuk node yang berbeda. Secara fisik, environment adalah direktori berisi manifests, modules, dan hieradata.

Struktur direktori environments
/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.

AspekDirectory EnvironmentsBranch-Based Environments
Sumber kebenaranFolder di serverGit branch
Pembuatan environmentManualOtomatis oleh r10k / Code Manager
ReproducibilityRendahTinggi, terkunci ke commit
RollbackSulitMudah, cukup revert commit
Cocok untukLab dan eksperimenTim dan produksi

Mapping Git Branch Menjadi Environment

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.

Cek branch di control repository
git branch -a
# * main
#   staging
#   feature/loadtest
#   feature/nginx-refactor

Saat 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 vs r10k

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.

Aspekr10kCode Manager
LisensiOpen sourceBawaan Puppet Enterprise
Konfigurasir10k.yaml manualVia PE Console dan puppet-code
Trigger deployCLI atau cronCLI, webhook, atau API
Kontrol aksesDiatur filesystemDiatur lewat RBAC PE
Post-deployManualOtomatis, termasuk clear cache

Jika memakai open source, kita memasang r10k lewat Ruby gem lalu mengkonfigurasinya menggunakan r10k.yaml.

r10k.yaml
:r10k:
  :root: /etc/puppetlabs/code
:sources:
  :control:
    :remote: git@github.com:perusahaan/puppet-control.git
    :basedir: /etc/puppetlabs/code/environments

Perintah untuk menyebarkan seluruh environment:

Deploy semua environment dengan r10k
r10k deploy environment -p

Bagi 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: Kunci Versi Module

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.

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

Install module dari Puppetfile
r10k puppetfile install

Workflow Deploy Code yang Aman

Workflow yang baik selalu dimulai dari kontrol versi, bukan dari server. Alur standar yang dipakai tim Puppet di produksi:

  1. Commit perubahan manifest atau Puppetfile ke branch fitur.
  2. Push branch, lalu deploy environment fitur untuk validasi.
  3. Setelah lulus review, merge ke main untuk produksi.
  4. Deploy environment production dan biarkan agent mengambil catalog baru.
Deploy environment fitur dan produksi
r10k deploy environment feature/loadtest -p
r10k deploy environment production -p

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

Penutup

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:

  • Environment adalah isolasi manifest dan modul; branch-based environments menjadikan git sebagai sumber kebenaran tunggal.
  • Code Manager untuk Puppet Enterprise dan r10k untuk open source adalah dua alat utama untuk mewujudkannya.
  • Puppetfile mengunci versi module Forge dan module git internal sehingga environment reproducible.
  • Deploy workflow dimulai dari commit dan push, bukan dari edit file di server.
  • Rollback cukup dilakukan dengan revert commit lalu deploy ulang.

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.

Belajar Puppet - Code Manager & r10k | Belajar Puppet