我观察到从galaxy下载的角色安装在roles/
目录中,我们已经拥有内部的角色,很难在外部和内部之间进行区分。
有没有办法将它们保存在不同的目录中,这样我们可以避免混淆?
在大多数情况下,我希望有一个更新星系的脚本,我们不会在内部修改它们。
答案 0 :(得分:6)
我认为没有标准的方法可以做到这一点,但你可以使用Ansibles行为。
Ansible在两个地点搜索角色:
roles
目录中ansible.cfg
您现在需要做的事情取决于您实际存储角色的位置。我们正在存储相对于我们的剧本的角色,所以一切都在同一个git仓库中。
现在您可以define in your ansible.cfg
在其他文件夹中查找角色:
roles_path=./galaxy_roles
默认情况下, ansible-galaxy
会将角色安装到roles_path
的第一个找到的路径中,因此如果您有多个角色路径,请确保首先添加galaxy文件夹。您无需显式添加roles
文件夹。默认情况下,Ansible将始终在相对于剧本的./roles
文件夹中搜索角色。
或者,您也可以指示galaxy安装到其他位置:
ansible-galaxy install --roles-path=./galaxy_roles foo
答案 1 :(得分:1)
如果您的内部/自定义角色并不总是与剧本相关,那么@udonhan继承答案可能还不够,我的意思是全局角色。
您可以在ansible.cfg文件中管理多个角色路径,因此您可以使用以下命令在项目路径中定义ansible.cfg文件:
[defaults]
roles_path = ./roles:./roles_internal
" ./角色" path可以用于ansible-galaxy角色," ./ roles_internal"可用于您的内部/自定义角色
现在执行
ansible-galaxy install -r requeriments.yml
Galaxy角色安装在" ./ roles"默认情况下
注意:您必须确保未设置ANSIBLE_ROLES_PATH env变量,否则它将覆盖ansible.cfg设置。测试:
unset ANSIBLE_ROLES_PATH