如何通过 Ansible Tower API 将可变数据传递给剧本模板
How to pass variable data through Ansible Tower API to a playbook template
我们使用 Ansible Tower for Operations 来执行进程重启。如果他们收到一个提示进程已停止的警报,他们将执行 Ansible Tower 作业并提供警报中的主机名和进程名称作为“调查”变量。 [还有很多事情发生,我们不会盲目地重新开始每次失败。]
我想使用 python 通过从警报中获取主机名和进程名称并调用 Tower 模板来自动执行此操作。我想将主机名和进程名作为“-e”变量传递,但我找不到任何关于如何在 python.
中编写“extra_vars”的文档
带有服务变量的剧本部分如下所示:
- 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 响应。
Whosebug 中似乎有使用 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"]}
但是,出于某种原因,您将其格式化为字符串列表,而不是将变量的标准表示形式用作 dictionary/mapping。
data = '{"extra_vars": {"service": "apache2"}}'
找到了。
我保留了 运行“curl”命令,试图填充“服务”变量并收到此错误:“variables_needed_to_start value missing”,当我用谷歌搜索时,我在Ansible 文档:(https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html#extra-variables)
body = '{"extra_vars": {"变量":"值"}}'
谢谢
我们使用 Ansible Tower for Operations 来执行进程重启。如果他们收到一个提示进程已停止的警报,他们将执行 Ansible Tower 作业并提供警报中的主机名和进程名称作为“调查”变量。 [还有很多事情发生,我们不会盲目地重新开始每次失败。]
我想使用 python 通过从警报中获取主机名和进程名称并调用 Tower 模板来自动执行此操作。我想将主机名和进程名作为“-e”变量传递,但我找不到任何关于如何在 python.
中编写“extra_vars”的文档带有服务变量的剧本部分如下所示:
- 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 响应。
Whosebug 中似乎有使用 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"]}
但是,出于某种原因,您将其格式化为字符串列表,而不是将变量的标准表示形式用作 dictionary/mapping。
data = '{"extra_vars": {"service": "apache2"}}'
找到了。
我保留了 运行“curl”命令,试图填充“服务”变量并收到此错误:“variables_needed_to_start value missing”,当我用谷歌搜索时,我在Ansible 文档:(https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html#extra-variables)
body = '{"extra_vars": {"变量":"值"}}'
谢谢