条件不相等时Ansible失败!=不在我的剧本上工作
当条件在==上正常工作,但在!=上不工作时,检查输入包名称和版本并与我们的系统进行比较的操作手册如下:我不知道为什么,这几天我一直在想这个条件不相等时Ansible失败!=不在我的剧本上工作,ansible,ansible-inventory,ansible-facts,Ansible,Ansible Inventory,Ansible Facts,当条件在==上正常工作,但在!=上不工作时,检查输入包名称和版本并与我们的系统进行比较的操作手册如下:我不知道为什么,这几天我一直在想这个 --- - hosts: "{{ cluster_name }}" user: sv_operator become: False gather_facts: yes vars: ansible_python_interpreter: /d2/local/bin/python vars_prompt:
---
- 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
条件匹配时的输出(=)
条件不匹配时的输出(!=)
正如@Zeitounator在他的评论中指出的那样,
shell
命令正在失败,playbook执行正在停止。此后,它再也无法完成任何任务
这是grep
命令的行为。如果给定表达式匹配,则返回0
,否则返回1
。因为我们希望在grep返回非零代码的情况下运行后续任务。我们需要“忽略”shell任务的返回代码。我们可以通过两种方式来实现:
- 使用
忽略错误
- 当
失败\u时
:
-shell:
cmd:“显示系统版本| tr-s'| grep'{{package_fact}}'”
寄存器:svcli_输出
当:svcli_output.rc>1时失败
-名称:软件包版本
调试:
变量:svcli_output.stdout
-调试:
msg:“PTS包{package_fact | upper}}与系统上的现有包匹配”
当:svcli\u output.stdout==包\u事实
-失败:
msg:“PTS包{package_fact | upper}}与系统上的现有包不匹配”
时间:svcli_output.stdout!=一揽子事实
您的问题与您的健康状况无关。shell命令失败(rc!=0
),playbook停止。此外,当问题被关闭时,您不应该将其重新发布到新问题中:编辑原始问题并等待其最终重新打开。为了避免这种情况,我建议您从开始查看帮助部分,并尝试从一开始就用所有需要的信息编写问题。
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