クラスは、再利用を可能にする 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 サービスが有効になり、ノード上で実行状態になる