Я хочу иметь ресурс (или что-то еще), который я могу использовать в нескольких классах 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
class ничего не знает о том, какие группы хостов использовать, пока Puppet не обработает все другие классы узла. Это управляет процессом из классов, назначенных узлу.
Как я могу это сделать?
[0] Технически определение хоста включает в себя ноль или более групп хостов, но в моих определениях всегда будет хотя бы одна группа хостов.
Вы, вероятно, захотите использовать модуль datacat. Фактически, README для него показывает пример управления группами хостов Nagios.