Ansible Galaxy角色安装到特定目录?

Ste*_*enW 47 ansible ansible-galaxy

所以我想我应该尽可能开始使用Ansible Galaxy,而不是自己编写角色.我刚刚安装了我的第一个角色,它已安装到/etc/local/ansible/roles(我在OSX上).现在我想知道你如何在我真正需要的地方安装这个角色?我只是将角色复制到我需要的地方,还是有一种Ansible方式可以做到这一点?

Ric*_*ico 56

是的,您可以根据示例项目结构复制它们:

site.yml
webservers.yml
fooservers.yml
roles/
   common/
     files/
     templates/
     tasks/
     handlers/
     vars/
     meta/
   webservers/
     files/
     templates/
     tasks/
     handlers/
     vars/
     meta/
Run Code Online (Sandbox Code Playgroud)

或者您可以ansible-galaxy使用-p ROLES_PATH--roles-path=ROLES_PATH选项来安装它/your/project/root

/etc/local/ansible如果您愿意,也可以将该目录用作项目根目录.

希望能帮助到你.

  • 真棒@Rico!我以为会有这样一个命令,但此时难以找到关于Galaxy的任何适当的文档. (3认同)

Jef*_*man 39

通常,我将所有共享角色都放在一个主文件夹中,该文件夹在我的所有项目中共享.这避免了手动复制/粘贴和更新同一角色的多个副本的繁琐.

除了本地项目文件夹之外,我ansible.cfg还要修改每个项目以告知ansible在该主文件夹中查找角色.

样品ansible.cfg:

[defaults]
roles_path = ~/Code/ansible_roles 
Run Code Online (Sandbox Code Playgroud)

Ansible首先在本地项目中搜索角色,然后搜索roles_path.您可以通过用冒号分隔多个路径来指定它们.

默认情况下,ansible-galaxy install username.rolename会将角色安装到roles_path配置的中ansible.cfg,这样您就可以完成所有操作.

有时我想将角色安装到特定项目而不是主文件夹中.例如,当两个角色具有需要相同角色的不同版本的角色依赖关系时,要避免版本冲突.在这种情况下,您可以使用-p ROLES_PATH--roles-path=ROLES_PATH选项:

ansible-galaxy install username.rolename -p ~/Code/project_deploy/ansible/roles/
Run Code Online (Sandbox Code Playgroud)

在Ansible 1.9中,您可以手动指定在项目中安装角色的位置requirements.yml.不幸的是,这个path参数在Ansible 2中删除了:

# from galaxy
- src: jeffwidman.elasticsearch

# from private github repo, installing to a relative path
- src: https://github.com/jeffwidman/private_ansible_role
  path: vagrant/roles/
Run Code Online (Sandbox Code Playgroud)

如果您想进一步自定义,那么添加对多个ansible.cfg 文件的支持是一个悬而未决的问题,可以让您轻松设置roles_path不同的特异性级别.Ansible会读ANSIBLE_CONFIG,ansible.cfg在当前的工作目录,.ansible.cfg在主目录或者/etc/ansible/ansible.cfg为准发现第一.

  • 我更喜欢使用像virtualenv和nvm这样的工具来保持每个项目的依赖关系沙盒.我刚刚在我的项目的`ansible.cfg`中尝试过`roles_path = .galaxy`,而galaxy很高兴在那里安装了依赖项!它甚至创建了文件夹.似乎是管理星系依赖关系的好方法. (3认同)
  • 这种方法的缺点是,如果要在各个项目中重复使用同一角色,则在对该角色进行错误修复时,需要记住要修复所有副本。我使用的一般角色中的大多数错误修正是由于linux更改等导致的,因此它们不是单个项目的本地错误。 (2认同)

sor*_*rin 23

以下是我如何解决处理galaxy角色的问题,并适用于任何平台.

编辑您的ansible.cfg文件,该文件应该是源代码管理的一部分并将其添加到其中:

roles_path = roles.galaxy:roles
Run Code Online (Sandbox Code Playgroud)

创建一个名为的目录roles.galaxy,从现在开始,当你这样做时ansible-galaxy install xxx.yyy,它将安装到roles.galaxy.

您将继续将您的本地角色保留在roles目录和社区中roles.galaxy.它们都应该保存在你的git repo中.

不要考虑从galaxy安装它们,除了增加几个额外的故障点之外,这将是一个很大的安全风险.

  • 哎,真的吗?对于npm或作曲家我不这样做.或锁文件是否降低了安全风险? (2认同)
  • @GregBell您应该固定依赖项,这样当新版本发布并破坏某些内容时,或者当多人使用不同版本时,您就不会感到惊讶或陷入麻烦。我不确定是否有任何受支持的锁定文件内容,因此供应商可能是最有意义的。不过升级非常容易,所以我个人不介意这样做。 (2认同)

小智 9

我可能来不及回答这个问题.但是你想要的只需一个命令即可:

ansible-galaxy install -p ./roles thefinn93.letsencrypt
Run Code Online (Sandbox Code Playgroud)

将letsencrypt角色安装到roles目录,您不需要复制周围的东西.