来自外部文件的Puppet迭代

时间:2017-12-26 13:49:44

标签: puppet erb

我是配置管理新手,仅供参考。

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

我想通过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"]

我已经尝试了一些东西,但我不能把头包裹起来。

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

感谢您的帮助!

1 个答案:

答案 0 :(得分: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模块。您可能会发现使用该模块比编写自己的模块更好。