迭代Puppet中的哈希键/值

迭代Puppet中的哈希键/值,puppet,Puppet,我正在尝试使用Puppet来更新ASP.NET web.config中的任意应用程序设置列表(用于部署目的),我陷入了两难境地,主要是因为我在Puppet中是一个真正的n00b 我有这个yaml文件(hiera) setting[x]的数量可以任意跨越(一个appSetting),我想通过hash键/值循环更新web.config中相应的appSetting/add(使用powershell的exec),问题是我已经在如何迭代键和值上进行了大量的搜索 我遇到了create_resources,这

我正在尝试使用Puppet来更新ASP.NET web.config中的任意应用程序设置列表(用于部署目的),我陷入了两难境地,主要是因为我在Puppet中是一个真正的n00b

我有这个yaml文件(hiera)

setting[x]
的数量可以任意跨越(一个appSetting),我想通过hash键/值循环更新web.config中相应的
appSetting/add
(使用powershell的
exec
),问题是我已经在如何迭代键和值上进行了大量的搜索

我遇到了
create_resources
,这当然是用一组预先确定的密钥迭代散列。同样,清单中的键名是未知的(因此迭代键/值对)

感谢您的指导


编辑:看起来有一个
keys()
函数我可以在散列上使用,然后使用hiera_散列('appSettings')来获取散列并遍历值。

好的,我刚刚确认了您可以在清单中执行的操作:

define updateAppSetting {
    # get the hashes again because outside vars aren't visible here
    $appSettings = hiera_hash('appSettings')

    # $name is the key $appsettingValue is the value
    $appsettingValue = $appSettings[$name]

    # update the web.config here!
}

$appSettings = hiera_hash('appSettings')    

# the keys() function returns the array of hash keys
$appSettingKeys = keys($appSettings)

# iterate through each appSetting key
updateAppSetting{$appSettingKeys:}

除非您特别需要hiera合并来自不同层次结构级别的哈希值,否则不应使用
hiera\u hash
。在几乎所有正常的用例中,您都应该使用常规的
hiera
函数来检索哈希数据。
hiera\u hash
的合并函数正是我所需要的。好问题和后续工作。不知道你为什么被否决。对于给定的示例,我同意
hiera
(而不是
hiera\u hash
)就足够了。它也会返回一个没有合并功能。但感谢代码片段,帮助我解决了问题!还有一点,我花了几天时间试图解决这个问题。这种方法听起来有点滥用。将密钥/值对写入代理上的文件,并让一个单一的PowerShell脚本一次性完成所有编辑,这不是更经济吗?@FelixFrank抱歉我不太明白为什么它是“虐待性的”PowerShell脚本将一次更新web.config一个应用程序设置。您能详细说明更好的方法是什么吗?理想情况下,您可以创建一个为您的文件发送完整内容的应用程序。除此之外,最好只在两个资源中管理内容—一个文件具有Hiera中的键/值对,另一个是
exec
有一个更强大的脚本来完成所有当前执行者的工作并应用所有键/值对。您可能需要一个额外的脚本来确定目标文件上是否有工作要做,以形成
onlyif
条件。-这取决于性能的重要性nitpicking@FelixFrank哦,我明白了…我最初想使用augeas,但它在Windows中不可用…我遇到了puppet的模板功能,但我没有想到我可以使用它…谢谢你的指点。
define updateAppSetting {
    # get the hashes again because outside vars aren't visible here
    $appSettings = hiera_hash('appSettings')

    # $name is the key $appsettingValue is the value
    $appsettingValue = $appSettings[$name]

    # update the web.config here!
}

$appSettings = hiera_hash('appSettings')    

# the keys() function returns the array of hash keys
$appSettingKeys = keys($appSettings)

# iterate through each appSetting key
updateAppSetting{$appSettingKeys:}