मैं कई दूरस्थ नोड्स पर एक साधारण नौकरी निष्पादित करने के लिए उत्तरदायी का उपयोग करना चाहता हूं। वास्तविक नौकरी में कुछ लॉग फाइलों को grepping और उसके स्थानीय होस्ट पर परिणामों को पोस्ट-प्रोसेस करना शामिल है (जिसमें रिमोट नोड्स पर सॉफ़्टवेयर उपलब्ध नहीं है)।मैं प्रोग्राम को व्यावहारिक रूप से और समवर्ती रूप से कैसे चला सकता हूं?
कमांड लाइन उत्तरदायी उपकरण इस उपयोग के मामले के लिए उपयुक्त नहीं लगते हैं क्योंकि वे दूरस्थ रूप से निष्पादित कमांड के आउटपुट के साथ उत्तर-जेनरेट किए गए स्वरूपण को एकसाथ मिलाते हैं। पाइथन एपीआई ऐसा लगता है कि यह इस में सक्षम होना चाहिए, क्योंकि यह आउटपुट को अनमोडिफाइड करता है (कुछ संभावित यूनिकोड मैंगलिंग के अलावा जो यहां प्रासंगिक नहीं होना चाहिए)।
अजगर कार्यक्रम का एक सरलीकृत संस्करण मैं इस तरह दिखता है के साथ आ गया है:
from sys import argv
import ansible.runner
runner = ansible.runner.Runner(
pattern='*', forks=10,
module_name="command",
module_args=(
"""
sleep 10
"""),
inventory=ansible.inventory.Inventory(argv[1]),
)
results = runner.run()
यहाँ, sleep 10
grepping आदेश वास्तविक लॉग के लिए में खड़ा - विचार सिर्फ एक आदेश है कि नहीं है अनुकरण करने के लिए है तुरंत पूरा करने जा रहा है।
हालांकि, इसे चलाने पर, मैं देखता हूं कि लिया गया समय मेरी सूची में मेजबानों की संख्या के समान होता है। यहाँ 2, 5, और 9 मेजबानों के साथ माल के खिलाफ समय परिणाम प्राधिकरण हैं:
[email protected]:/tmp$ time python howlong.py two-hosts.inventory
real 0m24.285s
user 0m0.216s
sys 0m0.120s
[email protected]:/tmp$ time python howlong.py five-hosts.inventory
real 0m55.120s
user 0m0.224s
sys 0m0.160s
[email protected]:/tmp$ time python howlong.py nine-hosts.inventory
real 1m57.272s
user 0m0.360s
sys 0m0.284s
[email protected]:/tmp$
कुछ अन्य यादृच्छिक टिप्पणियों:
ansible all --forks=10 -i five-hosts.inventory -m command -a "sleep 10"
दर्शाती समान व्यवहारansible all -c local --forks=10 -i five-hosts.inventory -m command -a "sleep 10"
समवर्ती बातों पर अमल करने प्रतीत होता है (लेकिन केवल स्थानीय-केवल कनेक्शन के लिए ही काम करता है)ansible all -c paramiko --forks=10 -i five-hosts.inventory -m command -a "sleep 10"
चीजों को एक साथ निष्पादित करने के लिए प्रतीत होता है
शायद यह सुझाव देता है कि समस्या एसएसएच परिवहन के साथ है और इसमें कॉमंड लाइन के विपरीत पायथन एपीआई के माध्यम से उत्तरदायी का उपयोग करने के साथ कुछ लेना देना नहीं है।
यहां क्या गलत है जो डिफ़ॉल्ट सूची को मेरी सूची में मेजबानों की संख्या के बावजूद केवल दस सेकंड लेने से रोकती है?
यह समस्या का कारण जानने के बाद मेरी बग रिपोर्ट है। :) –
ओह, मुझे नहीं पता था कि यह आपके द्वारा रिपोर्ट किया गया था (जीएच मुद्दा mpdehaan द्वारा खोला गया था और जिमी-सी द्वारा तय किया गया था)। देवताओं के ध्यान में लाने के लिए धन्यवाद! :) –