Проверьте, является ли переменная undef в шаблоне puppet
как правильно проверить, является ли переменная undef в шаблоне марионетки?
в манифесте переменная определяется следующим образом
$myvar = undef
как это проверяется в шаблоне?
увидено следующие два варианта
<% if @myvar -%>
<% end -%>
и
<% if not @myvar.nil? and @myvar -%>
<% end -%>
Они оба, кажется, работают в моем случае, но мне интересно, если первый подход не срабатывает в определенных случаях?
3 ответов
документация марионетки (на момент написания этого ответа) объясняет это очень хорошо: https://docs.puppet.com/puppet/latest/reference/lang_template_erb.html#testing-for-undefined-variables
С undef
- Это не то же самое как false
, просто с помощью if
это не лучший способ проверить это. Также, когда переменная определена, но имеет значение false
или nil
также невозможно проверить с помощью простого if
.
это почему вы хотите использовать scope.lookupvar(‘variable’)
и проверьте его возвращаемое значение для :undef
или :undefined
(или nil
), чтобы узнать, было ли установлено значение undef
, или не ставить вообще.
первый должен работать как шарм, это то, что преподается на курсах, а также.
номер два, кажется... избыточный.
Я бы сказал, что проверка зависит от того, хотите ли вы альтернативу, когда переменная не определена.
Я использую следующие правила:
требуются переменной
проверьте в своем кукольном скрипте, содержит ли переменная ожидаемое значение, прежде чем даже рассматривать рендеринг шаблона:
if $myvar == undef {
fail {"You really must set myvar, seriously."}
}
if ! $anothervar {
fail {"anothervar is false, undefined or empty."}
}
вы можете сделать вашу жизнь проще, установив тип параметров явно. Это избавляет вас от сравнения типов и преобразования.
в вашем шаблоне вы просто пишете переменные, а затем:
<%= @myvar %>
<%= @anothervar %>
необязательная переменная, которая должна быть определена
если вы предполагаете, что переменная определена, вы можете рассматривать ее как логическую.
отображение выглядит следующим образом (источник):
- falsey: пустая строка, false, undef
- истина: все остальное
В Кукольный >=4:
- falsey: false, undef
- истина: все остальное
примеры:
print 'something', если @myvar оценивает значение true, в противном случае'something else'.
<% if @myvar %>something<% else %>something else<% end %>
печать "что-то", если @myvar оценивает значение true
<% if @myvar %>something<% end %>
print @myvar, если он оценивает значение true, в противном случае "альтернатива"%>
<%= @myvar ? @myvar : 'alternative' %>
необязательная переменная, которая может быть определено
если вы не уверены, что переменная даже определена и не хотите делать неправильные предположения, проверьте ее в шаблоне.
примеры:
напечатайте "что-то", а затем @myvar, если @myvar определен и не пуст
<% if defined?(@myvar) && ! @myvar.empty? %>something<%= @myvar %><% end %>
print @myvar, если он определен и больше 10
<%= @myvar if defined?(@myvar) && @myvar > 10 %>