2015-07-30 19 views
14

Sono in esecuzione di un comando personalizzato, perché non ho trovato a fare quello che ho bisogno di un modulo di lavoro, e voglio regolare la bandiera changed per riflettere il comportamento effettivo:Ansible e `changed_when` basa su` valore stdout`

- name: Remove unused images 
    shell: '[ -n "$(docker images -q -f dangling=true)" ] && docker rmi $(docker images -q -f dangling=true) || echo Ignoring failure...' 
    register: command_result 
    changed_when: "command_result.stdout == 'Ignoring failure...'" 

- debug: var="1 {{ command_result.stdout }}" 
    when: "command_result.stdout != 'Ignoring failure...'" 
- debug: var="2 {{ command_result.stdout }}" 
    when: "command_result.stdout == 'Ignoring failure...'" 

(so che il comando di shell è brutto e potrebbe essere migliorata da uno script più complesso, ma io non voglio per ora)

l'esecuzione di questo compito su un host in cui nessuna immagine Docker può essere rimosso dà il seguente risultato:

TASK: [utils.dockercleaner | Remove unused images] **************************** 
changed: [cloud-host] => {"changed": true, "cmd": "[ -n \"$(docker images -q -f dangling=true)\" ] && docker rmi $(docker images -q -f dangling=true) || echo Ignoring failure...", "delta": "0:00:00.064451", "end": "2015-07-30 18:37:25.620135", "rc": 0, "start": "2015-07-30 18:37:25.555684", "stderr": "", "stdout": "Ignoring failure...", "stdout_lines": ["Ignoring failure..."], "warnings": []} 

TASK: [utils.dockercleaner | debug var="DIFFERENT {{ command_result.stdout }}"] *** 
skipping: [cloud-host] 

TASK: [utils.dockercleaner | debug var="EQUAL {{ command_result.stdout }}"] *** 
ok: [cloud-host] => { 
    "var": { 
     "EQUAL Ignoring failure...": "EQUAL Ignoring failure..." 
    } 
} 

Quindi, ho questo valore di ritorno stdout "stdout": "Ignoring failure..." e l'attività di debug mostra le stringhe sono uguali, quindi perché l'attività viene ancora visualizzata come "modificata"?

Sto usando ansible 1.9.1.

La documentazione sto riferendosi a è questa: http://docs.ansible.com/ansible/playbooks_error_handling.html#overriding-the-changed-result

risposta

23

penso che si può avere male interpretato quello changed_when fa.

changed_when segna l'attività come modificato in base alla valutazione del istruzione condizionale che nel tuo caso è:

"command_result.stdout == 'fallimento Ignorando ...'"

Quindi, ogni volta che questa condizione è vera, l'attività verrà contrassegnata come modificata.

+2

Mi sento così stupido ora ... Grazie mille! –

Problemi correlati