如何定义将值聚合到另一个资源的数组中的 Puppet 资源?

如何定义将值聚合到另一个资源的数组中的 Puppet 资源?

我想要一个可以在多个 Puppet 类中使用的资源(或其他东西),以使不同的资源接收源类中定义的值列表。我不确定如何最好地做到这一点。

更具体地说:

我有一个创建 Nagios 的资源主机定义. 每个主机定义包括一个或多个主机组.[0] 我希望对某些事物进行通用定义,以便根据分配给 Puppet 节点的类动态确定主机的主机组。

例如,假设我有一个节点:

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

我希望在web_serverftp_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] 从技术上讲,主机定义包括零个或多个主机组,但我的定义始终至少有一个主机组。

答案1

你可能想使用datacat 模块。事实上,它的 README 展示了操作 Nagios 主机组的一个例子。

相关内容