Belajar Puppet - Manifests & Resource Types
Episode 4 of 23

Belajar Puppet - Manifests & Resource Types

Fondasi bahasa Puppet: struktur manifest, anatomi resource type dengan title, parameter, dan properties, tujuh resource type dasar, konsep deklaratif dan idempoten, serta pengujian lokal dengan puppet apply.

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

Pendahuluan

Di episode 3 sebelumnya kalian berhasil membangun lab Puppet — server dan agent terhubung lewat sertifikat SSL, dan agent run pertama berjalan mulus. Namun catalog yang diterapkan masih kosong, karena kalian belum menulis apa pun. Episode 4 adalah saatnya mengisi catalog itu: kita akan belajar menulis manifest dengan resource type — fondasi bahasa Puppet yang akan kalian pakai setiap hari.

Manifest: Rumah bagi Konfigurasi

Manifest adalah file Puppet dengan ekstensi .pp yang berisi kode konfigurasi. Di sinilah kalian mendeklarasikan resource. Manifest bisa diterapkan langsung ke mesin lokal dengan puppet apply, atau dikompilasi server menjadi catalog untuk node jarak jauh.

Sebuah manifest berisi satu atau lebih resource declaration. Ini contoh manifest minimal:

contoh.pp: manifest minimal
package { 'curl':
  ensure => installed,
}
 
file { '/etc/motd':
  ensure  => file,
  content => 'Welcome to my managed server',
}

Perhatikan polanya: kalian menyatakan keadaan akhir, bukan langkah. Ini perbedaan fundamental dari scripting.

Anatomi Resource Type

Setiap resource declaration memiliki tiga bagian:

  • Type — jenis resource, misalnya package, service, atau file.
  • Title — nama unik yang mengidentifikasi resource tersebut.
  • Parameter — atribut yang menentukan properti dan perilaku resource.
Anatomi resource declaration
package { 'nginx':
  ensure => '1.18.0',
}

Pada contoh di atas, package adalah type, nginx adalah title, dan ensure => '1.18.0' adalah parameter. Ada parameter yang disebut property — parameter yang menggambarkan keadaan yang diinginkan dan akan diperiksa oleh agent, misalnya ensure, content, mode. Parameter non-property hanya mengatur cara resource dibuat, misalnya before, require, atau provider.

BagianContohPeran
TypepackageAbstraksi element sistem
Title'nginx'Identitas unik resource
Propertyensure => runningKeadaan yang diperiksa & dikonvergensi
Parameterrequire => Package['nginx']Mengatur urutan dan perilaku

Resource Types Dasar

Tujuh resource type berikut adalah yang paling sering dipakai:

package

Mengelola paket melalui package manager (apt, dnf, yum).

Resource package
package { 'nginx':
  ensure => installed,
}

Nilai ensure bisa berupa installed/present (terinstall), absent (terhapus), latest (selalu versi terbaru), atau nomor versi spesifik.

service

Mengelola service systemd (atau init).

Resource service
service { 'nginx':
  ensure => running,
  enable => true,
}

ensure => running memastikan service menyala; enable => true memastikan service ikut menyala saat boot.

file

Mengelola file dan direktori — konten, kepemilikan, dan permission.

Resource file
file { '/etc/nginx/nginx.conf':
  ensure  => file,
  owner   => 'root',
  group   => 'root',
  mode    => '0644',
  source  => 'puppet:///modules/nginx/nginx.conf',
}

exec

Menjalankan perintah eksternal — untuk hal yang tidak bisa ditangani resource lain. Perhatikan unless agar idempotent.

Resource exec yang idempotent
exec { 'download-release':
  command => 'wget -O /tmp/app.tar.gz https://example.com/app.tar.gz',
  path    => ['/usr/bin', '/bin'],
  unless  => 'test -f /tmp/app.tar.gz',
}

user dan group

Mengelola akun sistem dan grup.

Resource user dan group
group { 'app':
  ensure => present,
}
 
user { 'app':
  ensure     => present,
  gid        => 'app',
  shell      => '/usr/sbin/nologin',
  managehome => false,
}

cron

Mengelola cron job.

Resource cron
cron { 'backup-daily':
  command => '/usr/local/bin/backup.sh',
  minute  => 0,
  hour    => 2,
}

Note

Ada sekitar dua lusin resource type bawaan Puppet — termasuk mount, exec, host, selinux, hingga notify. Kalian bisa melihat dokumentasi lengkap setiap type dengan perintah puppet describe package atau puppet describe file.

Deklaratif dan Idempoten

Sifat deklaratif Puppet bermakna: kalian mendeklarasikan hasil, dan Puppet yang menentukan cara mencapainya. Dari sifat ini lahir idempotensi — menjalankan manifest berkali-kali menghasilkan keadaan akhir yang sama, tanpa efek samping pengulangan.

puppet apply bisa dijalankan berulang
puppet apply nginx.pp
puppet apply nginx.pp
puppet apply nginx.pp

Run pertama akan membuat perubahan; run kedua dan ketiga hanya memverifikasi bahwa keadaan sudah sesuai — itulah alasan mengapa agent aman berjalan terjadwal setiap 30 menit.

Important

Idempotensi adalah kontrak antara penulis manifest dan sistem. Resource exec adalah pengecualian yang paling sering melanggar kontrak ini — tanpa guard seperti unless atau onlyif, exec akan menjalankan perintahnya setiap agent run. Gunakan exec hanya jika resource lain tidak bisa, dan selalu beri guard.

Menguji Manifest dengan puppet apply

Sebelum resource dikirim ke node lain, uji dulu secara lokal. puppet apply menerapkan manifest langsung ke mesin tempat kalian berada — cara tercepat memvalidasi sintaks dan perilaku.

nginx.pp: install dan jalankan nginx
package { 'nginx':
  ensure => installed,
}
 
service { 'nginx':
  ensure => running,
  enable => true,
  require => Package['nginx'],
}
Terapkan manifest secara lokal
sudo puppet apply nginx.pp

Perhatikan hubungan require => Package['nginx'] pada service — parameter ini memastikan paket terinstall dulu sebelum service dikelola. Ini contoh ordering yang akan kita perdalam saat membahas class dan module.

Tip

Gunakan puppet apply --noop untuk dry run: Puppet akan menunjukkan perubahan yang akan dilakukan tanpa benar-benar menerapkannya. Kombinasi --noop dan --verbose sangat berguna untuk memeriksa apa yang akan berubah sebelum mengeksekusi.

Penutup

Pada episode 4 ini kalian sudah menguasai fondasi bahasa Puppet: memahami struktur manifest, membedah anatomi resource declaration dengan type, title, dan parameter, mengenal tujuh resource type dasar (package, service, file, exec, user, group, cron), serta menguji manifest secara lokal dengan puppet apply.

Inti yang harus dibawa pulang:

  • Manifest .pp adalah rumah konfigurasi; resource declaration adalah isinya.
  • Resource = type + title + parameter; property menggambarkan keadaan yang diinginkan.
  • Deklaratif & idempoten — nyatakan hasil akhir, jalankan sesering mungkin, hasil tetap sama.
  • exec butuh guard (unless/onlyif) agar tidak melanggar idempotensi.
  • puppet apply --noop adalah dry run favorit sebelum menerapkan.

Di episode 5 berikutnya kita akan menaikkan level: classes, modules & roles/profiles — mengorganisir manifest ke dalam class yang bisa dipakai ulang, memahami struktur module lengkap, dan menerapkan pola Roles/Profiles yang menjadi standar industri untuk menjaga hierarki class tetap bersih. Persiapkan PDK kalian, karena episode berikutnya sarat hands-on!