Jedno z moich odpowiedzialnych zadań importuje bazę danych Oracle przy użyciu impdp
.
To generuje dużo danych wyjściowych do konsoli, więc ustawiłem no_log: True
.
Jednak gdy to się nie powiedzie, chcę zobaczyć dziennik!
Jak mogę zapisać to konkretne zadanie w pliku, a nie w konsoli?
failed_when
warunku, i usunięcie pliku dziennika, jeśli poprzedni. zadanie-vvv
poansible-playbook
poleceniu pobierania pełnych dzienników.Odpowiedzi:
[Konwertowanie mojego komentarza na odpowiedź]
Jednym ze sposobów na to byłoby zapisanie dzienników w jakimś zewnętrznym pliku, a następnie wykonanie zadania po nim, które korzysta z warunku fail_when, i usunięcie pliku dziennika, jeśli poprzednie zadanie zakończyło się powodzeniem.
Coś takiego powinno ci pomóc.
Uwaga: To może nie być najlepszy sposób na rozwiązanie problemu. Ale to był hack, który pomógł mi w logowaniu i monitorowaniu.
źródło
Myślę, że wszystko, co musisz zrobić, to zarejestrować wynik każdego polecenia (przechowywać go w zmiennej), a następnie po prostu zrzucić zmienną do pliku. W ten sposób możesz to sprawdzić później.
Następnie w dumpall.j2:
Przykład, którego używam, pochodzi stąd
źródło
Rozwiązałem to, dodając
do zadania no_log. Dzięki temu możliwe jest przejście do następnego zadania, nawet gdy zadanie się nie powiedzie. Następnie dla następnego zadania zdefiniuj zadanie debugowania, które zawsze kończy się niepowodzeniem i wyświetla zarejestrowaną zmienną, ale działa tylko wtedy, gdy poprzednie zadanie nie powiodło się:
Tak więc nawet przy no_log: true spowoduje to, że ansible wyświetli wynik nieudanego zadania. To rozwiązanie nie rejestruje go do pliku zgodnie z żądaniem, ale spełnia twoją potrzebę „zobacz dziennik, gdy nie powiodło się”, i oczywiście możesz przekierować lub użyć tee, aby wypisać pełne odpowiedzi wyjściowe do pliku, co w przypadku tego rozwiązania zawiera również dziennik nieudanego zadania.
źródło
To, co robię, gdy mam polecenie do wykonania i chcę uzyskać dziennik tylko w przypadku awarii, jest następujące (poprzedzone przez komendę powłoki, tak jak
/bin/sh -c '...'
w przypadku, gdy inicjator nie używasystem
wywołania lub wykonuje polecenia bezpośrednio bez powłoki) :To przekieruje błąd i standardowe wyjście do pliku i wyświetli zawartość pliku tylko w przypadku awarii. Jeśli polecenie jest bardzo szczegółowe i nie chcesz przechowywać dziennika, gdy jest w porządku, możesz:
Wycena
&&
i||
użycie strony sh :To prawdopodobnie nie jest najbardziej idiomatyczny sposób na wykonanie tego z ansible, ale ma tę zaletę, że jest bardzo przenośny z dowolnym systemem zarządzania konfiguracją, który umożliwia wyświetlanie standardowego polecenia.
źródło
Zakładając, że ansible poprawnie generuje błędy do stderr, możesz przechwycić dane wyjściowe błędów w dowolnym programie do pliku za pomocą przekierowania wyjścia:
some command 2> error.log
Jednak nie sądzę, że tak jest.
Zamiast tego prawdopodobnie będziesz chciał zapoznać się z tym przewodnikiem, aby zdecydować, kiedy wystąpią błędy http://docs.ansible.com/ansible/playbooks_error_handling.html, a następnie grep swoje dane wyjściowe w poszukiwaniu ciągów wskazujących błąd przed wysłaniem do pliku
to znaczy.
ansible-playbook my-playbook | grep 'error' > error.log
źródło
Myślę, że to, czego szukasz, może być po prostu przekierowaniem standardowego wejścia i ulicy do pliku.
Zazwyczaj niektóre polecenia i> logfile.log
lub jakiś wariant ....
źródło
Tee będzie bardzo prostym narzędziem do logowania, możesz odwołać się do następującego polecenia.
źródło