我是配置管理的新手,只是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"]
我尝试了一些东西,但我不能把头缠在它上面。
我会将此列表用于构建防火墙规则等其他内容,因此我希望有一个可供我的团队更新的主列表供参考。
谢谢你的帮助!
不是在文件中有一个列表,最好将它放在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模块。您可能会发现使用该模块比编写自己的模块更好。