Eine meiner ansible Aufgaben importiert eine Oracle-Datenbank mit impdp
.
Dies erzeugt eine Menge Ausgabe an die Konsole, also habe ich eingestellt no_log: True
.
Wenn dies jedoch fehlschlägt, möchte ich das Protokoll sehen!
Wie kann ich dieses bestimmte Aufgabenprotokoll in einer Datei und nicht in der Konsole erstellen?
failed_when
Bedingung nutzt , und die Protokolldatei zu entfernen, falls die vorherige. Aufgabe war erfolgreich :)-vvv
Nach demansible-playbook
Befehl zum Abrufen ausführlicher Protokolle eingeben .Antworten:
[Meinen Kommentar in eine Antwort umwandeln]
Eine Möglichkeit besteht darin, die Protokolle in eine externe Datei zu schreiben und anschließend eine Aufgabe zu erstellen, die die Bedingung failed_when verwendet, und die Protokolldatei zu entfernen, wenn die vorherige Aufgabe erfolgreich war.
So etwas sollte dir helfen.
Hinweis: Dies ist möglicherweise nicht der beste Weg, um Ihr Problem zu lösen. Dies war jedoch ein Hack, der mir bei der Protokollierung und Überwachung half.
quelle
Ich denke, alles, was Sie tun müssen, ist, die Ausgabe jedes benötigten Befehls zu registrieren (in einer Variablen speichern) und dann einfach die Variable in einer Datei abzulegen. Auf diese Weise können Sie es später überprüfen.
Dann in dumpall.j2:
Das Beispiel, das ich benutze, ist von hier
quelle
Ich habe dies durch Hinzufügen gelöst
zur no_log-task. Dies macht es möglich, mit der nächsten Aufgabe fortzufahren, selbst wenn die Aufgabe fehlschlägt. Definieren Sie dann für die nächste Aufgabe eine Debug-Aufgabe, die immer fehlschlägt und die registrierte Variable ausgibt, aber nur ausgeführt wird, wenn die vorherige Aufgabe fehlgeschlagen ist:
Selbst mit no_log: true wird dadurch die Ausgabe der fehlgeschlagenen Aufgabe ansibel angezeigt. Diese Lösung protokolliert es nicht wie angefordert in einer Datei, sondern erfüllt Ihre Anforderungen, das Protokoll anzuzeigen, wenn es fehlgeschlagen ist. Natürlich können Sie die vollständige ansible Ausgabe in eine Datei umleiten oder verwenden, um dies mit dieser Lösung zu tun Enthält auch das Protokoll der fehlgeschlagenen Aufgabe.
quelle
Was ich mache, wenn ich einen Befehl zum Ausführen habe und das Protokoll nur im Fehlerfall abrufen möchte, ist wie folgt (vorangestellt durch ein Shell-Kommando und wie
/bin/sh -c '...'
für den Fall, dass der Initiator keinensystem
Aufruf verwendet oder den Befehl direkt ohne Shell ausführt). ::Dadurch werden Fehler und Standardausgaben in eine Datei umgeleitet und der Inhalt der Datei nur im Fehlerfall angezeigt. Wenn der Befehl sehr ausführlich ist und Sie das Protokoll nicht behalten möchten, wenn es in Ordnung ist, können Sie fortfahren mit:
Zitat
&&
und||
Verwendung von sh manpage :Dies ist wahrscheinlich nicht die idiomatischste Methode, um es mit ansible zu tun, hat jedoch den Vorteil, dass es mit jedem Konfigurationsmanagementsystem sehr portabel ist und die Möglichkeit bietet, den Befehl stdout anzuzeigen.
quelle
Unter der Annahme, dass ansible Fehler ordnungsgemäß an stderr auslöst, können Sie die Ausgabe von Fehlern in jedem Programm mithilfe der Ausgabeweitleitung in eine Datei erfassen:
some command 2> error.log
Ich glaube jedoch nicht, dass dies der Fall ist.
Stattdessen sollten Sie sich wahrscheinlich auf dieses Handbuch beziehen, um zu entscheiden, wann Fehler auftreten. Http://docs.ansible.com/ansible/playbooks_error_handling.html und dann Ihre Ausgabe nach Zeichenfolgen durchsuchen, die auf einen Fehler hinweisen, bevor Sie sie in eine Datei ausgeben
dh.
ansible-playbook my-playbook | grep 'error' > error.log
quelle
Ich denke, was Sie suchen, könnte zu einfach sein, stdout und street umzuleiten, um es abzulegen.
In der Regel ein Befehl &> logfile.log
oder eine Variante ....
quelle
Tee ist ein sehr einfaches Werkzeug für die Protokollierung. Sie können den folgenden Befehl verwenden.
quelle