2016-05-19 22 views
7

Używam Ansible do przenoszenia logów do katalogu kopii zapasowych (przy użyciu polecenia shell module, mv command).Jak wykonać zadanie Ansible, jeśli podany katalog nie jest pusty?

mv komenda nie działa, jeśli nie ma plików do przeniesienia. Domyślnie powoduje to niepowodzenie całego Ansible play. mogę kontynuować grę, nawet jeśli zadanie nie powiedzie się (ignore_errors: yes)

nie jestem zadowolony z tego rozwiązania, gdyż wywołuje komunikat o błędzie

zadania [przenieść pliki do katalogu kopii zapasowych] **** ********************************** śmiertelny: [xx.xx.xx.xx]: NIEUDANE! ? = ... Nie ma takiego pliku lub katalogu”, "stdout": "", "" stdout_lines: [], "Ostrzeżenia": []} ... ignorując

Jak sprawdzić, czy katalog jest pustych w ansibl, a jeśli pustych jus pominąć zadanie?

Odpowiedz

9

można użyć znaleźć moduł w ansibl 2,0 do znalezienia plików z .log rozszerzenia w katalogu następnie wykonać ruch, jeśli pliki znajduje

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

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

wielki, dzięki! Pytanie: czy to jest dobry pomysł, aby dodać zadanie "changed_when: false" do "find"? To polecenie jest zawsze uruchomione, nigdy niczego nie zmienia. Zwykle dodam changed_when: false do takich czystych testów, bez efektów ubocznych. W ten sposób obsługa nie jest wywoływana, a odtworzenie odtwarzania wygląda lepiej (zmieniłem = 0, chyba że coś naprawdę się zmieniło). –

1
Nie

jest akceptowana odpowiedź, że korzysta z modułu find.

Inną opcją (mniej czytelny i bardziej gadatliwy) jest użycie natywnego Linux commands- test wynik ls polecenia

- 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" 
Powiązane problemy