Belirtildiği gibi, bu tasarım gereğidir. Ansible her seferinde sadece bir oyun yürütür. Oynatma kitabınız iki oynatmadan (oynatma kitabı dosyası tarafından tanımlanan kök düzeyi YAML listesindeki iki öğe) oluşur. İlk oyun rol1 ve rol2'yi grup1'e uygular. Bu oyun önce yürütülür ve bittikten sonra ikinci oyun başlar. Ancak Ansible oyunları mantıklı bir şekilde birleştirmeye çalışmaz. Sonuçta, role2'deki görevlerin iki kez çalışmasını isteyebilirsiniz.
Sorunu ele almak için, bu sorunu çözmenin birkaç yolu vardır ve seçtiğiniz gruplar ve rollerin ayrıntılarına bağlıdır.
Rol2'deki tüm görevler idempotent ise, yani birden çok kez çalıştırılabilir ve her seferinde aynı sonuçla sonuçlanabilirse, gerçekten kaybettiğiniz tek şey zaman demektir ve rollerin tekrarlanmasına izin vermek uygundur. Rollerin uygulanması çok uzun sürüyorsa veya bunu idempotent yapamıyorsanız, aşağıdaki fikirleri göz önünde bulundurun:
Başucu kitabını üç oyuna bölebilir ve rolleri ayrı ayrı uygulayabilirsiniz:
---
- hosts: group1
roles:
- role1
- hosts: group1:group2
roles:
- role2
- hosts: group2
roles:
- role3
Veya rollerinizin birlikte gruplanması gerekiyorsa, üç rolün tümüne ihtiyaç duyan sunucular için üçüncü bir grup oluşturabilirsiniz. Onları diğer iki gruptan çıkarmanıza gerek yok. Grubu envanter dosyanızda şu şekilde oluşturabilirsiniz:
[group1and2:children]
group1
group2
Ardından, oyun kitabınızda tekrar üç oyuna ayrılabilirsiniz, ancak rolleri yeniden çalıştırmaktan kaçınmak için üçüncü grubu kullanın:
---
- hosts: group1:!group1and2
roles:
- role1
- role2
- hosts: group1and2
roles:
- role1
- role2
- role3
- hosts: group2:!group1and2
roles:
- role2
- role3
Bu oldukça çirkin ama bazı durumlarda faydalı olabilir.