Puppet 模板 erb 如果变量未定义则保留默认值

Puppet 模板 erb 如果变量未定义则保留默认值

我正在尝试学习 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 %>

相关内容