我试图学习木偶,我不明白如何设置模板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 %>