是否可以使用 puppet 通知不同主机上的服务?

Is it possible to notify a service on a different host with puppet?

我有一个 puppet 模块供 host-1 执行一些文件交换。

是否可以将在 host-1 上所做的更改通知 host-2 上的另一个 puppet 代理(即通过通知)?

如果可能的话,最佳实践方法是什么?

class fileexchangehost1 {
  file { '/var/apache2/htdocs':
    ensure  => directory,
    source  => "puppet:///modules/${module_name}/var/apache2/htdocs",
    owner   => 'root',
    group   => 'root',
    recurse => true,
    purge   => true,
    force   => true,
    notify  => Service['restart-Service-on-host-2'],
  }
}

Puppet 无法直接通过另一台主机的清单通知一台主机上的服务。

也就是说,您可以为此使用 exported resources 吗?我们使用 Icinga 导出的资源,因此一台主机为自己生成 Icinga 配置,然后将其导出到 Icinga 服务器,Icinga 服务器重新启动守护进程。

例如,在客户端主机上:

@@file { "/etc/icinga2/conf.d/puppet/${::fqdn}.conf":
  ensure  => file,
  [...]
  tag     => "icinga_client_conf",
}

在主控主机上:

File <<| tag == "icinga_client_conf" |>> {
  notify  => Service['icinga2'],
}

在您的情况下,似乎没有资源被导出,但这会为您提供工具来构建满足您需要的东西吗?

很多人都问过这个问题,并且在不同时期都在讨论实现一项功能以使其成为可能。但这不可能,而且短期内也不太可能。

导出资源被认为是解决类似问题的早期解决方案,尽管有些例如here 认为这不是一个好的解决方案,而且我没有看到现在经常使用导出的资源。

我认为,如今,推荐的方法是保持简单,并使用类似 Puppet Bolt 的东西来简单地在节点 A 上执行 运行 命令,然后在节点 B 上,在订单。

如果不是 Puppet Bolt,您也可以使用 MCollective 的继任者,Choria,甚至是 Ansible。