उत्तर देने योग्य: एक मेजबान एक से अधिक समूहों में दिखाई देता है, और दोनों समूहों में समान कार्य होते हैं; एक बार कार्यों को चलाने का कोई तरीका?


9

मेरे पास एक प्लेबुक है जो कुछ इस तरह दिखता है:

---
- hosts: group1
  roles:
    - role1
    - role2

- hosts: group2
  roles:
    - role2
    - role3

अब कहते हैं कि मेरे पास एक होस्ट फ़ाइल है जिसमें इस तरह की प्रविष्टि है:

[group1]
host1.example.com

[group2]
host1.example.com

Ans1 host1.example.com के लिए role2 TWICE में कार्यों को चलाएगा क्योंकि यह 2 समूहों में दिखाई देता है, और प्रत्येक के पास role2 है।

मैं अंसिबल को कैसे महसूस करा सकता हूं कि इसमें एक ही भूमिका दो बार शामिल है, और इस तरह इसे केवल एक बार ही चलना चाहिए?


"रोल 1", "रोल 2" आदि के बजाय हमें वास्तविक उदाहरण देना बेहतर होगा, क्योंकि शायद आपको इसे अलग तरह से करना चाहिए। लेकिन यह इस बात पर निर्भर करता है कि आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं।
एंटोनी क्रिस्टोफ़ाइड्स

जवाबों:


10

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

यह बहुत बदसूरत है, लेकिन यह कुछ मामलों में उपयोगी हो सकता है।


धन्यवाद, मुझे लगता है कि मैं विकल्प की विविधता के साथ जाऊंगा (2) - मैं अपने सर्वरों को एक साथ समूहीकृत करने के लिए अपने समूहों और भूमिकाओं को और अधिक दानेदार बनाऊंगा।
असफंद काजी

यदि मैं {{host1}} और {{host2}} चर के माध्यम से मेजबानों को बुलाता हूं, तो मैं उन्हें एक साथ कैसे रख सकता हूं?
बीएमडब्ल्यू

यदि आप डॉक्यूमेंटेशन सेक्शन की खोज करते हैं: सामान्य पैटर्न
सहप एससीआई

3

यह डिजाइन द्वारा है। जाने का एकमात्र तरीका केवल एक प्लेबुक में केवल एक विशिष्ट समूह के लिए भूमिका 2 को लागू करना होगा, और एक समूह पर किसी अन्य प्लेबुक में भूमिका 2 का उपयोग नहीं करना होगा, जिसमें आम सदस्य हो सकते हैं, जैसे यहां।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.