我有一个 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)
期间没有取得多大成功。
如果你能帮忙,我会很高兴的。
亲切问候 托马斯
感谢大家研究这个:) 我病了一段时间,很抱歉我迟到了的反馈。 你是对的,我应该发布整个个人资料,但它包含一些我不想公开的主机名。
我通过解决方法解决了它。 现在,根据所使用的虚拟主机将同一证书放入许多文件中。
如果有人有如何使用木偶函数的解决方案.each 循环遍历 hiera,创建一个数组/哈希并仅使用唯一值 - 我仍然感兴趣。
对于有类似问题的每个人: 像往常一样 - 你只需要让你的所有资源独一无二。
就我而言,代码现在看起来像这样(每次用于 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",