来自 Jira API 的 Ansible "until" 响应
Ansible "until" response from Jira API
我正在尝试安排一个 ansible playbook 来重新索引 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 调用 return 201 或 202 状态,而 jira documentation specifies you will receive a 200。
您应该:
- 更改预期的 return 代码:
status: 200
- 完全放弃状态选项并更改您的条件:
until: response.status == 200 and (result.json.success | bool)
原始命题(未修复但仍然是很好的做法)
在 ansible 中针对文字 true
或 false
进行测试通常是一个坏主意,因为 ansible/yaml 对您可以使用的值非常宽容(是的,正确的, Y, 1, 234, no, false, 0, ...) 并且因为这些值有时可以解释为纯字符串而不是布尔值(如果有时间,请尝试使用 vars_prompt 来理解问题) .
Ansible 提供了一个过滤器来测试一个值的布尔表示。我不是 100% 确定这会解决您当前的问题,但我会尝试 until: result.json.success | bool
我正在尝试安排一个 ansible playbook 来重新索引 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 调用 return 201 或 202 状态,而 jira documentation specifies you will receive a 200。
您应该:
- 更改预期的 return 代码:
status: 200
- 完全放弃状态选项并更改您的条件:
until: response.status == 200 and (result.json.success | bool)
原始命题(未修复但仍然是很好的做法)
在 ansible 中针对文字 true
或 false
进行测试通常是一个坏主意,因为 ansible/yaml 对您可以使用的值非常宽容(是的,正确的, Y, 1, 234, no, false, 0, ...) 并且因为这些值有时可以解释为纯字符串而不是布尔值(如果有时间,请尝试使用 vars_prompt 来理解问题) .
Ansible 提供了一个过滤器来测试一个值的布尔表示。我不是 100% 确定这会解决您当前的问题,但我会尝试 until: result.json.success | bool