傀儡模板erb如果variables未定义保持默认

我试图学习木偶,我不明白如何设置模板erbselect默认值,如果variables没有在common.yaml或node.yaml中定义。 这是我曾经试过的:1)

# we don't need to run the embedded HTTP server here <% if @elasticsearch_http_enabled %> elasticsearch_http_enabled = <%= @elasticsearch_http_enabled %> <% else %> #elasticsearch_http_enabled = false <% end %> 

2)

 # we don't need to run the embedded HTTP server here <%- if @elasticsearch_http_enabled then -%> elasticsearch_http_enabled = <%= @elasticsearch_http_enabled %> <% else %> #elasticsearch_http_enabled = false <% end %> 

3)

 # we don't need to run the embedded HTTP server here <% if @elasticsearch_http_enabled then %> elasticsearch_http_enabled = <%= @elasticsearch_http_enabled %> <% else %> #elasticsearch_http_enabled = false <% end %> 

当我尝试这些我得到错误:

错误:无法从远程服务器检索目录:SERVER上的错误400:无法在任何Hiera数据文件中find数据项gl2_srv_elasticsearch_http_enabled,而在/etc/puppet/envs/testing/modules/graylog2/manifests/server.pp中没有提供缺省值: 28节点上

我怎样才能做到这一点,如果我不定义它将默认variables的configurationvariables。

该模板不会产生这个错误。 相反,你的清单是用这样的调用来检索数据:

 hiera('gl2_srv_elasticsearch_http_enabled') 

如果在你的Hiera数据(假设YAML)中,这将失败,这个键不会出现,例如

 gl2_srv_elasticsearch_http_enabled: true 

为了避免这个问题,定义一个默认值并把它作为hiera函数的第二个参数。

 hiera('gl2_srv_elasticsearch_http_enabled', false) 

以上都不是。

相反, 提供所有参数的默认值 ,例如一个manifests/params.pp

一个例子init.pp

 class elasticsearch ( $http_enabled = $::elasticsearch:params:http_enabled, ) inherits ::elasticsearch:params { # your class here } 

一个例子params.pp

 class elasticsearch:params { $http_enabled = false } 

这可以让你隔离必须select不同默认值的代码,例如不同的操作系统或发行版。

如果你100%确定默认值应该是false,那么你可以在init.pp声明它,而忘记把它添加到params.pp

 class elasticsearch ( $http_enabled = false, ) inherits ::elasticsearch:params { # your class here } 

您的模板然后简化为:

 elasticsearch_http_enabled = <%= @http_enabled %>