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

问题描述 投票:0回答:6

所以我认为我应该尽可能开始使用 Ansible Galaxy,而不是编写自己的角色。我刚刚安装了我的第一个角色,它被安装到

/etc/local/ansible/roles
(我在 OSX 上)。现在我想知道你如何在我真正需要的地方安装这个角色?我是否只是将角色复制到我需要的地方,或者是否有 Ansible 的方法来做到这一点?

ansible ansible-galaxy
6个回答
60
投票

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

site.yml
webservers.yml
fooservers.yml
kubernetes.yaml
roles/
   common/
     files/
     templates/
     tasks/
     handlers/
     vars/
     meta/
   webservers/
     files/
     templates/
     tasks/
     handlers/
     vars/
     meta/
   kubernetes/
     files/
     templates/
     tasks/
     handlers/
     vars/
     meta/

或者您可以使用

ansible-galaxy
-p ROLES_PATH
选项运行
--roles-path=ROLES_PATH
将其安装在
/your/project/root

如果愿意,您还可以使用

/etc/local/ansible
目录作为项目根目录。

此外,您可以通过运行命令来获取帮助

ansible-galaxy install --help


45
投票

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

然后,我修改每个项目的

ansible.cfg
来告诉
ansible
除了本地项目文件夹之外还在该主文件夹中查找角色。

样品

ansible.cfg
:

[defaults]
roles_path = ~/Code/ansible_roles 

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/

在 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/

如果您想进一步自定义内容,有一个未解决的问题:添加对多个

ansible.cfg
文件的支持,这可以让您轻松地在不同的特异性级别设置
roles_path
。 Ansible 将读取当前工作目录中的
ANSIBLE_CONFIG
ansible.cfg
、主目录中的
.ansible.cfg
/etc/ansible/ansible.cfg
,以先找到者为准。


34
投票

这是我如何解决处理银河角色的问题并适用于任何平台。

编辑您的

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

roles_path = roles.galaxy:roles

创建一个名为

roles.galaxy
的目录,从现在开始,当您执行
ansible-galaxy install xxx.yyy
时,它将安装到
roles.galaxy
中。

您将继续将本地角色保留在

roles
目录中,将社区角色保留在
roles.galaxy
中。它们都应该保存在您的 git 存储库中。

永远不要考虑从 Galaxy 安装它们,这除了会增加几个额外的故障点之外,还会带来很大的安全风险。


17
投票

我可能回答这个问题太晚了。但你想要的可以用一个命令来完成:

ansible-galaxy install -p ./roles thefinn93.letsencrypt

会将 LetsEncrypt 角色安装到 Roles 目录中,您无需复制内容。


3
投票

将您的角色保存在存储库文件夹中(这可能是您想要的,对所有内容进行版本控制是基础架构即代码之一),并假设这是您的目录布局:

repo-folder
    inventory     << likely you have this already
    roles         << this, too
    roles.galaxy  << create if you dont have it
    site.yml      << or whatever your playbook is called
    ansible.cfg   << repo-local config overriding gloabal ~/.ansible.cfg

打开上面显示的

ansible.cfg
(如果还没有,请重新创建),然后添加以下内容:

[defaults]
roles_path = roles.galaxy:roles

运行

ansible-galaxy install SOMETHING
会将其内容保存在
roles.galaxy
文件夹中。


1
投票

我希望为我的角色提供一条全球路径。您可以通过将 ansible.cfg 放在 ~/.ansible.cfg 中来完成此操作。基于项目的项目始终优先。

cat ~/.ansible.cfg
[defaults]
roles_path = ~/.ansible/roles
© www.soinside.com 2019 - 2024. All rights reserved.