所以我想我应该尽可能开始使用Ansible Galaxy,而不是自己编写角色 . 我刚刚安装了我的第一个角色,它被安装到 /etc/local/ansible/roles (我在OSX上) . 现在我想知道你如何在我真正需要的地方安装这个角色?我只是将角色复制到我需要的地方,还是有一种Ansible方式可以做到这一点?
/etc/local/ansible/roles
是的,您可以根据示例项目结构复制它们:
site.yml webservers.yml fooservers.yml roles/ common/ files/ templates/ tasks/ handlers/ vars/ meta/ webservers/ files/ templates/ tasks/ handlers/ vars/ meta/
或者您可以使用 -p ROLES_PATH 或 --roles-path=ROLES_PATH 选项运行 ansible-galaxy 以在 /your/project/root 下安装它
-p ROLES_PATH
--roles-path=ROLES_PATH
ansible-galaxy
/your/project/root
如果您愿意,也可以使用 /etc/local/ansible 目录作为项目根目录 .
/etc/local/ansible
希望能帮助到你 .
通常,我将所有共享角色都放在一个主文件夹中,该文件夹在我的所有项目中共享 . 这避免了手动复制/粘贴和更新同一角色的多个副本的繁琐 .
比我修改每个项目的 ansible.cfg 告诉 ansible 除了本地项目文件夹之外还要查找该主文件夹中的角色 .
ansible.cfg
ansible
样本 ansible.cfg :
[defaults] roles_path = ~/Code/ansible_roles
Ansible首先在本地项目中搜索角色,然后搜索 roles_path . 您可以通过用冒号分隔多个路径来指定它们 .
roles_path
默认情况下, ansible-galaxy install username.rolename 会将角色安装到 ansible.cfg 中配置的 roles_path ,这就是您需要做的全部工作 .
ansible-galaxy install username.rolename
有时我想将角色安装到特定项目而不是主文件夹中 . 例如,当两个角色具有需要相同角色的不同版本的角色依赖关系时,要避免版本冲突 . 在这种情况下,您可以使用 -p ROLES_PATH 或 --roles-path=ROLES_PATH 选项:
ansible-galaxy install username.rolename -p ~/Code/project_deploy/ansible/roles/
在Ansible 1.9中,您可以手动指定在项目的 requirements.yml 中安装角色的位置 . 不幸的是,this path param was removed in Ansible 2:
requirements.yml
# 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/
如果你想进一步定制东西,那么add support for multiple ansible.cfg files就会有一个未解决的问题,它可以让你轻松地设置不同特异性水平的 roles_path . Ansible将读取当前工作目录中的 ANSIBLE_CONFIG , ansible.cfg ,主目录中的 .ansible.cfg 或 /etc/ansible/ansible.cfg ,无论它先找到哪个 .
ANSIBLE_CONFIG
.ansible.cfg
/etc/ansible/ansible.cfg
以下是我如何解决处理galaxy角色的问题,并适用于任何平台 .
编辑 ansible.cfg 文件,该文件应该是源代码管理的一部分,并将其添加到其中:
roles_path = roles.galaxy:roles
创建一个名为 roles.galaxy 的目录,从现在开始,当你执行 ansible-galaxy install xxx.yyy 时,它将安装到 roles.galaxy 中 .
roles.galaxy
ansible-galaxy install xxx.yyy
您将继续将本地角色保留在 roles 目录中,将社区角色保留在 roles.galaxy 中 . 它们都应该保存在你的git repo中 .
roles
不要考虑从galaxy安装它们,除了增加几个额外的故障点之外,这将是一个很大的安全风险 .
我可能来不及回答这个问题 . 但是你想要的只需一个命令即可:
ansible-galaxy install -p ./roles thefinn93.letsencrypt
将letsencrypt角色安装到roles目录,您不需要复制周围的东西 .
我希望我的角色有一条全球化的道路 . 你可以这样做我把一个ansible.cfg放在〜/ .ansible.cfg . 基于项目的项目始终优先 .
cat ~/.ansible.cfg [defaults] roles_path = ~/.ansible/roles
5 回答
是的,您可以根据示例项目结构复制它们:
或者您可以使用
-p ROLES_PATH
或--roles-path=ROLES_PATH
选项运行ansible-galaxy
以在/your/project/root
下安装它如果您愿意,也可以使用
/etc/local/ansible
目录作为项目根目录 .希望能帮助到你 .
通常,我将所有共享角色都放在一个主文件夹中,该文件夹在我的所有项目中共享 . 这避免了手动复制/粘贴和更新同一角色的多个副本的繁琐 .
比我修改每个项目的
ansible.cfg
告诉ansible
除了本地项目文件夹之外还要查找该主文件夹中的角色 .样本
ansible.cfg
:Ansible首先在本地项目中搜索角色,然后搜索
roles_path
. 您可以通过用冒号分隔多个路径来指定它们 .默认情况下,
ansible-galaxy install username.rolename
会将角色安装到ansible.cfg
中配置的roles_path
,这就是您需要做的全部工作 .有时我想将角色安装到特定项目而不是主文件夹中 . 例如,当两个角色具有需要相同角色的不同版本的角色依赖关系时,要避免版本冲突 . 在这种情况下,您可以使用
-p ROLES_PATH
或--roles-path=ROLES_PATH
选项:在Ansible 1.9中,您可以手动指定在项目的
requirements.yml
中安装角色的位置 . 不幸的是,this path param was removed in Ansible 2:如果你想进一步定制东西,那么add support for multiple ansible.cfg files就会有一个未解决的问题,它可以让你轻松地设置不同特异性水平的
roles_path
. Ansible将读取当前工作目录中的ANSIBLE_CONFIG
,ansible.cfg
,主目录中的.ansible.cfg
或/etc/ansible/ansible.cfg
,无论它先找到哪个 .以下是我如何解决处理galaxy角色的问题,并适用于任何平台 .
编辑
ansible.cfg
文件,该文件应该是源代码管理的一部分,并将其添加到其中:创建一个名为
roles.galaxy
的目录,从现在开始,当你执行ansible-galaxy install xxx.yyy
时,它将安装到roles.galaxy
中 .您将继续将本地角色保留在
roles
目录中,将社区角色保留在roles.galaxy
中 . 它们都应该保存在你的git repo中 .不要考虑从galaxy安装它们,除了增加几个额外的故障点之外,这将是一个很大的安全风险 .
我可能来不及回答这个问题 . 但是你想要的只需一个命令即可:
将letsencrypt角色安装到roles目录,您不需要复制周围的东西 .
我希望我的角色有一条全球化的道路 . 你可以这样做我把一个ansible.cfg放在〜/ .ansible.cfg . 基于项目的项目始终优先 .