From 983eb4a06b75ada67d9e14950ecb1a479e8ded84 Mon Sep 17 00:00:00 2001 From: David Shrewsbury Date: Mon, 8 Oct 2012 16:53:52 -0400 Subject: [PATCH] Add support for SUSPEND/ENABLE to HAProxy driver. SUSPEND just stops HAProxy, and ENABLE starts it. Added code to catch exceptions if either of these actions fail. --- libra/worker/controller.py | 12 ++++++++++-- libra/worker/drivers/haproxy/driver.py | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/libra/worker/controller.py b/libra/worker/controller.py index ffe4c4a7..bb327cb1 100644 --- a/libra/worker/controller.py +++ b/libra/worker/controller.py @@ -98,8 +98,7 @@ class LBaaSController(object): lb_node['condition'] = self.NODE_ERR self.msg['hpcs_response'] = self.RESPONSE_FAILURE except Exception as e: - self.logger.error("Failure activating changes: %s, %s" % - (e.__class__, e)) + self.logger.error("CREATE failed: %s, %s" % (e.__class__, e)) for lb_node in self.msg['nodes']: lb_node['condition'] = self.NODE_ERR self.msg['hpcs_response'] = self.RESPONSE_FAILURE @@ -125,6 +124,9 @@ class LBaaSController(object): "Selected driver does not support SUSPEND action." ) self.msg['hpcs_response'] = self.RESPONSE_FAILURE + except Exception as e: + self.logger.error("SUSPEND failed: %s, %s" % (e.__class__, e)) + self.msg['hpcs_response'] = self.RESPONSE_FAILURE else: self.msg['hpcs_response'] = self.RESPONSE_SUCCESS return self.msg @@ -138,6 +140,9 @@ class LBaaSController(object): "Selected driver does not support ENABLE action." ) self.msg['hpcs_response'] = self.RESPONSE_FAILURE + except Exception as e: + self.logger.error("ENABLE failed: %s, %s" % (e.__class__, e)) + self.msg['hpcs_response'] = self.RESPONSE_FAILURE else: self.msg['hpcs_response'] = self.RESPONSE_SUCCESS return self.msg @@ -151,6 +156,9 @@ class LBaaSController(object): "Selected driver does not support DELETE action." ) self.msg['hpcs_response'] = self.RESPONSE_FAILURE + except Exception as e: + self.logger.error("DELETE failed: %s, %s" % (e.__class__, e)) + self.msg['hpcs_response'] = self.RESPONSE_FAILURE else: self.msg['hpcs_response'] = self.RESPONSE_SUCCESS return self.msg diff --git a/libra/worker/drivers/haproxy/driver.py b/libra/worker/drivers/haproxy/driver.py index 352eec86..de676278 100644 --- a/libra/worker/drivers/haproxy/driver.py +++ b/libra/worker/drivers/haproxy/driver.py @@ -103,6 +103,24 @@ class HAProxyDriver(LoadBalancerDriver): raise Exception("Failed to restart HAProxy service: %s" % e.output.rstrip('\n')) + def _stop(self): + """ Stop the HAProxy service on the local machine. """ + cmd = '/usr/bin/sudo /usr/sbin/service haproxy stop' + try: + subprocess.check_output(cmd.split()) + except subprocess.CalledProcessError as e: + raise Exception("Failed to stop HAProxy service: %s" % + e.output.rstrip('\n')) + + def _start(self): + """ Start the HAProxy service on the local machine. """ + cmd = '/usr/bin/sudo /usr/sbin/service haproxy start' + try: + subprocess.check_output(cmd.split()) + except subprocess.CalledProcessError as e: + raise Exception("Failed to start HAProxy service: %s" % + e.output.rstrip('\n')) + #################### # Driver API Methods #################### @@ -119,3 +137,9 @@ class HAProxyDriver(LoadBalancerDriver): def create(self): self._write_config() self._restart() + + def suspend(self): + self._stop() + + def enable(self): + self._start()