Puppet:查找并合并 uniq hiera 哈希

Puppet: lookup and merge uniq hiera hashes

我有一个 hiera 结构,它为 apache 模块提供证书名称,如下所示:

profiles::web_host::vhosts::params:
  'subdomain.domain.de'
    serverName: 'subomain.domain.de'
    certificateName: 'wildcard.domain.de'
  'subdomain2.domain.de'
    serverName: 'subomain2.domain.de'
    certificateName: 'wildcard.domain.de'

在我的网络服务器配置文件中有一个参数查找

$vhostParams = lookup("profiles::web_host::vhosts::params")

然后我遍历参数:

$vhostParams.each |$key, $vhOptions| { 
    if $vhOptions['certificateName'] {
       $certificateName = $vhOptions['certificateName']
    }
}

问题出在这里:一旦您对多个子域使用通配符证书(如预期的那样),就会出现变量 $certificateName 的重复定义。

我尝试将 .unique 应用于变量以及在查找过程中 $vhostParamsMerged1 = lookup('profiles::web_host::vhosts::params',Hash,'uniq',undef) 但没有取得多大成功。

如果你能帮上忙,我会很高兴。

亲切的问候, 托马斯

感谢大家对此的关注:) 我病了一段时间,很抱歉我迟到的反馈。 你说得对,我应该发布整个配置文件,但它包含一些我不想去的主机名 public。

我通过解决方法解决了它。 同一个证书现在根据它所使用的虚拟主机放入许多文件中。

如果有人知道如何使用人偶函数 .each 循环遍历 hiera,请创建一个 array/hash 并仅使用唯一值 - 我仍然感兴趣。

对于遇到类似问题的每个人: 与往常一样 - 您只需让所有资源都独一无二。

对于我的情况,代码现在看起来像这样(每次用于 ssl 证书和密钥):

      $vhostParams.each |$key, $vhOptions| { 
      [...]
      #
      # Certificate(s)
      #
      file { "Web Server vhost $defaultSslZone SSL Key for ${key}":
        # notifies the apache service to do a reload
        notify => Class['apache::service'],
      [...]
      apache::vhost { "${key}":
      ssl                  => true,
      ssl_cert             => "${cCERTS_BASE_DIR}/${sslZone}-${key}_cert.pem",
      ssl_key 
      }

         => "${cCERTS_BASE_DIR}/${sslZone}-${key}_key.pem",