Wayang - Kelas

Kelas boneka didefinisikan sebagai kumpulan sumber daya, yang dikelompokkan bersama untuk mendapatkan node atau mesin target dalam keadaan yang diinginkan. Kelas-kelas ini didefinisikan di dalam file manifes Wayang yang terletak di dalam modul Puppet. Tujuan utama menggunakan kelas adalah untuk mengurangi pengulangan kode yang sama di dalam file manifes atau kode Boneka lainnya.

Berikut adalah contoh kelas Wayang.

[root@puppetmaster manifests]# cat site.pp  
class f3backup ( 
   $backup_home   = '/backup', 
   $backup_server = 'default', 
   $myname        = $::fqdn, 
   $ensure        = 'directory', 
) { 
   include '::f3backup::common' 
   if ( $myname == '' or $myname == undef ) { 
      fail('myname must not be empty') 
   }  
   @@file { "${backup_home}/f3backup/${myname}": 
      # To support 'absent', though force will be needed 
      ensure => $ensure, 
      owner  => 'backup', 
      group  => 'backup', 
      mode   => '0644', 
      tag    => "f3backup-${backup_server}", 
   }
}

Dalam contoh di atas, kami memiliki dua klien di mana pengguna harus ada. Seperti yang dapat diketahui, kami telah mengulangi sumber daya yang sama dua kali. Salah satu cara untuk tidak melakukan tugas yang sama dalam menggabungkan dua node.

[root@puppetmaster manifests]# cat site.pp 
node 'Brcleprod001','Brcleprod002' { 
   user { 'vipin': 
      ensure => present, 
      uid    => '101', 
      shell  => '/bin/bash', 
      home   => '/home/homer', 
   } 
}

Menggabungkan node dengan cara ini untuk melakukan konfigurasi bukanlah praktik yang baik. Ini dapat dengan mudah dicapai dengan membuat kelas dan memasukkan kelas yang dibuat dalam node yang ditampilkan sebagai berikut.

class vipin_g01063908 { 
   user { 'g01063908': 
      ensure => present, 
      uid    => '101', 
      shell  => '/bin/bash', 
      home   => '/home/g01063908', 
   } 
}  
node 'Brcleprod001' { 
   class {vipin_g01063908:} 
}  
node 'Brcleprod002' { 
   class {vipin_g01063908:} 
}

Hal yang perlu diperhatikan adalah bagaimana struktur kelas terlihat dan bagaimana kita menambahkan sumber daya baru menggunakan kata kunci kelas. Setiap sintaks di Wayang memiliki fitur tersendiri. Oleh karena itu, sintaks yang dipilih bergantung pada kondisi.

Kelas Parameter

Seperti pada contoh di atas, kita telah melihat cara membuat kelas dan memasukkannya ke dalam sebuah node. Sekarang ada situasi ketika kita perlu memiliki konfigurasi yang berbeda pada setiap node seperti ketika seseorang perlu memiliki pengguna yang berbeda di setiap node menggunakan kelas yang sama. Fitur ini disediakan di Puppet menggunakan kelas berparameter. Konfigurasi untuk kelas baru akan terlihat seperti yang ditunjukkan pada contoh berikut.

[root@puppetmaster ~]# cat /etc/puppet/manifests/site.pp 
class user_account ($username){ 
   user { $username: 
      ensure => present, 
      uid    => '101', 
      shell  => '/bin/bash', 
      home   => "/home/$username", 
   } 
}  
node 'Brcleprod002' { 
   class { user_account: 
      username => "G01063908", 
   } 
} 
node 'Brcleprod002' { 
   class {user_account: 
      username => "G01063909", 
   } 
}

Ketika kita menerapkan manifes site.pp di atas pada node, maka output untuk setiap node akan terlihat seperti berikut.

Brcleprod001

[root@puppetagent1 ~]# puppet agent --test 
Info: Retrieving pluginfacts 
Info: Retrieving plugin 
Info: Caching catalog for puppetagent1.testing.dyndns.org 
Info: Applying configuration version '1419452655' 

Notice: /Stage[main]/User_account/User[homer]/ensure: created 
Notice: Finished catalog run in 0.15 seconds 
[root@brcleprod001 ~]# cat /etc/passwd | grep "vipin" 
G01063908:x:101:501::/home/G01063909:/bin/bash

Brcleprod002

[root@Brcleprod002 ~]# puppet agent --test 
Info: Retrieving pluginfacts 
Info: Retrieving plugin 
Info: Caching catalog for puppetagent2.testing.dyndns.org 
Info: Applying configuration version '1419452725' 

Notice: /Stage[main]/User_account/User[bart]/ensure: created 
Notice: Finished catalog run in 0.19 seconds 
[root@puppetagent2 ~]# cat /etc/passwd | grep "varsha" 
G01063909:x:101:501::/home/G01063909:/bin/bash

Satu juga dapat mengatur nilai default dari parameter kelas seperti yang ditunjukkan pada kode berikut.

[root@puppetmaster ~]# cat /etc/puppet/manifests/site.pp 
class user_account ($username = ‘g01063908'){ 
   user { $username: 
      ensure => present, 
      uid    => '101', 
      shell  => '/bin/bash', 
      home   => "/home/$username", 
   } 
}  
node 'Brcleprod001' { 
   class {user_account:} 
}  
node 'Brcleprod002' { 
   class {user_account: 
      username => "g01063909", 
   } 
}