![](/img/trans.png)
[英]Puppet - deep merge lookup default_value with hiera hash returned
[英]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)
沒有太大成功。
如果你能幫忙,我會很高興。
親切的問候,托馬斯
感謝大家對此進行調查 :) 我病了一段時間,很抱歉我遲到的反饋。 你說得對,我應該張貼整個配置文件,但它包含一些我不想公開的主機名。
我通過解決方法解決了它。 現在,基於所使用的虛擬主機,相同的證書被放入許多文件中。
如果有人有解決方案如何使用 puppet 函數 .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",
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.