【问题标题】:Sharing Ansible roles共享 Ansible 角色
【发布时间】:2014-09-23 17:46:47
【问题描述】:

我有想要导入到项目中的 Ansible 角色包。

如果我按子目录组织它们,我会遇到与依赖相对路径相关的问题

即如果共享角色使用元依赖项,则需要知道其安装位置的相对位置

我希望能够将所有内容都引用到运行剧本的目录中,尽管这不起作用

roles/roleA/meta
 ---
 dependencies:
   - { role: "{{ playbook_dir }}/roles/shared_roles/roleB"}

roles/shared_roles/roleB
...

我尝试了多种选择,但没有想法。

我查看了角色路径http://docs.ansible.com/intro_configuration.html#roles-path

虽然我真的不想对所有角色进行唯一命名,因为它们应该被命名空间/分组。

谢谢

【问题讨论】:

  • 共享角色目前被Maven打包并构建到一个目录中。如果我在所有共享角色中引用该目录,则依赖关系解决。这似乎是一个解决方案。如果它确实有效,我会更新答案......反正没有人回答我的问题,所以它不像任何人正在阅读这篇文章

标签: ansible ansible-playbook


【解决方案1】:

您基本上可以使用ansible-galaxy~/.ansible/roles/ 路径中安装角色。

我的macOS machine.ansible的路径在:~/.ansible/roles/

您需要做的只是创建一个看起来像这样的requirements.yml 文件:

- src: git+https://<githubURL-Master-role>.git
  scm: git
  name: Master-role

- src: git+https://<githubURL-dependent1-role>.git
  scm: git
  name: dependent1-role

- src: git+https://<githubURL-dependent2-role>.git
  scm: git
  name: dependent2-role

运行此命令在~/.ansible/roles/ 路径中安装您的角色:

sudo ansible-galaxy -vvv -r install requirements.yml

这基本上会将您的角色设置在~/.ansible/roles/ 路径中。为了更好地理解它,请遵循此文档https://docs.ansible.com/ansible/latest/reference_appendices/galaxy.html

然后,就像您已经提到的那样,您应该在执行 anisble-galaxy 命令之前将所有依赖角色添加到您的 ##path/master-role/meta/main.yml 文件中,以便在 master-role 之前执行依赖角色,当您运行您的主要角色剧本。

##path/master-role/meta/main.yml 文件如下所示:

galaxy_info:
  author: Jithendra
  description: blah...blah...blah
  min_ansible_version: 1.2
  galaxy_tags:'[]'
dependencies:
  - { role: 'Master-role, when: blah == "true"'}         #when condition is optional
  - { role: 'dependent1-role, when blah == "false"'}
  - { role: 'dependent2-role, when blah == "false"'}

【讨论】:

    【解决方案2】:

    通过强制所有共享模块在所有依赖项中引用共享目录的名称来解决它。

    我想把它留给调用项目,并希望依赖关系是相对于角色目录的。

    该解决方案虽然有效并提供命名空间,因此我可以包含多个具有相同名称的角色,只要它们位于不同的目录中。

    我现在有一个项目,其中包含 3 个独立的角色包

     PLAY RECAP ******************************************************************** 
    staging : ok=214  changed=5    unreachable=0    failed=0 
    

    它全部使用 Maven 构建,每个共享组都是一个 Maven 依赖项。如果有人读到这篇文章并且对我有帮助,我会分享结构/ poms 等。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    相关资源
    最近更新 更多