2016-12-07 11 views
10

Używam modułu powłoki Ansible do znalezienia konkretnego ciągu znaków i zapisania go w zmiennej. Ale jeśli grep nie znalazł niczego, dostaję błąd.Moduł powłoki zwrotnej zwraca błąd, gdy wyniki grep są puste

Przykład:

- name: Get the http_status 
    shell: grep "http_status=" /var/httpd.txt 
    register: cmdln 
    check_mode: no 

Gdy ten ansibl playbook jeśli http_status ciąg nie jest tam, PlayBook jest zatrzymany. Nie dostaję stderra.

W jaki sposób można włączyć funkcję Ansible bez przerywania, nawet jeśli ciąg znaków nie zostanie znaleziony?

+0

moje pytanie czy pusty również chcę uruchomić ansibl bez interption – SSN

Odpowiedz

11

Tak jak zauważyłeś, ansibli przerywa wykonywanie, jeśli kod wyjścia grep nie jest równy zeru. Możesz go zignorować pod numerem ignore_errors.

Inną sztuczką jest wyprowadzenie wyjścia grep do cat. Tak więc kod wyjścia zawsze będzie wynosił zero, ponieważ jego stdin to standardowe wyjście grep. Działa, gdy występuje dopasowanie, a także gdy nie ma dopasowania. Spróbuj.

- name: Get the http_status 
    shell: grep "http_status=" /var/httpd.txt | cat 
    register: cmdln 
    check_mode: no 
15

grep według projektu zwraca kod 1, jeśli dany ciąg nie został znaleziony. Odpowiedz przez projekt przestaje wykonywać, jeśli kod powrotu jest inny niż 0. Twój system działa poprawnie.

Aby zapobiec ansibl od zatrzymania wykonanie PlayBook o tym błędzie można:

  • dodać ignore_errors: yes parametr do zadania

  • użytkowania failed_when: parametr z należytym stanie

Ponieważ grep zwraca kod błędu 2 dla wyjątków, druga metoda wydaje się bardziej odpowiednia, więc:

- name: Get the http_status 
    shell: grep "http_status=" /var/httpd.txt 
    register: cmdln 
    failed_when: "cmdln.rc == 2" 
    check_mode: no 

Można także rozważyć dodanie changed_when: false tak, że zadanie nie będzie zgłaszane jako „zmienił” za każdym razem.

Wszystkie opcje są opisane w dokumencie Error Handling In Playbooks.

+0

punkty za tym jakiś prawdziwy nie wykrycie warunku poprzez failed_when oraz sugestię korzystania changed_when: false, aby uniknąć pojawienia się zmian systemowych w ansibl wydajność! –

Powiązane problemy