Перебрать массив хэшей в марионетке - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть данные hiera в марионетке следующим образом:

elasticsearch::cluster_name: 'elasticsearch-dev'
elasticsearch::masterlist: [ "elasticsearchdev01.domain.com", "elasticsearchdev02.domain.com", "elasticsearchdev03.domain.com" ]
elasticsearch::kibanalist: [ "kibanadev01.domain.com" ]

И мой манифест содержит это:

  $masterlist = hiera('elasticsearch::masterlist')
  $kibanalist = hiera('elasticsearch::kibanalist')

  if ( $::fqdn in $masterlist ) or ( $::fqdn in $kibanalist ) {
    $cluster_name = hiera('elasticsearch::cluster_name')
  }

  else {
    notify { 'No cluster for node':
      message => "${::fqdn} is not configured to be in any cluster in the hiera data",
    }
  }

Я хотел бы изменить это, чтобы разрешить настройку нескольких кластеров дляединая среда, и я не уверен, что это лучший способ реализовать это.Я хочу иметь возможность сгруппировать главные списки с соответствующими им именами кластеров, а затем вызвать соответствующее имя кластера для каждого узла.

Я думаю, что, возможно, мне нужно использовать массив хэшей и выполнить итерации по нему, ноЯ не знаю, как описать это в моем манифесте.

1 Ответ

0 голосов
/ 19 ноября 2018

Возможно, вы захотите реструктурировать ваши данные как хэш хэшей:

elasticsearch::clusters:
  'elasticsearch-dev':
    masterlist: [ "elasticsearchdev01.domain.com", "elasticsearchdev02.domain.com", "elasticsearchdev03.domain.com" ]
    kibanalist: [ "kibanadev01.domain.com" ]

И тогда имейте в своих манифестах:

$clusters = hiera('elasticsearch::clusters')

$mycluster = $clusters.filter |$cluster, $data| {
  ($::fqdn in $data['masterlist']) or ($::fqdn in $data['kibanalist'])
}

if ($mycluster.empty) {
  notify { 'No cluster for node':
    message => "${::fqdn} is not configured to be in any cluster in the hiera data",
  }
}

$cluster_name = $mycluster.keys[0]
notice($cluster_name)

Вы можете также рассмотреть возможность замены устаревшего вызова hiera() на lookup() и использования $facts['networking']['fqdn'] вместо прежнего $::fqdn.

...