Konfigurasi Puppet dan Puppetmaster

Untuk informasi apa itu puppet, detail mekanisme dan bagaimana puppet bekerja bisa di lihat pada blog ini juga di http://unixhat.blogspot.com/2012/02/server-automasi-dan-manajemen.html, disini penulis akan membatasi pada konfigurasi puppet dan puppet server, agar tidak terjadi kesalahpahaman versi yang digunakan adalah 3.0.0-1 jadi bila anda ingin mencoba pastikan dengan versi yang sama atau diatasnya, karena versi 2.6.x atau 2.7.x sudah banyak yang berbeda. Berikut hal-hal yang akan penulis uraikan:

1. Penjelasan File-file pada puppet
2. Tool pada puppet
3. Instalasi puppet dan puppet server
4. Koneksi antara puppet agent dengan puppet server

1. Penjelasan File-file pada puppet

A. puppet.conf
File ini adalah konfigurasi utama pada puppet, pada linux terletak /etc/puppet/puppet.conf untuk versi opensource dan /etc/puppetlabs/puppet pada versi enterprise, sedangkan pada Windows terletak pada C:\Documents and Settings\All Users\Application Data\PuppetLabs\puppet\etc untuk Windows 2003, dan C:\ProgramData\PuppetLabs\puppet\etc untuk Windows 7 dan Windows 2008.

File ini menggunakan format yang sama seperti file 'INI', dengan [config blocks] untuk membuat sebuah group dari sebuah baris seperti setting = value. Kita bisa juga menyisipkan variable seperti $logdir, yang perlu diingat adalah hati-hati pada saat kita menggunakan $environment karena sebuah variabel spesial.
Berikut adalah contoh default puppet.conf
[main]
    # The Puppet log directory.
    # The default value is '$vardir/log'.
    logdir = /var/log/puppet

    # Where Puppet PID files are kept.
    # The default value is '$vardir/run'.
    rundir = /var/run/puppet

    # Where SSL certificates are kept.
    # The default value is '$confdir/ssl'.
    ssldir = $vardir/ssl

[agent]
    # The file in which puppetd stores a list of the classes
    # associated with the retrieved configuratiion.  Can be loaded in
    # the separate ``puppet`` executable using the ``--loadclasses``
    # option.
    # The default value is '$confdir/classes.txt'.
    classfile = $vardir/classes.txt

    # Where puppetd caches the local configuration.  An
    # extension indicating the cache format is added automatically.
    # The default value is '$confdir/localconfig'.
    localconfig = $vardir/localconfig
a. logdir adalah tempat dimana semua log dari puppet di tempatkan
b. rundir adalah tempat dimana puppet menaruh PID-nya
c. ssldir adalah tempat dimana puppet manaruh sertifikat SLL-nya
d. classfile adalah sebuah file dimana puppetd me-list semua class yang dimilikinya
e. localconfig adalah tempat dimana puppetd me-cache semua local konfigurasi di localnya sendiri

Config Block
a. [main] Block adalah block utama untuk sebuah setting, dimana value yang diletakkan disini akan di terimplementasi atau selalu aktif, kecuali ada value yang digunakan pada block lain.
b. [agent] Block adalah hanya bisa digunakan pada puppet agent
c. [master] Block adalah hanya bisa digunakan pada puppet master atau puppet server dan puppet cert
d. [user] Block adalah hanya bisa digunakan untuk keperluan puppet apply

B. auth.conf
File ini yang mengatur tentang penggunaan REST API yang di miliki puppet, defaultnya terletak pada /etc/puppet/auth.conf, format filenya berbeda dengan puppet.conf, menggunakan ACL syntax, berikut adalah contoh defaultnya:

# allow nodes to retrieve their own catalog
path ~ ^/catalog/([^/]+)$
method find
allow $1

# allow nodes to retrieve their own node definition
path ~ ^/node/([^/]+)$
method find
allow $1

# allow all nodes to access the certificates services
path /certificate_revocation_list/ca
method find
allow *

# allow all nodes to store their reports
path /report
method save
allow *

# unconditionally allow access to all file services
# which means in practice that fileserver.conf will
# still be used
path /file
allow *

### Unauthenticated ACL, for clients for which the current master doesn't
### have a valid certificate; we allow authenticated users, too, because
### there isn't a great harm in letting that request through.

# allow access to the master CA
path /certificate/ca
auth any
method find
allow *

path /certificate/
auth any
method find
allow *

path /certificate_request
auth any
method find, save
allow *

# this one is not stricly necessary, but it has the merit
# of showing the default policy, which is deny everything else
path /
auth any

Isinya dengan mudah bisa kita mengerti, tinggal mengatur saja sesuai kebutuhan pada enviroment yang kita miliki.

C. fileserver.conf
File ini berguna ketika pada saat kita ingin melakukan layanan untuk sebuah file untuk sebuah module, tapi pada dasarnya kita tidak begitu membutuhkan file ini. Berikut contoh default ini file tersebut:
# This file consists of arbitrarily named sections/modules
# defining where files are served from and to whom

# Define a section 'files'
# Adapt the allow/deny settings to your needs. Order
# for allow/deny does not matter, allow always takes precedence
# over deny
# [files]
#  path /var/lib/puppet/files
#  allow *.example.com
#  deny *.evil.example.com
#  allow 192.168.0.0/24
Semua di beri comment karena memang secara default puppet tidak menggunakan file tersebut.

D. Files lainnya
File yang penulis jelaskan adalah files yang secara default ada pada saat kita baru menginstalasi puppet, tetapi ada pula file yang kita bisa buat sendiri, dengan fungsinya masing-masing, berikut files-nya:

1. autosign.conf, pada saat sebuah puppet agent ingin mendaftarkan dirinya pada puppetmaster, maka si puppet server akan menahan cert request-nya dahulu, dan biasanya kita bila kita mengenal host dari si agent maka kita akan melakukan sign pada puppet master, tapi bisa kita bekerja di sebuah trusted network dan sedang melakukan massive installation, akan lebih mudah dengan mengautomatiskan proses sign tersebut, nah file inilah yang mengaturnya. Berikut adalah contoh filenya:
private.local.net
*.secure.local.net
*.trust
2. puppetdb.conf
File ini berisi nama hostname dan nomor port dari puppetDB, hanya digunakan jika kita menggunakan puppetDB. PuppetDB adalah melakukan collect data yang telah di buat oleh si puppet, dengan fitur yang lebih seperti inventory service, exported resources dan bisa di jadikan pondasi untuk aplikasi lain yang menggunakan data dari puppet. Format filenya sama dengan puppet.conf tapi isnya hanya ada 2, nama server dan port dengan satu block config yaitu [main], berikut contohnya:
[main]
server = puppetdb.server.net
port = 8081
3. tagmail.conf
File ini berfungsi untuk mengirim email kepada seorang admin yang berbeda, pada saat puppet menemukan sebuah konfigurasi yang telah di define berubah. Yang di butuhkan untuk itu adalah menambah opsi report = true pada puppet agent, reports = tagmail, untuk reportfrom , smtpserver dan sendmail, di set pada puppet server. Juga bisa melakukan log dengan log level (debug, info, notice, warning, err, alert, emerg, crit, dan verbose). Berikut adalah contohnya:
all: log-archive@unixhat.com
ftp, !http: httpadmins@unixhat.com
emerg, crit: heriyanto@unixhat.com, ghozi@unixhat.com, ummi@unixhat.com

Demikian penjelasan mengenai files konfigurasi pada puppet, sebenarnya masih ada lagi files konfigurasi lain tetapi biasanya di pakai pada versi 2.6.x atau 2.7.x, entah pada versi 3.0.x masih bisa dipakai atau tidak, makanya penulis tidak membahasnya lebih lanjut. Untuk lebih jelasnya kita bisa http://docs.puppetlabs.com, sub artikel ini referensinya kesana juga.

2. Tool pada puppet

Tidak seperti versi sebelumnya, dimana puppet memiliki tool berbeda untuk fungsi yang berbeda, seperti puppetca, puppetd, puppet maupun puppetdoc, pada versi 3.0.x ini puppet semua tergabung menjadi satu, yaitu hanya puppet. Jadi pembahasan pada sub ini tidak akan panjang. Bukan berarti fitur puppetca, puppetd, dan puppetdoc hilang, tidak, fitur tersebut ada tetapi sekarang menjadi subcommand dari puppet. Contoh puppetca, sekarang bisa diakses melalui puppet ca. Berikut penjelasannya untuk setiap subcommand yang dengan mudah bisa keluar dengan perintah puppet help:

[root@LAB01-01 ~]# puppet help
Usage: puppet  [options]  [options]

Available subcommands:
    
  agent             The puppet agent daemon
  apply             Apply Puppet manifests locally
  ca                Local Puppet Certificate Authority management.
  catalog           Compile, save, view, and convert catalogs.
  cert              Manage certificates and requests
  certificate       Provide access to the CA for certificate management.
  certificate_request  Manage certificate requests.
  certificate_revocation_list  Manage the list of revoked certificates.
  config            Interact with Puppet's configuration options.
  describe          Display help about resource types
  device            Manage remote network devices
  doc               Generate Puppet documentation and references
  facts             Retrieve and store facts.
  file              Retrieve and store files in a filebucket
  filebucket        Store and retrieve files in a filebucket
  help              Display Puppet help.
  inspect           Send an inspection report
  instrumentation_data  Manage instrumentation listener accumulated data.
  instrumentation_listener  Manage instrumentation listeners.
  instrumentation_probe  Manage instrumentation probes.
  key               Create, save, and remove certificate keys.
  kick              Remotely control puppet agent
  man               Display Puppet manual pages.
  master            The puppet master daemon
  module            Creates, installs and searches for modules on the Puppet Forge.
  node              View and manage node definitions.
  parser            Interact directly with the parser.
  plugin            Interact with the Puppet plugin system.
  queue             Queuing daemon for asynchronous storeconfigs
  report            Create, display, and submit reports.
  resource          The resource abstraction layer shell
  resource_type     View classes, defined resource types, and nodes from all manifests.
  secret_agent      Mimics puppet agent.
  status            View puppet server status.

See 'puppet help  ' for help on a specific subcommand action.
See 'puppet help ' for help on a specific subcommand.
Puppet v3.0.0
Penulis yakin kita tidak perlu mengartikannya satu per satu ke dalam bahasa Indonesia =D. Karena memang sudah jelas sekali keterangan dari puppet help.

3. Instalasi puppet dan puppet server


Sebelum masuk pada tahap instalasi, ada baiknya penulis menjelaskan terlebih dahulu tentang enviroment yang dimiliki. Yang akan penulis jabarkan adalah sebuah domu (mesin virual dari Xen).
1. Puppet Server
    Mesin LAB01-01
    hostname: LAB01-01.cloud.net
    ip: 192.168.0.117

2. Puppet Agent
    Mesin LAB01-02
    hostname: LAB01-02.cloud.net
    ip: 192.168.0.128

a. Instalasi puppet repository
Tahap ini adalah dimana kita melakukan instalasi rpm milik puppetlabs, agar pada waktu melakukan yum install puppet kita bisa mengambil file rpm beserta depensinya dari server puppetlabs, sebenarnya hal ini tidak multak, asalkan kita punya semua paket yang dibutuhkan puppet, kita bisa menginstallnya sendiri. Atau pada case tertentu dimana enviroment kita memiliki repository sendiri tinggal mengambil paket-paket yang dibutuhkan lalu masukan ke dalam repository kita. Cara ini penulis contohkan agar mempermudah dalam uji coba yang pembaca lakukan.

Menginstall RPM untuk repository puppetlabs (lakukan pada agent dan puppetmaster):
[root@LAB01-01 ~]# rpm -ivh http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-6.noarch.rpm
Retrieving http://yum.puppetlabs.com/el/5/products/x86_64/puppetlabs-release-5-6.noarch.rpm
warning: /var/tmp/rpm-xfer.NlPkkT: Header V3 RSA/SHA1 signature: NOKEY, key ID 4bd6ec30
Preparing...         ########################################### [100%]
1:puppetlabs-release ########################################### [100%]

Pastikan repository ada:
[root@LAB01-01 yum.repos.d]# yum repolist -v
--snippet--
Repo-id      : puppetlabs-deps
Repo-name    : Puppet Labs Dependencies El 5 - x86_64
Repo-updated : Sat Oct  6 23:43:49 2012
Repo-pkgs    : 39
Repo-size    : 69 M
Repo-baseurl : http://yum.puppetlabs.com/el/5/dependencies/x86_64/
Repo-expire  : 3,600 second(s) (last: Wed Oct 10 05:26:38 2012)

Repo-id      : puppetlabs-products
Repo-name    : Puppet Labs Products El 5 - x86_64
Repo-updated : Sat Oct  6 23:44:00 2012
Repo-pkgs    : 110
Repo-size    : 143 M
Repo-baseurl : http://yum.puppetlabs.com/el/5/products/x86_64/
Repo-expire  : 3,600 second(s) (last: Wed Oct 10 05:26:39 2012)
--snippet--

b. install puppetmaster pada mesin LAB01-01
[root@LAB01-01 yum.repos.d]# yum install puppet-server
 puppet-server                       noarch               3.0.0-1.el5
Installing for dependencies:
 augeas-libs                        x86_64                0.10.0-3
 facter                             x86_64                1:1.6.13-1.el5
 hiera                              noarch                1.1.0-1.el5
 libselinux-ruby                    x86_64                1.33.4-5.7.el5
 puppet                             noarch                3.0.0-1.el5
 ruby                               x86_64                1.8.7.370-1.el5
 ruby-augeas                        x86_64                0.4.1-1
 ruby-irb                           x86_64                1.8.7.370-1.el5
 ruby-libs                          x86_64                1.8.7.370-1.el5
 ruby-rdoc                          x86_64                1.8.7.370-1.el5
 ruby-shadow                        x86_64                1.4.1-7
 rubygem-json                       x86_64                1.4.6-1.el5
 rubygems                           noarch                1.3.1-1

Install  14 Package(s)
Upgrade  0 Package(s)
Total download size: 5.4 M
Cek keberadaan paket puppetmaster yang kita install pada mesin LAB01-01:
[root@LAB01-01 ~]# rpm -qa|grep puppet
puppetlabs-release-5-6
puppet-3.0.0-1.el5
puppet-server-3.0.0-1.el5
Terlihat puppet-3.0.0-1.el5 dan puppet-server-3.0.0-1.el5 sudah terinstall dengan baik sekarang kita menuju ke mesin yang akan menjadi agent.

c. install puppet agent pada mesin LAB01-02
[root@LAB01-02 yum.repos.d]# yum install puppet
 puppet                             noarch             3.0.0-1.el5
Installing for dependencies:
 augeas-libs                        x86_64             0.10.0-3
 facter                             x86_64             1:1.6.13-1.el5
 hiera                              noarch             1.1.0-1.el5
 libselinux-ruby                    x86_64             1.33.4-5.7.el5
 ruby                               x86_64             1.8.7.370-1.el5
 ruby-augeas                        x86_64             0.4.1-1
 ruby-irb                           x86_64             1.8.7.370-1.el5
 ruby-libs                          x86_64             1.8.7.370-1.el5
 ruby-rdoc                          x86_64             1.8.7.370-1.el5
 ruby-shadow                        x86_64             1.4.1-7
 rubygem-json                       x86_64             1.4.6-1.el5
 rubygems                           noarch             1.3.1-1

Install  13 Package(s)
Upgrade  0 Package(s)
Total download size: 5.3 M

Cek keberadaan paket puppet agent yang kita install pada mesin LAB01-02:
[root@LAB01-01 ~]# rpm -qa|grep puppet
puppetlabs-release-5-6
puppet-3.0.0-1.el5
Terlihat puppet-3.0.0-1.el5 sudah terinstall dengan baik.

4. Koneksi antara puppet agent dengan puppet server


Ini adalah tahap akhir dari turorial penulis, karena setelah selesai sub artikel ini, maka puppet sudah siap digunakan, yang akan kita lakukan adalah berusaha menghubungkan antara puppet agent dan puppetmaster, agar bisa saling berkomunikasi, dalam artian LAB01-01 mengakui keberadaan dan siap melayani LAB01-02 sebagai puppet agent. Hal-hal yang akan kita lakukan:
a. Menambahkan opsi pada agent
b. Membuka firewall untuk puppet
c. Menjalankan puppetmaster
d. Meregistrasi mesin LAB01-02 sebagai puppet agent pada puppetmaster
e. Testing koneksi antar puppet agent dengan puppetmaster.

a. Menambahkan opsi pada agent
Kita akan menambahkan alamat server pada file puppet.conf di agent, yaitu server = LAB01-01.cloud.net  pada block config [agent]. Berikut contoh lengkapnya dari file puppet.conf di agent:
[root@LAB01-02 ~]# cat /etc/puppet/puppet.conf 
[main]
    # The Puppet log directory.
    # The default value is '$vardir/log'.
    logdir = /var/log/puppet

    # Where Puppet PID files are kept.
    # The default value is '$vardir/run'.
    rundir = /var/run/puppet

    # Where SSL certificates are kept.
    # The default value is '$confdir/ssl'.
    ssldir = $vardir/ssl

[agent]
    # The file in which puppetd stores a list of the classes
    # associated with the retrieved configuratiion.  Can be loaded in
    # the separate ``puppet`` executable using the ``--loadclasses``
    # option.
    # The default value is '$confdir/classes.txt'.
    classfile = $vardir/classes.txt

    # Where puppetd caches the local configuration.  An
    # extension indicating the cache format is added automatically.
    # The default value is '$confdir/localconfig'.
    localconfig = $vardir/localconfig

    server = LAB01-01.cloud.net
Lihat baris terakhir, sudah ditambahkan.

b. Membuka firewall untuk puppet
Port yang digunakan oleh puppet untuk saling bertukar informasi adalah 8140, maka kita perlu membuka port ini pada firewall, silahkan buka pada masing-masing system firewall maupun routing pembaca seperti cisco, juniper, shorewall, dll, tapi pada linux cukup menggunakan:
[root@LAB01-01 ~]# iptables -A INPUT -p tcp -m state --state NEW --dport 8140 -j ACCEPT
Penulis tidak merekomendasi perintah ini pada server production karena akan membuka port untuk semua network. Untuk lebih aman bisa membatasi range network dengan -s 192.168.0.0/24 pada perintah iptables diatas agar terbatas pada alamat IP 192.168.0.0/24.

c. Menjalankan puppetmaster sebagai daemon di LAB01-01
Menjalankan puppetmaster sebagai daemon dan mengecek keberadaannya apakah sudah berjalan dengan baik atau belum
[root@LAB01-01 ~]# /etc/init.d/puppetmaster start
Starting puppetmaster:                                     [  OK  ]
[root@LAB01-01 ~]# ps ax|grep puppet
 1634 ?        Ssl    0:00 /usr/bin/ruby /usr/bin/puppet master
 1639 pts/0    R+     0:00 grep puppet
Pada perintah ps ax diatas terlihat PID 1634 yaitu puppetmaster berjalan dengan semestinya.

c. Meregistrasi puppet agent pada puppetmaster
Meregistrasi mesin LAB01-02 sebagai puppet agent pada puppetmaster
[root@LAB01-02 ~]# puppet agent --test
Info: Creating a new SSL certificate request for lab01-02.cloud.net
Info: Certificate Request fingerprint (SHA256): 4E:0C:48:F9:5E:0A:73:F8:7B:03:E2:1B:2B:7F:E4:AB:3C:9F:23:02:5B:96:51:98:C9:12:86:DE:F0:30:42:3A
Exiting; no certificate found and waitforcert is disabled
Yang  kita lakukan diatas sebenarnya adalah mengirimkan certificate_requests ke puppetmaster LAB01-01, untuk domain lab01-02.cloud.net. Setelah itu kita menuju puppetmaster, untuk melakukan cek dan sign certificate request untuk domain lab01-02.cloud.net
Cek apakah Certificate Request lab01-02.cloud.net sudah masuk ke puppetmaster belum
[root@LAB01-01 ~]# puppet ca list
  lab01-02.cloud.net  (SHA256) 4E:0C:48:F9:5E:0A:73:F8:7B:03:E2:1B:2B:7F:E4:AB:3C:9F:23:02:5B:96:51:98:C9:12:86:DE:F0:30:42:3A
Terlihat sudah, kalau begitu mari kita izinkan mesin LAB01-01 untuk menjadi puppet agent dari LAB01-01
[root@LAB01-01 ~]# puppet ca sign lab01-02.cloud.net
Signed certificate request for lab01-02.cloud.net
Removing file Puppet::SSL::CertificateRequest lab01-02.cloud.net at '/var/lib/puppet/ssl/ca/requests/lab01-02.cloud.net.pem'
"-----BEGIN CERTIFICATE-----\nMIIFXDCCA0SgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1QdXBw\nZXQgQ0E6IGxhYjAxLTAxLmNsb3VkLm5ldDAeFw0xMjEwMDkwOTA3MzVaFw0xNzEw\nMDkwOTA3MzVaMB0xGzAZBgNVBAMMEmxhYjAxLTAyLmNsb3VkLm5ldDCCAiIwDQYJ\nKoZIhvcNAQEBBQADggIPADCCAgoCggIBALTWaRM+BL7zDE5h4v/PUnn5qlGw0lfj\nXwLH6QkATzVcEiB6ehGG+/VCdWmjgdhbg9RUlq8dD0JjFHjx0IJdH6jeBLhV0jen\nsZVz/9BlmBSWNM+Y2A5j5NHZygEJ1z3KbJYMRXgk4UMFx7GtRqH/OTB+EUDY1mhO\nl2HB5RJy+EaXHeEUBluDHgtJmVdQlwutLx1N1Z00c4AavQ1gF5o6grLIodon8YVy\nuiyfOj2pfVvkHUYll/wvWnUZyfguDGsD24pvtnNx4tQ/HGSyrU2sDP5KMKBUZA3M\npkL+NPyRlF8j1aNtVXbDwM+uBKTH6PnMyCE4Ut3AixFQjlYoXD59uWThcxtCtFU0\ngtOvM9IDgzEMa0WM1gzwTN3r8YWGVa2xPdKP0zruKqu8AgkJnU541A26DXzRAIVP\n2gFuGlrfGRko0LOOJoNXhlSZdau/BCSZBxEfyBb1+HPQL/QSRHLaLq2zxaT3kzKf\ngR3JUjAuVG73AsSLthWvE73GrYkaL44EhWtC5jVuQII7l+nT1sgazFN3IZDGGJXB\nsgb0a9ewp8vzkL4Rv16tPqi0YimsJLsNiHXPTEZRkgK93mC3dXsCyMZluusl7Uva\nZmG2CJTpnr9mCRrnPuJcPjFAo1I1j3FPhpoUr2Lyet16ZBBYA6krjiYug865ji3b\n4BGXNyx66jo3AgMBAAGjgZswgZgwIAYDVR0lAQH/BBYwFAYIKwYBBQUHAwEGCCsG\nAQUFBwMCMB0GA1UdDgQWBBSkaK+oO7gWnb/oTbKmuMsPUEhUSjAMBgNVHRMBAf8E\nAjAAMDcGCWCGSAGG+EIBDQQqFihQdXBwZXQgUnVieS9PcGVuU1NMIEludGVybmFs\nIENlcnRpZmljYXRlMA4GA1UdDwEB/wQEAwIFoDANBgkqhkiG9w0BAQsFAAOCAgEA\nE6s4BQiqxttrcSbNWu3duQCen5+omMpOi1l/eCfh2B4absiLzE5XQiqgnv5CED7P\npK6KA/dI77rtbjwmJxRT/mEoIW77ziLV0mLQKBIRwgbWbH80lIOWIGU8Q0inWw4t\nHe8iJwvsFJx+9rcLp9etDxHAzwmZ/QxCBsRZ1AsbSlDVTm0cieM9ARwI+sVEzdKR\n8WMyjWc6nOB0eq+Pvv9Oyvdqmku3qC40zPw3IxFGMljGySlPtfzuPpUNyKBoqTis\nkASGqt+XaBIZpW/o7soyGJejwLam4x7oOgn6olpURHI/Wrh6FLt1UOdj1y3wTejM\nfB61hxlioFnqVPhwBSEyMMgGjCH7cHPA0Q5g7NV8F6dVCtKwl4nJ1hZy28lfz67b\nMFgV5dpc7ManhjuJjQ/vnx5Ti53fPVm7og4aKy15+NHTH+1zvhvZPYfKqQKd7FxP\nKG8g27fXGLfbZlk3ePUnlgWyFfU0CRsxKsmuI+cZ7vo83AReP1PyG7znlVCIMbeo\ndPRe6HXg8s5d3EZfaYuZ9zMuDVMMsqQJFFJFg3zXyMTb3k7kkdNiKUpb5aCFBz6+\nwcLhaUBv6D9usuc0l1Ri2C22IhAMdprhsu7wIf/wiqgSM6OtpqWTY/fTPpyViog9\nJqSoiNWqWuxmSfzdwvH8u4aKy8COca93uf6OabF7EMo=\n-----END CERTIFICATE-----\n"

e. Testing koneksi antar puppet agent dengan puppetmaster.
Testing yang kita lakukan adalah mencoba koneksi yang telah kita registrasi, mengambil catalog dari puppetmaster, apabila tampilan seperti berikut maka sudah berhasil kita mengkoneksikan puppet agent dengan puppetmaster. Jalankan di mesin LAB01-02:
[root@LAB01-02 ~]# puppet agent --test
Info: Caching certificate for lab01-02.cloud.net
Info: Caching certificate_revocation_list for ca
Info: Retrieving plugin
Info: Caching catalog for lab01-02.cloud.net
Info: Applying configuration version '1349860075'
Info: Creating state file /var/lib/puppet/state/state.yaml
Finished catalog run in 0.06 seconds
Terlihat puppet sudah berhasil meminta catalog dari puppetmaster, menjalankannya dan membuat file state.yaml /var/lib/puppet/state/state.yaml. Alhamdulillah selesai sudah artikel ini, semoga bisa berguna agar penulis mendapat pahala :). Amiin.