如何将键读入数组?

How to read keys into array?

我正在尝试将 hiera json 文件中的键读入数组。

json如下:

{
  "network::interfaces": {
    "eth0": {
      "ip": "10.111.22.10"
    },
    "eth1": {
      "ip": "10.111.22.11"
    },
    "eth2": {
      "ip": "10.111.22.12"
    }
  }
}

在我的 Puppet 代码中,我这样做:

$network_interfaces = hiera_array('network::interfaces')
notice($network_interfaces)

结果如下:

Notice: Scope(Class[Role::Vagrant]): {eth0 => {ip => 10.111.22.10}, eth2 => {ip => 10.111.22.11}, eth3 => {ip => 10.111.22.12}}

但我想要的只是接口:[eth0, eth1, eth2]

谁能告诉我怎么做?

hiera_array() 和普通 hiera() 之间的区别与请求的密钥(在您的情况下为 network::interfaces)出现在多个层次结构级别时发生的情况有关。它与您希望数据采用何种形式几乎没有关系,与选择数据结构的点点滴滴无关。 hiera_array() 请求 "array-merge" 查找。更现代的 lookup() 函数将此称为 "unique" 合并策略。

数组合并查找似乎不太可能是您真正想要的。在这种情况下,最简单的做法是读取整个哈希并提取密钥:

$network_interfaces = keys(hiera('network::interfaces'))

在 Puppet 4 中,您需要使用 puppetlabs/stdlib 模块提供的 keys() 函数。从 Puppet 5 开始,该功能出现在核心 Puppet 中。