我们正在考虑使用AWX / Tower自动执行剧本运行,以执行初始配置并确保清单中每个主机上的状态持续不断。这将通过两种方式(不同的触发器)实现自动化:
当前,主机是根据其预期用途分组的,例如,我们有“基本”服务器,Web服务器,samba服务器,台式机等。
对于任何给定类型/组的主机,我们希望能够针对该组(例如web_servers)运行单个剧本,这将放置服务器所需的所有常用配置(因为Web服务器)具有服务器的所有常见配置,ssh密钥,ntp,auth等),但顶部还有其他特定于web_server的任务。
请记住,假设在web_server顶部也可能存在一个或几个其他配置层(例如,nginx或apache web_server添加了进一步的特定配置-实际上,这可能不是最好的处理方式,但是关键是在通用基本配置之上的灵活性/分层功能-我仅以web_servers为例提供一些上下文)。
我们有一个自定义的动态广告资源插件,可以从数据库中提取数据(包括主机的预期用途)并将其分配给正确的广告资源组。
示例结构:
roles
common
role_1
role_2
role_3
server
web_server
server_playbook.yaml
web_server_playbook.yaml
到目前为止,我想出了一些想法/选择...
在每本剧本中都重复了常见角色,例如,
server_playbook.yaml
- name: server playbook
hosts: servers
roles:
- common/role_1
- common/role_2
- common/role_3
- server
web_server.playbook.yaml
- name: web_server playbook
hosts: web_servers
roles:
- common/role_1
- common/role_2
- common/role_3
- server
- web_server
缺点:
角色包括其他角色。
roles / server / main.yaml
- include_role:
name: "{{ item }}"
loop:
- common/role_1
- common/role_2
- common/role_3
# ... other server specific tasks
server_playbook.yaml
- name: server playbook
hosts: servers
roles:
- server
web_server_playbook.yaml
- name: web_server playbook
hosts: web_servers
roles:
- server
- web_server
缺点:
服务器剧本中存在常见角色,这些角色又被导入到web_server剧本中
server_playbook.yaml
- name: server playbook
hosts: servers
roles:
- common/role_1
- common/role_2
- common/role_3
- server
web_server_playbook.yaml
- import_playbook: server_playbook.yaml
- name: web_server playbook
hosts: web_servers
roles:
- web_server
注意事项:
web_servers
和servers
库存组中。层数越多,主机需要加入的组就越多。缺点:
根据选项3,但不导入,以使剧本脱钩。
server_playbook.yaml
- name: server playbook
hosts: servers
roles:
- common/role_1
- common/role_2
- common/role_3
web_server_playbook.yaml
- name: web_server playbook
hosts: web_servers
roles:
- web_server
缺点:
我不确定哪种方法最好,或者我们是否在这里遗漏了什么,还有没有更简单/更好的方法?查阅Ansible最佳实践/技巧和窍门指南并没有涉及太多细节,但我认为这肯定是一件很普通的事情。
预先感谢
P.S。上面的剧本在编写时是临时编写的,未经测试,因此应将其视为伪代码(我敢肯定其中会有错误)