第 18 章 使用 Webhook
Webhook 是网页或 Web 应用的一种方法,用于实时为其他应用程序提供信息。只有在事件发生后才会触发 Webhook。请求通常包含事件的详细信息。事件会触发回调,如发送电子邮件确认已调配主机。Webhook 可让您使用 fire-and-forget 消息交换模式,基于 Satellite 内部事件定义对外部 API 的调用。发送请求的应用不会等待响应,或者忽略它。
webhook 的有效负载是从 webhook 模板创建的。Webhook 模板使用与 Provisioning 模板相同的 ERB 语法。可用变量:
-
@event_name
: 事件的名称。 -
@webhook_id
:唯一事件 ID。 -
@payload
: Payload data,每种事件类型都不同。要访问各个字段,请使用@payload[:key_name]
Ruby 哈希语法。 -
@payload[:object]
: Database 对象用于数据库操作触发的事件(create、update、delete)。不适用于自定义事件。 -
@payload[:context]
: Additional information as hash如 request 和 session UUID, remote IP 地址, user, organization, and location.
由于 Webhook 使用 HTTP,因此不需要向现有的 Web 服务添加新基础架构。
Satellite 中 webhook 的典型用例是在主机被创建或删除时调用监控系统。
Webhook 可用于您要在外部系统中执行的操作,可通过其 API 来实现。当需要运行其他命令或编辑文件时,可以使用 Capsules 的 shellhooks 插件。shellhooks 插件允许您在可通过 API 执行的 Capsule 中定义 shell 脚本。
您可以在不安装 shellhooks 插件的情况下,成功使用 Webhook。
有关可用事件列表,请参阅 可用的 Webhook 事件。
18.1. 迁移到 Webhook
传统的 foreman_hooks
插件提供了对 webhook 插件不有意提供的模型对象的完整访问权限。
可用的范围受 securemode 限制,所有对象和宏都受到 API 稳定性承诺的影响,且完全记录。
Webhook 触发的事件数量明显低于 foreman_hooks
。
Webhook 异步处理,因此与系统内部进行篡改的风险最小。在不为每个单独的 webhook 脚本创建有效负载的情况下,无法从 foreman_hooks
迁移。但是,webhook 插件附带几个示例有效负载模板。您还可以使用示例有效负载和 shellhooks 来简化迁移。
必须自定义脚本和有效负载模板才能实现类似的结果。