【问题标题】:Iterate over a hash key/values in Puppet遍历 Puppet 中的哈希键/值
【发布时间】:2014-07-10 23:14:41
【问题描述】:

我正在尝试使用 Puppet 来更新 ASP.NET web.config 中的任意 appsettings 列表(用于部署目的),我处于两难境地,主要是因为我是 puppet 中真正的 n00b。

我有这个 yaml 文件 (hiera)

---
appSettings:
  setting1: "hello"
  setting2: "world!"
  setting3: "lalala"

setting[x] 的数量可以任意跨越(一个 appSetting),我想循环遍历哈希键/值以更新 web.config 中相应的appSetting/add(使用带有 powershell 的exec)问题关于如何迭代 keysvalues,我是否已经搜索过。

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

感谢任何指导。

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

【问题讨论】:

  • 这种方法听起来有点滥用。将键/值对写入代理上的文件并让单个整体 PowerShell 脚本一次性完成所有编辑不是更经济吗?
  • @FelixFrank 抱歉,我不太明白为什么它是“滥用”。 PowerShell 脚本将一次更新 web.config 一个应用程序设置。你能详细说明什么是更好的方法吗?
  • 理想情况下,您可以创建一个template 来发出文件的全部内容。除此之外,最好只在两种资源中管理事物 - 一个具有在 Hiera 中找到的键/值对的文件,另一个具有稍微更强大的脚本的 exec 来完成所有当前高管的工作并申请所有键/值对。您可能需要一个额外的脚本来确定目标文件是否有工作要做,以形成您的onlyif 条件。 - 根据性能的重要性,这可能是吹毛求疵
  • @FelixFrank 哦,我明白了...我最初想使用 augeas,但它在 Windows 中不可用...我遇到了 puppet 的模板功能,但我没有想到我可以使用它...感谢您的指点。

标签: puppet


【解决方案1】:

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

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_hash 不应使用除非您特别需要 Hiera 来合并来自不同层次结构级别的哈希值。在几乎所有正常用例中,您都应该使用常规的 hiera 函数检索您的哈希数据。
  • hiera_hash的合并功能正是我所需要的。
  • 好问题和后续行动。不知道你为什么被否决。
  • 对于给定的示例,我同意 hiera (而不是 hiera_hash 就足够了。它也会返回一个哈希,而没有(在这种情况下是不必要的)合并功能。但感谢代码 sn-p,帮我解决了我的问题!
  • 另外一个,我试图解开这个问题好几天
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 2016-08-19
相关资源
最近更新 更多