如何解决Ansible 在条件不相等时失败!= 不适用于我的游戏
当条件在 == 上正常工作但在 != 上无法正常工作时,以下剧本检查和比较输入包名称和版本与我们的系统!
---
- hosts: "{{ cluster_name }}"
user: sv_operator
become: False
gather_facts: yes
vars:
ansible_python_interpreter: /d2/local/bin/python
vars_prompt:
- name: cluster_name
prompt: "Enter Cluster Name (Custer1/Cluster2/Cluster3)"
private: no
tasks:
- pause:
prompt: "Enter the name of Package and version"
register: prompt
no_log: yes
run_once: yes
- set_fact:
package_fact : "{{ prompt.user_input }}"
- shell:
cmd: "show system version | tr -s ' ' | grep '{{ package_fact }}' "
register: svcli_output
- name: Package Version
debug:
msg: "{{ svcli_output.stdout }}"
- debug:
msg: "PTS package {{ package_fact | upper}} match with existed one on the system"
ignore_errors: yes
when: svcli_output.stdout == package_fact
- fail:
msg: "PTS package {{ package_fact | upper}} NOT match with existed one on the system"
ignore_errors: yes
when: svcli_output.stdout != package_fact
条件匹配时输出(==)
TASK [debug] *******************************************************************************************************************************************************
ok: [host-offline-01] => {}
MSG:
PTS package PROTOCOLS 20.12.01 match with existed one on the system
TASK [debug] *******************************************************************************************************************************************************
skipping: [host-offline-01]
PLAY RECAP *********************************************************************************************************************************************************
host-offline-01 : ok=6 changed=1 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
条件不匹配时输出(!=)
TASK [shell] *******************************************************************************************************************************************************
fatal: [host-offline-01]: FAILED! => {
"changed": true,"cmd": "show system version | tr -s ' ' | grep 'Protocols 20.12.02' ","delta": "0:00:00.324347","end": "2021-01-24 18:58:44.685277","rc": 1,"start": "2021-01-24 18:58:44.360930"
}
MSG:
non-zero return code
PLAY RECAP *********************************************************************************************************************************************************
host-offline-01 : ok=3 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
解决方法
正如@Zeitounator 在他的评论中指出的那样,shell
命令失败并且剧本执行正在停止。在此之后,它永远不会执行任何任务。
这是 grep
命令的行为。如果给定的表达式匹配,则返回 0
的返回码,否则返回 1
。因为我们希望即使 grep 返回非零代码也能运行后续任务。我们需要“忽略”shell
任务的返回码。我们可以通过两种方式做到这一点:
- 使用
ignore_errors
- 使用
failed_when
在下面的示例中,我使用了 failed_when
:
- shell:
cmd: "show system version | tr -s ' ' | grep '{{ package_fact }}'"
register: svcli_output
failed_when: svcli_output.rc > 1
- name: Package version
debug:
var: svcli_output.stdout
- debug:
msg: "PTS package {{ package_fact|upper}} match with existed one on the system"
when: svcli_output.stdout == package_fact
- fail:
msg: "PTS package {{ package_fact|upper}} NOT match with existed one on the system"
when: svcli_output.stdout != package_fact
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。