2016-06-22 13 views
5

में पूरे लूप को छोड़ें यदि मैं Ansible में पूरे लूप को छोड़ना चाहता हूं तो मुझे क्या करना चाहिए?Ansible

दिशा-निर्देशों के अनुसार,

जबकि with_items साथ when संयोजन (लूप्स देखें), ... when बयान प्रत्येक आइटम के लिए अलग से संसाधित किया जाता है।

कि

--- 
- hosts: all 
    vars: 
    skip_the_loop: true 
    tasks: 
    - command: echo "{{ item }}" 
     with_items: [1, 2, 3] 
     when: not skip_the_loop 

तरह प्लेबुक चल रहा इस प्रकार, जबकि मैं

skipping: [localhost] => (item=1) 
skipping: [localhost] => (item=2) 
skipping: [localhost] => (item=3) 

मिल जबकि मैं एक शर्त है हर बार की जाँच की जा नहीं करना चाहती।

तब मैं इनलाइन की स्थिति

- hosts: all 
    vars: 
    skip_the_loop: true 
    tasks: 
    - command: echo "{{ item }}" 
     with_items: "{{ [1, 2, 3] if not skip_the_loop else [] }}" 

यह मेरी समस्या का समाधान करने लगता है का उपयोग करने का विचार आया, लेकिन फिर मैं आउटपुट के रूप में कुछ भी नहीं मिलता है।

skipping: Loop has been skipped 
+0

मुझे नहीं लगता कि आप एक बेहतर परिणाम प्राप्त कर सकते हैं करते हैं: tasks/ में

hosts: all vars: skip_the_loop: true tasks: - include: loop when: not skip_the_loop 

कहीं जबकि एक फ़ाइल loop.yml कहा जाता है आपके दूसरे की तुलना में। यदि आप वास्तव में – SztupY

+0

@SztupY मुद्रित कुछ की आवश्यकता है, तो आप केवल एक डीबग स्टेटमेंट जोड़ सकते हैं, मैंने पहले से ही इसे किया है, लेकिन फिर भी यह वांछित परिणाम नहीं है, दुर्भाग्यवश –

+0

किसी भी कारण से आप प्रत्येक के लिए शर्त नहीं चलाना चाहते हैं पाश? क्या यह केवल बदसूरत आउटपुट की वजह से है, या क्योंकि सशर्त चेक में बहुत समय/संसाधन लगता है? – SztupY

उत्तर

2

आप Ansible Ansible 2 के blocks साथ सिर्फ एक बार स्थिति का मूल्यांकन करने के लिए सक्षम होना चाहिए: और मैं केवल एक ही लाइन कह चाहते हैं।

--- 
- hosts: all 
    vars: 
    skip_the_loop: true 
    tasks: 
    - block: 
     - command: echo "{{ item }}" 
     with_items: [1, 2, 3] 
     when: not skip_the_loop 

यह अभी भी दिखेगा हर आइटम और हर मेजबान के लिए छोड़ दिया लेकिन, के रूप में udondan ने कहा, यदि आप उत्पादन को दबाने के लिए चाहते हैं आप जोड़ सकते हैं:

display_skipped_hosts=True 

अपने ansible.cfg file करने के लिए।

+0

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

+0

क्या यह वास्तव में काम करता है? मैंने सोचा होगा कि 'कब' ब्लॉक के निहित कार्यों को पारित कर दिया जाएगा। लेकिन अगर यह काम करता है तो यह बहुत अच्छा है! – udondan

+0

@NickRoz आप कार्य स्तर पर आउटपुट दबाने नहीं कर सकते हैं। यद्यपि आप अपने उत्तरदायी कॉन्फ़िगरेशन में विश्व स्तर पर छोड़े गए कार्यों के आउटपुट को अक्षम कर सकते हैं: http://docs.ansible.com/ansible/intro_configuration.html#display-skipped-hosts – udondan

0

इस हालत के साथ-साथ include का उपयोग कर आसानी से किया जा सकता है:

- command: echo "{{ item }}" 
    with_items: [1, 2, 3]