我想要一个可以在多个 Puppet 类中使用的资源(或其他东西),以使不同的资源接收源类中定义的值列表。我不确定如何最好地解决这个问题。
更具体地说:
我有一个创建 Nagios主机定义的资源。每个主机定义都包含一个或多个主机组。[0] 我想笼统地定义事物,以便根据分配给 Puppet 节点的类动态确定主机的主机组。
例如,假设我有一个节点:
node www.example.com {
include common_definitions
include web_server
include ftp_server
}
我想在web_server
和ftp_server
类中有一些东西可以将相关的主机组添加到 Nagios 定义中。也许是这样的:
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] 从技术上讲,主机定义包括零个或多个主机组,但我的定义总是至少有一个主机组。