在我的剧本中使用“何时”时,==有效,但!=不可行?

时间:2019-05-20 16:46:31

标签: ansible ansible-2.x

  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]

     

任务[测试声明]   ****************************************************** ****************************************************** ****************************************************** ****************************************************** ***********跳过:[web01]跳过:[web02]正常:[log01] => {       “ msg”:“ log01是log01或log02”}

     

PLAY RECAP   ****************************************************** ****************************************************** ****************************************************** ****************************************************** ************************** log01:ok = 2更改= 0不可达= 0
  失败= 0 web01:确定= 1更改= 0 = 0
  unreachable = 0失败= 0 web02:确定= 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

1 个答案:

答案 0 :(得分:2)

如果要使其不在web01主机上时运行该任务,则需要使用and运算符而不是or。如果您尝试跳过log01或log02主机,则可以这样重写您的主机:

when: '"log" not in ansible_hostname'

这将捕获任何日志实例。