第 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 hash 语法。 -
@payload[:object]
: Database object 用于由数据库操作(create、update、delete)触发的事件。不适用于自定义事件。 -
@payload[:context]
: 附加信息作为哈希,如请求和会话 UUID、远程 IP 地址、用户、机构和位置。
由于 Webhook 使用 HTTP,因此不需要向现有 Web 服务添加新的基础架构。
Satellite 中 webhook 的典型用例是在创建或删除主机时调用监控系统。
Webhook 非常有用,在外部系统中要执行的操作可以通过其 API 来实现。如果需要运行其他命令或编辑文件,则胶囊的 shellhooks 插件可用。shellhooks 插件允许您在胶囊上定义可通过 API 执行的 shell 脚本。
您可以在不安装 shellhooks 插件的情况下成功使用 Webhook。
有关可用事件列表,请参阅 可用的 Webhook 事件。
18.1. 创建 webhook 模板
Webhook 模板用于在触发 Webhook 时将 HTTP 请求的正文生成到配置的目标。使用以下步骤在 Satellite Web UI 中创建 webhook 模板。
流程
- 在 Satellite Web UI 中,进入到 Administer > Webhook > Webhook Templates。
- 单击 Clone an existing template 或 Create Template。
- 输入模板的名称。
使用编辑器更改模板有效负载。
Webhook HTTP 有效负载必须使用 Satellite 模板语法创建。webhook 模板可以使用一个名为
@object
的特殊变量,它可以代表事件的主对象。当特定事件时,可以缺少@object
。您可以通过@payload
变量确定实际可用的数据。如需更多信息, 请参阅管理主机中的模板编写参考 以及可用的 模板宏和方法,请访问 Satellite 服务器上的
/templates_doc
。- 可选:输入 description 和 audit 注释。
- 分配机构和位置。
- 点 Submit。
例子
在创建 webhook 模板时,您必须遵循模板的目标应用程序的格式。例如,应用程序可以期望带有 webhook 消息的 "文本"
字段。请参阅目标应用程序的文档,以了解更多有关 webhook 模板格式的内容。
- 运行远程执行作业
此 webhook 模板定义了一条包含远程执行作业的 ID 和结果的消息。使用此模板的 webhook 可以订阅到事件,如
Actions Remote Execution Run Host Job Succeeded
或Actions Remote Execution Run Host Job Failed
。{ "text": "job invocation <%= @object.job_invocation_id %> finished with result <%= @object.task.result %>" }
- 创建用户
此 webhook 模板定义了一条含有创建用户的登录和电子邮件的消息。使用此模板的 Webhook 应该订阅
User Created
事件。{ "text": "user with login <%= @object.login %> and email <%= @object.mail %> created" }