Ansible Galaxy角色是否安装到特定目录?
所以我想,如果可能的话,我应该开始使用Ansible Galaxy,而不是编写自己的角色。我刚刚安装了我的第一个角色,它被安装到Ansible Galaxy角色是否安装到特定目录?,ansible,ansible-galaxy,Ansible,Ansible Galaxy,所以我想,如果可能的话,我应该开始使用Ansible Galaxy,而不是编写自己的角色。我刚刚安装了我的第一个角色,它被安装到/etc/local/ansible/roles(我在OSX上)。现在我想知道你是如何在我真正需要的地方安装这个角色的?我只是把角色复制到我需要的地方,还是有一种可行的方法 是的,您可以根据示例项目结构复制它们: site.yml webservers.yml fooservers.yml roles/ common/ files/ templ
/etc/local/ansible/roles
(我在OSX上)。现在我想知道你是如何在我真正需要的地方安装这个角色的?我只是把角色复制到我需要的地方,还是有一种可行的方法 是的,您可以根据示例项目结构复制它们:
site.yml
webservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
meta/
或者您可以使用-p ROLES\u PATH
或-ROLES PATH=ROLES\u PATH
选项运行ansible galaxy
,将其安装在/your/project/root
如果愿意,还可以使用/etc/local/ansible
目录作为项目根目录
希望能有所帮助。一般来说,我将所有共享角色都放在一个主文件夹中,以便在所有项目中共享。这避免了手动复制/粘贴和更新同一角色的多个副本的繁琐工作 然后我修改每个项目的
ansible.cfg
,告诉ansible
除了本地项目文件夹外,还要在主文件夹中查找角色
示例ansible.cfg
:
[defaults]
roles_path = ~/Code/ansible_roles
Ansible首先在本地项目中搜索角色,然后搜索roles\u路径
。可以通过使用冒号分隔多个路径来指定它们
默认情况下,ansible galaxy install username.rolename
将角色安装到ansible.cfg
中配置的roles\u路径
,因此您几乎只需执行这些操作
有时,我希望将角色安装到特定项目中,而不是主文件夹中。例如,当两个角色具有需要相同角色的不同版本的角色依赖关系时,可以避免版本冲突。在这种情况下,您可以使用-p ROLES\u PATH
或--ROLES PATH=ROLES\u PATH
选项:
ansible-galaxy install username.rolename -p ~/Code/project_deploy/ansible/roles/
在Ansible 1.9中,您可以在项目的requirements.yml
中手动指定角色的安装位置。不幸的是:
如果您想进一步定制内容,有一个开放的问题可以让您轻松地在不同的特定级别上设置
roles\u path
。Ansible将读取当前工作目录中的Ansible\u CONFIG
,Ansible.cfg
,主目录中的.Ansible.cfg
,或/etc/Ansible/Ansible.cfg
,以最先找到的为准。以下是我如何解决处理galaxy角色的问题并适用于任何平台
编辑您的ansible.cfg
文件,该文件应该是源代码管理的一部分,并将其添加到其中:
roles_path = roles.galaxy:roles
创建一个名为roles.galaxy
的目录,从现在开始,当您执行ansible galaxy安装xxx.yyy
时,它将安装到roles.galaxy
您将继续将本地角色保存在角色
目录中,将社区角色保存在角色.galaxy
中。它们都应该保存在你的git回购中
不要考虑从银河系上安装它们,这将是一个巨大的安全风险,除了增加几个额外的故障点。 我希望我的角色有一个全局路径。你可以在~/.ansible.cfg上放置一个ansible.cfg。基于项目的项目始终优先
cat ~/.ansible.cfg
[defaults]
roles_path = ~/.ansible/roles
我回答这个问题可能太晚了。但只需一个命令即可完成所需操作:
ansible-galaxy install -p ./roles thefinn93.letsencrypt
将letsencrypt角色安装到角色目录中,您无需复制任何内容。要将您的角色保存在存储库文件夹中(这可能是您想要的,控制所有内容的版本是作为代码的基础结构之一),并假设这是您的目录布局:
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 galaxy install SOMETHING
将其内容保存在roles.galaxy
文件夹中。Awesome@Rico!我原以为会有这样一个命令,但此时要找到有关Galaxy的任何适当文档都很困难。ansible Galaxy
帮助也有点迟钝,但运行ansible Galaxy[command]--help
以获得特定于命令的帮助(在本例中,install
命令)。如果我使用--roles path=relative/folder/from/my/project
运行安装,这是否意味着该角色将安装在文件夹relative/folder/from/my/project
中?只是好奇:为什么需要将该角色复制到其他地方?ansible galaxy的目的之一是在您的系统中只安装一次角色,然后从playbook中使用它,无论您的ansible项目在您的系统中位于何处。ansible对我来说是新事物,我也不太了解。我更喜欢使用像virtualenv和nvm这样的工具,将每个项目的依赖项都保存在沙盒中。我刚刚在我的项目的ansible.cfg
中尝试了roles\u path=.galaxy
,galaxy很高兴地在那里安装了依赖项!它甚至创建了这个文件夹。这似乎是管理galaxy依赖关系的一个很好的方法。这种方法的缺点是,如果您在不同的项目中重用同一个角色,那么当您对该角色进行错误修复时,您需要记住修复所有副本。我使用的一般角色中的大多数错误修复都是由于linux更改等原因造成的,因此它们不是单个项目的本地错误。您能否进一步解释安全风险和其他故障点?如果版本被正确固定,它与运行pip install-r requirements.txt有什么区别?我认为@KevinLondon是说你不应该继续从Galaxy或其他软件包提供商那里安装,你应该“供应商”代码(将代码提交到你的存储库)。真的吗?我不是为npm或作曲家这样做的。或者锁文件降低了安全风险吗?galaxy.roles
和roles.galaxy
是相同的(但拼写错误),还是应该有所不同?@GregBell您应该锁定依赖项,这样您就不会感到惊讶或
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
[defaults]
roles_path = roles.galaxy:roles