我们将庞大的 ansible 工作区分解为可以独立运行的单个简单角色。它们都依赖于我们提供存储库等的 yum 角色,并且所有角色(A、B、C)都将其列在了它们的meta.yml:
./roles_galaxy/A/meta/main.yml:
dependencies:
- name: yum-repo
src: foo
./roles_galaxy/B/meta/main.yml:
dependencies:
- name: yum-repo
src: foo
./roles_galaxy/C/meta/main.yml:
dependencies:
- name: yum-repo
src: foo
Run Code Online (Sandbox Code Playgroud)
但是,这会导致 yum-repo 角色在我们的 deploy playbook 运行时被多次执行,因此我们会看到该yum-repo角色的多次执行。我们不希望它这样做,因为它只会占用额外的时间并重复运行:
剧本:
- name: Common Roles
hosts: things
roles:
- A
- B
- C
Run Code Online (Sandbox Code Playgroud)
输出:
PLAY [Role A]
...
TASK [yum-repo ...]
PLAY [Role B]
...
TASK [yum-repo ...]
PLAY [Role C]
...
TASK [yum-repo ...]
Run Code Online (Sandbox Code Playgroud)
我已经尝试allow_duplicates = false过我们的ansible.cfg,但我认为这不是正确的解决方案,因为它仍然会执行多次。
如果需要更多信息,我很乐意尝试提供它的清理版本。当前运行 ansible-2.5.5。
Ansible 努力采用最有效的方法,并避免多次运行某个角色,除非它使用的任何参数在您的 play 中每次声明时都不同。是否每次 yum 角色运行时都会配置不同的 yum 存储库?
不确定它在 Yum 角色的情况下有多相关,但是一种可能的策略是将通用的、一次性的内容拆分为单独的角色,然后使通用角色成为主要角色的依赖项。这会导致应用一次通用角色,然后针对参数中的每个差异多次调用主要角色。
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |