如何在Ansible中的do-until循环中指定多个条件

时间:2016-04-26 19:42:56

标签: python yaml ansible jinja2 ansible-2.x

我正在进行REST调用,并希望在继续之前检查我的请求是否已完成。在回复中,我得到了一个“PENDING”或“IN_PROGRESS”作为request_status。我想要等到“完成”或“失败”。为此,我想等一下“PENDING”或“IN_PROGRESS”

我尝试了很多变化,但未能成功,最后一次尝试如下:

  - name: Wait for the cluster deployment (this will take a while)
    uri:
      url: http://localhost:8080/api/v1/clusters/{{ cluster_name }}/requests/1
      method: GET
      user: admin
      password: admin
      HEADER_X-Requested-By: Ansible
      force_basic_auth: yes
      status_code: 200, 201, 202
      return_content: yes
    register: response
    until: "'{{ (response.content | from_json).Requests.request_status }}' != 'PENDING' AND '{{ (response.content | from_json).Requests.request_status }}' != 'IN_PROGRESS'"
    retries: 3
    delay: 5

错误是:

  

“条件检查''{{(response.content   | from_json).Requests.request_status}}'!='PENDING'和'{{   (response.content | from_json).Requests.request_status}}'!=   'IN_PROGRESS''失败了。错误是:模板时出现模板错误   string:期望令牌'语句块结束',得到'AND'。字符串:{%   如果'已完成'!='待定'和'已完成'!='IN_PROGRESS'%}真   {%else%} False {%endif%}“

所以,我的问题是如何在Ansible的do-until循环中指定多个条件?

2 个答案:

答案 0 :(得分:5)

好的发现了问题。

改变" AND"到"和"工作

  

直到:"' {{(response.content | from_json).Requests.request_status}}'   !='待定' ' {{(response.content |   from_json).Requests.request_status}}' !=' IN_PROGRESS'"

答案 1 :(得分:0)

(至少在Ansible 2.8.3中)可以将数组传递给until

- shell: "echo OK"
  until:
    - 1 == 1
    - "'no'.replace('no', 'yes') == 'yes'"

在这种情况下,数组项与and隐式“连接”