在何处放置Ansible的requirements.yml并使用它解决依赖关系?

在何处放置Ansible的requirements.yml并使用它解决依赖关系?,ansible,ansible-role,Ansible,Ansible Role,我是ansible的新手,正在探索从属角色 我在文档中没有看到的是—将requirements.yml文件放在哪里 例如,如果我的site.yml如下所示: --- - name: prepare system hosts: all roles: - role1 比如说 角色1依赖于角色2和角色3 角色2取决于角色4和角色5 通常,ansible星系具有以下结构: └── test-role ├── defaults │   └── main.yml

我是ansible的新手,正在探索从属角色

我在文档中没有看到的是—将
requirements.yml
文件放在哪里

例如,如果我的
site.yml
如下所示:

---
- name: prepare system
  hosts: all
  roles:
     - role1
比如说

  • 角色1依赖于角色2和角色3
  • 角色2取决于角色4和角色5
通常,ansible星系具有以下结构:

└── 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
。假设role1在此文件中标记了依赖项,如(role2也是如此):

而且,我还有一个
requirements.yml
文件,看起来像:

---    
- src: some git link1
  version: master
  name: role2
- src: some git link2
  version: master
  name: role3
我的问题: 角色1的
requirements.yml
文件放在哪里

我知道这些要求需要由司令部安装

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

我可以为角色1这样做,但是如何为角色2实现自动化呢?是否需要以这种方式手动解决和安装连续的依赖项,还是有更好的方法?

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

同时,如果您想从Ansible Tower/Awx运行您的剧本,我建议您坚持并将
requirements.yml
文件放入
/roles/requirements.yml

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

在角色1的
meta/main.yml
依赖项:
-src:https://my.scm.com/my-ansible-roles/role2.git
scm:git
版本:master
姓名:role2
-src:https://my.scm.com/my-ansible-roles/role3.git
scm:git
版本:master
姓名:role3
在角色2的
meta/main.yml
依赖项:
-src:https://my.scm.com/my-ansible-roles/role4.git
scm:git
版本:master
姓名:role4
-src:https://my.scm.com/my-ansible-roles/role5.git
scm:git
版本:master
姓名:role5
roles/requirements.yml
--
-src:https://my.scm.com/my-ansible-roles/role1.git
scm:git
版本:master
姓名:role1
尽可能详尽地说,这是我现在通常在我的项目上所做的,以处理本地依赖关系以及本地/仅项目角色

基本项目结构
ansible.cfg
我通过设置
roles\u path=roles
,强制在本地
roles
目录中搜索和下载角色,这样用户就可以在不使用
-p
参数的情况下使用
ansible galaxy install

roles/requirements.yml
上面已经讨论过了。只需将对顶级外部(即项目中未进行版本控制)的依赖项列为galaxy角色名或git URI即可。如果您需要完全签出这些角色,以便以后对其进行git提交/推送,您可以使用
ansible galaxy install-g-f-r角色/需求

roles/.gitignore
#忽略角色目录中的所有内容
/*
#除:
#.gitignore文件
!.gitignore
#需求文件
!要求.yml
#如果有,请自述
!自述文件
#以及我们希望本地版本的任何特定角色
!本地版本化角色*/

如果使用
角色/requirements.yml
声明对git repo的依赖关系(
scm:git
),AWX/Tower如何处理对git存储库的身份验证?有没有办法指定它?@trebor我正在运行一个相当旧的AWX版本,所以他们可能已经解决了这个问题(现在没有足够的时间来检查)。但在我的版本(3.0.0.0,请不要笑…)中,我只能在项目表单中提供一个密钥或用户/通行证scm标识凭证。因此,您可以访问项目和角色的私有git Repo,但它们应该共享相同的凭据(例如部署密钥)。这是我的案例,它是有效的(git scm中的项目和私有角色)。
ansible-galaxy install -r requirements.yml -p roles/
ansible-project-dir
└─── roles
|    └─── locally-versioned-role1
|    └─── locally-versioned-role2
|    └─── ...
|    └─── requirements.yml
|    └─── .gitignore
└─── ansible.cfg
└─── playbook1.yml
└─── playbook2.yml