Jak wspomniano, jest to zgodne z projektem. Ansible wykonuje tylko jedną grę na raz. Twój podręcznik składa się z dwóch odtworzeń (dwa elementy na liście YAML na poziomie głównym zdefiniowane przez plik podręcznika). Pierwsza gra dotyczy roli 1 i roli 2 w grupie 1. Ta gra jest wykonywana jako pierwsza i dopiero po jej zakończeniu rozpoczyna się druga gra. Ale Ansible nie próbuje logicznie łączyć sztuk. W końcu możesz chcieć, aby zadania w roli 2 były uruchamiane dwukrotnie.
Jeśli chodzi o rozwiązanie problemu, istnieje kilka sposobów obejścia tego problemu, a wybór zależy od szczegółów grup i ról.
Jeśli wszystkie zadania w roli 2 są idempotentne, tzn. Jeśli można je uruchamiać wiele razy i za każdym razem kończą się tym samym rezultatem, to tak naprawdę tracisz tylko czas i dobrze jest pozwolić, aby role się powtarzały. Jeśli zastosowanie ról zajmuje naprawdę dużo czasu lub jeśli nie możesz uczynić go idempotentnym, rozważ następujące pomysły:
Możesz podzielić podręcznik na trzy sztuki i zastosować role indywidualnie:
---
- hosts: group1
roles:
- role1
- hosts: group1:group2
roles:
- role2
- hosts: group2
roles:
- role3
Lub jeśli twoje role muszą być zgrupowane razem, możesz utworzyć trzecią grupę dla serwerów, które potrzebują wszystkich trzech ról. Nie musisz ich usuwać z pozostałych dwóch grup. Możesz utworzyć grupę w pliku ekwipunku w następujący sposób:
[group1and2:children]
group1
group2
Następnie w swoim poradniku możesz ponownie podzielić się na trzy sztuki, ale użyj trzeciej grupy, aby uniknąć ponownego uruchamiania ról:
---
- hosts: group1:!group1and2
roles:
- role1
- role2
- hosts: group1and2
roles:
- role1
- role2
- role3
- hosts: group2:!group1and2
roles:
- role2
- role3
To dość brzydkie, ale w niektórych przypadkach może być przydatne.