Puppet Fundamental / Pengenalan Puppet
Puppet adalah open source configuration management tool, digunakan untuk mengatur konfigurasi pada sebuah host, baik berupa file, packages, maupun users secara sentralisasi. Penulis menggunakan puppet untuk mengatur semua server yang penulis tangani, yang jumlahnya begitu banyak, kalau hanya 1-10 mungkin bisa, tapi kalau sudah ratusan beda cerita, karena tidak mungkin penulis mengkonfigurasi satu-persatu server tersebut, karena selain tidak efisien, besar peluang terjadinya human error.
Sebagai gambaran saja, jika penulis menginginkan perubahan pada sebuah konfigurasi, tapi di semua server, misalkan penulis ingin menambahkan rules pada pf (packet filter), tinggal merubah rules pada puppet server atau puppetmaster, maka semua host yang terdaftar sebagai puppet client, rules pf akan dirubah oleh puppet client.
Pengguna Puppet
Puppet biasa digunakan pada environment bersekala dari kecil hingga besar berikut sebagian daftar client yang mungkin tidak asing bagi kita menggunakan puppet:
- Oracle,
- Google,
- Wikimedia Foundation,
- Twitter,
- Dell,
- Rackspace,
- Zynga,
- New York Stock Exchange,
- Disney,
- Citrix Systems,
- Los Alamos National Laboratory,
- Stanford University,
- Nokia,
- dll.
Bisa bayangkan bagaimana system bisa bekerja pada sekala sebesar perusahaan diatas, bahkan perusahaan seperti VMware, Google Ventures, and Cisco rela Invest di Puppet Labs.
Puppet Platform
Puppet bisa bekerja pada lintas platform berikut daftar sistem operasi yang di dukung pada saat penulisan:
Linux:
- Red Hat Enterprise Linux,
- CentOS
- Scientific Linux,
- Oracle Linux,
- Debian,
- Ubuntu,
- Fedora,
- SUSE Linux Enterprise Server,
- Gentoo Linux,
- Mandriva Corporate Server,
- ArchLinux.
BSD:
- FreeBSD,
- OpenBSD.
Unix lainnya:
- Mac OS X,
- Oracle Solaris,
- AIX,
- HP-UX.
Windows:
- Windows Server 2003,
- Windows 2008.
Puppet bekerja menggunakan metode client-server walaupun bisa stand-alone, semua konfigurasi tersentralisasi pada puppet server, semua sistem operasi yang di dukung puppet, bisa di jalankan sebagai puppet server, kecuali windows, hanya bisa di jadikan sebagai puppet client. Jadi kita bisa jadikan OpenBSD sebagai puppetmaster dan Solaris sebagai puppet clientnya.
Puppet bekerja dengan metode client-server, ini berarti sebuah client (puppet client) atau lebih akan menghubungi puppet server, bisa jadi lebih dari satu puppet server. Secara priodik (defaultnya 30 menit) puppet client akan menghubungi puppet server, untuk mendownload konfigurasi terbaru dari puppet server disebut dengan catalog dan mensikronisasikan dengan konfigurasi yang ada, apabila ditemukan perubahan, maka puppet akan merubahnya. Setelah itu puppet client, mengirimkan laporan ke puppet server, mengenai ada tidaknya perubahan, jika ada perubahan maka di laporkan pula bagian mana yang berubah.
Berikut diagram yang menunjukan bagaimana alur data pada puppet:
sumber gambar: puppetlabs |
Fungisionalitas pada puppet dibangun dengan lapisan-lapisan layer yang terpisah, setiap layer bertanggung jawab terhadap sistem, masing-masing bertanggung jawab untuk aspek tetap dari sistem, dengan kontrol ketat terhadap bagaimana informasi lewat di antara lapisan:
sumber gambar: puppetlabs |
Resource yang bisa di manajemen puppet
Pada saat penulisan artikel ini puppet sudah bisa memanajemen resource dibawah ini:
- augeas
- computer
- cron
- exec
- file
- filebucket
- group
- host
- interface
- k5login
- macauthorization
- mailalias
- maillist
- mcx
- mount
- nagios_command
- nagios_contact
- nagios_contactgroup
- nagios_host
- nagios_hostdependency
- nagios_hostescalation
- nagios_hostextinfo
- nagios_hostgroup
- nagios_service
- nagios_servicedependency
- nagios_serviceescalation
- nagios_serviceextinfo
- nagios_servicegroup
- nagios_timeperiod
- notify
- package
- resources
- router
- schedule
- scheduled_task
- selboolean
- selmodule
- service
- ssh_authorized_key
- sshkey
- stage
- tidy
- user
- vlan
- yumrepo
- zfs
- zone
- zpool
Sebagai contoh, bila kita ingin membuat cron, tinggal membuat kelasnya di puppet server, maka cron akan terbentuk dengan sendirinya di semua host yang terdaftar sebagai puppet client. Dan perlu diingat tidak sebatas list diatas puppet bisa di manajemen, tergantung dari kreatifitas dan kebutuhan kita sendiri.
Di sini kita tidak membicarakan bagaiamana instalasi maupun penjelasan mengenai tools, tapi penulis hanya ingin menunjukan bagaimana puppet bekerja. Penjelasan seperti instalasi, konfigurasi, dan lain-lain bisa di lihat setelah artikel ini. Tujuan dari demonstrasi ini adalah agar pembaca melihat garis besarnya saja, dan demo ini di implementasikan di localhost bukan dengan metode client-server.
Yang akan penulis lakukan adalah instalasi puppet, kemudian kita akan membuat puppet script, yang melakukan instalasi paket httpd, meng-enable-nya, mengecek proses httpd, jika mati, akan di hidupkan puppet. FYI: penulis juga menambahkan epel repository.
Instalasi Puppet
##############
[root@labs01.unixhat ~]# yum install puppet -y
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: centos.biz.net.id
* epel: epel.idrepo.or.id
* extras: centos.biz.net.id
* updates: centos.biz.net.id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package puppet.noarch 0:2.6.13-2.el6 will be installed
--> Processing Dependency: ruby(abi) = 1.8 for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: ruby >= 1.8.1 for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: facter >= 1.5 for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: ruby-shadow for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: ruby-augeas for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: ruby(selinux) for package: puppet-2.6.13-2.el6.noarch
--> Processing Dependency: /usr/bin/ruby for package: puppet-2.6.13-2.el6.noarch
--> Running transaction check
---> Package facter.noarch 0:1.6.4-1.el6 will be installed
---> Package libselinux-ruby.i686 0:2.0.94-5.2.el6 will be installed
---> Package ruby.i686 0:1.8.7.352-4.el6_2 will be installed
---> Package ruby-augeas.i686 0:0.3.0-2.el6 will be installed
--> Processing Dependency: augeas-libs >= 0.5.1 for package: ruby-augeas-0.3.0-2.el6.i686
--> Processing Dependency: libaugeas.so.0(AUGEAS_0.8.0) for package: ruby-augeas-0.3.0-2.el6.i686
--> Processing Dependency: libaugeas.so.0(AUGEAS_0.1.0) for package: ruby-augeas-0.3.0-2.el6.i686
--> Processing Dependency: libaugeas.so.0 for package: ruby-augeas-0.3.0-2.el6.i686
--> Processing Dependency: libaugeas.so.0(AUGEAS_0.11.0) for package: ruby-augeas-0.3.0-2.el6.i686
---> Package ruby-libs.i686 0:1.8.7.352-4.el6_2 will be installed
--> Processing Dependency: libreadline.so.5 for package: ruby-libs-1.8.7.352-4.el6_2.i686
---> Package ruby-shadow.i686 0:1.4.1-13.el6 will be installed
--> Running transaction check
---> Package augeas-libs.i686 0:0.9.0-1.el6 will be installed
---> Package compat-readline5.i686 0:5.2-17.1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================
Installing:
puppet noarch 2.6.13-2.el6 epel 811 k
Installing for dependencies:
augeas-libs i686 0.9.0-1.el6 base 311 k
compat-readline5 i686 5.2-17.1.el6 base 128 k
facter noarch 1.6.4-1.el6 epel 66 k
libselinux-ruby i686 2.0.94-5.2.el6 base 97 k
ruby i686 1.8.7.352-4.el6_2 updates 532 k
ruby-augeas i686 0.3.0-2.el6 epel 20 k
ruby-libs i686 1.8.7.352-4.el6_2 updates 1.6 M
ruby-shadow i686 1.4.1-13.el6 epel 11 k
Transaction Summary
=============================================================================================================================================================
Install 9 Package(s)
Total download size: 3.6 M
Installed size: 11 M
Downloading Packages:
(1/9): augeas-libs-0.9.0-1.el6.i686.rpm | 311 kB 00:00
(2/9): compat-readline5-5.2-17.1.el6.i686.rpm | 128 kB 00:00
(3/9): facter-1.6.4-1.el6.noarch.rpm | 66 kB 00:00
(4/9): libselinux-ruby-2.0.94-5.2.el6.i686.rpm | 97 kB 00:00
(5/9): puppet-2.6.13-2.el6.noarch.rpm | 811 kB 00:02
(6/9): ruby-1.8.7.352-4.el6_2.i686.rpm | 532 kB 00:01
(7/9): ruby-augeas-0.3.0-2.el6.i686.rpm | 20 kB 00:00
(8/9): ruby-libs-1.8.7.352-4.el6_2.i686.rpm | 1.6 MB 00:05
(9/9): ruby-shadow-1.4.1-13.el6.i686.rpm | 11 kB 00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 296 kB/s | 3.6 MB 00:12
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
Importing GPG key 0xC105B9DE:
Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>
Package: centos-release-6-2.el6.centos.7.i686 (@base/$releasever)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Importing GPG key 0x0608B895:
Userid : EPEL (6) <epel@fedoraproject.org>
Package: epel-release-6-5.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Warning: RPMDB altered outside of yum.
Installing : compat-readline5-5.2-17.1.el6.i686 1/9
Installing : ruby-libs-1.8.7.352-4.el6_2.i686 2/9
Installing : ruby-1.8.7.352-4.el6_2.i686 3/9
Installing : facter-1.6.4-1.el6.noarch 4/9
Installing : ruby-shadow-1.4.1-13.el6.i686 5/9
Installing : libselinux-ruby-2.0.94-5.2.el6.i686 6/9
Installing : augeas-libs-0.9.0-1.el6.i686 7/9
Installing : ruby-augeas-0.3.0-2.el6.i686 8/9
Installing : puppet-2.6.13-2.el6.noarch 9/9
Installed:
puppet.noarch 0:2.6.13-2.el6
Dependency Installed:
augeas-libs.i686 0:0.9.0-1.el6 compat-readline5.i686 0:5.2-17.1.el6 facter.noarch 0:1.6.4-1.el6 libselinux-ruby.i686 0:2.0.94-5.2.el6
ruby.i686 0:1.8.7.352-4.el6_2 ruby-augeas.i686 0:0.3.0-2.el6 ruby-libs.i686 0:1.8.7.352-4.el6_2 ruby-shadow.i686 0:1.4.1-13.el6
Complete!
[root@labs01.unixhat ~]#
Mengecek apakah sudah terinstall atau belum paket httpd, jika tidak ada output, berarti paket httpd belum terinstall.
[root@labs01.unixhat ~]# rpm -qa|grep httpd
Sekarang mari kita membuat puppet script yang mudah
[root@labs01.unixhat ~]# vi apply.pp
dengan isi sebagai berikut:
package { "httpd":
ensure => present,
}
service { "httpd":
enable => true,
ensure => running,
}
Mari kita eksekusi script yang telah kita buat, jika tidak ada masalah dalam tahap instalasi atau puppet script kita maka akan tampak seperti berikut:
[root@labs01.unixhat ~]# puppet apply apply.pp
notice: /Stage[main]//Package[httpd]/ensure: created
notice: /Stage[main]//Service[httpd]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 111.43 seconds
[root@labs01.unixhat ~]#
Tampaknya proses berjalan lancar, mari kita cek hasil dari puppet:
[root@labs01.unixhat ~]# rpm -qa|grep httpd
httpd-2.2.15-15.el6.centos.i686
yups, paket httpd sudah terinstal, mari kita cek coba mematikan proses httpdnya
[root@labs01.unixhat ~]# /etc/init.d/httpd status
httpd (pid 5119) is running...
[root@labs01.unixhat ~]# /etc/init.d/httpd stop
Stopping httpd: [ OK ]
[root@labs01.unixhat ~]# /etc/init.d/httpd status
httpd is stopped
[root@labs01.unixhat ~]#
ok, service httpd sudah di matikan. Kita coba jalankan script puppet yang telah kita buat tadi, jika memang benar, maka service akan di hidupkan kembali oleh puppet.
[root@labs01.unixhat ~]# puppet apply apply.pp
notice: /Stage[main]//Service[httpd]/ensure: ensure changed 'stopped' to 'running'
notice: Finished catalog run in 1.30 seconds
[root@labs01.unixhat ~]#
Nampak output puppet, memberi kabar gembira, mari kita cek:
[root@labs01.unixhat ~]# /etc/init.d/httpd status
httpd (pid 5586) is running...
[root@labs01.unixhat ~]#
Yups terjalan berjalan dengan baik, puppet menghidupkan service httpd, sekarang mari kita me-disable httpd pada chkconfig:
[root@labs01.unixhat ~]# chkconfig --list|grep httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@labs01.unixhat ~]# chkconfig httpd off
[root@labs01.unixhat ~]# chkconfig --list|grep httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@labs01.unixhat ~]#
Mari kita jalankan kembali script puppet, dan kita lihat hasilnya:
[root@labs01.unixhat ~]# puppet apply apply.pp
notice: /Stage[main]//Service[httpd]/enable: enable changed 'false' to 'true'
notice: Finished catalog run in 1.44 seconds
[root@labs01.unixhat ~]# chkconfig --list|grep httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
OK, puppet berhasil meng-enble runlevel untuk 2,3,4,5. yang tadi sebelumnya mati.
Bahkan bila kita menghapus paket httpd, maka puppet akan menginstallnya kembali, mari kita lihat:
[root@labs01.unixhat ~]# yum remove httpd -y
Loaded plugins: fastestmirror, priorities, refresh-packagekit, security, versionlock
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.i686 0:2.2.15-15.el6.centos will be erased
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================
Package Arch Version Repository Size
=============================================================================================================================================================
Removing:
httpd i686 2.2.15-15.el6.centos @base 2.8 M
Transaction Summary
=============================================================================================================================================================
Remove 1 Package(s)
Installed size: 2.8 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : httpd-2.2.15-15.el6.centos.i686 1/1
Removed:
httpd.i686 0:2.2.15-15.el6.centos
Complete!
[root@labs01.unixhat ~]# rpm -qa|grep httpd # kosong
[root@labs01.unixhat ~]# puppet apply apply.pp
err: /Stage[main]//Service[httpd]/ensure: change from stopped to running failed: Could not start Service[httpd]: Execution of '/sbin/service httpd start' returned 1: at /root/apply.pp:7
notice: /Stage[main]//Package[httpd]/ensure: created
notice: Finished catalog run in 40.80 seconds
[root@labs01.unixhat ~]# rpm -qa|grep httpd
httpd-2.2.15-15.el6.centos.i686
[root@labs01.unixhat ~]#
Yups, Alhamdulillah selesai sudah penjelasan puppet sebagai server automasi dan manajemen konfigurasi, penulis berharap pembaca sekarang mengerti mengapa puppet menjadi server automasi di datacenter berbagai belahan dunia. Untuk lebih dalam mengenai puppet, pembaca bisa mengikuti terus artikel berikutnya.