我通过在meta/main.yml
内声明它来为我的角色指定了依赖项。
---
dependencies:
- role: angstwad.docker_ubuntu
src: https://github.com/angstwad/docker.ubuntu
scm: git
version: v2.3.0
然而,当我尝试执行Ansible playbook时,我看到错误消息:
ERROR! the role 'angstwad.docker_ubuntu' was not found in /home/.../ansible/roles:/etc/ansible/roles:/home/.../ansible/roles:/home/.../ansible
The error appears to have been in '/home/.../roles/docker-node/meta/main.yml': line 5, column 5, but may be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- role: angstwad.docker_ubuntu
^ here
从错误消息中我得出结论,即使angstwad.docker_ubuntu
中已明确提及外部角色docker-node/meta/main.yml
,也未导入外部角色ansible-galaxy
。
即使我的角色本身尚未上传到Ansible Galaxy,我是否可以指定Ansible Galaxy的外部依赖项?
或者我是否需要使用{{1}}明确导入它们?
来自Ansible documentation:
角色也可以依赖于其他角色,并且在安装时也是如此 具有依赖关系的角色,这些依赖关系将自动成为 安装。
通过提供a,在meta / main.yml文件中指定角色依赖项 角色列表。如果角色的来源是Galaxy,你可以简单地说 以username.role_name格式指定角色。越复杂 您也可以支持requirements.yml中使用的格式 提供src,scm,版本和名称。
通过遵循另一个SO问题(How to automatically install Ansible Galaxy roles?)的建议,听起来需要手动或通过解决方法明确地下载外部依赖项。
答案 0 :(得分:0)
根据documentation you linked,您会看到:
当
ansible-galaxy
遇到依赖关系时,它会自动将每个依赖关系安装到roles_path。
下载依赖项仅由ansible-galaxy处理,src元信息不会影响ansible-playbook,它只是查看你的角色目录,如果它没有看到相应的文件夹 - 它会失败。和answer in question you linked一样,你确实可以创建第一个任务,或者在每个开始之前包含在你的剧本中运行ansible galaxy。
答案 1 :(得分:0)
如果具有此依赖关系的角色本身是通过ansible-galaxy安装的,则修改meta/main.yml
如下所示:
---
dependencies:
- src: https://github.com/angstwad/docker.ubuntu.git
scm: git
version: v2.3.0
因此,在安装主要角色时,docker.ubuntu角色将自动安装在~/.ansible/roles/docker.ubuntu
中,并在执行剧本时运行。
如果具有此依赖关系的角色将不会通过ansible-galaxy安装,也就是说,如果依赖关系是通过ansible-galaxy命令安装的唯一东西,那么docker.ubuntu将必须单独安装,例如
ansible-galaxy install git+https://github.com/angstwad/docker.ubuntu.git
或
ansible-galaxy install git+https://github.com/angstwad/docker.ubuntu.git -p /path_to/my_playbook/roles
这会将角色放置在您的搜索路径中(同样,如果未通过~/.ansible/roles/docker.ubuntu
指定,则为-p
)。在这种情况下,将meta/main.yml
修改为此:
---
dependencies:
- role: docker.ubuntu
请注意,从github上拉角色时,其登陆位置为docker.ubuntu
与docker_ubuntu
。有关更多信息,请参见https://galaxy.ansible.com/docs/using/installing.html#dependencies。希望这会有所帮助。