第 17 章 使用 Webhook

Webhook 是网页或 Web 应用程序以实时为其他应用程序提供信息的方法。Webhook 仅在事件发生后触发。请求通常包含事件的详细信息。事件触发回调,如发送电子邮件确认主机已置备。Webhook 允许您使用 fire-and-forget 消息交换模式,基于卫星内部事件定义对外部 API 的调用。发送请求的应用程序不会等待响应,或忽略它。

Webhook 模板的有效负载是从 Webhook 模板创建的。Webhook 模板使用与 Provisioning 模板相同的 ERB 语法。可用变量:

  • @event_name: 事件的名称。
  • @webhook_id: unique event ID。
  • @payload: Payload 数据,每种事件类型的不同。要访问个别字段,请使用 @payload[:key_name] Ruby hash 语法。
  • @payload[:object]: Database 对象用于数据库操作触发的事件(create、update、delete)。不适用于自定义事件。
  • @payload[:context ]:其他信息作为散列,如请求和会话 UUID、远程 IP 地址、用户、机构和位置。

由于 Webhook 使用 HTTP,因此不需要向现有 Web 服务添加新基础架构。

Satellite 中 Webhook 的典型用例是在创建或删除主机时调用监控系统。

Webhook 可用于外部系统中要执行的操作,可以通过其 API 来完成。如果需要运行其他命令或编辑文件,则可使用 Capsules 的 shellhooks 插件。shellhooks 插件允许您在胶囊上定义可通过 API 执行的 shell 脚本。

您可以在不安装 shellhooks 插件的情况下成功使用 Webhook。

有关可用事件的列表,请参阅 可用的 Webhook 事件

17.1. 迁移到 Webhook

传统的 foreman_hooks 插件提供了对 webhook 插件不有意提供的模型对象的完整访问权限。

可用的范围受安全模式和所有对象及宏的限制,它们都受到 API 稳定性承诺的约束,并且已完全记录。

Webhook 触发的事件数量显著低于 foreman_hooks

Webhook 异步处理,因此对系统的内部修改风险最少。无法从 foreman_hooks 迁移,而不会为每个单独 webhook 脚本创建有效负载。但是,webhook 插件带有几个示例有效负载模板。您还可以将示例有效负载与 shellhook 一起使用来简化迁移。

必须自定义脚本和有效负载模板才能实现类似的结果。