Мы разбили наше гигантское рабочее пространство 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 ...]
Я пробовал allow_duplicates = false
в нашем ansible.cfg
, но я не думаю, что это правильное решение, поскольку оно все еще выполняется несколько раз.
Если требуется дополнительная информация, я буду более чем счастлив попытаться предоставить ее очищенную версию. В настоящее время работает ansible-2.5.5.
import_role
илиinclude_role
? Если это так, см. цикл Include_role устанавливает роль и зависимости несколько раз. - person colan   schedule 31.07.2019