条件不相等时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