Puppet-クラス

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

上記の例では、ユーザーが存在する必要がある2つのクライアントがあります。お気づきのように、同じリソースを2回繰り返しました。2つのノードを組み合わせる際に同じタスクを実行しない1つの方法。

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