我正在尝试学习 puppet,但不明白如何设置模板 erb 来选择默认值(如果变量未在 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 %>
当我尝试这些时出现错误:
错误:无法从远程服务器检索目录:服务器上出现错误 400:无法在任何 Hiera 数据文件中找到数据项 gl2_srv_elasticsearch_http_enabled,并且节点上的 /etc/puppet/envs/testing/modules/graylog2/manifests/server.pp:28 中未提供默认值
如果我不定义变量,我该如何做才能将默认变量放入配置中。
答案1
模板不会生成此错误。相反,您的清单会使用如下调用来检索数据:
hiera('gl2_srv_elasticsearch_http_enabled')
如果你的 Hiera 数据(假设为 YAML)中没有出现此键,则此操作将失败,例如
gl2_srv_elasticsearch_http_enabled: true
为了避免此问题,请定义一个默认值并将其作为第二个参数传递给hiera
函数。
hiera('gl2_srv_elasticsearch_http_enabled', false)
答案2
以上都不是。
反而,为所有参数提供默认值在,例如a 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
}
这使您可以隔离必须选择不同默认值的代码,例如不同的操作系统或发行版。
如果您 100% 确定默认值应始终为 false,那么您只需在 中将其声明为这样,init.pp
而不必将其添加到params.pp
。
class elasticsearch (
$http_enabled = false,
) inherits ::elasticsearch:params {
# your class here
}
您的模板将简化为:
elasticsearch_http_enabled = <%= @http_enabled %>