Як було сказано, це за конструкцією. Відповідь виконує лише одну гру за один раз. Ваша книжка складається з двох п'єс (два елементи у списку YAML кореневого рівня, визначені файлом книги). Перша п’єса застосовує роль1 та роль2 до групи1. Ця гра виконується першою, і лише після її завершення починається друга гра. Але Ansible не намагається логічно об'єднати п’єси разом. Зрештою, можливо, ви хочете, щоб завдання в ролях2 виконувалися двічі.
Що стосується вирішення проблеми, то існує кілька способів вирішення цього питання, який ви оберете, залежатиме від деталей груп та ролей.
Якщо всі завдання в ролях2 є ідентичними, тобто якщо їх можна виконати кілька разів і щоразу отримувати один і той же результат, тоді все, що ви насправді втрачаєте, - час, і добре, щоб ролі повторювалися. Якщо для виконання ролей потрібне дійсно тривалий час, або ви не можете зробити це безсильним, тоді врахуйте такі ідеї:
Ви можете розділити книжку на три п’єси та застосувати ролі окремо:
---
- 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
Це досить некрасиво, але може бути корисним у деяких випадках.