[英]Ansible Tower/AWX REST API launch job template with limit hosts
[英]How to pass variable data through Ansible Tower API to a playbook template
我们使用 Ansible Tower for Operations 来执行进程重启。 如果他们收到表明进程停止的警报,他们会执行 Ansible Tower 作业并提供警报中的主机名和进程名称作为“调查”变量。 [发生了更多的事情,我们不会盲目地重新启动每一次失败。]
我想通过从警报中获取主机名和进程名并调用 Tower 模板来使用 python 自动执行此操作。 我想将主机名和进程名作为“-e”变量传递,但我找不到任何关于如何在 python 中编码“extra_vars”的文档。
带有 service 变量的 playbook 部分如下所示:
- name: Check "{{ service }}"
shell: systemctl status "{{ service }}".service | grep Active | awk -v N=2 '{print $N}'
register: output
tags: always
- name: Start "{{ service }}"
service:
name: "{{ service }}"
state: started
when: output.stdout == 'inactive'
tags: start
python3 代码的相关部分如下所示:
headers = {'Content-Type': 'application/json'}
data = see below, this is where I am stuck
response = requests.post('http://localhost/api/v2/job_templates/13/launch/', headers=headers, data =data, verify=False, auth=('user','pass')
我试过了:
data = '{"service":"apache2"}'
data = '{"variables":["service","apache2"]}
data = '{"extra_vars":["service","apache2"]}
这些都失败导致请求失败并返回 400 响应。
stackoverflow 中似乎有使用 VariableManager() 的答案,但该方法似乎绕过了 Tower 和现有模板。
关于我如何通过“extra_vars”的任何想法?
谢谢
根据https://docs.ansible.com/ansible-tower/latest/html/towerapi/api_ref.html#/Job_Templates/Job_Templates_job_templates_launch_create ,Tower 期望变量为 JSON 正文中的extra_vars
。
这种尝试是最接近的:
data = '{"extra_vars":["service","apache2"]}
但是,出于某种原因,您将其格式化为字符串列表,而不是使用变量的标准表示作为字典/映射。
data = '{"extra_vars": {"service": "apache2"}}'
找到了。
我一直在运行“curl”命令,试图填充“service”变量并得到这个错误:“variables_needed_to_start value missing”,当我用谷歌搜索时,我在 Ansible 文档中找到了语法:( https://docs.ansible.com /ansible-tower/latest/html/userguide/job_templates.html#extra-variables )
body = '{"extra_vars": {"variable":"value"}}'
谢谢
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.