在哪里为 Ansible 放置 requirements.yml 并使用它来解决依赖关系?
Where to place requirements.yml for Ansible and use it to resolve dependencies?
我是ansible的新手,正在探索依赖角色。 documentation link
我没有看到文档的是 - requirements.yml
文件的放置位置。
例如,如果我的 site.yml
看起来像这样:
---
- name: prepare system
hosts: all
roles:
- role1
而且,假设
- role1 依赖于 role2 和 role3
- role2 依赖于 role4 和 role5
通常,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
。假设 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
我的问题:
我应该将角色 1 的 requirements.yml
文件放在哪里?
我了解需要通过命令安装的要求,
ansible-galaxy install -r requirements.yml -p roles/
而且,我可以为 role1 执行此操作,但如何为 role2 自动执行此操作?后续的依赖需要这样手动解决和安装吗,还是有更好的办法?
从技术上讲,您可以将 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
为了尽可能详尽,这就是我现在通常在我的项目中处理本地依赖关系以及 local/project 仅角色
基本项目结构
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
上面已经讨论过了。只需将对顶级外部(即未在项目中进行版本控制)的依赖项列为 galaxy 角色名称或 git uris。如果您需要完全检查这些角色以便稍后对它们进行 git commits/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-versioned-role*/
我是ansible的新手,正在探索依赖角色。 documentation link
我没有看到文档的是 - requirements.yml
文件的放置位置。
例如,如果我的 site.yml
看起来像这样:
---
- name: prepare system
hosts: all
roles:
- role1
而且,假设
- role1 依赖于 role2 和 role3
- role2 依赖于 role4 和 role5
通常,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
。假设 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
我的问题:
我应该将角色 1 的 requirements.yml
文件放在哪里?
我了解需要通过命令安装的要求,
ansible-galaxy install -r requirements.yml -p roles/
而且,我可以为 role1 执行此操作,但如何为 role2 自动执行此操作?后续的依赖需要这样手动解决和安装吗,还是有更好的办法?
从技术上讲,您可以将 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
为了尽可能详尽,这就是我现在通常在我的项目中处理本地依赖关系以及 local/project 仅角色
基本项目结构
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
上面已经讨论过了。只需将对顶级外部(即未在项目中进行版本控制)的依赖项列为 galaxy 角色名称或 git uris。如果您需要完全检查这些角色以便稍后对它们进行 git commits/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-versioned-role*/