जैसा कि उल्लेख किया गया है, यह डिजाइन द्वारा है। एक समय में केवल एक ही खेल को अंजाम देता है। आपकी प्लेबुक में दो प्ले होते हैं (रूट-लेवल 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
यह बहुत बदसूरत है, लेकिन यह कुछ मामलों में उपयोगी हो सकता है।