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",
我有一个 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",