如何将键读入数组?
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 中。
我正在尝试将 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 中。