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