use*_*973 12 roles organization ansible ansible-playbook
在Ansible最佳实践页面上:http://docs.ansible.com/ansible/playbooks_best_practices.html#top-level-playbooks-are-separated-by-role 它显示了一个示例,其中主要playbook site.yml包含一对其他顶级剧本webservers.yml和dbservers.yml.在这些剧本中,他们每个人都有共同的角色.我将所有组的一些库存文件在一台主机上运行.另一个库存文件我每个组都有一个主机.对于组中一个主机的情况,如果我运行site.yml,您可以看到共同角色被播放两次,一个用于webservers.yml,另一个用于dbservers.yml.
什么是避免这种情况的解决方案?我想你可以从webservers.yml和dbservers.yml中取出共同的角色,而在site.yml中有一个任务,它既针对公共角色,也针对公共角色.但后来我不能单独配置一个常见的网络服务器或数据库服务器.
我使用meta
我的角色目录中的文件确定角色依赖项.角色依赖性允许您在使用角色时自动引入其他角色.角色依赖关系存储在角色目录中包含的meta/main.yml文件中.
角色依赖项始终在包含它们的角色之前执行,并且是递归的.默认情况下,角色也只能作为依赖项添加一次 - 如果另一个角色也将其列为依赖项,则不会再次运行.可以通过向meta/main.yml文件添加allow_duplicates:yes来覆盖此行为.
我的方法是不在剧本中包含剧本。至少这样做会导致角色在单个作业中执行多次。
我需要包含在多个剧本中的任何内容都会转换为一个角色,并且该角色可以包含在许多剧本中。如果我最终得到了包含一系列重复角色的多个剧本,我可以将这些角色组合成一个角色,该角色仅依赖于其他角色以避免重复。