Puppet 如何按角色划分hiera配置?
我使用hiera为我的节点分配类,如Puppet 如何按角色划分hiera配置?,puppet,hiera,Puppet,Hiera,我使用hiera为我的节点分配类,如webserver或dbserver。webserver类只包括apache并在其上设置一些配置(例如端口)。显然,我不想为每个节点复制这个配置,所以我把它放在common.yaml中。然而,我的common.yaml变得越来越大,所以我想将其拆分。我希望一个文件包含webserver角色的配置,另一个文件包含dbserver角色的配置,等等。我想象我的hiera.yaml如下所示: :hierarchy: - "fqdn/%{::fqdn}" - "
webserver
或dbserver
。webserver
类只包括apache并在其上设置一些配置(例如端口)。显然,我不想为每个节点复制这个配置,所以我把它放在common.yaml中。然而,我的common.yaml变得越来越大,所以我想将其拆分。我希望一个文件包含webserver
角色的配置,另一个文件包含dbserver
角色的配置,等等。我想象我的hiera.yaml如下所示:
:hierarchy:
- "fqdn/%{::fqdn}"
- "role/%{ROLE}"
- common
其中角色
文件夹将包含类似webserver.yaml
,appserver.yaml
,dbserver.yaml
的文件。我看到很多博客帖子说,解决方案是创建一个自定义的“角色”事实,但大多数博客都是通过从代理节点上的文件(例如从/etc/role
)加载该事实来实现的,在我看来,这似乎与傀儡的观点背道而驰(我专门使用puppet,这样我就不必每次都登录到每个节点并更改一些配置,每次我都希望它有一些新角色)
要明确的是,我不想编辑代理上的文件来实现这一点,我希望使用主服务器上的配置完成这一切
我想我可以像下面这样,详尽地列出每个角色作为层次结构中的一个元素,但这似乎不那么容易管理
:hierarchy:
- "fqdn/%{::fqdn}"
- "webserver"
- "appserver"
- "dbserver"
- common
有什么方法可以解决这个问题吗?要在hiera配置中使用
$Role
,需要将其作为事实/变量提供,但是有一种方法可以在主机上而不是在节点上执行此操作。这是可以使用的方法之一
基本上,您需要编写一个脚本,以获取节点名并打印出包含角色
参数值的yaml。例如,您可以有一个yaml文件,它只是节点名到角色的映射,然后脚本执行查找并打印结果(作为链接架构中的参数)
如果您对新工具感兴趣,还有更强大的ENC。例如,为您提供了一个web界面,用于将主机分组到类似的角色中,设置参数以注入到puppet运行中,等等。我想出了一个解决方案。唯一的缺点是,角色的最大数量是硬编码的。这将是在使用hiera 3之前,请尝试以下方法: /etc/puppet/hiera.yaml
---
:backends:
- yaml
:yaml:
:datadir: /etc/puppet/hieradata
:hierarchy:
- 'nodes/%{::clientcert}'
- 'roles/%{::role_4}'
- 'roles/%{::role_3}'
- 'roles/%{::role_2}'
- 'roles/%{::role_1}'
- common
/etc/puppet/manifests/site.pp
# Get roles
$roles = hiera_array('roles', [])
# Declare Roles in vars (not needed in puppet 4)
$role_1 = $roles[0]
$role_2 = $roles[1]
$role_3 = $roles[2]
$role_4 = $roles[3]
# Include Classes
hiera_include('classes')
/etc/puppet/hieradata/roles/webserver.yaml
---
classes:
- nginx
# put nginx config here
/etc/puppet/hieradata/nodes/your_node_name.yaml
---
roles:
- webserver
classes:
# put node specific stuff here