我是ansible的新手,正在探索相关角色。 documentation link
我在文档中没有看到的是-requirements.yml
文件的放置位置。
例如,如果我的site.yml
如下所示:
---
- name: prepare system
hosts: all
roles:
- role1
然后,让我们说
典型地,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
我的问题:
我该requirements.yml
文件放在角色1的什么位置?
我了解需要通过命令安装要求,
ansible-galaxy install -r requirements.yml -p roles/
而且,我可以对role1执行此操作,但是如何对role2自动执行此操作?后续的依赖关系是否需要以这种方式解决并手动安装,还是有更好的选择?
答案 0 :(得分:0)
从技术上讲,您可以将requirements.yml
文件放在任意位置,只要您在ansible-galaxy install
命令中反映正确的路径即可。
同时,如果您想从Ansible Tower / Awx中运行剧本,建议您坚持使用Ansible Tower requirements并将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-versionned-role1
| └─── locally-versionned-role1
| └─── ...
| └─── 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 commit / push,则可以使用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-versionned-role*/