我是配置管理新手,仅供参考。
我正在尝试使弹性搜索变得笨拙,并希望在文件中有一个弹性搜索节点的主列表(可以用于多个事情,而不仅仅是这个目的)。
我想通过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"]
我已经尝试了一些东西,但我不能把头包裹起来。
我会将此列表用于构建防火墙规则等其他内容,因此我希望有一个可供我的团队更新的主列表供参考。
感谢您的帮助!
答案 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模块。您可能会发现使用该模块比编写自己的模块更好。