如何在Ansible中检查某个状态码(4xx)?

时间:2018-10-26 13:03:46

标签: ansible

我想要的是:停止程序,直到出现状态代码412,然后继续。
我有以下代码来检查状态代码412:

  - name: Check if plan was applied
    uri:
      url: "https://website.some.url.com/api/v1/clusters/elasticsearch/{{elasticClusterDetails.elastic$
      method: GET
      user: admin
      password: "{{rootpw.stdout}}"
      force_basic_auth: yes
      validate_certs: no
    register: result
    until: result.status == 412
    retries: 20
    delay: 30

重试几次后我得到

  

错误:[...]状态为412而不是200

因此412实际上出现了,但未被识别为满足“直到”条件,程序退出。 据我了解,当代码从200切换到412时,无法发出请求。 我需要更改什么才能在代码412上不出现错误?

请注意:这不能重复,因为检查4xx状态代码与检查2xx状态代码不同

1 个答案:

答案 0 :(得分:1)

看看uri module的文档,您会发现有一个status_code属性可用于指定一个或多个被视为“成功”的状态代码。类似于(假设您希望收到200412响应):

- name: Check if plan was applied
  uri:
    url: "https://website.some.url.com/api/v1/clusters/elasticsearch/{{elasticClusterDetails.elastic$
    method: GET
    user: admin
    password: "{{rootpw.stdout}}"
    force_basic_auth: yes
    validate_certs: no
    status_code: [200,412]
  register: result
  until: result.status == 412
  retries: 20
  delay: 30

您现在遇到的问题是412状态代码被视为失败。

您还可以在任务上设置ignore_errors: true,但是使用status_code属性可能更好,因为如果您收到意外的状态代码,它仍然会使任务失败。

注意事项:文档说,“也可以是逗号分隔的状态代码列表”,但源看起来像是期望的实际YAML列表。因此,您可能需要根据实际使用的值来调整值。