2015-09-09 8 views
6

में उपयोग करने के लिए एक विशेष कॉलबैक निर्दिष्ट करना मैंने में विभिन्न परिचालनों के लिए अलग-अलग प्लेबुक बनाया है।प्लेबुक

और मैंने अलग-अलग प्रकार की प्लेबुक के लिए अलग-अलग कॉलबैक स्क्रिप्ट भी बनाया है (और उन्हें उत्तरदायी और स्थापित के साथ पैक किया गया है)।

प्लेबुक को कई अलग-अलग स्क्रिप्ट/क्रॉन नौकरियों से बुलाया जाएगा।

अब, किसी विशेष प्लेबुक के लिए बुलाए जाने के लिए एक विशेष callback script निर्दिष्ट करना संभव है? (शायद कमांड लाइन तर्क का प्रयोग कर रहे हैं?)

अभी क्या हो रहा है, सभी प्लेबैक स्क्रिप्ट प्रत्येक प्लेबुक के लिए बुलाए जाते हैं।

मैं प्लेबुक के स्थान/फ़ोल्डर के सापेक्ष callback script नहीं डाल सकता क्योंकि यह पहले से ही उत्तरदायी पैकेज के अंदर पैक किया गया है। साथ ही, सभी प्लेबुक भी एक ही स्थान पर हैं।

मैं आवश्यक होने पर भी समायोजित करने के लिए उत्तर देने योग्य स्रोत कोड को संशोधित करने के साथ ठीक हूं।

उत्तर

3

Ansible के कोड के माध्यम से जाने के बाद, मैं नीचे के साथ इसे हल करने में सक्षम था ...

प्रत्येक callback_plugin में, आप self.disabled = True निर्दिष्ट कर सकते हैं और कॉलबैक अभ्यस्त सब पर कहा जा ...

इसके अलावा, जो एक प्लेबुक को कॉल करता है, अतिरिक्त तर्कkey=value जोड़े के रूप में पार्स करने का विकल्प है। यह प्लेबुक ऑब्जेक्ट का हिस्सा extra_vars फ़ील्ड के रूप में होगा।

तो मैंने अपने callback_plugin में ऐसा कुछ किया।

def playbook_on_start(self): 
    callback_plugins = self.playbook.extra_vars.get('callback_plugin', '') // self.playbook is populated in your callback plugin by Ansible. 
    if callback_plugins not in ['email_reporter', 'all']: 
     self.disabled = True 

और जब प्लेबुक बुला, मैं कुछ की तरह कर सकते हैं,

ansible-playbook -e callback_plugin=email_reporter //Note -e is the argument prefix key for extra vars. 
0

यदि कॉलबैक स्क्रिप्ट के साथ आपका मतलब callback plugins है, तो आप उन प्लगइन में निर्णय ले सकते हैं यदि किसी प्लेबुक को कुछ क्रियाएं ट्रिगर करनी होंगी।

playbook_on_play_start विधि में आपके पास नाटक का नाम है, जिसका उपयोग आप यह तय करने के लिए कर सकते हैं कि आगे अधिसूचनाओं को संसाधित किया जाना चाहिए या नहीं।

playbook_on_stats तब प्लेबुक के अंत में कॉल किया जाता है।

SHOULD_TRIGGER = false 

class CallbackModule(object): 

    def playbook_on_play_start(self, name): 
     if name == "My Cool Play": 
      SHOULD_TRIGGER = true 

    def playbook_on_stats(self, stats): 
     if SHOULD_TRIGGER == true: 
      do something cool 

कृपया ध्यान दें, playbook_on_play_start अपने प्लेबुक में हर खेलने के लिए कहा जाता है, तो यह कई बार कहा जा सकता है।

+0

अपने जवाब के लिए धन्यवाद .. लेकिन मैं प्लेबुक के आधार पर कॉलबैक निर्दिष्ट करने के लिए की जरूरत है। प्रत्येक नाटक पर आधारित नहीं ... एक ही खेल को 2 अलग-अलग प्लेबुक से बुलाया जा सकता है और कॉलबैक को 1 के लिए बुलाया जाना चाहिए और अन्य के लिए नहीं ... – Codebender

+0

बस यह सुनिश्चित करना चाहते हैं कि आप समझें कि _play_ क्या है, क्योंकि एक नाटक "बुलाया नहीं"। एक नाटक प्लेबुक में एक प्रविष्टि है, प्रत्येक में मेजबान, कार्य/भूमिकाएं और वर्र्स कुंजी शामिल हैं।अधिकांश प्लेबुक में केवल एक ही खेल होता है लेकिन आपके पास एकाधिक नाटक हो सकते हैं। http://docs.ansible.com/ansible/playbooks_intro.html#playbook-language-example एकमात्र ऐसी स्थिति जहां उपर्युक्त समाधान काम नहीं करेगा, यह है कि, जब आप एकाधिक प्लेबुक में समान नामों के साथ खेलते हैं। – udondan

+0

यह सही है ... मेरे पास प्रत्येक प्लेबुक में कई नाटक हैं ... इसके अलावा, मैं अपनी प्लेबुक में 'शामिल' कथन का भी उपयोग कर रहा हूं। जिसका अर्थ है कि एक ही नाटक कई प्लेबुक के हिस्से के रूप में शामिल किया जाएगा ... इसलिए इस दृष्टिकोण का उपयोग करने से मुझे समस्याएं हो सकती हैं ... – Codebender

संबंधित मुद्दे