Mam podręcznik, który wygląda mniej więcej tak:
---
- hosts: group1
roles:
- role1
- role2
- hosts: group2
roles:
- role2
- role3
Powiedzmy teraz, że mam plik hosts, który ma taki wpis:
[group1]
host1.example.com
[group2]
host1.example.com
Ansible uruchomi zadania w rola 2 TWICE dla host1.przyklad.com, ponieważ pojawia się w 2 grupach i do każdej z nich przypisana jest rola 2.
Jak sprawić, by Ansible zdał sobie sprawę, że pełni tę samą rolę dwukrotnie, a zatem powinien uruchomić go tylko raz?
Odpowiedzi:
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:
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:
Następnie w swoim poradniku możesz ponownie podzielić się na trzy sztuki, ale użyj trzeciej grupy, aby uniknąć ponownego uruchamiania ról:
To dość brzydkie, ale w niektórych przypadkach może być przydatne.
źródło
To jest z założenia. Jedynym sposobem jest zastosowanie roli 2 tylko w jednym podręczniku do jednej konkretnej grupy i nie używanie roli 2 w żadnym innym podręczniku w grupie, która może mieć wspólnych członków, tak jak tutaj.
źródło