Vagrant 使用条件句无法使用

Vagrant 使用条件句无法使用,vagrant,ansible,Vagrant,Ansible,我有一个仅在运行vagrant时定义的var: is_vagrant: yes 当我运行其他playbook时,它没有被定义为不包括var 当我在ansible中执行以下操作时: when: is_vagrant is defined 无论定义与否,它都像一个符咒 但是当我使用这样的东西时: when: gitclone.changed or is_vagrant is defined 即使包含is_vagrant var,它也会跳过任务。我不知道为什么?当涉及到变量扩展时,我已经不再相信

我有一个仅在运行vagrant时定义的var:

is_vagrant: yes
当我运行其他playbook时,它没有被定义为不包括var

当我在ansible中执行以下操作时:

when: is_vagrant is defined
无论定义与否,它都像一个符咒

但是当我使用这样的东西时:

when: gitclone.changed or is_vagrant is defined

即使包含is_vagrant var,它也会跳过任务。我不知道为什么?

当涉及到变量扩展时,我已经不再相信ansible会做正确的事情。因此,即使ansible试图用诸如“您不需要使用
{{}
“之类的信息误导我,我仍然会这样做

您是否尝试过:

when: "{{ gitclone.changed or is_vagrant is defined }}"
--编辑--

为什么我必须检查定义的。我想改变是真是假

如果您希望在未定义变量时任务“失败”,则不必检查是否已定义该变量。但是如果您不希望出现
UndefinedError:'git\u output'
错误,那么您必须进行检查


changed
git\u输出中
所以如果
git\u输出
没有定义
git\u输出。changed
没有扩展定义。

UndefinedError:“git\u输出”没有定义实际上不确定我在比较什么。@gtheys我想你的意思是
gitclone
没有定义?如果是,那就是你的问题了。是的,我确实是从我的脚本中复制的,并将其命名为不同的:)它没有定义。为什么我必须检查定义的。我猜changed是true还是false?所以两者都不返回true/false?他们返回的是什么?在无法使用的文档中找不到,即使在jinja2也不清楚。(至少对我来说)
when: "{{ is_vagrant is defined or ( gitclone is defined and gitclone.changed ) }}"