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)
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)