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