首页 文章

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

提问于
浏览
39

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

5 回答

  • 0

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

    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 下安装它

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

    希望能帮助到你 .

  • 47

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

    比我修改每个项目的 ansible.cfg 告诉 ansible 除了本地项目文件夹之外还要查找该主文件夹中的角色 .

    样本 ansible.cfg

    [defaults]
    roles_path = ~/Code/ansible_roles
    

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

    默认情况下, ansible-galaxy install username.rolename 会将角色安装到 ansible.cfg 中配置的 roles_path ,这就是您需要做的全部工作 .

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

    # 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_CONFIGansible.cfg ,主目录中的 .ansible.cfg/etc/ansible/ansible.cfg ,无论它先找到哪个 .

  • 19

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

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

    roles_path = roles.galaxy:roles
    

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

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

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

  • 9

    我可能来不及回答这个问题 . 但是你想要的只需一个命令即可:

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

    将letsencrypt角色安装到roles目录,您不需要复制周围的东西 .

  • 33

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

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

相关问题