Sto provando a scrivere un'attività che esegue un elenco di istruzioni ldapmodify e voglio solo che fallisca se uno dei codici di ritorno non è 0 o 68 (oggetto giá esisteva):Uso di `failed_when` su un'attività` with_items` in base ai codici di ritorno
- 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
non funziona, produce l'errore:
error while evaluating conditional: result.results | rejectattr('rc', 'sameas', 0) | rejectattr('rc', 'sameas', 68) | list | length > 0
Tuttavia, se io commento la failed_when
e utilizzare ignore_errors
, le seguenti attività producono i risultati corretti. Mentre posso utilizzare questa soluzione alternativa per risolvere il mio problema, mi piacerebbe capire perché la versione failed_when
non funziona, come troverei quella più elegante.
- 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
potrebbe essere equalto
in altre versioni di Jinja2, nel caso in cui vi state chiedendo.