在哪里放置 Ansible 的 requirements.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 也是如此):

dependencies: 
- role: role2
- role: role3

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

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

我的问题: 我应该将 role1 的requirements.yml文件放在哪里?

我知道这些要求需要通过命令安装,

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

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

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

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

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

角色 1 的meta/main.yml

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

角色 2 的meta/main.yml

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_path = roles强制在本地roles目录中搜索和下载角色,因此用户可以在没有-p参数的情况下使用ansible-galaxy install

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*/

最新更新