如何将键读入数组?

时间:2019-01-16 16:49:22

标签: puppet

我正在尝试将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]

有人可以让我知道该怎么做吗?

1 个答案:

答案 0 :(得分:1)

hiera_array()和普通hiera()之间的区别与所请求的密钥(在您的情况下为network::interfaces)出现在多个层次结构级别时发生的情况有关。它与您想要数据以什么形式几乎没有关系,而与无关与选择数据结构的零碎关系。 hiera_array()请求“数组合并”查找。更现代的lookup()函数将此称为“独特”合并策略。

看起来似乎不太可能是您真正想要的。在这种情况下,最简单的方法是读取整个哈希并提取密钥:

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

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