【问题标题】:Ansible share roles between repository存储库之间的 Ansible 共享角色
【发布时间】:2021-06-28 07:10:31
【问题描述】:

我们有 3 个仓库,比如说仓库 Y、Z 和 W。

存储库 W 下有存储库 Y 和 Z 想要使用的角色。

从阅读来看,我们似乎需要将 requirements.yml 设置如下,

- src: git@github.com:SOMEREPOSITORY/test-role.git
  version: main
  name: test_role

但是,我们仍然没有成功使用共享角色,

ERROR! the role 'test_role' was not found in /home/coder/provision/Build/roles:/home/coder/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/home/coder/provision/Build

是否需要在我们遗漏的 ansible.cfg 文件中进行配置?

【问题讨论】:

  • 长话短说:要么将每个 repo 打包为一个包含多个角色的集合,然后将集合安装到项目 W 中,要么将每个角色打包到自己的存储库中,并在项目 W 中独立导入角色。
  • 如果使用这种方法,当角色更新时..我们是否也需要更新包?
  • 如果你像在上面的例子中那样直接指向你的 git 存储库,则不会。
  • 可能是错字。一个地方有test_role,另一个地方有test-role
  • test-role 是仓库名,在这个仓库下有角色名 test_role

标签: ansible yaml ansible-role


【解决方案1】:

如果你试图重用角色,你就有点落后了(就像在 2010 年那样的时代)。

您真正想做的是构建一个集合并重用它。一个集合可以包含任意数量的角色,并且易于构建和安装。唯一的要求是使用 ansible 2.9 或更高版本。

请阅读https://docs.ansible.com/ansible/latest/dev_guide/developing_collections.html

您无需将集合发布到galaxy.ansible.com 即可重用它,您可以直接从您的git 存储库安装它。最好的部分是您不需要使用 ansible 包含路径来使用它。

顺便说一句,你用什么来构建图表?

【讨论】:

  • 感谢 Sorin.. 所以如果使用这种收集方法,当我们在 W 存储库下对角色进行更改时,它会自动反映到链接到它的每个存储库吗?我使用 Visio 2013 作为图表 ...
  • 不,但请记住,您可以在每个存储库上设置适当的 CI/CD 管道。如果您有一个设置,其中一个 repo 的更改很容易破坏另一个 repo,那么您已经失败了 QA 步骤。测试交叉存储库是可能的,但只有少数系统可以正确地做到这一点,例如 Zuul CI。如果共享集合本身并不是真正的产品,则最好使用更单一的存储库布局。您可以配置依赖项以检出特定标签,但理想情况下您应该使用版本控制。
  • 注意.. 谢谢@sorin
  • 既然你提到我要完成的初始方法是2010年的旧方法..这种方法以前有成功案例吗?
【解决方案2】:

几天后我找到了解决方案。

不使用 Ansible Tower。
解决方案是当我们不使用 Ansible Tower 时,我们可以使用以下步骤从另一个存储库安装角色,

  1. 在 ./roles 文件夹下创建 requirements.yml 文件 requirements.yml 示例的内容:-

    ---
    - 来源:git@github.com:SOMEREPOSITORY/testing-repository.git
    名称:test_role
    单片机:混帐

  2. 然后,运行以下命令从另一个存储库安装角色,确保您在执行以下命令之前与角色目录处于同一级别:-

ansible-galaxy install --role-file roles/requirements.yml --roles-path 角色/

使用 Ansible Tower。

  1. 在 ./roles 文件夹下创建 requirements.yml 文件,与上面的内容示例相同。
  2. 确保您的 ./roles 文件夹是存储库的第一级目录。 例如:-

假设 Git 存储库名称是 Test_Repository,然后是 ./roles 目录应该在“Test_Repository”文件夹中。由于 剧本结构对于 Ansible Tower 找到 requirements.yml.

  1. 然后,只需从 Ansible Tower 午餐您的剧本,Project Sync 将自动从 requirements.yml 内容中找到角色并使用它。 由于 Ansible Tower 是自动的,因此无需在 Ansible Tower 中配置其他任务。

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多