def create_port_precommit(self, mech_context): """Create logical port on the switch (db update).""" LOG.debug("create_port_precommit: called") port = mech_context.current port_id = port['id'] network_id = port['network_id'] tenant_id = port['tenant_id'] admin_state_up = port['admin_state_up'] context = mech_context._plugin_context network = brocade_db.get_network(context, network_id) vlan_id = network['vlan'] try: brocade_db.create_port(context, port_id, network_id, None, vlan_id, tenant_id, admin_state_up) except Exception: LOG.exception( _LE("Brocade Mechanism: failed to create port" " in db")) raise Exception( _("Brocade Mechanism: create_port_precommit failed"))
def create_port_precommit(self, mech_context): """Create logical port on the switch (db update).""" LOG.debug("create_port_precommit: called") port = mech_context.current port_id = port['id'] network_id = port['network_id'] tenant_id = port['tenant_id'] admin_state_up = port['admin_state_up'] context = mech_context._plugin_context network = brocade_db.get_network(context, network_id) vlan_id = network['vlan'] try: brocade_db.create_port(context, port_id, network_id, None, vlan_id, tenant_id, admin_state_up) except Exception: LOG.exception(_LE("Brocade Mechanism: failed to create port" " in db")) raise Exception( _("Brocade Mechanism: create_port_precommit failed"))
def remove_router_interface(self, context, router_id, interface_info): """Deletes svi from NOS device.""" LOG.debug( "BrocadeSVIPlugin.remove_router_interface called: " "router_id=%(router_id)s " "interface_info=%(interface_info)r", { 'router_id': router_id, 'interface_info': interface_info }) with context.session.begin(subtransactions=True): info = super(BrocadeSVIPlugin, self).remove_router_interface(context, router_id, interface_info) try: subnet = self._core_plugin._get_subnet(context, info['subnet_id']) cidr = subnet['cidr'] net_addr, net_len = self.net_addr(cidr) gateway_ip = subnet['gateway_ip'] network_id = subnet['network_id'] bnet = brocade_db.get_network(context, network_id) vlan_id = bnet['vlan'] gateway_ip_cidr = gateway_ip + '/' + str(net_len) LOG.debug( "remove_router_interface removed cidr %(cidr)s" " from the pool," " network_id %(net_id)s bnet %(bnet)s" " vlan %(vlan_id)d", { 'cidr': gateway_ip_cidr, 'net_id': network_id, 'bnet': bnet, 'vlan_id': int(vlan_id) }) switch = self._switch self._driver.delete_svi(switch['address'], switch['username'], switch['password'], switch['rbridge_id'], vlan_id, gateway_ip_cidr, str(router_id)) except Exception: with excutils.save_and_reraise_exception(): LOG.error( _LE("Fail remove of interface from brocade " "router interface. info=%(info)s, " "router_id=%(router_id)s"), { "info": info, "router_id": router_id }) return True
def _associate_mac_to_net(self, context, network_id, interface_mac, op): network = brocade_db.get_network(context, network_id) vlan_id = network['vlan'] # convert mac format: xx:xx:xx:xx:xx:xx -> xxxx.xxxx.xxxx mac = self.mac_reformat_62to34(interface_mac) try: self._driver.associate_mac_to_network(self._switch['address'], self._switch['username'], self._switch['password'], vlan_id, mac) except Exception: with excutils.save_and_reraise_exception(): LOG.exception( _LE("Brocade NOS driver: failed to associate mac %s"), interface_mac)
def remove_router_interface(self, context, router_id, interface_info): """Deletes svi from NOS device.""" LOG.debug("BrocadeSVIPlugin.remove_router_interface called: " "router_id=%(router_id)s " "interface_info=%(interface_info)r", {'router_id': router_id, 'interface_info': interface_info}) with context.session.begin(subtransactions=True): info = super(BrocadeSVIPlugin, self).remove_router_interface( context, router_id, interface_info) try: subnet = self._core_plugin._get_subnet(context, info['subnet_id']) cidr = subnet['cidr'] net_addr, net_len = self.net_addr(cidr) gateway_ip = subnet['gateway_ip'] network_id = subnet['network_id'] bnet = brocade_db.get_network(context, network_id) vlan_id = bnet['vlan'] gateway_ip_cidr = gateway_ip + '/' + str(net_len) LOG.debug("remove_router_interface removed cidr %(cidr)s" " from the pool," " network_id %(net_id)s bnet %(bnet)s" " vlan %(vlan_id)d", {'cidr': gateway_ip_cidr, 'net_id': network_id, 'bnet': bnet, 'vlan_id': int(vlan_id)}) switch = self._switch self._driver.delete_svi(switch['address'], switch['username'], switch['password'], switch['rbridge_id'], vlan_id, gateway_ip_cidr, str(router_id)) except Exception: with excutils.save_and_reraise_exception(): LOG.error(_LE("Fail remove of interface from brocade " "router interface. info=%(info)s, " "router_id=%(router_id)s"), {"info": info, "router_id": router_id}) return True
def create_port_postcommit(self, mech_context): """Associate the assigned MAC address to the portprofile.""" LOG.debug("create_port_postcommit: called") port = mech_context.current port_id = port['id'] network_id = port['network_id'] tenant_id = port['tenant_id'] context = mech_context._plugin_context network = brocade_db.get_network(context, network_id) vlan_id = network['vlan'] interface_mac = port['mac_address'] # convert mac format: xx:xx:xx:xx:xx:xx -> xxxx.xxxx.xxxx mac = self.mac_reformat_62to34(interface_mac) try: self._driver.associate_mac_to_network(self._switch['address'], self._switch['username'], self._switch['password'], vlan_id, mac) except Exception: LOG.exception( _LE("Brocade NOS driver: failed to associate mac %s"), interface_mac) raise Exception( _("Brocade switch exception: create_port_postcommit failed")) LOG.info( _LI("created port (postcommit): port_id=%(port_id)s" " network_id=%(network_id)s tenant_id=%(tenant_id)s"), { 'port_id': port_id, 'network_id': network_id, 'tenant_id': tenant_id })
def delete_port_postcommit(self, mech_context): """Dissociate MAC address from the portprofile.""" LOG.debug("delete_port_postcommit: called") port = mech_context.current port_id = port['id'] network_id = port['network_id'] tenant_id = port['tenant_id'] context = mech_context._plugin_context network = brocade_db.get_network(context, network_id) vlan_id = network['vlan'] interface_mac = port['mac_address'] # convert mac format: xx:xx:xx:xx:xx:xx -> xxxx.xxxx.xxxx mac = self.mac_reformat_62to34(interface_mac) try: self._driver.dissociate_mac_from_network( self._switch['address'], self._switch['username'], self._switch['password'], vlan_id, mac) except Exception: LOG.exception( _LE("Brocade NOS driver: failed to dissociate MAC %s"), interface_mac) raise Exception( _("Brocade switch exception, delete_port_postcommit failed")) LOG.info( _LI("delete port (postcommit): port_id=%(port_id)s" " network_id=%(network_id)s tenant_id=%(tenant_id)s"), {'port_id': port_id, 'network_id': network_id, 'tenant_id': tenant_id})
def create_network_postcommit(self, mech_context): """Create Network as a portprofile on the switch.""" LOG.debug("create_network_postcommit: called") network = mech_context.current # use network_id to get the network attributes # ONLY depend on our db for getting back network attributes # this is so we can replay postcommit from db context = mech_context._plugin_context network_id = network['id'] network = brocade_db.get_network(context, network_id) network_type = network['network_type'] tenant_id = network['tenant_id'] vlan_id = network['vlan'] try: self._driver.create_network(self._switch['address'], self._switch['username'], self._switch['password'], vlan_id) except Exception: LOG.exception(_LE("Brocade NOS driver: failed in create network")) brocade_db.delete_network(context, network_id) raise Exception( _("Brocade Mechanism: create_network_postcommmit failed")) LOG.info( _LI("created network (postcommit): %(network_id)s" " of network type = %(network_type)s" " with vlan = %(vlan_id)s" " for tenant %(tenant_id)s"), { 'network_id': network_id, 'network_type': network_type, 'vlan_id': vlan_id, 'tenant_id': tenant_id })
def create_network_postcommit(self, mech_context): """Create Network as a portprofile on the switch.""" LOG.debug("create_network_postcommit: called") network = mech_context.current # use network_id to get the network attributes # ONLY depend on our db for getting back network attributes # this is so we can replay postcommit from db context = mech_context._plugin_context network_id = network['id'] network = brocade_db.get_network(context, network_id) network_type = network['network_type'] tenant_id = network['tenant_id'] vlan_id = network['vlan'] try: self._driver.create_network(self._switch['address'], self._switch['username'], self._switch['password'], vlan_id) except Exception: LOG.exception(_LE("Brocade NOS driver: failed in create network")) brocade_db.delete_network(context, network_id) raise Exception( _("Brocade Mechanism: create_network_postcommmit failed")) LOG.info(_LI("created network (postcommit): %(network_id)s" " of network type = %(network_type)s" " with vlan = %(vlan_id)s" " for tenant %(tenant_id)s"), {'network_id': network_id, 'network_type': network_type, 'vlan_id': vlan_id, 'tenant_id': tenant_id})
def add_router_interface(self, context, router_id, interface_info): """creates svi on NOS device and assigns ip addres to SVI.""" LOG.debug("BrocadeSVIPlugin.add_router_interface on VDX: " "router_id=%(router_id)s " "interface_info=%(interface_info)r", {'router_id': router_id, 'interface_info': interface_info}) with context.session.begin(subtransactions=True): info = super(BrocadeSVIPlugin, self).add_router_interface( context, router_id, interface_info) port = db.get_port(context.session, info["port_id"]) # shutting down neutron port to allow NOS to do Arp/Routing port['admin_state_up'] = False port['port'] = port self._core_plugin.update_port(context, info["port_id"], port) interface_info = info subnet = self._core_plugin._get_subnet(context, interface_info["subnet_id"]) cidr = subnet["cidr"] net_addr, net_len = self.net_addr(cidr) gateway_ip = subnet["gateway_ip"] network_id = subnet['network_id'] bnet = brocade_db.get_network(context, network_id) vlan_id = bnet['vlan'] gateway_ip_cidr = gateway_ip + '/' + str(net_len) LOG.debug("Allocated cidr %(cidr)s from the pool, " "network_id %(net_id)s " "bnet %(bnet)s " "vlan %(vlan_id)d " % ({'cidr': gateway_ip_cidr, 'net_id': network_id, 'bnet': bnet, 'vlan_id': int(vlan_id)})) port_filters = {'network_id': [network_id], 'device_owner': [DEVICE_OWNER_ROUTER_INTF]} port_count = self._core_plugin.get_ports_count(context, port_filters) LOG.info(_("BrocadeSVIPlugin.add_router_interface ports_count %d"), port_count) # port count is checked against 2 since the current port is already # added to db if port_count == 2: # This subnet is already part of some router # (this is not supported in this version of brocade svi plugin) LOG.error(_("BrocadeSVIPlugin: adding redundant router " "interface is not supported")) raise Exception(_("BrocadeSVIPlugin:adding redundant router " "interface is not supported")) try: switch = self._switch self._driver.create_svi(switch['address'], switch['username'], switch['password'], switch['rbridge_id'], vlan_id, gateway_ip_cidr, str(router_id)) except Exception: LOG.error(_("Failed to create Brocade resources to add router " "interface. info=%(info)s, router_id=%(router_id)s"), {"info": info, "router_id": router_id}) with excutils.save_and_reraise_exception(): with context.session.begin(subtransactions=True): self.remove_router_interface(context, router_id, interface_info) return info
def add_router_interface(self, context, router_id, interface_info): """creates svi on NOS device and assigns ip addres to SVI.""" LOG.debug( "BrocadeSVIPlugin.add_router_interface on VDX: " "router_id=%(router_id)s " "interface_info=%(interface_info)r", { 'router_id': router_id, 'interface_info': interface_info }) with context.session.begin(subtransactions=True): info = super(BrocadeSVIPlugin, self).add_router_interface(context, router_id, interface_info) port = db.get_port(context.session, info["port_id"]) # shutting down neutron port to allow NOS to do Arp/Routing port['admin_state_up'] = False port['port'] = port self._core_plugin.update_port(context, info["port_id"], port) interface_info = info subnet = self._core_plugin._get_subnet(context, interface_info["subnet_id"]) cidr = subnet["cidr"] net_addr, net_len = self.net_addr(cidr) gateway_ip = subnet["gateway_ip"] network_id = subnet['network_id'] bnet = brocade_db.get_network(context, network_id) vlan_id = bnet['vlan'] gateway_ip_cidr = gateway_ip + '/' + str(net_len) LOG.debug("Allocated cidr %(cidr)s from the pool, " "network_id %(net_id)s " "bnet %(bnet)s " "vlan %(vlan_id)d " % ({ 'cidr': gateway_ip_cidr, 'net_id': network_id, 'bnet': bnet, 'vlan_id': int(vlan_id) })) port_filters = { 'network_id': [network_id], 'device_owner': [DEVICE_OWNER_ROUTER_INTF] } port_count = self._core_plugin.get_ports_count( context, port_filters) LOG.info(_("BrocadeSVIPlugin.add_router_interface ports_count %d"), port_count) # port count is checked against 2 since the current port is already # added to db if port_count == 2: # This subnet is already part of some router # (this is not supported in this version of brocade svi plugin) LOG.error( _("BrocadeSVIPlugin: adding redundant router " "interface is not supported")) raise Exception( _("BrocadeSVIPlugin:adding redundant router " "interface is not supported")) try: switch = self._switch self._driver.create_svi(switch['address'], switch['username'], switch['password'], switch['rbridge_id'], vlan_id, gateway_ip_cidr, str(router_id)) except Exception: LOG.error( _("Failed to create Brocade resources to add router " "interface. info=%(info)s, router_id=%(router_id)s"), { "info": info, "router_id": router_id }) with excutils.save_and_reraise_exception(): with context.session.begin(subtransactions=True): self.remove_router_interface(context, router_id, interface_info) return info