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

时间:2014-03-05 14:57:01

标签: ansible ansible-galaxy

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

6 个答案:

答案 0 :(得分:51)

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

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

或者您可以使用ansible-galaxy-p ROLES_PATH选项运行--roles-path=ROLES_PATH,将其安装在/your/project/root

如果您愿意,也可以使用/etc/local/ansible目录作为项目根目录。

希望它有所帮助。

答案 1 :(得分:37)

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

我修改每个项目的SURVEY以告诉user> (defn togethr [thing] (into [:a] (if (sequential? thing) thing [thing]))) #'user/togethr user> (togethr 1) [:a 1] user> (togethr :b) [:a :b] user> (togethr [:b :c]) [:a :b :c] 除了本地项目文件夹之外还要查找该主文件夹中的角色。

示例ansible.cfg

ansible

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

默认情况下,[defaults] roles_path = ~/Code/ansible_roles 会将角色安装到roles_path中配置的ansible-galaxy install username.rolename,这就是您需要做的所有事情。

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

-p ROLES_PATH

在Ansible 1.9中,您可以手动指定在项目的--roles-path=ROLES_PATH中安装角色的位置。不幸的是,this path param was removed in Ansible 2

ansible-galaxy install username.rolename -p ~/Code/project_deploy/ansible/roles/

如果您想进一步自定义内容,add support for multiple ansible.cfg files会有一个未解决的问题,可让您轻松设置requirements.yml不同的特异性级别。 Ansible将在当前工作目录中阅读# 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/ roles_path,在主目录中显示ANSIBLE_CONFIGansible.cfg,无论它首先找到。

答案 2 :(得分:21)

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

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

roles_path = roles.galaxy:roles

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

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

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

答案 3 :(得分:9)

我可能太迟回答这个问题了。但是你想要的只需一个命令就可以完成:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "backToFirstViewFromSecondView" {
            let destinationController = segue.destination as! FirstViewController
            destinationController.resultLabel.text = secondViewTextField.Text
        }
    }

会将letsencrypt角色安装到roles目录,您无需复制内容。

答案 4 :(得分:1)

我希望我的角色有一条全球化的道路。你可以这样做我把一个ansible.cfg放在〜/ .ansible.cfg。基于项目的项目始终优先。

cat ~/.ansible.cfg
[defaults]
roles_path = ~/.ansible/roles

答案 5 :(得分:0)

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

ansible.cfg

打开上面显示的[defaults] roles_path = roles.galaxy:roles (或者如果尚未创建,请重新创建),并添加以下内容:

ansible-galaxy install SOMETHING

运行roles.galaxy会将其内容保存在{{1}}文件夹中。