From 7f0cbb60896fb2ba8ff290bde1a0c1ccc7d3b822 Mon Sep 17 00:00:00 2001 From: Pablo Ruiz Date: Fri, 3 Jun 2022 01:18:24 +0200 Subject: [PATCH 1/3] Enhance error handling & logging when container cannot be started. --- kvm_handler.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/kvm_handler.py b/kvm_handler.py index b15272e..79a2ebd 100644 --- a/kvm_handler.py +++ b/kvm_handler.py @@ -17,7 +17,7 @@ ) from nojava_ipmi_kvm.config import config, HTML5HostConfig from nojava_ipmi_kvm import utils - +from tornado.websocket import WebSocketError from basehandler import BaseWSHandler WEB_PORT_START = int(os.environ.get("WEB_PORT_START", 8800)) @@ -60,6 +60,7 @@ async def on_message(self, msg): return self.write_message({"action": "notice", "message": "Already connected to a kvm!"}) self._connecting = True + started = False server = msg["server"] password = msg["password"] resolution = msg["resolution"] if "resolution" in msg else None @@ -119,17 +120,20 @@ def send_log_message(msg, *args, **kwargs): external_web_dns=external_web_dns, port=self._web_port, hostname=host_config.full_hostname ), ) - except ( - WebserverNotReachableError, - DockerNotInstalledError, - DockerNotCallableError, - IOError, - DockerTerminatedError, - DockerPortNotReadableError, - ) as ex: - logging.exception("Could not start KVM container") - used_ports.remove(web_port) + started = True + except WebSocketError as ex: + logging.exception("Could not start KVM container: WebSocket closed unexpectedly?") + except Exception as ex: + logging.exception("Could not start KVM container: %s" % ex) return self.write_message({"action": "error", "message": str(ex)}) + finally: + try: + if not started: + used_ports.remove(web_port) + self._current_session.kill_process() + except: + pass + return if isinstance(sess, HTML5KvmViewer): return self.write_message( From aff5e1296a97e2ac54dbc846133db4d24f70933d Mon Sep 17 00:00:00 2001 From: Pablo Ruiz Date: Fri, 3 Jun 2022 12:28:35 +0200 Subject: [PATCH 2/3] Fixed forgot return clause on finally handler. --- kvm_handler.py | 1 - 1 file changed, 1 deletion(-) diff --git a/kvm_handler.py b/kvm_handler.py index 79a2ebd..6862846 100644 --- a/kvm_handler.py +++ b/kvm_handler.py @@ -133,7 +133,6 @@ def send_log_message(msg, *args, **kwargs): self._current_session.kill_process() except: pass - return if isinstance(sess, HTML5KvmViewer): return self.write_message( From 019489574ce0635249cd838027e42dbc121d7b43 Mon Sep 17 00:00:00 2001 From: Pablo Ruiz Date: Fri, 3 Jun 2022 12:30:37 +0200 Subject: [PATCH 3/3] And now added the missing return to it's right place. --- kvm_handler.py | 1 + 1 file changed, 1 insertion(+) diff --git a/kvm_handler.py b/kvm_handler.py index 6862846..e86cf03 100644 --- a/kvm_handler.py +++ b/kvm_handler.py @@ -123,6 +123,7 @@ def send_log_message(msg, *args, **kwargs): started = True except WebSocketError as ex: logging.exception("Could not start KVM container: WebSocket closed unexpectedly?") + return except Exception as ex: logging.exception("Could not start KVM container: %s" % ex) return self.write_message({"action": "error", "message": str(ex)})