Я хочу иметь ресурс (или что-то в этом роде), который я могу использовать в нескольких классах 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] Технически определение хоста включает ноль или более групп хостов, но в моих определениях всегда будет хотя бы одна группа хостов.