使用puppet(3.6),我有以下erb模板
<% if @redis_port != ''%>
redis['port'] = <%= @redis_port %>
<% end %>
如果$redis_port
不是nil
或空白,则所需的行为是打印出来。否则省略
redis['port'] = 6379
$ redis_port在params.pp木偶清单中定义
$ cat params.pp
class foobar::params {
$redis_port = nil #'6379'
}
$ cat init.pp
class foobar {
$redis_port = $foobar::params::redis_port
}
如果$ redis_port是一个字符串,为什么erb模板只能正常工作?
我没有运气就尝试过以下组合。
测试矩阵: ($ redis_port来自params.pp,if语句位于erb模板中)
$redis_port = '6379' #Success
<% if @redis_port != ''%>
$redis_port = 6379 #Fail
<% if @redis_port != ''%>
$redis_port = 6379 #Fail
<% if @redis_port %>
$redis_port = 6379 #Fail
<% if scope['::foobar::redis_port'] %>
$redis_port = 6379 #Fail
<% if @redis_port != ''%>
$redis_port = 6379 #Fail
<% if @redis_port != nil %>
puppetlabs文档显示我应该能够通过使用@redis_port简单地查询值是否为零。
http://docs.puppetlabs.com/guides/templating.html
其他资源
https://ask.puppetlabs.com/question/3420/if-else-statement-in-erb-template/
答案 0 :(得分:1)
这里的核心问题是nil
不是Puppet中的保留字,而是被视为非分隔字符串,代表值'nil'
。正如所引用的文档所述,Puppet关闭模拟是undef
,因此:
$redis_port = undef
当清单分配了整数值时,我惊叹于if @var
和if @var != ''
都失败了。那应该作为字符串表示或数值传播到ERB,两个表达式应该评估为true(对于Ruby,只有nil
和false
是假的,如果我没弄错。)
我会尝试重现,这可能是一个错误。