我有这个 var I 一个角色,我用来向 linux 用户添加授权密钥,所以 foo 可以是带有单个 ssh 公钥的字符串或多个公钥的列表。
默认情况下foo已定义但为空,因此即使用户未设置它也可以进行测试,这样如果为空,则不会执行任何相关任务。
我通常会使用when: fooorwhen: not foo并且它运行良好,除了现在 ansible trow 折旧警告说:
[弃用警告]:将 None 评估为裸变量,此行为将消失,将来您可能需要将 |bool 添加到表达式中。另请参阅 CONDITIONAL_BARE_VARS 配置切换。此功能将在 2.12 版中删除。可以通过在 ansible.cfg 中设置 deprecation_warnings=False 来禁用弃用警告。
我when: foo|bool像提到的那样尝试,但false每次变量填充一个不是 yes, true, Yes 的字符串时它都会返回...
foo is defined 不起作用,因为定义了 var
foo != "" 不起作用,因为 var 为 null 而不是空字符串
富| length > 0 不起作用,因为 null 没有长度
老实说,我在这里没有想法。
mda*_*iel 10
您正在寻找的是过滤default器,它有一个别名,d例如 inwhen: foo | d("")或什至when: foo | d(False)
请注意,default通常只替换nullor None,而不是真实性的 Python 想法。为此,您需要为其提供第二个参数,该参数适用于或(也可能是 0)foo | default("something-else", true)的情况foonull""