6.12. 置备回调
置备回调是自动化控制器的一项功能,使主机能够启动针对自身运行的 playbook,而不是等待用户从自动化控制器控制台管理主机。
置备回调仅用于在调用主机上运行 playbook,用于云突发。云突发是一种云计算配置,它允许私有云在计算需求激增时通过"突发"进入公共云资源来访问公共云资源。
Example
需要客户端到服务器通信(如传输授权密钥)的新实例,而不是对另一主机运行作业。这为自动配置以下内容提供:
- 另一个系统置备后的系统(如 AWS 自动扩展,或操作系统置备系统,如 kickstart 或预装)。
- 以编程方式启动作业,而不直接调用自动化控制器 API。
启动的作业模板仅针对请求调配的主机运行。
这通常通过 firstboot 类型脚本或从 cron
访问。
6.12.1. 启用部署回调
流程
要启用回调,请检查作业模板中的 Provisioning 回调 选项。这将显示作业模板的 Provisioning 回调详情。
注意如果要将自动化控制器的置备回调功能与动态清单搭配使用,请为作业模板中使用的清单组设置 Update on Launch。
回调还需要主机配置密钥,以确保具有 URL 的外部主机无法请求配置。为 Host config 键指定自定义值。主机密钥可以在多个主机间重复使用,从而将此作业模板应用到多个主机。如果要控制哪些主机可以请求配置,您可以随时更改密钥。
使用 REST 手动回调:
流程
检查 UI 中的回调 URL,格式为: https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback/
- 示例 URL 中的 "7" 是自动化控制器中的作业模板 ID。
确保来自主机的请求是 POST。以下是使用
curl
的示例(全部在一行):curl -k -i -H 'Content-Type:application/json' -XPOST -d '{"host_config_key": "redhat"}' \ https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback/
- 确保在清单中定义了请求的主机,以便回调成功。
故障排除
如果自动化控制器无法按名称或 IP 地址在您定义的一个清单中根据名称或 IP 地址查找主机,则请求将被拒绝。以这种方式运行作业模板时,请确保针对自身启动 playbook 的主机位于清单中。如果清单中缺少主机,则作业模板会失败,并显示 No Hosts Matched type 错误消息。
如果您的主机不在清单中,并且为清单组检查 Launch 上的 Update,自动化控制器会在运行回调前尝试更新基于云的清单源。
验证
成功请求会在 Jobs 标签页中生成一个条目,您可以在其中查看结果和历史记录。您可以使用 REST 访问回调,但推荐的使用回调方法是使用包含自动化控制器的示例脚本之一:
-
/usr/share/awx/request_tower_configuration.sh
(Linux/UNIX) -
/usr/share/awx/request_tower_configuration.ps1
(Windows)
通过传递 -h
标志,其用法在文件的源代码中进行了描述,如下所示:
./request_tower_configuration.sh -h Usage: ./request_tower_configuration.sh <options> Request server configuration from Ansible Tower. OPTIONS: -h Show this message -s Controller server (e.g. https://ac.example.com) (required) -k Allow insecure SSL connections and transfers -c Host config key (required) -t Job template ID (required) -e Extra variables
这个脚本可以重试命令,因此比简单的 curl
请求相比,使用回调更为可靠的方法。脚本每分钟重试一次,最多十分钟。
这是示例脚本。如果您在检测到失败情况时需要更多的动态行为,请编辑这个脚本,因为任何非 200 错误代码都可能不是需要重试的临时错误。
您可以在自动化控制器中将回调与动态清单搭配使用。例如,从其中一个受支持的云提供商拉取云清单时。在这些情况下,除了设置 Update On Launch 之外,请确保为清单源配置清单缓存超时,以避免对云的 API 端点造成影响。由于 request_tower_configuration.sh
脚本每分钟轮询一次,因此建议为清单(在清单源本身上配置)的缓存无效时间为一两分钟。
不建议从 cron 任务运行 request_tower_configuration.sh
脚本,但建议每 30 分钟运行推荐的 cron 间隔。重复的配置可以通过调度自动化控制器来处理,以便大多数用户使用回调的主要用途是启用在上线时引导至最新配置的基础镜像。在第一次引导时运行是最佳实践。首次启动脚本是通常自我删除的初始化脚本,因此您设置了一个调用 request_tower_configuration.sh
脚本副本的 init 脚本,并将其设置为自动扩展镜像。
6.12.2. 将额外变量传递给置备回调
您可以在 Provisioning Callback 中传递 extra_vars
,其方式与在常规作业模板中相同。要传递 extra_vars
,发送的数据必须是 POST 正文的一部分,作为应用程序或 JSON,作为内容类型。
流程
使用以下方法之一传递额外变量:
在添加您自己的
extra_vars
时要传递时,使用以下 JSON 格式作为示例:'{"extra_vars": {"variable1":"value1","variable2":"value2",...}}'
使用
curl
将额外变量传递给作业模板调用:root@localhost:~$ curl -f -H 'Content-Type: application/json' -XPOST \ -d '{"host_config_key": "redhat", "extra_vars": "{\"foo\": \"bar\"}"}' \ https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback
如需更多信息,请参阅配置 自动化执行中的使用 Curl 启动作业 。