Con rối - Lớp học

Các lớp con rối được định nghĩa là một tập hợp các tài nguyên, được nhóm lại với nhau để có được một nút hoặc máy đích ở trạng thái mong muốn. Các lớp này được định nghĩa bên trong tệp kê khai Con rối nằm bên trong mô-đun Con rối. Mục đích chính của việc sử dụng một lớp là để giảm sự lặp lại mã tương tự bên trong bất kỳ tệp kê khai nào hoặc bất kỳ mã Rối nào khác.

Sau đây là một ví dụ về lớp Puppet.

[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}", 
   }
}

Trong ví dụ trên, chúng ta có hai ứng dụng khách mà người dùng cần tồn tại. Có thể nhận thấy rằng chúng tôi đã lặp lại cùng một tài nguyên hai lần. Một cách không làm cùng một nhiệm vụ trong việc kết hợp hai nút.

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

Việc hợp nhất các nút theo kiểu này để thực hiện cấu hình không phải là một thực tiễn tốt. Điều này có thể đạt được đơn giản bằng cách tạo một lớp và bao gồm lớp đã tạo trong các nút được hiển thị như sau.

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:} 
}

Điểm cần chú ý là cấu trúc lớp trông như thế nào và cách chúng tôi đã thêm một tài nguyên mới bằng cách sử dụng từ khóa lớp. Mỗi cú pháp trong Puppet đều có một tính năng riêng. Do đó, cú pháp mà người ta chọn phụ thuộc vào các điều kiện.

Lớp tham số hóa

Như trong ví dụ trên, chúng ta đã thấy cách tạo một lớp và đưa nó vào một nút. Bây giờ có những tình huống khi chúng ta cần có các cấu hình khác nhau trên mỗi nút chẳng hạn như khi một nút cần có những người dùng khác nhau trên mỗi nút sử dụng cùng một lớp. Tính năng này được cung cấp trong Puppet bằng cách sử dụng lớp tham số hóa. Cấu hình cho một lớp mới sẽ giống như trong ví dụ sau.

[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", 
   } 
}

Khi chúng tôi áp dụng tệp kê khai site.pp ở trên trên các nút, thì kết quả đầu ra cho mỗi nút sẽ giống như sau.

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

Người ta cũng có thể đặt giá trị mặc định của một tham số lớp như được hiển thị trong đoạn mã sau.

[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", 
   } 
}