【发布时间】:2015-07-09 07:22:20
【问题描述】:
我想有条件地在 Ansible 剧本中定义一个变量,如下所示:
my_var: "{{ 'foo' if my_condition}}"
如果条件未解析为 true,我希望变量保持未定义。
如果我尝试执行代码,Ansible 会给出以下错误:
fatal: [foo.local] => {'msg': 'AnsibleUndefinedVariable: One or more undefined
variables: the inline if-expression on line 1 evaluated
to false and no else section was defined.', 'failed': True}
为什么这是一个错误?
完整的案例如下:
{role: foo, my_var: "foo"}
如果定义了my_var,角色会做一些特别的事情。在某些情况下,我不希望角色这样做。我可以使用when: condition,但是我必须复制整个角色块。我也可以使用额外的 bool 变量,但我想要一个无需更改角色的“接口”的解决方案。
有什么想法吗?
【问题讨论】:
-
根据 Jinja 模板设计器文档,“else 部分是可选的。如果未提供,else 块将隐式计算为 Undefined 对象(无论环境中的 undefined 设置为什么)”。我猜对于 Ansible,Undefined 是不允许的,您应该使用已接受答案中指示的 else。奇怪的是,在我自己的一些 Ansible 安装中,这绝对可以在没有 else 的情况下工作,但不是在工作中。
标签: ansible