You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定Puppet哈希转换为服务器对应端口数组的目标哈希?

解决方法

你遇到的问题是map方法返回的是包含单个键值对哈希的数组,而非你需要的统一哈希结构。可以通过两种方式修正:

方法1:用Hash()函数转换map结果

直接将map生成的数组传入Hash()函数,Puppet会自动将数组中的单键哈希合并为一个完整哈希:

$newHash = Hash($oldHash.map |$server, $ports| {
    {$server => keys($ports)}
})

方法2:用reduce累积构建哈希

初始化一个空哈希,通过reduce迭代原哈希的每个键值对,逐步将新的键值对合并到结果中:

$newHash = $oldHash.reduce({}) |$memo, $server_ports| {
    $server = $server_ports[0]
    $ports = $server_ports[1]
    $memo + {$server => keys($ports)}
}

原理说明

  • map方法的作用是遍历集合,为每个元素返回一个新值,你原代码中每次迭代返回{$server => keys($ports)}(一个单键哈希),最终得到的是包含这些单键哈希的数组。
  • 上述两种方法都是将数组中的多个单键哈希合并为一个全局哈希,符合你的目标结构。

内容的提问来源于stack exchange,提问作者David L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:26:05