我试图安排一个ansible剧本重新索引Jira,我也喜欢我们的开发能够特别启动它需要他们能够通过AWX做,我能够开始重新索引但是想要在重新索引完成时发出通知。
以下是我的CLI命令和输出:
[root@devjira02 ~]# curl -u admin:admin123! -X GET https://devjira.comapny.com/rest/api/2/reindex/progress
{"progressUrl":"/secure/admin/jira/IndexProgress.jspa?taskId=12720","currentProgress":35,"currentSubTask":"Currently working on: Issue index","type":"BACKGROUND","submittedTime":"2019-04-01T14:23:50.971+0100","startTime":"2019-04-01T14:23:50.973+0100","success":false}
[root@devjira02 ~]# curl -u admin:admin123! -X GET https://devjira.company.com/rest/api/2/reindex/progress
{"progressUrl":"/secure/admin/jira/IndexProgress.jspa?taskId=12720","currentProgress":100,"type":"BACKGROUND","submittedTime":"2019-04-01T14:23:50.971+0100","startTime":"2019-04-01T14:23:50.973+0100","finishTime":"2019-04-01T14:24:33.922+0100","success":true}
我的手册:
- name: DEV Jira Re-index
become: true
become_method: sudo
become_user: root
hosts: DEVJIRA02
gather_facts: yes
tasks:
- name: Jira Re-index
uri:
url: https://devjira.company.com/rest/api/2/reindex?type=BACKGROUND_PREFERRED
method: POST
user: admin
password: admin123!
force_basic_auth: yes
status_code: [201, 202]
- name: Wait until re-index completes
uri:
url: https://devjira.company.com/rest/api/2/reindex/progress
method: GET
user: admin
password: admin123!
force_basic_auth: yes
status_code: [201, 202]
return_content: yes
body_format: json
register: result
until: result.json.success == true
retries: 180
delay: 30
我喜欢第二部分重试,直到成功== true,此时AWX可以发送通知电子邮件。手动运行Playbook将启动重新索引,但即使重新索引已完成,重试也只会重试
虽然我的下面的主张仍然是良好的做法,并且会阻止一些可能的未来头痛,但在这种情况下证明不是问题。
我一开始并没注意到你要求网址呼叫在jira documentation specifies you will receive a 200时返回201或202状态。
你应该:
status: 200
until: response.status == 200 and (result.json.success | bool)
在ansible中测试文字true
或false
通常是一个坏主意,因为ansible / yaml对你可以使用的值非常宽容(是的,真的,Y,1,234,不,假,0,... 。)还因为值有时可以被解释为纯字符串而不是布尔值(如果你有一些时间,请尝试使用vars_prompt解决问题)。
Ansible提供了一个过滤器来测试值的布尔表示。我不是100%肯定这会解决你当前的问题,但我会尝试使用until: result.json.success | bool