lifted: Improve logging for upload playbooks
playbook errors are now logged, as well as errors encountered while executing the playbook.
This commit is contained in:
parent
146560b959
commit
a59c0241c4
@ -23,6 +23,7 @@ import signal
|
|||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
from ansible_runner.interface import run as ansible_run
|
from ansible_runner.interface import run as ansible_run
|
||||||
|
from ansible_runner.exceptions import AnsibleRunnerException
|
||||||
|
|
||||||
log = logging.getLogger("lifted")
|
log = logging.getLogger("lifted")
|
||||||
|
|
||||||
@ -68,7 +69,12 @@ class Upload:
|
|||||||
:param callback: a function of the form callback(self)
|
:param callback: a function of the form callback(self)
|
||||||
:type callback: function
|
:type callback: function
|
||||||
"""
|
"""
|
||||||
log.info(str(message))
|
if message:
|
||||||
|
messages = str(message).splitlines()
|
||||||
|
|
||||||
|
# Log multi-line messages as individual log lines
|
||||||
|
for m in messages:
|
||||||
|
log.info(m)
|
||||||
self.upload_log += f"{message}\n"
|
self.upload_log += f"{message}\n"
|
||||||
if callback:
|
if callback:
|
||||||
callback(self)
|
callback(self)
|
||||||
@ -106,6 +112,7 @@ class Upload:
|
|||||||
:param status_callback: a function of the form callback(self)
|
:param status_callback: a function of the form callback(self)
|
||||||
:type status_callback: function
|
:type status_callback: function
|
||||||
"""
|
"""
|
||||||
|
self._log("Setting status to %s" % status)
|
||||||
self.status = status
|
self.status = status
|
||||||
if status_callback:
|
if status_callback:
|
||||||
status_callback(self)
|
status_callback(self)
|
||||||
@ -118,6 +125,7 @@ class Upload:
|
|||||||
:param status_callback: a function of the form callback(self)
|
:param status_callback: a function of the form callback(self)
|
||||||
:type status_callback: function
|
:type status_callback: function
|
||||||
"""
|
"""
|
||||||
|
self._log("Setting image_path to %s" % image_path)
|
||||||
self.image_path = image_path
|
self.image_path = image_path
|
||||||
if self.status == "WAITING":
|
if self.status == "WAITING":
|
||||||
self.set_status("READY", status_callback)
|
self.set_status("READY", status_callback)
|
||||||
@ -133,7 +141,7 @@ class Upload:
|
|||||||
if not self.image_path:
|
if not self.image_path:
|
||||||
raise RuntimeError(f"Can't reset, no image supplied yet!")
|
raise RuntimeError(f"Can't reset, no image supplied yet!")
|
||||||
# self.error = None
|
# self.error = None
|
||||||
self._log("Resetting...")
|
self._log("Resetting state")
|
||||||
self.set_status("READY", status_callback)
|
self.set_status("READY", status_callback)
|
||||||
|
|
||||||
def is_cancellable(self):
|
def is_cancellable(self):
|
||||||
@ -166,9 +174,13 @@ class Upload:
|
|||||||
"""
|
"""
|
||||||
if self.status != "READY":
|
if self.status != "READY":
|
||||||
raise RuntimeError("This upload is not ready!")
|
raise RuntimeError("This upload is not ready!")
|
||||||
|
|
||||||
|
try:
|
||||||
self.upload_pid = current_process().pid
|
self.upload_pid = current_process().pid
|
||||||
self.set_status("RUNNING", status_callback)
|
self.set_status("RUNNING", status_callback)
|
||||||
|
self._log("Executing playbook.yml")
|
||||||
|
|
||||||
|
# NOTE: event_handler doesn't seem to be called for playbook errors
|
||||||
logger = lambda e: self._log(e["stdout"], status_callback)
|
logger = lambda e: self._log(e["stdout"], status_callback)
|
||||||
|
|
||||||
runner = ansible_run(
|
runner = ansible_run(
|
||||||
@ -180,7 +192,20 @@ class Upload:
|
|||||||
},
|
},
|
||||||
event_handler=logger,
|
event_handler=logger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Try logging events and stats -- but they may not exist, so catch the error
|
||||||
|
try:
|
||||||
|
for e in runner.events:
|
||||||
|
self._log("%s" % dir(e), status_callback)
|
||||||
|
|
||||||
|
self._log("%s" % runner.stats, status_callback)
|
||||||
|
except AnsibleRunnerException:
|
||||||
|
self._log("%s" % runner.stdout.read(), status_callback)
|
||||||
|
|
||||||
if runner.status == "successful":
|
if runner.status == "successful":
|
||||||
self.set_status("FINISHED", status_callback)
|
self.set_status("FINISHED", status_callback)
|
||||||
else:
|
else:
|
||||||
self.set_status("FAILED", status_callback)
|
self.set_status("FAILED", status_callback)
|
||||||
|
except Exception:
|
||||||
|
import traceback
|
||||||
|
log.error(traceback.format_exc(limit=2))
|
||||||
|
Loading…
Reference in New Issue
Block a user