Как определить ресурс Puppet, который объединяет значения в массив другого ресурса?

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

Более конкретно:

У меня есть ресурс, который создает определение хоста Nagios . Каждое определение хоста включает в себя одну или несколько групп хостов . [0] Я хотел бы определить вещи в общем, чтобы группы хостов для хоста определялись динамически на основе классов, назначенных узлу Puppet.

Например, допустим, у меня есть узел:

node www.example.com {
  include common_definitions
  include web_server
  include ftp_server
}

Я хотел бы иметь что-нибудь в классы web_server и ftp_server , которые добавляют соответствующие группы хостов в определения Hagios. Возможно, что-то вроде этого:

class web_server {
  ...
  nagios::hostgroup { 'web-servers': hostname => $facts['hostname'] }
}
class ftp_server {
  ...
  nagios::hostgroup { 'ftp-servers': hostname => $facts['hostname'] }
}

Тогда определение хоста Nagios будет иметь что-то вроде этого:

class nagios {
  $hostgroups = collect_exported_hostgroups_for($facts['hostname'])
  $hostgroup_string = join($hostgroups, ',')
  nagios:host_definition { $facts['hostname']:
    hostgroups => $hostgroup_string,
    ...
  }
}

Ключевой факт в том, что класс nagios ничего не знает о том, какие группы хостов использовать, пока Puppet не обработает все других классов узла. Это управляет процессом из классов, назначенных узлу.

Как я могу это сделать?

[0] Технически определение хоста включает ноль или более групп хостов, но в моих определениях всегда будет хотя бы одна группа хостов.

1
задан 26 April 2019 в 17:23
1 ответ

Вероятно, вы захотите использовать модуль datacat . Фактически, README для него показывает пример управления группами хостов Nagios.

2
ответ дан 3 December 2019 в 20:08

Теги

Похожие вопросы