オプションでhieraを使用してパラメータをpuppetに渡す

オプションでhieraを使用してパラメータをpuppetに渡す

ここでは、ロール/プロファイル パターンを使用しています。以下の例では、オプションで hiera からパラメータを渡し、値が指定されていない場合は ::apache クラスのデフォルト (内部的に ::apache::params クラスから取得) が使用されるようにしたいと思います。これにより、一部のサーバーで keepalive 値を設定できますが、設定しない場合は ::apache クラスが値自体を決定できるようになります。

common.yaml
-----------
profiles::apache::keepalive               : On
profiles::apache::keepalive_timeout       : 5


apache.pp
---------
class profiles::apache {

  $apache_keepalive              = hiera('profiles::apache::keepalive')
  $apache_keepalive_timeout      = hiera('profiles::apache::keepalive_timeout')

  class {'::apache':
    keepalive              => $apache_keepalive,
    keepalive_timeout      => $apache_keepalive_timeout,
  }

}

Hiera ルックアップのデフォルト値を 'undef' に設定しようとしましたが、構成に空の値が入ってしまいます。

答え1

この効果は、自動パラメータ検索

Hieraのデータは、実際のApache プロファイルではなく、Apache モジュールです。

apache::keepalive: true

class apacheこれはパラメータがある場合にのみ機能します$keepalive

はい、このデフォルトは から取得する必要がありますapache::params

class apache($keepalive = $::apache::params::keepalive)
    inherits ::apache::params { 
        ...
}

答え2

私は個人的に、すべての変数を明示的に宣言することを好みます。この場合、デフォルト値を宣言しcommon.yaml、他のyamlファイルを使用して、デフォルトとは異なる値を宣言します。

common.yaml
-----------
profiles::apache::keepalive               : On
profiles::apache::keepalive_timeout       : 5

servertype.yaml
---------------
profiles::apache::keepalive               : On
profiles::apache::keepalive_timeout       : 30

次に階層を設定しますhiera.yaml

:hierarchy: - servertype.yaml
            - common.yaml

これをしたくない場合は、if文を使用するしかないと思います。

apache.pp
---------
class profiles::apache {

  $apache_keepalive              = hiera('profiles::apache::keepalive')
  $apache_keepalive_timeout      = hiera('profiles::apache::keepalive_timeout')

  if ($apache_keepalive == undef) {
    class {'::apache': }
  }
  else {
    class {'::apache':
      keepalive              => $apache_keepalive,
      keepalive_timeout      => $apache_keepalive_timeout,
    }
  }

}

関連情報