クラスは、再利用を可能にする Puppet コードのブロックです。クラスを使用すると、マニフェストを読むときの複雑さが軽減されます。クラス定義には、特定のクラスのためのコードが含まれています。最初にクラスを定義してから、そのクラスをマニフェスト内で使用できるようにします。クラス自体は何も評価を実行しません。
次の例は、examplecloud という名前のクラス定義に使用される形式を示しています。
class examplecloud::analytics {
package { "system/management/webui/webui-server":
ensure => installed,
}
svccfg { "webui":
require => Package["system/management/webui/webui-server"],
fmri => "system/webui/server:default",
property => "conf/redirect_from_https",
value => "false",
ensure => present,
}
service { "system/webui/server":
require => Package["system/management/webui/webui-server"],
ensure => running,
}
}
この例では、クラスに examplecloud と analytics という 2 つの名前空間があります。このクラスで指定されているコードによって、ノード上で analytics SMF サービスを有効にする前に特定の IPS パッケージがインストールされ、特定の SMF 構成が適用されることが保証されます。
クラス宣言は、マニフェスト内で定義されているクラスです。クラス宣言は、Puppet にそのクラス内のコードを評価するよう指示します。
クラス宣言には、通常とリソースライクの 2 つのタイプがあります。
通常のクラス宣言の場合は、次の例に示すように include キーワードが Puppet コードに含まれています。
include example_class
リソースライクのクラス宣言の場合は、次の例に示すように、リソースが宣言される方法と同様にクラスが宣言されます。
class { 'example_class': }
クラスパラメータを指定するには、リソースライクのクラス宣言を使用します。これらのパラメータは、クラス属性のデフォルト値をオーバーライドします。
Puppet クラスの記述および割り当ての詳細は、https://docs.puppetlabs.com/puppet/3.8/reference/lang_classes.html を参照してください。
使用例 3 Puppet マニフェストへのクラス宣言の追加次のマニフェストの例では、Puppet マスター上の /puppet/modules ディレクトリ内にある exampleloud という名前のクラス宣言を使用します。
examplecloud クラスの下に、さまざまな構成を指定するマニフェスト (/puppet/modules/examplecloud/manifests) がいくつか存在します。次の例に示すように、各マニフェストには examplecloud クラス宣言が含まれています。
# NTP configuration for companyfoo
class examplecloud::ntp {
file { "ntp.conf" :
path => "/etc/inet/ntp.conf",
owner => "root",
group => "root",
mode => 644,
source => "puppet:///modules/examplecloud/ntp.conf",
}
package { "ntp":
ensure => installed,
}
service { "ntp":
require => File["ntp.conf"],
subscribe => File["ntp.conf"],
ensure => running,
}
}
前の例にある examplecloud クラスの宣言では、次のことが保証されます。
NTP パッケージがインストールされる
特定の構成ファイル (これは Puppet マスター以外の場所がソースになっています) がインストールされる
NTP サービスが有効になり、ノード上で実行状態になる