19

我是 ansible 的新手,正在探索依赖角色。文档链接

我没有遇到文档是-放置requirements.yml文件的位置。

例如,如果我site.yml看起来像这样:

---
- name: prepare system
  hosts: all
  roles:
     - role1

而且,让我们说

  • 角色 1 依赖于角色 2 和角色 3
  • 角色 2 依赖于角色 4 和角色 5

通常,ansible-galaxy 具有以下结构:

└── test-role
    ├── defaults
    │   └── main.yml
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── README.md
    ├── tasks
    │   └── main.yml
    ├── templates
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml

依赖项,添加到meta/main.yml. 假设,角色 1 在此文件中标记了依赖项,例如(对于角色 2 也是如此):

dependencies: 
  - role: role2
  - role: role3

而且,我还有一个requirements.yml文件,如下所示:

---    
- src: some git link1
  version: master
  name: role2
- src: some git link2
  version: master
  name: role3

我的问题:我在哪里requirements.yml为角色 1 放置这个文件?

我了解需要通过命令安装要求,

ansible-galaxy install -r requirements.yml -p roles/

而且,我可以为角色 1 执行此操作,但是如何为角色 2 自动执行此操作?是否需要以这种方式手动解析和安装连续的依赖项,还是有更好的方法?

4

1 回答 1

27

从技术上讲,只要您在命令requirements.yml中反映正确的路径,您就可以将文件放在您喜欢的任何位置。ansible-galaxy install

同时,如果您想从 Ansible Tower/Awx 运行您的剧本,我建议您坚持Ansible Tower 要求并将requirements.yml文件放入<project-top-level-directory>/roles/requirements.yml

关于角色之间的依赖关系,ansible-galaxy在安装过程中遇到它们时能够自行跟踪它们。因此,您不需要在您的 中指定所有这些requirements.yml,只需在顶级中指定。您只需要在每个外部角色中正确指定您的依赖项。

meta/main.yml为角色1

dependencies:
  - src: https://my.scm.com/my-ansible-roles/role2.git
    scm: git
    version: master
    name: role2
  - src: https://my.scm.com/my-ansible-roles/role3.git
    scm: git
    version: master
    name: role3

meta/main.yml角色2

dependencies:
  - src: https://my.scm.com/my-ansible-roles/role4.git
    scm: git
    version: master
    name: role4
  - src: https://my.scm.com/my-ansible-roles/role5.git
    scm: git
    version: master
    name: role5

roles/requirements.yml

---    
- src: https://my.scm.com/my-ansible-roles/role1.git
  scm: git
  version: master
  name: role1

为了尽可能详尽,这就是我现在通常在我的项目上执行的处理本地依赖项以及仅本地/项目角色的操作

基本项目结构

ansible-project-dir
└─── roles
|    └─── locally-versioned-role1
|    └─── locally-versioned-role2
|    └─── ...
|    └─── requirements.yml
|    └─── .gitignore
└─── ansible.cfg
└─── playbook1.yml
└─── playbook2.yml

ansible.cfg

roles我通过设置强制在本地目录中搜索和下载角色roles_path = roles,因此用户可以ansible-galaxy install在没有-p参数的情况下使用。

roles/requirements.yml

上面已经讨论过了。只需将依赖关系列为顶级外部(即项目中未版本化)作为星系角色名称或 git uris。如果您需要完全签出这些角色以便稍后对它们进行 git 提交/推送,您可以使用ansible-galaxy install -g -f -r roles/requirements

roles/.gitignore

# Ignore everything in roles dir
/*
# Except:
# the .gitignore file
!.gitignore
# the requirements file
!requirements.yml
# Readme if you have one
!README.md
# and any specific role we want to version locally
!locally-versioned-role*/


于 2019-04-20T14:59:16.377 回答