问题描述
我是ansible的新手,正在探索相关角色. 文档链接
I am new to ansible and was exploring dependent roles. documentation link
我在文档中没有看到的是-放置requirements.yml
文件的位置.
What I did not come across the documentation was- where to place the requirements.yml
file.
例如,如果我的site.yml
看起来像这样:
For instance, if my site.yml
looks like this:
---
- name: prepare system
hosts: all
roles:
- role1
然后,让我们说
- 角色1取决于角色2和角色3
- 角色2取决于角色4和角色5
通常,ansible星系具有以下结构:
Typically, ansible-galaxy have the following structure:
└── 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, are added to meta/main.yml
. Assuming, role1 has dependencies marked in this file like (and likewise for role2):
dependencies:
- role: role2
- role: role3
而且,我还有一个requirements.yml
文件,看起来像:
And, I also have a requirements.yml
file which looks like:
---
- src: some git link1
version: master
name: role2
- src: some git link2
version: master
name: role3
我的问题:我该requirements.yml
文件放在角色1的什么位置?
My question: where do I place this requirements.yml
file for role1?
我了解需要通过命令安装要求,
I understand the requirements will need to be installed by the command,
ansible-galaxy install -r requirements.yml -p roles/
而且,我可以对role1执行此操作,但是如何对role2自动执行此操作?后续的依赖关系是否需要通过这种方式解决并手动安装,还是有更好的选择?
And, I can do this for role1, but how does this get automated for role2? Do the successive dependencies need to be resolved and installed manually this way, or is there something better?
推荐答案
从技术上讲,只要您在ansible-galaxy install
命令中反映正确的路径,就可以将requirements.yml
文件放在任意位置.
Technically speaking, you could put your requirements.yml
file anywhere you like as long as you reflect the correct path in your ansible-galaxy install
command.
同时,如果您想从Ansible Tower/Awx中运行剧本,建议您坚持使用 Ansible Tower要求,然后将您的requirements.yml
文件放入<project-top-level-directory>/roles/requirements.yml
Meanwhile, if you ever want to run your playbooks from Ansible Tower/Awx, I suggest you stick to the Ansible Tower requirements and put your requirements.yml
file in <project-top-level-directory>/roles/requirements.yml
关于角色之间的依赖关系,ansible-galaxy
能够在安装过程中遇到它们时自动跟随它们.因此,您无需在requirements.yml
中仅指定所有顶级名称.您只需要在每个外部角色中正确指定依赖项即可.
Regarding dependencies between roles, ansible-galaxy
is able to follow them by itself when they are encountered during installation. So you don't need to specify all of them in your requirements.yml
, only top level ones. You just need to specify your dependencies correctly in each external roles.
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
In meta/main.yml
for role2
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
为了尽可能详尽,这是我现在通常在我的项目中所做的工作,以处理本地以及仅本地/项目角色的依赖项
To be as exhaustive as possible, this is what I now usually do on my projects to handle dependencies locally as well as local/project only roles
ansible-project-dir
└─── roles
| └─── locally-versionned-role1
| └─── locally-versionned-role2
| └─── ...
| └─── requirements.yml
| └─── .gitignore
└─── ansible.cfg
└─── playbook1.yml
└─── playbook2.yml
ansible.cfg
我通过设置roles_path = roles
强制在本地roles
目录中搜索和下载角色,因此用户可以在不使用-p
参数的情况下使用ansible-galaxy install
.
ansible.cfg
I force roles search and downloads in the local roles
directory by setting roles_path = roles
, so user can use ansible-galaxy install
without the -p
parameter.
已经在上面讨论过了.只需以银河角色名称或git uris列出对顶级外部(即项目中未版本化)的依赖项.如果您需要完全检出这些角色以稍后对其进行git commit/push,则可以使用ansible-galaxy install -g -f -r roles/requirements
Already discussed above. Just list dependencies to top-level external (i.e. not versionned in the project) as galaxy role name or as git uris. If you need to fully checkout those roles to later make git commits/push on them, you can use ansible-galaxy install -g -f -r roles/requirements
# 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-versionned-role*/
这篇关于在哪里将Ansible的requirements.yml放在哪里并用它来解决依赖关系?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!