Tutorial Pedge untuk Pemula: Dasar-Dasar & DSL
⚡ Ringkasan Cerdas
Puppet adalah platform manajemen konfigurasi sumber terbuka yang mengotomatiskan cara server disediakan, dikonfigurasi, dan dijaga konsistensinya. Platform ini menerapkan infrastruktur sebagai kode melalui bahasa khusus domain deklaratif, menggantikan administrasi manual yang berulang di seluruh armada server yang besar.
Puppet adalah alat manajemen konfigurasi sumber terbuka yang memungkinkan Anda mendefinisikan infrastruktur sebagai kode dan menjaga sejumlah besar server dalam keadaan yang konsisten dan dapat diulang. Sebelum kita mempelajari Puppet, mari kita pahami terlebih dahulu manajemen konfigurasi.
Apa itu Manajemen Konfigurasi?
Manajemen konfigurasi adalah proses memelihara perangkat lunak dan sistem komputer — seperti server, penyimpanan, dan jaringan — dalam keadaan yang diketahui, diinginkan, dan konsisten. Proses ini juga menyediakan akses ke catatan historis yang akurat tentang keadaan sistem untuk keperluan manajemen proyek dan audit.
Administrator sistem umumnya melakukan tugas-tugas berulang, seperti menginstal server dan mengkonfigurasinya. Para profesional ini dapat mengotomatiskan pekerjaan ini dengan menulis skrip.
Namun, hal ini menjadi pekerjaan yang sulit ketika mereka mengerjakan infrastruktur yang sangat besar. Alat manajemen konfigurasi seperti Puppet diperkenalkan untuk mengatasi masalah ini.
Apa itu Wayang?
Wayang Puppet adalah alat manajemen sistem untuk memusatkan dan mengotomatiskan proses manajemen konfigurasi. Puppet juga digunakan sebagai alat penyebaran perangkat lunak.
Ini adalah perangkat lunak manajemen konfigurasi sumber terbuka, yang banyak digunakan untuk konfigurasi server, manajemen, penyebaran, dan orkestrasi berbagai aplikasi dan layanan di seluruh infrastruktur suatu organisasi.
Wayang dirancang khusus untuk mengelola konfigurasi Linux dan Windows sistem. Itu ditulis dalam Ruby dan menggunakan keunikannya Doma Sistimewa Language (DSL) untuk menjelaskan konfigurasi sistem.
Apa versi Bonekanya?
Boneka hadir dalam dua versi:
- Boneka Sumber TerbukaIni adalah versi dasar dari alat manajemen konfigurasi Puppet, yang juga dikenal sebagai Open Source Puppet. Tersedia langsung dari situs web Puppet dan dilisensikan di bawah sistem Apache 2.0.
- Puppet Enterprise: Versi komersial yang menawarkan fitur-fitur seperti pelaporan kepatuhan, orkestrasi, kontrol akses berbasis peran, GUI, API, dan alat baris perintah untuk pengelolaan node yang efektif.
Boneka apa yang bisa dilakukan?
Sebagai contoh, anggaplah Anda memiliki infrastruktur dengan sekitar 100 server. Sebagai administrator sistem, peran Anda adalah memastikan bahwa semua server ini selalu mutakhir dan berjalan dengan fungsionalitas penuh.

Untuk melakukan ini, Anda dapat menggunakan Puppet, yang memungkinkan Anda menulis kode sederhana yang dapat diimplementasikan secara otomatis di server-server tersebut. Hal ini mengurangi upaya manusia dan membuat proses pengembangan menjadi cepat dan efektif.

Boneka melakukan fungsi-fungsi berikut:
- Wayang memungkinkan Anda menentukan konfigurasi berbeda untuk setiap host.
- Alat ini memungkinkan Anda untuk terus memantau server guna memastikan apakah konfigurasi yang dibutuhkan ada dan belum diubah. Jika konfigurasi diubah, Puppet akan kembali ke konfigurasi yang telah ditentukan sebelumnya pada host.
- Selain itu, sistem ini juga memberikan kendali atas setiap sistem yang dikonfigurasi, sehingga perubahan terpusat secara otomatis diterapkan di mana pun.
- Ini juga digunakan sebagai alat penyebaran, karena secara otomatis menyebarkan perangkat lunak ke sistem. Ini mengimplementasikan Infrastruktur sebagai kode, karena kebijakan dan konfigurasi ditulis sebagai kode.
DSL Boneka dan Paradigma Pemrograman
Sebelum mempelajari Puppet DSL, mari kita pahami paradigma pemrograman. Paradigma pemrograman adalah gaya yang Anda gunakan dalam pemrograman komputer.
Empat jenis paradigma adalah:
- Imperatif.
- Deklaratif.
- Fungsional (yang dianggap sebagai bagian dari paradigma deklaratif).
- Berorientasi pada objek.
Kita akan berfokus pada paradigma imperatif dan deklaratif.
Paradigma Imperatif
Paradigma pemrograman ini mengekspresikan logika suatu komputasi (apa yang harus dilakukan) dan juga menjelaskan alur kontrolnya (bagaimana melakukannya).
Contoh:
Misalkan Anda akan pergi ke kantor. Anda memesan taksi dan mulai memberikan petunjuk langkah demi langkah kepada pengemudi hingga Anda sampai di kantor. Menentukan apa yang harus dilakukan dan bagaimana melakukannya adalah gaya imperatif.
Paradigma Deklaratif
Paradigma pemrograman ini mengekspresikan logika suatu komputasi (apa yang harus dilakukan) tanpa menjelaskan alur kontrolnya (bagaimana cara melakukannya).
Contoh:
Misalkan Anda akan pergi ke kantor. Anda memesan taksi Uber dan hanya menentukan tujuan akhir (kantor). Menentukan apa yang harus dilakukan, tetapi tidak bagaimana melakukannya, adalah gaya deklaratif.
| Pola pikir | Apa yang harus dilakukan | Bagaimana melakukan |
|---|---|---|
| sangat penting | Ya | Ya |
| Deklaratif | Ya | Tidak |
Wayang menggunakan paradigma pemrograman deklaratif
Wayang menggunakan pendekatan pemrograman deklaratif.
Contoh: Buat pengguna di sistem.
Hal ini dapat dilakukan menggunakan pola pemrograman imperatif dengan skrip shell. Di sini, kita menentukan cara membuat pengguna dan perintah apa yang akan digunakan pada sistem operasi.
Namun, hal ini juga dapat dilakukan menggunakan pola pemrograman deklaratif hanya dengan beberapa baris kode Puppet dan bahasa khusus domain (DSL) Puppet, dan tetap mencapai hasil yang sama.
Model penerapan alat manajemen konfigurasi
Ada dua model penerapan untuk alat manajemen konfigurasi:
- Model penerapan berbasis push: dimulai oleh node master.
- Model penerapan berbasis tarik: diprakarsai oleh agen.
Model penerapan berbasis push
Dalam model penyebaran ini, server master mengirimkan konfigurasi dan perangkat lunak ke masing-masing agen. Setelah memverifikasi koneksi yang aman, master menjalankan perintah dari jarak jauh pada agen. Misalnya, Mungkin dan Tumpukan Garam.
Model penyebaran berbasis tarikan
Dalam model penerapan ini, masing-masing server menghubungi server master, memverifikasi dan membangun koneksi yang aman, mengunduh konfigurasi dan perangkat lunaknya, lalu mengkonfigurasi diri mereka sendiri sesuai kebutuhan — misalnya, Puppet dan Chef.
Bagaimana Wayang bekerja?
Puppet didasarkan pada model penerapan tarik (pull deployment), di mana node agen melakukan pengecekan secara berkala — setelah setiap 1800 beberapa detik — dengan node master untuk melihat apakah ada yang perlu diperbarui pada agen. Jika pembaruan diperlukan, agen akan mengambil kode Puppet yang diperlukan dari master dan melakukan tindakan yang dibutuhkan.
Mari kita jelaskan hal ini dengan contoh pengaturan master-agent.
Master
Ini adalah mesin berbasis Linux dengan perangkat lunak Puppet master yang terpasang di dalamnya. Mesin ini bertanggung jawab untuk memelihara konfigurasi dalam bentuk kode Puppet. Node master hanya dapat berupa Linux.
Agen
Ini adalah mesin target yang dikelola oleh Puppet, dengan perangkat lunak agen Puppet yang terpasang di dalamnya.
Agen tersebut dapat dikonfigurasi pada sistem operasi apa pun yang didukung, seperti Linux, Windows, Solarisatau Mac OS.
Komunikasi antara master dan agen terjalin melalui sertifikat yang aman.

Komunikasi antara Master dan Agen
Langkah 1) Setelah konektivitas terjalin antara agen dan master, agen Puppet mengirimkan data tentang statusnya ke server master Puppet. Data ini disebut Fakta, dan informasi ini mencakup nama host, detail kernel, alamat IP, detail nama file, dan sebagainya.

Langkah 2) Puppet master menggunakan data ini dan menyusun daftar konfigurasi yang akan diterapkan pada agen. Daftar konfigurasi yang akan dilakukan pada agen ini dikenal sebagai sebuah katalogHal ini dapat mencakup instalasi paket, peningkatan atau penghapusan, pembuatan sistem file, pembuatan atau penghapusan pengguna, reboot server, perubahan konfigurasi IP, dan sebagainya.
Langkah 3) Agen menggunakan daftar konfigurasi ini untuk menerapkan perubahan konfigurasi yang diperlukan pada node.
Jika tidak ada penyimpangan dalam konfigurasi, agen tidak melakukan perubahan konfigurasi apa pun dan membiarkan node berjalan dengan konfigurasi yang sama.

Langkah 4) Setelah selesai, node tersebut akan melaporkan kembali ke Puppet master, yang menunjukkan bahwa konfigurasi telah diterapkan dan selesai.
Blok Boneka
Puppet memberikan fleksibilitas untuk mengintegrasikan laporan dengan alat pihak ketiga menggunakan API Puppet.
Empat jenis blok bangunan boneka adalah:
- Publikasi
- Kelas
- Nyata
- Modul
Sumber Daya Wayang
Sumber daya Puppet adalah blok bangunan dari Puppet.
Sumber daya adalah fungsi bawaan yang berjalan di bagian belakang untuk melakukan operasi yang dibutuhkan di Puppet.
Kelas Boneka
Berbagai sumber daya yang berbeda dapat dikelompokkan menjadi satu unit yang disebut kelas.
Manifes Wayang
Manifest adalah direktori yang berisi file DSL Puppet. File-file ini memiliki ekstensi .pp, yang merupakan singkatan dari program Puppet. Kode Puppet terdiri dari definisi atau deklarasi kelas-kelas Puppet.
Modul Boneka
Modul adalah kumpulan file dan direktori, seperti manifest dan definisi kelas. Modul merupakan unit yang dapat digunakan kembali dan dibagikan di Puppet.
Sebagai contoh, MySQL modul menginstal dan mengkonfigurasi MySQL, Dan Jenkins modul mengelola Jenkins.

Jenis sumber daya Wayang
Secara umum, sebuah sistem terdiri dari file, pengguna, layanan, proses, paket, dan sebagainya. Dalam Puppet, ini disebut sumber daya, dan merupakan blok bangunan fundamental dari Puppet.
Semua operasi pada agen Puppet dilakukan dengan bantuan sumber daya Puppet.
Sumber daya Puppet adalah alat siap pakai yang digunakan untuk melakukan berbagai tugas dan operasi pada platform apa pun yang didukung. Kita dapat menggunakan satu sumber daya Puppet untuk melakukan tugas tertentu, atau kita dapat menggunakan beberapa sumber daya Puppet bersama-sama untuk melakukan penyebaran konfigurasi aplikasi yang kompleks.
Sumber daya dapat memiliki tipe yang berbeda. Kegunaan boneka sumber daya ke jenis sumber daya untuk menggambarkan konfigurasi sistem.
Ada tiga jenis jenis sumber daya:
- Jenis sumber daya inti boneka atau bawaan.
- Jenis sumber daya yang ditentukan boneka.
- Jenis sumber daya kustom boneka.
Jenis sumber daya inti boneka atau bawaan
Tipe sumber daya inti atau bawaan adalah tipe sumber daya Puppet yang sudah dibuat sebelumnya dan disertakan bersama perangkat lunak Puppet. Semua tipe sumber daya inti atau bawaan Puppet ditulis dan dipelihara oleh tim Puppet.
Jenis sumber daya yang ditentukan boneka
Tipe sumber daya yang didefinisikan adalah tipe sumber daya ringan yang ditulis dalam bahasa deklaratif Puppet menggunakan kombinasi tipe sumber daya yang sudah ada.
Jenis sumber daya kustom boneka
Jenis sumber daya khusus adalah jenis sumber daya yang sepenuhnya disesuaikan dan ditulis dalam Ruby.
Mari kita jelajahi lebih lanjut jenis-jenis sumber daya Puppet.
Di terminal, ketik perintah berikut untuk menampilkan daftar subperintah yang terkait dengan Puppet:
Puppet --help
Dalam kasus kami, kami tertarik pada sub-perintah “sumber“, yang akan kita gunakan untuk mencari informasi tentang tipe sumber daya Puppet bawaan.
Di terminal, ketik salah satu perintah berikut untuk menampilkan daftar tindakan terkait dengan subperintah Puppet “sumber"
Puppet help resource Puppet resource --help
Dalam kasus ini, kita memiliki sumber sebagai subperintah dan –tipe sebagai tindakan tersebut.
Boneka memiliki 49 jenis sumber daya inti bawaan.
Di terminal, ketik perintah berikut untuk menampilkan daftar tipe sumber daya Puppet bawaan yang tersedia:
puppet resource –types
Setiap jenis mendukung daftar atribut. Atribut ini memberikan penjelasan rinci yang digunakan Wayang untuk mengelola sumber daya.
Untuk mengetahui semua atribut yang terkait dengan tipe sumber daya Puppet, gunakan perintah berikut:
puppet describe <resource type name>
Parameter tersebut akan mencantumkan semua atribut yang tersedia untuk tipe sumber daya tersebut.
paket deskripsi boneka
Sangat sulit bagi seseorang yang baru mengenal Puppet untuk memahami dan menghubungkan banyak file kode Puppet yang tidak terkelola. Di sinilah kita membutuhkan beberapa dukungan kelompok.ping Untuk menghubungkan berbagai operasi. Tujuannya adalah untuk menyelesaikan satu masalah tunggal, seperti semua operasi yang diperlukan untuk mengkonfigurasi SSH pada server, layanan NTP, atau server web atau server basis data lengkap dari awal.
Apa itu Kelas Boneka?
Kelas Puppet adalah kumpulan sumber daya Puppet yang dikemas bersama sebagai satu unit.
Boneka memperkenalkan kelas untuk membuat struktur dapat digunakan kembali dan terorganisir.
Pertama, kita perlu mendefinisikan kelas menggunakan sintaks definisi kelas. Kelas harus unik dan hanya dapat dideklarasikan satu kali dengan nama yang sama:
class <class-name> {
<Resource declarations>
}
Contoh:
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
Sejauh ini, kita hanya mendefinisikan kelasnya; kita belum menggunakannya di mana pun. Ini berarti kode yang telah kita tulis tidak akan pernah dieksekusi kecuali kita mendeklarasikan kelas ini di tempat lain.
Deklarasi Kelas
Untuk menggunakan kelas yang telah didefinisikan dalam kode Anda, gunakan memasukkan kata kunci.
class ntpconfig {
file {
"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
}
include ntpconfig
Mari kita pahami hal ini dengan skenario dunia nyata.
Demo instal NTP
Pertama, pastikan paket NTP belum terpasang di server. Perintah berikut tidak akan mengembalikan apa pun jika paket NTP tidak terpasang di server:
rpm -qa | grep -i ntp
Seperti yang kita lihat, paket NTP sudah ada di server. Mari kita hapus paket NTP yang sudah ada:
yum remove ntp
Setelah menghapus paket, pastikan file ntp.conf sudah tidak ada lagi:
ls -lrt /etc/ntp.conf
Verifikasi bahwa layanan ntp tidak ada dengan menjalankan perintah berikut:
systemctl status ntp
Buat file .pp baru untuk menyimpan kode. Dari baris perintah:
vi demontp.pp
Beralih ke mode sisipan dengan menekan tombol i pada keyboard.
Ketik kode berikut untuk membuat file baru:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
Setelah selesai mengedit, tekan tombol Esc.
Untuk menyimpan file, tekan :wq!
Langkah selanjutnya adalah memeriksa apakah kode tersebut memiliki kesalahan sintaksis. Jalankan perintah berikut:
puppet parser validate demontp.pp
Pastikan Anda telah beralih ke akar Agar pengguna dapat menyelesaikan pengujian tanpa kesalahan, dengan menjalankan perintah:
su root
uji adalah langkah berikutnya dalam proses pembuatan kode. Jalankan perintah berikut untuk melakukan uji coba:
Puppet applies demontp.pp --noop
Langkah terakhir adalah menjalankan Gunakan Puppet dalam mode nyata dan verifikasi hasilnya.
puppet apply demontp.pp
Puppet tidak melakukan apa pun karena kelas demo tersebut hanya didefinisikan tapi tidak menyatakan.
Jadi, sampai Anda mendeklarasikan kelas Puppet, kode tersebut tidak akan diterapkan.
Mari kita menyatakan kelas demo di dalam kode yang sama menggunakan mencantumkan nama kelas di akhir kode:
# Class Definition
class ntpconfig {
# Installing NTP Package
package {"ntp":
ensure=> "present",
}
# Configuring NTP configuration file
file {"/etc/ntp.conf":
ensure=> "present",
content=> "server 0.centos.pool.ntp.org iburst\n",
}
# Starting NTP services
service {"ntpd":
ensure=> "running",
}
}
# Class Declaration
include ntpconfig
Lagi, memeriksa apakah kode tersebut memiliki kesalahan sintaksis. Jalankan perintah berikut:
puppet parser validate demontp.pp
Pastikan Anda telah beralih ke akar Agar pengguna dapat menyelesaikan pengujian tanpa kesalahan, dengan menjalankan perintah:
su root
pengujian adalah langkah berikutnya dalam proses pembuatan kode. Jalankan perintah berikut untuk melakukan uji coba:
Puppet apply demontp.pp --noop
Langkah terakhir adalah menjalankan Gunakan Puppet dalam mode nyata dan verifikasi hasilnya.
puppet apply demontp.pp
Kali ini, kode tersebut diterapkan karena kelas telah didefinisikan dan kemudian dideklarasikan.
Pastikan file ntp.conf sudah ada:
ls -lrt /etc/ntp.conf
Verifikasi bahwa layanan ntp telah dimulai dengan menjalankan perintah berikut:
systemctl status ntpd












