Я пытаюсь написать задачу, которая запускает список операторов ldapmodify и только хочет, чтобы она завершилась неудачей, если какой-либо из кодов возврата не равен 0 или 68 (объект уже существует):
- 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
может быть equalto
в других версиях jinja2, если вам интересно.