可以使用hiera将parameter passing给puppet

我们正在使用angular色/configuration文件模式。 在下面的例子中,我希望可以select传递一个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”,但是最后我在configuration中使用了空值。

您可以通过自动参数查找来达到这个效果。

你的Hiera数据的目标是实际的 apache模块,而不是你的apacheconfiguration文件。

 apache::keepalive: true 

这只适用于class apache有一个$keepalive参数。

是的,这个默认值应该从apache::params

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

我个人更喜欢显式声明所有的variables。 在这种情况下,我会在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, } } }