2015-11-16 2 views
-1

Я пытаюсь проверить две или более переменных пуст или нет. Чтобы достичь этого, я нашел следующий путь.Как проверить несколько переменных пусто или нет в Puppet 4.x

if $path { 
    if $name { 
      notify { "Path : ${path}": } 
      notify { "Name : ${name}": } 
    } 
} 

Если нам нужно проверить более двух переменных, как проверить это?

Пожалуйста, предложите наилучший способ для кодирования.

+0

В Puppet 4, только * undefined * значения преобразуются в boolean как 'false'. Все остальные значения, включая пустые строки, пустые списки и пустые хеши, преобразуются в boolean как 'true'. Ваш пример подсказывает, что вы действительно хотите определить, определены ли переменные *, а не пустые ли они. Это ведь то, что вы хотите? –

+0

@JohnBollinger: Очень жаль, что поднял вопрос с неправильным примером. Я хочу проверить, содержит ли переменная пустую строку или нет. – ArunRaj

ответ

1

Я пытаюсь проверить две или более переменных пустые или нет.

Я вас иметь в виду, что вы хотите, чтобы определить, какой-либо нескольких переменных, является ли пустая строка. Вы можете использовать новую функцию reduce() для решения этой проблемы.

Например, это ...

$is_any_empty = reduce([$one, $two, $three], false) |$memo, $entry| { 
    $memo or ($entry == '') 
} 

... устанавливает переменную $is_any_empty в true тогда и только тогда, когда по крайней мере одна из переменных $one, $two и $three содержит пустую строку, которая является то, что Ты спрашивал.

Даже с вашим разъяснением, однако, я подозреваю, что это не совсем то, что вы действительно хотите. Мое лучшее предположение состоит в том, что вы действительно хотите определить, есть ли все переменные из набора переменных, которые имеют значения , но не -пустые строки (в отличие от того, что они не определены или имеют значения, которые не являются нитями вообще). Такой типа-Aware проверки может быть сделано с помощью новой системы типа кукольного 4 в:

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

$entry =~ String[1] это логическое выражение, вычисляемое ли значение переменной $entry имеет тип String и по крайней мере один символ длинный. Обратите внимание, что он будет соответствовать строкам, состоящим только из пробелов; если вы этого не хотите, то необходимые моды остаются в качестве упражнения.