2014-09-22 4 views
10

के आधार पर 'with_items` कार्य पर `fail_when` का उपयोग करके मैं एक ऐसा कार्य लिखने की कोशिश कर रहा हूं जो ldapmodify कथन की सूची चलाता है और केवल तभी विफल रहता है जब कोई भी वापसी कोड 0 या 68 नहीं है (ऑब्जेक्ट allready अस्तित्व में):रिटर्न कोड

- name: add needed LDAP infrastructure 
    action: command ldapmodify -x -D '{{ ADMINDN }}' -w '{{ LDAPPW }}' -H {{ LDAPURI }} -c -f {{ item }} 
    register: result 
    failed_when: "result.results | rejectattr('rc', 'sameas', 0) | rejectattr('rc', 'sameas', 68) | list | length > 0" 
    # ignore_errors: true 
    with_items: 
    - a.ldif 
    - b.ldif 

काम नहीं करता, त्रुटि उत्पादन:

error while evaluating conditional: result.results | rejectattr('rc', 'sameas', 0) | rejectattr('rc', 'sameas', 68) | list | length > 0 

लेकिन अगर मैं failed_when टिप्पणी और ignore_errors का उपयोग करें, निम्न कार्य सही परिणाम। जबकि मैं अपनी समस्या को हल करने के लिए इस कामकाज का उपयोग कर सकता हूं, मैं समझना चाहता हूं कि failed_when संस्करण क्यों काम नहीं कर रहा है, क्योंकि मुझे यह और अधिक सुरुचिपूर्ण लगेगा।

- debug: var="result.results | rejectattr('rc', 'sameas', 0) | rejectattr('rc', 'sameas', 68) | list | length > 0" 
- fail: msg="failure during ldapmodify" 
    when: "result.results | rejectattr('rc', 'sameas', 0) | rejectattr('rc', 'sameas', 68) | list | length > 0" 

Sidenote sameas jinja2 के अन्य संस्करणों में equalto हो सकता है, के मामले में आप सोच रहे हैं।

उत्तर

17

अच्छा, यह पता चला कि मैं इसके बारे में बहुत जटिल था। समस्या यह थी: लूप के प्रत्येक पुनरावृत्ति के बाद उत्तर failed_when चलाता है। जैसे मैं बस result.rc का उपयोग करने की जरूरत है:

- name: add needed LDAP infrastructure 
    action: command ldapmodify -x -D '{{ ADMINDN }}' -w '{{ LDAPPW }}' -H {{ LDAPURI }} -c -f {{ item }} 
    register: result 
    # As per comment from user "ypid" 
    failed_when: (result.rc not in [ 0, 68 ]) 
    # failed_when: (result.rc != 0) and (result.rc != 68) 
    with_items: 
    - a.ldif 
    - b.ldif 

वांछित परिणाम पैदा करता है।

पाश चर result के बाद एक सारांश शब्दकोश जो results कुंजी में प्रत्येक आइटम का ब्यौरा है से भरा है।

लेकिन चूंकि मैं फ़िल्टर चेन के साथ result.results का उपयोग करने के किसी भी उदाहरण को खोजने में सक्षम नहीं था, इसलिए मैं उम्मीद कर सकता हूं कि किसी और को यह उपयोगी लगेगा। (मुझे यकीन है कि मैं अंततः इसे फिर से देखना चाहूंगा;))

इस बिंदु को इंगित करने के लिए #ansible पर सिविल के लिए धन्यवाद।

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