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 ansible_runner.interface import run as ansible_run
|
||||
from ansible_runner.exceptions import AnsibleRunnerException
|
||||
|
||||
log = logging.getLogger("lifted")
|
||||
|
||||
@ -68,8 +69,13 @@ class Upload:
|
||||
:param callback: a function of the form callback(self)
|
||||
:type callback: function
|
||||
"""
|
||||
log.info(str(message))
|
||||
self.upload_log += f"{message}\n"
|
||||
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"
|
||||
if callback:
|
||||
callback(self)
|
||||
|
||||
@ -106,6 +112,7 @@ class Upload:
|
||||
:param status_callback: a function of the form callback(self)
|
||||
:type status_callback: function
|
||||
"""
|
||||
self._log("Setting status to %s" % status)
|
||||
self.status = status
|
||||
if status_callback:
|
||||
status_callback(self)
|
||||
@ -118,6 +125,7 @@ class Upload:
|
||||
:param status_callback: a function of the form callback(self)
|
||||
:type status_callback: function
|
||||
"""
|
||||
self._log("Setting image_path to %s" % image_path)
|
||||
self.image_path = image_path
|
||||
if self.status == "WAITING":
|
||||
self.set_status("READY", status_callback)
|
||||
@ -133,7 +141,7 @@ class Upload:
|
||||
if not self.image_path:
|
||||
raise RuntimeError(f"Can't reset, no image supplied yet!")
|
||||
# self.error = None
|
||||
self._log("Resetting...")
|
||||
self._log("Resetting state")
|
||||
self.set_status("READY", status_callback)
|
||||
|
||||
def is_cancellable(self):
|
||||
@ -166,21 +174,38 @@ class Upload:
|
||||
"""
|
||||
if self.status != "READY":
|
||||
raise RuntimeError("This upload is not ready!")
|
||||
self.upload_pid = current_process().pid
|
||||
self.set_status("RUNNING", status_callback)
|
||||
|
||||
logger = lambda e: self._log(e["stdout"], status_callback)
|
||||
try:
|
||||
self.upload_pid = current_process().pid
|
||||
self.set_status("RUNNING", status_callback)
|
||||
self._log("Executing playbook.yml")
|
||||
|
||||
runner = ansible_run(
|
||||
playbook=self.playbook_path,
|
||||
extravars={
|
||||
**self.settings,
|
||||
"image_name": self.image_name,
|
||||
"image_path": self.image_path,
|
||||
},
|
||||
event_handler=logger,
|
||||
)
|
||||
if runner.status == "successful":
|
||||
self.set_status("FINISHED", status_callback)
|
||||
else:
|
||||
self.set_status("FAILED", status_callback)
|
||||
# NOTE: event_handler doesn't seem to be called for playbook errors
|
||||
logger = lambda e: self._log(e["stdout"], status_callback)
|
||||
|
||||
runner = ansible_run(
|
||||
playbook=self.playbook_path,
|
||||
extravars={
|
||||
**self.settings,
|
||||
"image_name": self.image_name,
|
||||
"image_path": self.image_path,
|
||||
},
|
||||
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":
|
||||
self.set_status("FINISHED", status_callback)
|
||||
else:
|
||||
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