如何通过Python调用Ansible Tower API向playbook模板传递变量
正确传参方式
Ansible Tower v2 版本的作业模板启动接口中,extra_vars 字段要求传入键值对格式的JSON对象,你之前尝试的数组格式、未嵌套在extra_vars下的写法都不符合接口规范,所以会返回400错误。
推荐写法(用requests内置json参数,无需手动处理序列化和请求头)
import requests # 调用前请先确认对应作业模板已开启「允许提示传入额外变量」的配置 response = requests.post( url='http://localhost/api/v2/job_templates/13/launch/', auth=('user', 'pass'), json={ "extra_vars": { "service": "apache2", # 从告警提取的其他变量比如主机名也可以直接加在这里 "target_host": "告警中提取的主机名" } }, verify=False ) # 调试时可以打印返回信息排查错误 print(response.status_code) print(response.json())
手动拼接data参数的写法(不推荐,容易出现转义错误)
headers = {'Content-Type': 'application/json'} data = '{"extra_vars": {"service": "apache2"}}' response = requests.post( 'http://localhost/api/v2/job_templates/13/launch/', headers=headers, data=data, verify=False, auth=('user','pass') )
注意事项
- 必须提前在Ansible Tower对应作业模板的设置页面勾选「启用提示传入额外变量」选项,否则接口会拒绝接收传入的自定义变量,返回400错误
- 如果你的作业模板需要指定运行目标主机,可以把主机参数也放入
extra_vars,也可根据模板配置传入inventory相关参数指定目标主机
内容的提问来源于stack exchange,提问作者Steve J
相关产品推荐
相关产品推荐

