在我的剧本中使用 "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'
这会捕获任何日志实例。
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'
这会捕获任何日志实例。