के आधार पर '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
हो सकता है, के मामले में आप सोच रहे हैं।