Puppet-classes

提供:Dev Guides
移動先:案内検索

人形-クラス

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マニフェストをノードに適用すると、各ノードの出力は次のようになります。

しょー

[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

しょー

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