来自外部文件的Puppet迭代

问题描述 投票:0回答:1

我是配置管理的新手,只是FYI。

我正在尝试使弹性搜索变得笨拙,并希望在文件中有一个elasticsearch节点的主列表(可以用于多个事情,而不仅仅是这个目的)。

我想通过ERB模板添加elasticsearch.yml,并将FDQN列表扩展到discovery.zen.ping.unicast.hosts:[] param。

例如,我在模块/文件中有一个名为es_hosts的外部文件,其中包含:

host1.domain.com 
host2.domain.com 
host3.domain.com 
host4.domain.com

然后当puppet构建ERB模板时,在param中有这个:

discovery.zen.ping.unicast.hosts: ["host1.domain.com", "host2.domain.com", "host3.domain.com", "host4.domain.com"]

我尝试了一些东西,但我不能把头缠在它上面。

我会将此列表用于构建防火墙规则等其他内容,因此我希望有一个可供我的团队更新的主列表供参考。

谢谢你的帮助!

puppet erb
1个回答
3
投票

不是在文件中有一个列表,最好将它放在Hiera中,因为定义列表和其他外部数据特别是Hiera的用途。

(如果你还没有使用Hiera,你肯定应该阅读它。)

所以在Hiera你会得到:

---
es_hosts:
- host1.domain.com 
- host2.domain.com 
- host3.domain.com 
- host4.domain.com

在您的清单中,您将使用hiera函数从Hiera读取:

$es_hosts = hiera('es_hosts')

(请注意,我们经常使用Puppet的自动参数查找功能代替hiera函数将数据读入Hiera的清单中,但您的要求 - 在多个上下文中使用的ES主机列表 - 表明您将需要此列表不要绑定到特定的类输入。如果这对你现在没有意义,你将需要了解参数化类和自动参数查找,但它与此答案无关。)

最后,在您的ERB模板中,您将拥有:

discovery.zen.ping.unicast.hosts: ["<%= @es_hosts.join('", "') %>"]

请注意,您的清单中的$es_hosts变量是通过ERB模板中的Ruby实例变量@es_hosts访问的。

最后,请注意Puppet Forget here上有一个Elasticsearch Puppet模块。您可能会发现使用该模块比编写自己的模块更好。

© www.soinside.com 2019 - 2024. All rights reserved.