【问题标题】:Expand Ansible role with tasks without modifying the role itself [closed]使用任务扩展 Ansible 角色而不修改角色本身 [关闭]
【发布时间】:2018-10-19 12:58:33
【问题描述】:

我有很多 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

所以问题是:如何添加这样的功能?

【问题讨论】:

  • 它是灵活的工具,恕我直言,没有您正在寻找的此类政策。 Module include_role and parameter tasks_from 允许您创建多种组合。我认为,从明确定义的角色开始并使用Including and Importing 来实现目标是个好主意。
  • @VladimirBotka ,您能否将您的评论改写为答案,以便我将其标记为解决方案?我使用了您提供的超链接,这帮助我解决了问题。
  • @NR:由于“搁置”,不允许更多答案。感谢您的评论。

标签: git ansible


【解决方案1】:

角色可以定义其 main.yml 未实际引用的任务、模板和其他工具。这是否是一个好主意是由个人决定的。我们觉得它很有帮助。

例如,我们有一个需要进行数据库编辑的应用,将其置于工具所在的数据库角色而不是应用安装角色更有意义,后者没有任何工具。没有其他应用使用该任务文件,因此它仅由应用安装手册调用,而不是角色本身。

我们的角色都是单独的 repos 子模块,被放入一个特定于 playbook 的 repo,其中 site.yml、ansible.cfg 和支持脚本存在。 DB 角色被子模块化为role/install-oradb,其中tasks/addProfile.yml 仅用于此应用程序。我们在 siter yaml 的末尾调用它,在所有其他角色都已执行之后,带有显式的 tasks 部分,如下所示:

tasks:
  # fix password expiration  -
  - name: Make ASAP user non-expiring.
    include: roles/install-oradb/tasks/addProfile.yml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 2017-04-12
    • 2017-08-03
    • 1970-01-01
    • 2015-11-13
    相关资源
    最近更新 更多