Ansible 在存储库之间共享角色

Ansible share roles between repository

我们有 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 文件中进行配置?

如果您正在尝试重用角色,那么您就有点落后了(就像 2010 年代那样)。

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

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

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

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

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

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

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

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

  2. 然后,运行下面的命令从另一个存储库安装角色,在执行下面的命令之前确保你在与角色目录相同级别的目录中:-

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

使用 Ansible Tower。

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

Let say the Git repository name is Test_Repository, then ./roles directory should be inside the 'Test_Repository' folder. Since the playbook structure is essential for Ansible Tower to find the requirements.yml.

  1. 然后,只需从 Ansible Tower 获取您的剧本,Project Sync 就会自动从 requirements.yml 内容中找到角色并使用它。 不需要在 Ansible Tower 中配置额外的任务,因为它是自动的。

希望这对其他人有帮助。