Назад | Перейти на главную страницу

Есть ли что-то вроде функции карты в марионетке?

[Любые предложения по лучшему названию приветствуются]

Хорошо это или плохо, но сейчас у меня есть такая структура данных (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.