我正在使用hiera来将webserver
或dbserver
之类的类分配给我的节点。 webserver
类仅包含apache并在其上设置一些配置(例如port)。显然,我不想为每个节点复制此配置,因此将其放在common.yaml中。但是,我的common.yaml越来越大,所以我想将其拆分。我想要一个文件包含webserver
角色的配置,另一个文件包含dbserver
角色的配置,等等。我在想我的hiera.yaml看起来像这样:
:hierarchy:
- "fqdn/%{::fqdn}"
- "role/%{ROLE}"
- common
role
文件夹将包含webserver.yaml
,appserver.yaml
和dbserver.yaml
之类的文件。我看到过很多博客文章都说解决方案是创建一个自定义的“角色”事实,但是大多数人都是通过从代理节点上的文件(例如/etc/role
)中加载该事实来实现的,对我来说这似乎是失败的puppet的要点(我专门使用puppet,因此不必每次都希望拥有新角色时登录每个节点并更改一些配置)。明确地说,我不需要在代理上编辑文件就可以使它正常工作,我希望所有这些都使用主服务器上的配置完成。
我想我可能有类似以下内容的内容,并将每个角色都作为层次结构中的一个元素详尽列出,但这似乎不太容易管理。
:hierarchy:
- "fqdn/%{::fqdn}"
- "webserver"
- "appserver"
- "dbserver"
- common
有什么办法可以解决这个问题?
最佳答案
为了能够在您的hiera配置中使用$Role
,需要将它作为事实/变量提供,但是有一种方法可以在主节点上而不是在节点上进行。这是External Node Classifiers可用于的事情之一。
基本上,您需要编写一个脚本,该脚本带有节点名并打印出包含Role
参数值的yaml。例如,您可能有一个yaml文件,它只是节点名称到角色的映射,然后脚本进行查找并打印结果(作为链接模式中的参数)。这是an example。
如果您对新工具感兴趣,那么还有更强大的ENC。例如,Foreman提供了一个Web界面,用于将主机分组为相似的角色,设置参数以注入(inject) puppet 运行等。
关于puppet - 如何按角色划分我的hiera配置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30255251/