2016-05-19 19 views
7

Sto utilizzando Ansible per spostare i registri nella directory di backup (utilizzando il modulo shell, mv).Come eseguire un'attività Ansible se la directory specificata non è vuota?

mv comando non riesce se non ci sono file da spostare. Per impostazione predefinita, l'intera riproduzione Ansible ha esito negativo. posso procedere con il gioco, anche se operazione non riesce (ignore_errors: yes)

io non sono soddisfatto di questa soluzione, perché produce il messaggio di errore

TASK [spostare file in directory di backup] **** ************************************** fatale: [xx.xx.xx.xx]: FALLITA! ? = ... No such file or directory", "stdout": "", "" stdout_lines: [], "avvertimenti": []} ... ignorando

Come controllare se directory è vuoti in ansible, e se vuoti jus saltare compito?

risposta

risposta

9

È possibile utilizzare trovare il modulo in ansible 2.0 per trovare i file con .log estensione nella directory poi eseguire mossa se i file si trovano

- find: paths=DIRECTORY file_type=directory patterns="*.log" 
    register: dir_files 

- shell: mv *.log /tmp 
    when: dir_files.matched|int != 0 
+0

grande, grazie! Una domanda: è una buona idea aggiungere "changed_when: false" al task "find"? Questo comando è sempre in esecuzione, non cambia mai nulla. Di solito aggiungo changed_when: false a tali test puri, senza effetti collaterali. In questo modo, i gestori non vengono chiamati e il riepilogo del gioco sembra migliore (ho cambiato = 0, a meno che qualcosa non sia realmente cambiato). –

1

C'è accettato che utilizza il modulo find.

Un'altra opzione (meno leggibile e più dettagliato) è quello di utilizzare Linux nativa Comandi- test risultato di ls comando

- name: "backup logs" 
    shell: test "$(ls /var/logs/)" 
    register: logsPresent 
    changed_when: false 

- name: "move files to backup directory" 
    when: "logsPresent.rc != 0" 
    shell: "mv /var/logs/ /backup/logs" 
Problemi correlati