繁体   English   中英

如何通过 Ansible Tower API 将变量数据传递到剧本模板

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM