我有很多Ansible角色,它们在项目之间复制,因此我决定将角色存储在单独的Git存储库中,并使用Git子模块组装剧本。
所需的剧本结构为:
- Playbook repo
- playbook.yml
- roles/role1 (submodule)
- roles/role2 (submodule)
- roles/role3 (playbook-specific role)
问题是,有时没有必要将额外的功能提交到角色存储库中(长时间的代码审查过程,功能过于具体等),因此我需要一种无需修改角色本身即可扩展角色步骤的方法喜欢:
---
- name: Deploy the product and the very-specific-configuration
roles:
- role1
- role2
tasks:
- name: extra_specific_task1
command: '<some_command>'
become: True
- name: extra_specific_task2
package:
name: '<pkgname>'
state: present
become: True
- role3
所以问题是:如何添加这种功能?
答案 0 :(得分:1)
角色可以定义其main.yml实际未引用的任务和模板以及其他工具。那是一个好主意还是个人争论。我们发现它很有帮助。
例如,我们有一个需要进行数据库编辑的应用程序,将它放置在工具所在的数据库角色中比在没有工具的应用程序安装角色中更有意义。没有其他应用程序使用该任务文件,因此仅由应用程序安装手册调用,而不是角色本身。
我们的角色都是单独的回购子模块,这些子模块都包含在特定于剧本的回购中,其中site.yml,ansible.cfg和支持脚本均位于其中。 DB角色被子模块化到role/install-oradb
中,tasks/addProfile.yml
仅用于此应用。在所有其他角色执行完毕后,我们在站点管理员yaml的末尾调用它,并使用显式的tasks
部分,如下所示:
tasks:
# fix password expiration -
- name: Make ASAP user non-expiring.
include: roles/install-oradb/tasks/addProfile.yml