在我的剧本中使用 "when" 时,== 有效但 != 无效?

When using "when" in my playbook, == works but != does not?

  hosts: all
  gather_facts: true

  tasks:
  - name: testing statements
    debug:
      msg: "{{ ansible_hostname }} is log01 or log02"
    when: ansible_hostname == "log01" or ansible_hostname == "log02"

以上工作如此输出所示:

[root@ansible-host]# ansible-playbook test.yml

播放[全部]


任务 [收集事实] ****************************************************** ****************************************************** ****************************************************** ****************************************************** ************** 好的:[log01] 好的:[web01] 好的:[web02]

TASK [测试语句] ****************************************************** ****************************************************** ****************************************************** ****************************************************** *********** 跳过:[web01] 跳过:[web02] 好的:[log01] => { "msg": "log01 is log01 or log02" }

播放回顾 ****************************************************** ****************************************************** ****************************************************** ****************************************************** *************************** log01 : ok=2 changed=0 unreachable=0
failed=0 web01 : ok=1 changed=0
unreachable=0 failed=0 web02 : ok=1
更改=0 无法访问=0 失败=0

但是当我将 == 更改为 != 时,应该反转输出,它不再有效:

  hosts: all
  gather_facts: true

  tasks:
  - name: testing statements
    debug:
      msg: "{{ ansible_hostname }} is log01 or log02"
    when: ansible_hostname != "log01" or ansible_hostname != "log02"

现在的输出是:

[root@ansible-host]# ansible-playbook test.yml
PLAY [all] 
TASK [Gathering Facts]
ok: [log01]
ok: [web02]
ok: [web01]
TASK [testing statements]
ok: [web01] => {
  "msg": "web01 is log01 or log02" }
ok: [web02] => {
  "msg": "web02 is log01 or log02" }
ok: [log01] => {
  "msg": "log01 is log01 or log02" }
PLAY RECAP
log01: ok=2    changed=0    unreachable=0   failed=0
web01: ok=2    changed=0    unreachable=0   failed=0
web02: ok=2    changed=0    unreachable=0   failed=0

如果您想让它不是 运行 位于 web01 主机上的任务,那么您需要使用 and 运算符而不是 or。如果您试图跳过 log01 或 log02 主机,您可以像这样重写 when:

when: '"log" not in ansible_hostname'

这会捕获任何日志实例。