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

jinja/ansible convert string to boolean

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

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

UndefinedError: 'bool' is undefined

然后我尝试了 var | bool,但即使 var 非空,它的计算结果也是 false。如何使该条件起作用?

我找到了 ruby 风格的可能解决方案:

    when: not not var

但它相当丑陋。忘了说,如果没有 not not,var 将计算为一个字符串,因此会出现错误。我希望得到更好的答案,所以如果有请添加另一个答案。

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

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

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

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

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

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

roles/foo/tasks/main.yml

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

roles/foo/defaults/main.yml

echo_foo: false

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

group_vars/foobar-nodes.yml

echo_foo: true