下面是我的Ansible任务,我想确定它是否正确。
- name: check
shell: curl -s 'http://<host>/path' | grep abc
warn=no
no_log: True
register: grep_output
ignore_errors: true
failed_when: grep_output.stdout != ''
我理解您的问题,即您有兴趣验证grep
结果(首先)。正如评论中已经提到的,您需要定义失败的含义。
---
- hosts: localhost
become: false
gather_facts: false
vars:
ANSIBLE_TOWER_URL: "yourURL"
TOWER_LATEST_VERSION: "yourVersion"
tasks:
- name: Check Ansible Tower version
shell:
cmd: curl --silent --location "https://{{ ANSIBLE_TOWER_URL }}/api/v2/ping/" | jq '.version' | grep {{ TOWER_LATEST_VERSION }}
warn: false
register: result
failed_when: result.rc != 0
changed_when: false
check_mode: false
- name: Show result
debug:
msg: "{{ result.stdout }}"
您不应该使用ignore_errors
指令,因为
它不会使Ansible忽略未定义的变量错误
以后再说。此外,上面的方法不考虑HTTP状态代码,如下例所示。
curl --silent --location "https://{{ ANSIBLE_TOWER_URL }}/api/v2/ping/" --write-out "%{http_code}" | jq '.'
因此,根据用例,不清楚预期的结果是否存在,或者页面是否不可达或不可访问,并且给出错误的结果和做出不正确的假设。
因此,最好使用<code>uri</code>模块与以下Web服务交互
- name: Check Ansible Tower version
uri:
url: "https://{{ ANSIBLE_TOWER_URL }}/api/v2/ping/"
method: GET
validate_certs: yes
return_content: yes
status_code: 200
body_format: json
check_mode: false
register: result
- name: Show result
debug:
msg: "{{ result.json }}"
您可以使用它访问结果集的值,例如“{{ result.json.version }}”。
进一步Q
grep
grep
命令的退出状态代码curl
返回HTTP状态代码和响应