2015-03-13 10 views
6

क्या कोई तरीका है कि कोई custom written module के भीतर से होस्ट/समूह वर्र्स तक कैसे पहुंच सकता है? मैं सभी आवश्यक वर्रों को मॉड्यूल पैरामीटर के रूप में पारित करना चाहता हूं।उत्तर: कस्टम मॉड्यूल के भीतर से होस्ट होस्ट/समूह वर्र्स

मेरा मॉड्यूल पायथन में लिखा गया है और मैं बॉयलरप्लेट का उपयोग करता हूं। मैं बहुत ज्यादा सभी उपलब्ध वार्स जाँच की, लेकिन वे कहीं भी संग्रहीत नहीं हैं:

def main(): 
    pprint(dir()) 
    pprint(globals()) 
    pprint(locals()) 
    for name in vars().keys(): 
     print(name) 

अब मेरी ही उम्मीद है कि वे किसी भी तरह गैर-दस्तावेजी मॉड्यूल utils के माध्यम से सुलभ हैं।

मुझे लगता है कि यह संभव नहीं है, के बाद से मॉड्यूल लक्ष्य मशीन पर चलता है और शायद तथ्यों/होस्ट/समूह वार्स मॉड्यूल के साथ स्थानांतरित नहीं कर रहे हैं ...

संपादित करें: अब और यह module utils मिले आशाजनक नहीं लग रहा है।

उत्तर

1

मुझे लगता है कि आप काफी यहाँ अपनी सोच के साथ सिर पर कील मारा:

मुझे लगता है कि यह संभव नहीं है, के बाद से मॉड्यूल लक्ष्य मशीन पर चलता है और शायद तथ्यों/होस्ट/समूह वार्स मॉड्यूल के साथ स्थानांतरित नहीं किया जाता है ...

हालांकि, यह कहकर कि, यदि आपको वास्तव में इसकी आवश्यकता है तो ऐसा करने का थोड़ा गन्दा तरीका हो सकता है। उत्तर 1.8 के रूप में आप fact caching सेट अप कर सकते हैं, जो नाटकों के रनों के बीच तथ्यों को कैश करने के लिए रेडिस का उपयोग करता है। चूंकि रेडिस का उपयोग करना बहुत आसान है और clients for most popular programming languages है, तो आप अपने मॉड्यूल को किसी भी तथ्य के लिए रेडिस सर्वर से पूछ सकते हैं। यह करने के लिए बिल्कुल सही तरीका नहीं है, लेकिन यह सिर्फ काम कर सकता है।

+0

यह बहुत दिलचस्प है! अभी यह एक विकल्प नहीं है क्योंकि इसे स्थानीय बॉक्स और रिमोट बॉक्स से अतिरिक्त अतिरिक्त रेडिस होस्ट की आवश्यकता होगी। यह थोड़ा अधिक ओवरहेड है। लेकिन हम इसे बाद में लागू कर सकते हैं जब हमारे पास Ansible के साथ अधिक स्वचालन किया गया है। तथ्य कैशिंग कुछ ऐसा है जिसे हम शायद बाद में चाहते हैं। मैं आपका जवाब स्वीकार करूंगा - जबकि यह इष्टतम समाधान नहीं है, यह सबसे अच्छा उपलब्ध प्रतीत होता है। – udondan

+0

आप मौजूदा उत्तरदायी सर्वर पर केवल रेडिस इंस्टॉल कर सकते हैं। रेडिस बहुत हल्का है, इसलिए कोई अतिरिक्त सर्वर की आवश्यकता नहीं है। –

+0

अच्छा, यह यहां थोड़ा और जटिल है।प्रत्येक में एकाधिक अलग-अलग vlans के साथ 8 कोलो में एकाधिक हज़ार होस्ट के साथ काम करना। हम सिर्फ Ansible के साथ शुरू कर दिया। अभी इसमें बहुत अधिक प्रयास शामिल होंगे लेकिन यह स्पष्ट है कि हमें भविष्य में अब तक वास्तव में कैशिंग की आवश्यकता नहीं है और फिर इसे लागू करना बहुत आसान हो जाना चाहिए। – udondan

3

क्या कोई तरीका है कि कोई कस्टम लिखित मॉड्यूल के भीतर से होस्ट/समूह वर्र्स तक कैसे पहुंच सकता है?

अंतर्निहित नहीं है।

  • मॉड्यूल आर्ग:

    आप उन्हें अपने आप को एक ही रास्ता या अन्य पारित करने के लिए होगा।

  • स्थानीय फ़ाइल सिस्टम (pickle या yaml.dump() या json या ...) के साथ क्रमबद्ध करें और फ़ाइल को भेजें।
  • कोई अन्य अभिनव विचार जो आप के साथ आ सकते हैं।

दुर्भाग्य से तुम सिर्फ पूरे मेजबान/groupvar फ़ाइलों पर नहीं भेज सकते के रूप में यह है, क्योंकि आप जो अपरिभाषित है ansible के चर गुंजाइश/पूर्वता संकल्प एल्गोरिथ्म को लागू करने के लिए होता है (यह इस तरह परिभाषित करने के लिए Zen philosophy of ansible नहीं है छोटी चीजें: पी)।

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