[欢迎提出更好的标题建议]
不管怎样,我目前有一个像这样的数据结构(yaml)
servers:
server1.example.com:
private_ip: 10.0.0.1
public_ip: 22.33.44.1
server2.example.com:
private_ip: 10.0.0.2
public_ip: 22.33.44.2
global_roles:
nagios:
- server1
- server2
我可以把它拉进傀儡并执行以下操作:
$nagios_monitor = $global_roles['nagios'][0]
$private_ip["${nagios_monitor}.example.com"]['private_ip']
我想要的是一种获取所有列出的 nagios 服务器的私有 IP 数组的方法。有没有一种好的方法可以利用我现有的数据结构来实现这一点?
如果需要更改数据结构,以便让其正常工作,也欢迎提出有关如何将这些数据呈现给 Puppet 的建议。我怀疑这样的改变会让生活变得更轻松,但现有的代码中有很多需要更改,我真的不希望出现任何失误。
答案1
是的,puppet 里有一个地图功能。 https://docs.puppet.com/puppet/latest/reference/function.html#map
你可能想做的事情如下:
$nagios_servers = $global_roles['nagios']
$ip_addresses = $nagios_servers.map |$server| { $private_ip["${server}.example.com"]['private_ip'] }
它需要 3.8 上的未来解析器,并且从 4.0 开始自动包含在内。