Ansible 在存储库之间共享角色

MrA*_*rAZ 5 yaml ansible ansible-role

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

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

存储库图中的共享角色

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

- src: git@github.com:SOMEREPOSITORY/test-role.git
  version: main
  name: test_role
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

我们错过了 ansible.cfg 文件中是否需要进行配置?

MrA*_*rAZ 4

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

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

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

    ---
    - src: git@github.com:SOMEREPOSITORY/testing-repository.git  
      name: test_role
      scm: git
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,运行以下命令从另一个存储库安装角色,在执行以下命令之前确保您位于与角色目录相同级别的目录中:

    ansible-galaxy install --role-file roles/requirements.yml --roles-path roles/
    
    Run Code Online (Sandbox Code Playgroud)

使用 Ansible 塔。

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

假设 Git 存储库名称是 Test_Repository,那么 ./roles 目录应该位于“Test_Repository”文件夹内。由于 playbook 结构对于 Ansible Tower 查找 requests.yml 至关重要。

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

希望这对其他人有帮助。