2016-08-10 20 views
12

Uczę się Ansible. Mam książeczkę do czyszczenia zasobów i chcę, aby instrukcje ignorowały każdy błąd i trwały do ​​końca, a następnie kończyły się niepowodzeniem, jeśli wystąpiły błędy.Answer Zignoruj ​​błędy w zadaniach i nieudane na końcu instrukcji, jeśli jakieś zadania zawierały błędy

mogę ignorować błędy z

ignore_errors: yes 

Jeśli to było jedno zadanie, mógłby zrobić coś podobnego (od ansibl błędu łowczy)

- name: this command prints FAILED when it fails 
    command: /usr/bin/example-command -x -y -z 
    register: command_result 
    ignore_errors: True 

- name: fail the play if the previous command did not succeed 
    fail: msg="the command failed" 
    when: "'FAILED' in command_result.stderr" 

Jak mogę zawieść na końcu? Mam kilka zadań, jaki byłby mój warunek "Kiedy"?

Odpowiedz

12

Użyj modułu .

  1. Użyj ignore_errors przy każdym zadaniu, które musisz zignorować w przypadku błędów.
  2. Ustaw flagę (powiedzmy, wynik = false) gdy wystąpi awaria w każdej realizacji zadań
  3. Pod koniec playbook, sprawdź czy flaga jest ustawiona, w zależności od, że nie wykonanie
- fail: msg="The execution has failed because of errors." 
    when: flag == "failed" 

Aktualizacja:

Zastosowanie zarejestrować, aby zapisać wynik zadania jak masz pokazane w przykładzie. Następnie użyj zadania podobnego do tego:

- name: Set flag 
    set_fact: flag = failed 
    when: "'FAILED' in command_result.stderr" 
+0

Dzięki! Jak ustawić flagę tylko na błędy w ansiblu? – Illusionist

+0

patrz aktualizacja. Zasadniczo ustawiasz tę flagę po każdym wykonaniu zadania. Jeśli pod koniec tego playbooka flaga ustawiona jest na wartość nieudaną, Twój zakład nie działa. Ustawi się tylko na niepowodzenie, jeśli którekolwiek z twoich zadań nie powiedzie się. W przeciwnym razie nie zostanie ustawione na niepowodzenie i wykonanie instrukcji będzie skuteczne. –

2

Moduł Fail działa świetnie! Dzięki.

Musiałem zdefiniować mój fakt przed sprawdzeniem, w przeciwnym razie dostałbym niezdefiniowany błąd zmiennej.

Wystąpiły problemy podczas ustawiania faktów za pomocą cudzysłowów i bez spacji.

To działało:

set_fact: flag="failed" 

Ten rzucił błędy:

set_fact: flag = failed 
3

Można owinąć wszystkie zadania, które może zawieść w bloku i używać ignore_errors: yes z tego bloku.

tasks: 
    - name: ls 
    command: ls -la 
    - name: pwd 
    command: pwd 

    - block: 
    - name: ls non-existing txt file 
     command: ls -la no_file.txt 
    - name: ls non-existing pic 
     command: ls -la no_pic.jpg 
    ignore_errors: yes 

Więcej o error hadnling in blocks.