언급했듯이 이것은 의도적으로 설계된 동작입니다. Ansible은 한 번에 하나의 플레이 만 실행합니다. 플레이 북은 두 개의 플레이 (플레이 북 파일에 의해 정의 된 루트 레벨 YAML 목록의 두 항목)로 구성됩니다. 첫 번째 연극은 role1과 role2를 group1에 적용합니다. 그 플레이는 먼저 실행되고, 완료된 후에 만 두 번째 플레이가 시작됩니다. 그러나 Ansible은 연극을 논리적으로 병합하려고 시도하지 않습니다. 결국 role2의 작업이 실제로 두 번 실행되기를 원할 수 있습니다.
문제를 해결하기 위해이 문제를 해결할 수있는 몇 가지 방법이 있으며 그룹과 역할의 세부 사항에 따라 선택할 수 있습니다.
role2의 모든 작업이 dem 등적입니다. 즉, 여러 번 실행될 수 있고 매번 동일한 결과로 끝날 수 있다면 실제로지는 것은 시간이며 역할을 반복해도 괜찮습니다. 역할을 적용하는 데 시간이 오래 걸리거나이를 dem 등원으로 만들 수없는 경우 다음 아이디어를 고려하십시오.
플레이 북을 3 개의 플레이로 나누고 역할을 개별적으로 적용 할 수 있습니다.
---
- hosts: group1
roles:
- role1
- hosts: group1:group2
roles:
- role2
- hosts: group2
roles:
- role3
또는 역할을 함께 그룹화해야하는 경우 세 가지 역할이 모두 필요한 서버에 대한 세 번째 그룹을 만들 수 있습니다. 다른 두 그룹에서 꺼내지 않아도됩니다. 다음과 같이 인벤토리 파일에 그룹을 만들 수 있습니다.
[group1and2:children]
group1
group2
그런 다음 플레이 북에서 다시 세 번의 플레이로 나눌 수 있지만 세 번째 그룹을 사용하여 역할을 다시 실행하지 않아도됩니다.
---
- hosts: group1:!group1and2
roles:
- role1
- role2
- hosts: group1and2
roles:
- role1
- role2
- role3
- hosts: group2:!group1and2
roles:
- role2
- role3
꽤 추악하지만 어떤 경우에는 유용 할 수 있습니다.