꼭두각시-클래스

Puppet 클래스는 원하는 상태의 대상 노드 또는 시스템을 얻기 위해 함께 그룹화 된 리소스 모음으로 정의됩니다. 이러한 클래스는 Puppet 모듈 내부에있는 Puppet 매니페스트 파일 내에 정의됩니다. 클래스를 사용하는 주된 목적은 매니페스트 파일 또는 다른 Puppet 코드 내에서 동일한 코드 반복을 줄이는 것입니다.

다음은 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}", 
   }
}

위의 예에는 사용자가 있어야하는 두 개의 클라이언트가 있습니다. 알 수 있듯이 동일한 리소스를 두 번 반복했습니다. 두 노드를 결합 할 때 동일한 작업을 수행하지 않는 한 가지 방법입니다.

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

이러한 방식으로 노드를 병합하여 구성을 수행하는 것은 좋은 방법이 아닙니다. 이것은 클래스를 생성하고 생성 된 클래스를 다음과 같이 노드에 포함시킴으로써 간단하게 달성 할 수 있습니다.

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

주목해야 할 점은 클래스 구조가 어떻게 생겼는지와 class 키워드를 사용하여 새 리소스를 추가 한 방법입니다. Puppet의 각 구문에는 고유 한 기능이 있습니다. 따라서 선택하는 구문은 조건에 따라 다릅니다.

매개 변수화 된 클래스

위의 예에서와 같이 클래스를 만들고 노드에 포함하는 방법을 살펴 보았습니다. 이제 동일한 클래스를 사용하는 각 노드에서 다른 사용자를 가져야하는 경우와 같이 각 노드에서 다른 구성을 가져야하는 상황이 있습니다. 이 기능은 매개 변수화 된 클래스를 사용하여 Puppet에서 제공됩니다. 새 클래스의 구성은 다음 예와 같이 표시됩니다.

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

위의 site.pp 매니페스트를 노드에 적용하면 각 노드의 출력은 다음과 같습니다.

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

다음 코드와 같이 클래스 매개 변수의 기본값을 설정할 수도 있습니다.

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