所以我有这本剧本
- hosts: localhost
gather_facts: no
vars:
this_thing_is_true: true
use_handler: false
tasks:
- debug:
msg: 'Notifying handlers'
changed_when: this_thing_is_true
notify:
- me
handlers:
- name: me
debug:
msg: 'I have been notified'
when: use_handler is true
当我按预期运行它时,处理程序不会运行。
# ansible-playbook handler.yml
PLAY [localhost] ***************************************************************
TASK [debug] *******************************************************************
changed: [localhost] => {
"msg": "Notifying handlers"
}
RUNNING HANDLER [me] ***********************************************************
skipping: [localhost]
use_handler
我可以通过更改剧本中的变量来激活处理程序。
# ansible-playbook handler.yml
PLAY [localhost] ***************************************************************
TASK [debug] *******************************************************************
changed: [localhost] => {
"msg": "Notifying handlers"
}
RUNNING HANDLER [me] ***********************************************************
ok: [localhost] => {
"msg": "I have been notified"
}
然而,我认为这也会激活处理程序......但事实并非如此。
# ansible-playbook -e use_handler=true handler.yml
PLAY [localhost] ***************************************************************
TASK [debug] *******************************************************************
changed: [localhost] => {
"msg": "Notifying handlers"
}
RUNNING HANDLER [me] ***********************************************************
skipping: [localhost]
难道我做错了什么?
我从另一个论坛得到了答案
问题在于,在命令行上使用 key=value 样式的额外变量将 bool 传递到运行中是不切实际的。要设置布尔值,您需要使用 JSON。看哪:
另一种选择是用字符串检查替换处理程序中的布尔检查
改变条件
如果你愿意的话可以测试一下
is true
. 可以在测试中使用普通布尔变量。