Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible Galaxy角色是否安装到特定目录?_Ansible_Ansible Galaxy - Fatal编程技术网

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

所以我想,如果可能的话,我应该开始使用Ansible Galaxy,而不是编写自己的角色。我刚刚安装了我的第一个角色,它被安装到
/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