Esempio n. 1
0
    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)
Esempio n. 2
0
    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
Esempio n. 3
0
    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)