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,8 +69,13 @@ 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:
|
||||||
self.upload_log += f"{message}\n"
|
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:
|
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,21 +174,38 @@ class Upload:
|
|||||||
"""
|
"""
|
||||||
if self.status != "READY":
|
if self.status != "READY":
|
||||||
raise RuntimeError("This upload is not 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(
|
# NOTE: event_handler doesn't seem to be called for playbook errors
|
||||||
playbook=self.playbook_path,
|
logger = lambda e: self._log(e["stdout"], status_callback)
|
||||||
extravars={
|
|
||||||
**self.settings,
|
runner = ansible_run(
|
||||||
"image_name": self.image_name,
|
playbook=self.playbook_path,
|
||||||
"image_path": self.image_path,
|
extravars={
|
||||||
},
|
**self.settings,
|
||||||
event_handler=logger,
|
"image_name": self.image_name,
|
||||||
)
|
"image_path": self.image_path,
|
||||||
if runner.status == "successful":
|
},
|
||||||
self.set_status("FINISHED", status_callback)
|
event_handler=logger,
|
||||||
else:
|
)
|
||||||
self.set_status("FAILED", status_callback)
|
|
||||||
|
# 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