Ansible,如何检查变量是否为空?

Ansible,如何检查变量是否为空?,ansible,Ansible,我有一个角色var I,用于向linux用户添加授权密钥,因此foo可以是一个包含单个ssh公钥的字符串,也可以是多个公钥的列表 默认情况下,foo已定义但为空,因此即使用户未设置它,也可以对其进行测试,这样,如果它为空,则不会执行任何相关任务 我通常会使用when:foo或when:not foo,而且效果很好,只是现在ansible trow发出了贬值警告,说: [弃用警告]:将“无”作为裸变量进行求值,此 行为将消失,你可能需要在这个问题上添加“bool” 未来的表达。另请参见条件_BAR

我有一个角色var I,用于向linux用户添加授权密钥,因此foo可以是一个包含单个ssh公钥的字符串,也可以是多个公钥的列表

默认情况下,
foo
已定义但为空,因此即使用户未设置它,也可以对其进行测试,这样,如果它为空,则不会执行任何相关任务

我通常会使用
when:foo
when:not foo
,而且效果很好,只是现在ansible trow发出了贬值警告,说:

[弃用警告]:将“无”作为裸变量进行求值,此 行为将消失,你可能需要在这个问题上添加“bool” 未来的表达。另请参见条件_BARE_VARS配置 切换。。此功能将在2.12版中删除。贬低 可以通过在中设置deprecation\u warnings=False来禁用警告 ansible.cfg

如前所述,我尝试了
when:foo | bool
,但每次变量中填充的字符串不是yes、true、yes时,它都返回
false

foo已定义
由于定义了var,因此不起作用

foo!=“”
不起作用,因为变量为null而不是空字符串

foo | length>0不起作用,因为null没有长度


老实说,我这里没有什么想法。

你要找的东西是,它有一个别名
d
,比如
when:foo | d(“”
甚至
when:foo | d(False)


请注意,
default
通常只替换
null
None
,而不是python式的真实性概念。为此,您需要为其提供第二个参数
foo | default(“something other”,true)
,该参数适用于
foo
null
(也可能为0)

我认为答案就在错误中。“将None作为裸变量进行评估”表明foo的评估结果为None。因此,您需要:

when:foo!=无