Beispiel #1
0
    def create_loadbalancer(self, context, loadbalancer, allocate_vip=True):
        self._load_id(context, loadbalancer)
        vip_network_id = loadbalancer.pop('vip_network_id', None)
        vip_subnet_id = loadbalancer.pop('vip_subnet_id', None)
        vip_address = loadbalancer.pop('vip_address')
        if vip_subnet_id and vip_subnet_id != n_const.ATTR_NOT_SPECIFIED:
            loadbalancer['vip_subnet_id'] = vip_subnet_id
        loadbalancer['provisioning_status'] = n_const.PENDING_CREATE
        loadbalancer['operating_status'] = lb_const.OFFLINE
        lb_db = models.LoadBalancer(**loadbalancer)

        # create port outside of lb create transaction since it can sometimes
        # cause lock wait timeouts
        if allocate_vip:
            LOG.debug("Plugin will allocate the vip as a neutron port.")
            self._create_port_for_load_balancer(context, lb_db,
                                                vip_address, vip_network_id)

        with context.session.begin(subtransactions=True):
            context.session.add(lb_db)
            context.session.flush()
            lb_db.stats = self._create_loadbalancer_stats(
                context, lb_db.id)
            context.session.add(lb_db)
            context.session.flush()
        return data_models.LoadBalancer.from_sqlalchemy_model(lb_db)
    def create_loadbalancer(self, context, loadbalancer, allocate_vip=True):
        with context.session.begin(subtransactions=True):
            self._load_id(context, loadbalancer)
            vip_address = loadbalancer.pop('vip_address')
            loadbalancer['provisioning_status'] = constants.PENDING_CREATE
            loadbalancer['operating_status'] = lb_const.OFFLINE
            lb_db = models.LoadBalancer(**loadbalancer)
            context.session.add(lb_db)
            context.session.flush()
            lb_db.stats = self._create_loadbalancer_stats(context, lb_db.id)
            context.session.add(lb_db)
            context.session.flush()

        # create port outside of lb create transaction since it can sometimes
        # cause lock wait timeouts
        if allocate_vip:
            LOG.debug("Plugin will allocate the vip as a neutron port.")
            try:
                self._create_port_for_load_balancer(context, lb_db,
                                                    vip_address)
            except Exception:
                with excutils.save_and_reraise_exception():
                    try:
                        context.session.delete(lb_db)
                    except sqlalchemy_exc.InvalidRequestError:
                        # Revert already completed.
                        pass
                    context.session.flush()
        return data_models.LoadBalancer.from_sqlalchemy_model(lb_db)
Beispiel #3
0
    def create_loadbalancer(self, context, loadbalancer):
        with context.session.begin(subtransactions=True):
            self._load_id_and_tenant_id(context, loadbalancer)
            vip_address = loadbalancer.pop('vip_address')
            loadbalancer['provisioning_status'] = constants.PENDING_CREATE
            loadbalancer['operating_status'] = lb_const.OFFLINE
            lb_db = models.LoadBalancer(**loadbalancer)
            context.session.add(lb_db)
            context.session.flush()
            lb_db.stats = self._create_loadbalancer_stats(
                context, lb_db.id)
            context.session.add(lb_db)

        # create port outside of lb create transaction since it can sometimes
        # cause lock wait timeouts
        try:
            self._create_port_for_load_balancer(context, lb_db, vip_address)
        except Exception:
            with excutils.save_and_reraise_exception():
                context.session.delete(lb_db)
                context.session.flush()
        return data_models.LoadBalancer.from_sqlalchemy_model(lb_db)