web-dev-qa-db-ja.com

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

ロール/プロファイルパターンを使用しています。以下の例では、オプションでhieraからパラメーターを渡して、値が指定されていない場合に:: Apacheクラスのデフォルトが使用されるようにします(:: Apache :: paramsクラスから内部的に取得します)。これにより、一部のサーバーでキープアライブ値を設定できますが、設定しない場合は:: 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
Michelle

この効果は、 自動パラメータルックアップ によって実現されます。

Hieraデータは、Apacheプロファイルではなく、actualApacheモジュールを対象としています。

Apache::keepalive: true

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

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

class Apache($keepalive = $::Apache::params::keepalive)
    inherits ::Apache::params { 
        ...
}
1
Felix Frank

私は個人的に、すべての変数を明示的に宣言することを好みます。この場合、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,
    }
  }

}
0
Luis