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
我需要简单的东西 - 如果变量是 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