jinja / ansible将字符串转换为布尔值

时间:2016-03-07 12:24:35

标签: python-3.x ansible jinja2

我需要简单的事情 - 如果变量是false或空字符串,则评估为false。否则评估为真。

我试过了bool(var),但我得到了:

UndefinedError: 'bool' is undefined

然后我尝试了var | bool,但即使var非空,也会计算为false。如何使这个条件有效?

2 个答案:

答案 0 :(得分:1)

我找到了一种可能的红宝石风格解决方案:

    when: not not var

但它相当难看。忘了说没有not not var就会计算出一个字符串,所以ansible错误输出。我希望有更好的答案,所以如果你有,请加上另一个答案。

答案 1 :(得分:0)

您的主要问题是,使用var | bool时,“true”以外的任何内容都会被评估为false。

如果您始终将其作为字符串提供(例如var: ''var: 'false'),那么您可以检查字符串是否相等:

when: condition == 'false' or condition == ''

如果您有这种可能性,也可以选择添加布尔检查:

when: not condition or condition == 'false' or condition == ''

或者你可以默认使用布尔值并可选择覆盖。例如,您可能拥有一个具有条件任务的角色:

角色/富/任务/ main.yml

- name: echo foobar
  shell: echo 'foobar'
  when: echo_foo

角色/富/默认/ main.yml

echo_foo: false

但是我们可能会在一个组或主机变量级别上覆盖它:

group_vars / foobar的-nodes.yml

echo_foo: true