从我对how Ansible parses Booleans的问题的一个很好的答案中学习,我仍然不明白为什么Ansible最终会将以下条件评估为True
而不是False
:
在INI格式的广告资源中定义两个变量:
a=false # parsed as 'unicode' (String)
b=True # parsed as 'bool'
现在测试一些简单的条件:
- debug:
msg: "The variable 'a' is true!"
when: a
- debug:
msg: "The variable 'b' is true!"
when: b
- debug:
msg: "The variables 'a' and 'b' are both true!"
when: a and b
结果是a
为假,b
为真,有趣的是a and b
也是 true !
TASK [jenkins : debug] **********************************************************
skipping: [localhost] => {
"skip_reason": "Conditional result was False", "skipped": true
}
TASK [jenkins : debug] **********************************************************
ok: [localhost] => {
"msg": "The variable 'b' is true!"
}
TASK [jenkins : debug] **********************************************************
ok: [localhost] => {
"msg": "The variables 'a' and 'b' are both true!"
}
在对this question的回答中,解释了以下内容:
在python中,任何非空字符串都应该是真实的。但直接 在评估为false的条件下使用。
因此,这解释了when: a
评估为False,但它没有解释为什么when: a and b
评估为True。
如果有人能够详细解释这一结果,那就太棒了。