我有Ansible角色包,我想将其导入到项目中。
如果我按子目录组织它们,我会遇到与依赖关系相对路径有关的问题
即共享角色需要知道它使用元依赖性时其安装位置的相对位置
我希望能够将所有内容引用到Playbook正在运行的目录中,尽管这不起作用
roles/roleA/meta
---
dependencies:
- { role: "{{ playbook_dir }}/roles/shared_roles/roleB"}
roles/shared_roles/roleB
...
我尝试过多种选择并且没有想法。
我调查了角色路径http://docs.ansible.com/intro_configuration.html#roles-path
虽然我并不是真的想要对所有角色进行唯一命名,因为它们应该被命名空间/分组。
由于
答案 0 :(得分:1)
您基本上可以使用ansible-galaxy
在~/.ansible/roles/
路径中安装角色。
.ansible
中macOS machine
的路径位于:~/.ansible/roles/
您需要做的就是创建一个requirements.yml
文件,看起来像这样:
- src: git+https://<githubURL-Master-role>.git
scm: git
name: Master-role
- src: git+https://<githubURL-dependent1-role>.git
scm: git
name: dependent1-role
- src: git+https://<githubURL-dependent2-role>.git
scm: git
name: dependent2-role
运行以下命令以在~/.ansible/roles/
路径中安装角色:
sudo ansible-galaxy -vvv -r install requirements.yml
这基本上将在~/.ansible/roles/
路径中设置您的角色。为了更好地理解它,请遵循此文档https://docs.ansible.com/ansible/latest/reference_appendices/galaxy.html。
然后,就像您已经提到的那样,即使在执行##path/master-role/meta/main.yml
命令之前,也应该在anisble-galaxy
文件中添加所有从属角色,以便在{{ 1}},当您运行主角色剧本时。
master-role
文件看起来像这样:
##path/master-role/meta/main.yml
答案 1 :(得分:0)
通过强制所有共享模块引用所有依赖项中的共享目录的名称来解决此问题。
我想把它留给调用项目,并希望依赖项与角色目录相关。
该解决方案可以工作并提供命名空间,因此我可以包含多个具有相同名称的角色,只要它们位于不同的目录中即可。
我现在有一个包含3个独立角色包的项目
PLAY RECAP ********************************************************************
staging : ok=214 changed=5 unreachable=0 failed=0
它全部使用Maven构建,每个共享组都是maven依赖。如果有人读到这个并且它有助于我分享结构/ poms等。