如何将本地角色与从ansible-galaxy加载的角色分开?

sor*_*rin 5 ansible ansible-playbook

我观察到从galaxy下载的角色安装在roles/目录中,我们已经拥有内部的角色,很难在外部和内部之间进行区分.

有没有办法将它们保存在不同的目录中,这样我们可以避免混淆?

在大多数情况下,我希望有一个更新星系的脚本,我们不会在内部修改它们.

udo*_*dan 6

我认为没有标准的方法可以做到这一点,但你可以使用Ansibles行为.

Ansible在两个位置搜索角色:

  • roles相对于您的剧本的目录中
  • 您在自己配置的路径 ansible.cfg

您现在需要做的事情取决于您实际存储角色的位置.我们正在存储相对于我们的剧本的角色,所以一切都在同一个git repo中.

现在,您可以在其中定义以ansible.cfg在其他文件夹中查找角色:

roles_path=./galaxy_roles
Run Code Online (Sandbox Code Playgroud)

ansible-galaxy默认情况下会将角色安装到第一个找到的路径中roles_path,因此如果您有多个角色路径,请确保首先添加galaxy文件夹.您无需roles显式添加文件夹.默认情况下,Ansible将始终在./roles相对于playbook 的文件夹中搜索角色.

或者,您也可以指示galaxy安装到其他位置:

ansible-galaxy install --roles-path=./galaxy_roles foo
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您有并不总是与剧本相关的内部/自定义角色,那么 @udonhan 继承答案可能还不够,我的意思是全局角色。

您可以在 ansible.cfg 文件中管理多个角色路径,因此您可以使用以下命令在项目路径中定义 ansible.cfg 文件:

[defaults]
roles_path    = ./roles:./roles_internal
Run Code Online (Sandbox Code Playgroud)

“./roles”路径可用于 ansible-galaxy 角色,“./roles_internal”可用于您的内部/自定义角色

现在当你执行

ansible-galaxy install -r requeriments.yml
Run Code Online (Sandbox Code Playgroud)

Galaxy 角色默认安装在“./roles”中

注意:您必须确保未设置 ANSIBLE_ROLES_PATH 环境变量,否则它将覆盖 ansible.cfg 设置。供测试用:

unset ANSIBLE_ROLES_PATH
Run Code Online (Sandbox Code Playgroud)