def _assure_listeners_created(self, service): if 'listeners' not in service: return listeners = service["listeners"] loadbalancer = service["loadbalancer"] networks = service["networks"] bigips = self.driver.get_config_bigips() for listener in listeners: svc = { "loadbalancer": loadbalancer, "listener": listener, "networks": networks } if listener['provisioning_status'] == plugin_const.PENDING_UPDATE: try: self.listener_builder.update_listener(svc, bigips) except Exception as err: loadbalancer['provisioning_status'] = plugin_const.ERROR listener['provisioning_status'] = plugin_const.ERROR raise f5_ex.VirtualServerUpdateException(err.message) elif listener['provisioning_status'] != \ plugin_const.PENDING_DELETE: try: # create_listener() will do an update if VS exists self.listener_builder.create_listener(svc, bigips) listener['operating_status'] = \ svc['listener']['operating_status'] except Exception as err: loadbalancer['provisioning_status'] = plugin_const.ERROR listener['provisioning_status'] = plugin_const.ERROR raise f5_ex.VirtualServerCreationException(err.message)
def create_listener(self, service, bigips, esd=None): u"""Create listener on set of BIG-IPs. Create a BIG-IP virtual server to represent an LBaaS Listener object. :param service: Dictionary which contains a both a listener and load balancer definition. :param bigips: Array of BigIP class instances to create Listener. """ loadbalancer = service.get('loadbalancer', dict()) listener = service.get('listener', dict()) network_id = loadbalancer.get('network_id', "") vip = self.service_adapter.get_virtual(service) tls = self.service_adapter.get_tls(service) if tls: tls['name'] = vip['name'] tls['partition'] = vip['partition'] persist = listener.get("session_persistence", None) error = None for bigip in bigips: self.service_adapter.get_vlan(vip, bigip, network_id) if tls: self.add_ssl_profile(tls, vip, bigip) if persist and persist.get('type', "") == "APP_COOKIE": self._add_cookie_persist_rule(vip, persist, bigip) try: self.vs_helper.create(bigip, vip) except HTTPError as err: if err.response.status_code == 409: LOG.debug("Virtual server already exists...updating") try: self.vs_helper.update(bigip, vip) except Exception as err: error = f5_ex.VirtualServerUpdateException(err.message) LOG.error("Virtual server update error: %s" % error.message) else: error = f5_ex.VirtualServerCreationException(err.message) LOG.error("Virtual server creation error: %s" % error.message) except Exception as err: error = f5_ex.VirtualServerCreationException(err.message) LOG.error("Virtual server creation error: %s" % error.message) if not persist: try: self._remove_cookie_persist_rule(vip, bigip) except HTTPError as err: LOG.exception(err.message) return error
def _update_listener_pool(self, service, listener_id, pool_name, bigips): listener = self.get_listener_by_id(service, listener_id) if listener is not None: try: listener["pool"] = pool_name svc = {"loadbalancer": service["loadbalancer"], "listener": listener} self.listener_builder.update_listener(svc, bigips) except Exception as err: listener['provisioning_status'] = plugin_const.ERROR raise f5_ex.VirtualServerUpdateException(err.message)
def _assure_listeners_created(self, service): if 'listeners' not in service: return listeners = service["listeners"] loadbalancer = service["loadbalancer"] networks = service["networks"] bigips = self.driver.get_config_bigips() for listener in listeners: pool = self.get_pool_by_id(service, listener.get('default_pool_id', None)) svc = { "loadbalancer": loadbalancer, "listener": listener, "networks": networks } if pool: svc['pool'] = pool if listener['provisioning_status'] == \ plugin_const.PENDING_UPDATE: try: self.listener_builder.update_listener(svc, bigips) except Exception as err: loadbalancer['provisioning_status'] = \ plugin_const.ERROR listener['provisioning_status'] = plugin_const.ERROR raise f5_ex.VirtualServerUpdateException(err.message) elif self._is_not_pending_delete(listener): try: # create_listener() will do an update if VS exists self.listener_builder.create_listener(svc, bigips) listener['operating_status'] = \ svc['listener']['operating_status'] except Exception as err: loadbalancer['provisioning_status'] = \ plugin_const.ERROR listener['provisioning_status'] = plugin_const.ERROR raise f5_ex.VirtualServerCreationException(err.message) self._set_status_as_active(listener)