puppet 中有类似地图功能的东西吗?

puppet 中有类似地图功能的东西吗?

[欢迎提出更好的标题建议]

不管怎样,我目前有一个像这样的数据结构(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 开始自动包含在内。

相关内容