1

我试图安排一个 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 可以发送通知电子邮件。手动运行 playbook 将启动重新索引,但即使重新索引已完成,重试也会重试

4

1 回答 1

0

用户评论后编辑:

虽然我下面的提议仍然是很好的做法,并且可以防止将来可能出现的一些问题,但在这种情况下,这不是问题。

起初我没有注意到您正在请求 url 调用以返回 201 或 202 状态,而jira 文档指定您将收到 200

您应该:

  • 更改预期的返回码: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

于 2019-04-01T14:58:36.437 回答