我们使用Ansible进行操作,以执行流程重新启动。如果收到警报,表示进程已停止,则执行Ansible Tower作业,并从警报中提供主机名和进程名,作为“调查”变量。更多的事情发生了,我们不只是盲目地重启每一个失败。
我希望通过从警报中获取主机名和进程名,并调用Tower模板来自动化python。我希望将主机名和进程名作为"-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: startpython3代码的相关部分如下所示:
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个响应。
对于使用VariableManager(),在堆栈溢出中似乎有答案,但该方法似乎绕过了the和现有的模板。
对我如何通过"extra_vars“有什么想法吗?
谢谢
发布于 2021-11-10 17:22:32
根据https://docs.ansible.com/ansible-tower/latest/html/towerapi/api_ref.html#/Job_Templates/Job_Templates_job_templates_launch_create,Per期望变量在JSON体中作为extra_vars。
这种尝试是最接近的:
data = '{"extra_vars":["service","apache2"]}但是,出于某种原因,您将其格式化为字符串列表,而不是将变量的标准表示形式用作字典/映射。
data = '{"extra_vars": {"service": "apache2"}}'发布于 2021-11-10 17:26:45
找到了。
我继续运行"curl“命令,试图填充"service”变量,得到了一个错误:"variables_needed_to_start值缺失“,当我在googled上搜索到Ansible docs:(https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html#extra-variables)中的语法时
body ={“extra_vars”:{“变量”:“value”}}‘
谢谢
https://stackoverflow.com/questions/69917346
复制相似问题