Puppet中如何让已定义但为空的变量触发else分支?
Puppet 判断变量非空的正确写法
你当前的两种写法都无法实现需求,原因如下:
第一种写法的问题:
空字符串''在Puppet中不等于undef,所以当$::some_var['some:name']是空字符串时,!= undef的条件为真,会执行if分支,把空字符串赋值给$var,不会进入else。第二种写法的问题:
defined()函数用于检查变量/资源是否已定义,而空字符串的变量依然是已定义的状态,所以defined($::some_var['some:name'])会返回true,还是会走if分支,无法触发else。
正确解决方案
要实现「当some:name未定义(undef)或为空字符串时,使用another:name的值」,可以利用Puppet的布尔特性:undef、空字符串、空集合在布尔上下文里会被判定为false,直接用变量作为if条件即可:
if $::some_var['some:name'] { $var = $::some_var['some:name'] } else { $var = $::some_var['another:name'] }
如果你需要更明确的判断,也可以写全条件:
if $::some_var['some:name'] != undef and $::some_var['some:name'] != '' { $var = $::some_var['some:name'] } else { $var = $::some_var['another:name'] }
这两种写法都能满足你的需求:只有当some:name存在且不为空字符串时,才会使用它的值,否则切换到another:name。
内容的提问来源于stack exchange,提问作者user2275908
相关产品推荐
相关产品推荐

