[Любые предложения по лучшему названию приветствуются]
Хорошо это или плохо, но сейчас у меня есть такая структура данных (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']
Я хочу получить массив частных IP-адресов для всех перечисленных серверов nagios. Есть ли хороший способ сделать это с моей существующей структурой данных?
Если структура данных должна быть изменена, чтобы это работало правильно, также приветствуются предложения о хорошем способе представления этих данных марионетке. Я подозреваю, что такое изменение сделало бы жизнь в целом проще, но есть немалая часть существующего кода, который нужно будет изменить, и я действительно не хотел бы никаких ошибок.
Да, в марионетке есть функция карты. 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.