我有一个仅在运行vagrant时定义的var:
is_vagrant: yes
当我运行其他playbook时,它没有定义为var不包括在内。
当我做ansible时:
when: is_vagrant is defined
当它被定义或未定义时,它就像一个魅力。
但是当我使用这样的东西时:
when: gitclone.changed or is_vagrant is defined
即使包含is_vagrant var,它也只是跳过任务。我不确定为什么?
答案 0 :(得分:1)
当涉及到变量扩展时,我放弃了信任ansible来做正确的事情。因此,即使ansible试图误导我的消息,例如" 您也不需要使用{{}}
或""
",我仍然会这样做
你有没有尝试过:
when: "{{ gitclone.changed or is_vagrant is defined }}"
- 编辑 -
when: "{{ is_vagrant is defined or ( gitclone is defined and gitclone.changed ) }}"
为什么我要检查已定义的。我认为.changed是真还是假?
如果您希望任务失败'如果没有定义变量,那么您不必检查它是否已定义。但是,如果您不想要UndefinedError: 'git_output'
错误,那么您需要检查。
changed
位于git_output
内,因此如果git_output
未定义,则git_output.changed
未定义{{1}}。