def update_port(self, context, id, port): p = super(RyuQuantumPluginV2, self).update_port(context, id, port) net_id = p['network_id'] mac_address = p['mac_address'] deleted = port['port'].get('deleted', False) if deleted: session = context.session try: db_api_v2.port_binding_destroy(session, id, net_id) except q_exc.PortNotFound: pass db_api_v2.set_port_status(session, id, q_const.PORT_STATUS_DOWN) return p datapath_id = port['port'].get('datapath_id', None) port_no = port['port'].get('port_no', None) if datapath_id is None or port_no is None: LOG.debug('p %s', p) return p try: port_binding = db_api_v2.port_binding_get(id, net_id) except orm_exc.NoResultFound: try: db_api_v2.port_binding_create(id, net_id, datapath_id, port_no) except IntegrityError: # TODO:XXX should do transaction? return p else: self.client.create_port(net_id, datapath_id, port_no) self.client.create_mac(net_id, datapath_id, port_no, mac_address) else: if (port_binding.dpid != datapath_id or port_binding.port_no != port_no): variables = { 'datapath_id': datapath_id, 'port_no': port_no, 'port_binding_dpid': port_binding.dpid, 'port_binding_port_no': port_binding.port_no } raise q_exc.InvalidInput( error_message=_('invalid (datapath_id, port_no) ' 'is requested' '(%(datapath_id)s, %(port_no)s), acutal' '(%(port_binding_dpid)s, ' '%(port_binding_port_no)s)') % variables) self.client.update_network(net_id) self.client.update_port(net_id, datapath_id, port_no) self.client.update_mac(net_id, datapath_id, port_no, mac_address) return p
def update_port(self, context, id, port): p = super(RyuQuantumPluginV2, self).update_port(context, id, port) net_id = p['network_id'] mac_address = p['mac_address'] deleted = port['port'].get('deleted', False) if deleted: session = context.session try: db_api_v2.port_binding_destroy(session, id, net_id) except q_exc.PortNotFound: pass db_api_v2.set_port_status(session, id, q_const.PORT_STATUS_DOWN) return p datapath_id = port['port'].get('datapath_id', None) port_no = port['port'].get('port_no', None) if datapath_id is None or port_no is None: LOG.debug('p %s', p) return p try: port_binding = db_api_v2.port_binding_get(id, net_id) except orm_exc.NoResultFound: try: db_api_v2.port_binding_create(id, net_id, datapath_id, port_no) except IntegrityError: # TODO:XXX should do transaction? return p else: self.client.create_port(net_id, datapath_id, port_no) self.client.create_mac(net_id, datapath_id, port_no, mac_address) else: if (port_binding.dpid != datapath_id or port_binding.port_no != port_no): variables = {'datapath_id': datapath_id, 'port_no': port_no, 'port_binding_dpid': port_binding.dpid, 'port_binding_port_no': port_binding.port_no} raise q_exc.InvalidInput( error_message=_('invalid (datapath_id, port_no) ' 'is requested' '(%(datapath_id)s, %(port_no)s), acutal' '(%(port_binding_dpid)s, ' '%(port_binding_port_no)s)') % variables) self.client.update_network(net_id) self.client.update_port(net_id, datapath_id, port_no) self.client.update_mac(net_id, datapath_id, port_no, mac_address) return p
def delete_port(self, context, id, l3_port_check=True): with context.session.begin(subtransactions=True): port = self._get_port(context, id) net_id = port.network_id try: port_binding = db_api_v2.port_binding_destroy( context.session, port.id, net_id) datapath_id = port_binding.dpid port_no = port_binding.port_no ignore_http_not_found(lambda: self.client.delete_port( net_id, datapath_id, port_no)) except q_exc.PortNotFound: pass # if needed, check to see if this is a port owned by # and l3-router. If so, we should prevent deletion. if l3_port_check: self.prevent_l3_port_deletion(context, id) self.disassociate_floatingips(context, id) return super(RyuQuantumPluginV2, self).delete_port(context, id)
def delete_port(self, context, id, l3_port_check=True): with context.session.begin(subtransactions=True): port = self._get_port(context, id) net_id = port.network_id try: port_binding = db_api_v2.port_binding_destroy(context.session, port.id, net_id) datapath_id = port_binding.dpid port_no = port_binding.port_no ignore_http_not_found( lambda: self.client.delete_port(net_id, datapath_id, port_no)) except q_exc.PortNotFound: pass # if needed, check to see if this is a port owned by # and l3-router. If so, we should prevent deletion. if l3_port_check: self.prevent_l3_port_deletion(context, id) self.disassociate_floatingips(context, id) return super(RyuQuantumPluginV2, self).delete_port(context, id)