可选择使用 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,
    }
  }

}

相关内容