【发布时间】:2014-08-16 13:40:42
【问题描述】:
使用 puppet (3.6),我有以下 erb 模板
<% if @redis_port != ''%>
redis['port'] = <%= @redis_port %>
<% end %>
期望的行为是,如果$redis_port 不是nil 或空白,则将其打印出来。否则省略该行
redis['port'] = 6379
$redis_port 在 params.pp puppet manifest 中定义
$ cat params.pp
class foobar::params {
$redis_port = nil #'6379'
}
$ cat init.pp
class foobar {
$redis_port = $foobar::params::redis_port
}
为什么 erb 模板只有在 $redis_port 是字符串的情况下才能正常工作?
我尝试了以下组合,但没有运气。
测试矩阵: ($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 来简单地查询该值是否为 nil。
http://docs.puppetlabs.com/guides/templating.html
其他资源
https://ask.puppetlabs.com/question/3420/if-else-statement-in-erb-template/
【问题讨论】:
-
首先:在 manifest 中执行
$varname = nil是有缺陷的,因为nil在 Puppet 语言中没有特殊含义。您将字符串"nil"作为值。您想要$varname = undef,但有一些警告,如您发布的表格中所示。 -
感谢@FelixFrank,您的评论让我找到了正确的答案。我不得不使用undef。如果您发布答案,我会接受。