【发布时间】:2025-12-06 15:25:01
【问题描述】:
我们将庞大的 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
但是,这会导致 yum-repo 角色在我们的部署手册运行时多次执行,因此我们看到yum-repo 角色的多次执行。我们不希望它这样做,因为它只会占用额外的时间并重复运行:
剧本:
- name: Common Roles
hosts: things
roles:
- A
- B
- C
输出:
PLAY [Role A]
...
TASK [yum-repo ...]
PLAY [Role B]
...
TASK [yum-repo ...]
PLAY [Role C]
...
TASK [yum-repo ...]
我在ansible.cfg 中尝试过allow_duplicates = false,但我认为这不是正确的解决方案,因为它仍然会执行多次。
如果需要更多信息,我非常乐意尝试提供一个经过整理的版本。目前正在运行 ansible-2.5.5。
【问题讨论】:
-
您使用的是
import_role还是include_role?如果是这样,请参阅Include_role loop installs role and dependencies multiple times。 -
角色 A/B/C 是否有不同的标签? “Ansible 只执行一次角色依赖,即使定义了多次,除非角色上定义的 参数、标签或 when 子句对于每个定义都不同。”
标签: ansible ansible-role