我试图安排一个有趣的剧本来重新编制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可以发送通知电子邮件。手动运行剧本将开始重新索引,但是即使重新索引完成,重试也只会重试
尽管我的以下建议仍然是好的做法,并且可以避免将来可能出现的一些麻烦,但事实证明,这并不是问题所在。
起初我没注意到你是在请求url调用返回201或202状态,而jira文档指定你将收到200。
您应该:
status: 200
until: response.status == 200 and (result.json.success | bool)
通常,在ansible中对一个文字进行测试是一个坏主意,true
或者false
因为ansible / yaml对于您可以使用的值(是,true,Y,1、234,否,false,0,...)相当宽容也因为值有时可以解释为纯字符串,而不是布尔值(如果有时间,可以尝试使用vars_prompt来解决问题)。
Ansible提供了用于测试值的布尔表示形式的过滤器。我不确定100%会解决您当前的问题,但我会尝试until: result.json.success | bool
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句