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

如何从Puppet嵌套结构体中提取唯一的allowed_sources数组?

解决Puppet中提取嵌套哈希唯一allowed_sources的问题

问题根源

你原来的代码无效是因为Puppet的变量是不可变的——一旦变量被赋值,就无法修改。你在each循环里尝试用$sources << ...修改变量,实际上只是在lambda内部创建了一个局部的$sources变量,外部的原始$sources始终是空数组,所以最终结果为空。

正确实现方式

利用Puppet的声明式集合操作方法,一步完成提取、扁平化和去重:

# 提取所有allowed_sources数组 → 扁平化一维数组 → 去重
$sources = $databases.map |$db_name, $db_settings| {
  $db_settings['allowed_sources']
}.flatten.unique

步骤拆解:

  1. map方法:遍历$databases哈希,提取每个数据库的allowed_sources数组,得到一个嵌套数组(比如[["192.0.2.1/24"], ["192.0.2.1/24"]])
  2. flatten方法:将嵌套数组转为一维数组(比如["192.0.2.1/24", "192.0.2.1/24"])
  3. unique方法:去除重复的源地址,得到最终的唯一地址数组(比如["192.0.2.1/24"])

额外注意:修复赋值代码的语法错误

你给$database::databases赋值的代码存在语法问题,每个哈希键值对末尾缺少逗号,会导致Puppet编译报错,修正后的代码如下:

$database::databases = {
  development1 => {
    owner_password  => "development",
    allowed_sources => ["192.0.2.1/24"]
  },
  development2 => {
    owner_password  => "development",
    allowed_sources => ["192.0.2.1/24"]
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:21:08