来自Jira API的Ansible“until”响应

问题描述 投票:0回答:1

我试图安排一个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将启动重新索引,但即使重新索引已完成,重试也只会重试

ansible uri jira until-loop
1个回答
0
投票

Edit after user comment:

虽然我的下面的主张仍然是良好的做法,并且会阻止一些可能的未来头痛,但在这种情况下证明不是问题。

我一开始并没注意到你要求网址呼叫在jira documentation specifies you will receive a 200时返回201或202状态。

你应该:

  • 更改预期的返回代码:status: 200
  • 完全删除状态选项并更改您的条件:until: response.status == 200 and (result.json.success | bool)

Original proposition (does not fix but still good practice)

在ansible中测试文字truefalse通常是一个坏主意,因为ansible / yaml对你可以使用的值非常宽容(是的,真的,Y,1,234,不,假,0,... 。)还因为值有时可以被解释为纯字符串而不是布尔值(如果你有一些时间,请尝试使用vars_prompt解决问题)。

Ansible提供了一个过滤器来测试值的布尔表示。我不是100%肯定这会解决你当前的问题,但我会尝试使用until: result.json.success | bool

© www.soinside.com 2019 - 2024. All rights reserved.