如何在Puppet 4.x中检查多个变量是否为空

如何在Puppet 4.x中检查多个变量是否为空,puppet,puppet-enterprise,Puppet,Puppet Enterprise,我试图检查两个或多个变量是否为空。为了实现它,我找到了以下方法 if $path { if $name { notify { "Path : ${path}": } notify { "Name : ${name}": } } } 如果我们需要检查两个以上的变量,如何检查 请建议最好的编码方式 我试图检查两个或多个变量是否为空 我认为你的意思是,你想确定几个变量中的任何一个是否是空字符串。您可以使用新的reduce()函数来解决此问题 例

我试图检查两个或多个变量是否为空。为了实现它,我找到了以下方法

if $path {
    if $name {
          notify { "Path : ${path}": }
          notify { "Name : ${name}": }
    }
}
如果我们需要检查两个以上的变量,如何检查

请建议最好的编码方式

我试图检查两个或多个变量是否为空

我认为你的意思是,你想确定几个变量中的任何一个是否是空字符串。您可以使用新的
reduce()
函数来解决此问题

例如,这个

$is_any_empty = reduce([$one, $two, $three], false) |$memo, $entry| {
    $memo or ($entry == '')
}
。。。将变量
$is_any_empty
设置为
true
当且仅当变量
$one
$two
$three
中至少有一个包含空字符串,这是您要求的

尽管你做出了澄清,但我怀疑这并不是你真正想要的。我的最佳猜测是,您实际上想要确定一组变量中是否所有的值都是非空字符串(而不是未定义或值根本不是字符串)。这种类型识别检查可以借助Puppet 4的新类型系统完成:

$all_are_nonempty = reduce([$one, $two, $three], true) |$memo, $entry| {
    $memo and ($entry =~ String[1])
}

$entry=~String[1]
是一个布尔表达式,用于计算变量
$entry
的值是否具有类型
String
,并且长度至少为一个字符。请注意,它将匹配只包含空格的字符串;如果您不想这样做,那么所需的MOD将留作练习。

在Puppet 4中,只有未定义的值转换为布尔值,如
false
。所有其他值,包括空字符串、空列表和空散列,将转换为布尔值,即
true
。您的示例表明,您实际上想要确定所讨论的变量是否已定义,而不是它们是否为空。这就是你想要的吗?@JohnBollinger:很抱歉用错误的例子提出了一个问题。我想检查变量是否包含空字符串。