簡體   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