def create_nuage_redirect_target(self, context, nuage_redirect_target): redirect_target = nuage_redirect_target['nuage_redirect_target'] has_subnet_id = is_attr_set(redirect_target.get('subnet_id')) has_router_id = is_attr_set(redirect_target.get('router_id')) if not has_subnet_id and not has_router_id: msg = _('subnet_id or router_id should be specified') raise n_exc.BadRequest(resource='subnets', msg=msg) subnet_mapping = nuagedb.get_subnet_l2dom_by_id( context.session, redirect_target.get('subnet_id')) or {} router_mapping = nuagedb.get_ent_rtr_mapping_by_rtrid( context.session, redirect_target.get('router_id')) or {} if not subnet_mapping and not router_mapping: raise ext_rtarget.RedirectTargetNoDomainOrL2Domain() if has_subnet_id: subnet = self.core_plugin.get_subnet(context, redirect_target['subnet_id']) if subnet: redirect_target['external_id'] = \ cms_id_helper.get_vsd_external_id(subnet['network_id']) try: nuage_redirect_target = self.vsdclient\ .create_nuage_redirect_target( redirect_target, l2dom_id=subnet_mapping.get('nuage_subnet_id'), domain_id=router_mapping.get('nuage_router_id')) except Exception as e: if getattr(e, "vsd_code", None) == '7016': msg = _("A Nuage redirect target with name '%s' already " "exists") % redirect_target['name'] raise nuage_exc.NuageBadRequest(msg=msg) raise return self._make_redirect_target_dict(nuage_redirect_target, context=context)
def create_nuage_redirect_target(self, context, nuage_redirect_target): redirect_target = nuage_redirect_target['nuage_redirect_target'] has_subnet_id = is_attr_set(redirect_target.get('subnet_id')) has_router_id = is_attr_set(redirect_target.get('router_id')) if not has_subnet_id and not has_router_id: msg = _('subnet_id or router_id should be specified') raise n_exc.BadRequest(resource='subnets', msg=msg) subnet_mapping = nuagedb.get_subnet_l2dom_by_id( context.session, redirect_target.get('subnet_id')) or {} router_mapping = nuagedb.get_ent_rtr_mapping_by_rtrid( context.session, redirect_target.get('router_id')) or {} if not subnet_mapping and not router_mapping: raise ext_rtarget.RedirectTargetNoDomainOrL2Domain() try: nuage_redirect_target = self.nuageclient\ .create_nuage_redirect_target( redirect_target, subnet_id=subnet_mapping.get('nuage_subnet_id'), domain_id=router_mapping.get('nuage_router_id')) except Exception as e: if getattr(e, "vsd_code", None) == '7016': msg = _("A Nuage redirect target with name '%s' already " "exists") % redirect_target['name'] raise nuage_exc.NuageBadRequest(msg=msg) raise e return self._make_redirect_target_dict(nuage_redirect_target, context=context)
def _create_vips(self, context, subnet_mapping, port, nuage_vport): nuage_vip_dict = dict() enable_spoofing = False vsd_subnet = self.vsdclient.get_nuage_subnet_by_id(subnet_mapping, required=True) fips_per_vip = nuagedb.get_floatingip_per_vip_in_network( context.session, port['network_id']) fips_per_vip = { vip: self._make_fip_dict_with_subnet_id(fip) for vip, fip in six.iteritems(fips_per_vip) } for allowed_addr_pair in port[addr_pair.ADDRESS_PAIRS]: vip = allowed_addr_pair['ip_address'] mac = allowed_addr_pair['mac_address'] os_fip = fips_per_vip.get(vip) if os_fip: vsd_l3domain_id = nuagedb.get_ent_rtr_mapping_by_rtrid( context.session, os_fip['router_id'])['nuage_router_id'] else: vsd_l3domain_id = None params = { 'vip': vip, 'mac': mac, 'subnet_id': subnet_mapping['nuage_subnet_id'], 'vsd_subnet': vsd_subnet, 'vport_id': nuage_vport['ID'], 'port_ips': [ip['ip_address'] for ip in port['fixed_ips']], 'port_mac': port['mac_address'], 'externalID': port['id'], 'os_fip': os_fip, 'vsd_l3domain_id': vsd_l3domain_id } try: enable_spoofing |= self.vsdclient.create_vip(params) nuage_vip_dict[params['vip']] = params['mac'] except Exception as e: with excutils.save_and_reraise_exception(): LOG.error( "Error in creating vip for ip %(vip)s and mac " "%(mac)s: %(err)s", { 'vip': vip, 'mac': mac, 'err': e.message }) self.vsdclient.delete_vips(nuage_vport['ID'], nuage_vip_dict, nuage_vip_dict.keys()) self.vsdclient.update_mac_spoofing_on_vport( nuage_vport['ID'], constants.ENABLED if enable_spoofing else constants.INHERITED)
def get_nuage_redirect_targets(self, context, filters=None, fields=None): rtargets = [] if filters.get('subnet'): params = {} subnet_mapping = nuagedb.get_subnet_l2dom_by_id( context.session, filters['subnet'][0]) if not subnet_mapping: return [] if self._is_vsd_mgd(subnet_mapping) or self._is_l3(subnet_mapping): domain_id = self.vsdclient.get_router_by_domain_subnet_id( subnet_mapping['nuage_subnet_id']) if domain_id: params['parentID'] = domain_id elif self._is_vsd_mgd(subnet_mapping): params['parentID'] = subnet_mapping['nuage_subnet_id'] else: return [] else: params['parentID'] = subnet_mapping['nuage_subnet_id'] rtargets = self.vsdclient.get_nuage_redirect_targets(params) elif filters.get('router'): router_mapping = nuagedb.get_ent_rtr_mapping_by_rtrid( context.session, filters['router'][0]) if not router_mapping: msg = (_("No router mapping found for router %s") % filters['router'][0]) raise nuage_exc.NuageBadRequest(msg=msg) rtargets = self.vsdclient.get_nuage_redirect_targets( {'parentID': router_mapping['nuage_router_id']}) elif filters.get('id'): rtargets = self.vsdclient.get_nuage_redirect_targets( {'ID': filters.get('id')[0]}) elif filters.get('name'): rtargets = self.vsdclient.get_nuage_redirect_targets( {'name': filters.get('name')[0]}) elif filters.get('ports'): rtargets = (rtarget for port_id in filters['ports'] for rtarget in self.get_nuage_redirect_targets_by_port( port_id, context)) return [ self._make_redirect_target_dict(rtarget, context, fields) for rtarget in rtargets ]
def get_nuage_redirect_targets(self, context, filters=None, fields=None): # get all redirect targets params = {} if filters.get('subnet'): subnet_mapping = nuagedb.get_subnet_l2dom_by_id( context.session, filters['subnet'][0]) if not subnet_mapping: return [] if (subnet_mapping['nuage_managed_subnet'] or not subnet_mapping['nuage_l2dom_tmplt_id']): domain_id = self.nuageclient.get_router_by_domain_subnet_id( subnet_mapping['nuage_subnet_id']) if domain_id: params['parentID'] = domain_id elif subnet_mapping['nuage_managed_subnet']: params['parentID'] = subnet_mapping['nuage_subnet_id'] else: return [] else: params['parentID'] = subnet_mapping['nuage_subnet_id'] elif filters.get('router'): router_mapping = nuagedb.get_ent_rtr_mapping_by_rtrid( context.session, filters['router'][0]) if not router_mapping: msg = (_("No router mapping found for router %s") % filters['router'][0]) raise nuage_exc.NuageBadRequest(msg=msg) params['parentID'] = router_mapping['nuage_router_id'] elif filters.get('id'): params['ID'] = filters.get('id')[0] elif filters.get('name'): params['name'] = filters.get('name')[0] rtargets = self.nuageclient.get_nuage_redirect_targets(params) return [ self._make_redirect_target_dict(rtarget, context, fields) for rtarget in rtargets ]
def get_nuage_redirect_targets(self, context, filters=None, fields=None): # get all redirect targets params = {} if filters.get('subnet'): subnet_mapping = nuagedb.get_subnet_l2dom_by_id( context.session, filters['subnet'][0]) if not subnet_mapping: return [] if (subnet_mapping['nuage_managed_subnet'] or not subnet_mapping['nuage_l2dom_tmplt_id']): domain_id = self.nuageclient.get_router_by_domain_subnet_id( subnet_mapping['nuage_subnet_id']) if domain_id: params['parentID'] = domain_id elif subnet_mapping['nuage_managed_subnet']: params['parentID'] = subnet_mapping['nuage_subnet_id'] else: return [] else: params['parentID'] = subnet_mapping['nuage_subnet_id'] elif filters.get('router'): router_mapping = nuagedb.get_ent_rtr_mapping_by_rtrid( context.session, filters['router'][0]) if not router_mapping: msg = (_("No router mapping found for router %s") % filters['router'][0]) raise nuage_exc.NuageBadRequest(msg=msg) params['parentID'] = router_mapping['nuage_router_id'] elif filters.get('id'): params['ID'] = filters.get('id')[0] elif filters.get('name'): params['name'] = filters.get('name')[0] rtargets = self.nuageclient.get_nuage_redirect_targets(params) return [self._make_redirect_target_dict(rtarget, context, fields) for rtarget in rtargets]
def _create_vips(self, context, subnet_mapping, port, nuage_vport): port_vip_dict = nuage_vip_dict = dict() enable_spoofing = False vsd_subnet = self._find_vsd_subnet(context, subnet_mapping) fips_per_vip = nuagedb.get_floatingip_per_vip_in_network( context.session, port['network_id'], self.get_device_owners_vip()) fips_per_vip = { vip: self._make_fip_dict_with_subnet_id(fip) for vip, fip in six.iteritems(fips_per_vip) } if (port.get(constants.VIPS_FOR_PORT_IPS) and self._is_l3(subnet_mapping)): for vip_ip in port.get(constants.VIPS_FOR_PORT_IPS): params = { 'vip': vip_ip, 'mac': port['mac_address'], 'subnet_id': subnet_mapping['nuage_subnet_id'], 'vsd_subnet': vsd_subnet, 'vport_id': nuage_vport['ID'], 'port_ips': [], 'port_mac': '', 'externalID': port['id'], 'os_fip': None, 'vsd_l3domain_id': None } try: enable_spoofing |= self.vsdclient.create_vip(params) port_vip_dict[params['vip']] = params['mac'] except Exception as e: if not self._get_port_from_neutron(context, port): return with excutils.save_and_reraise_exception(): LOG.error( "Error in creating vip for ip %(vip)s and mac " "%(mac)s: %(err)s", { 'vip': vip_ip, 'mac': port['mac_address'], 'err': str(e) }) self.vsdclient.delete_vips(nuage_vport['ID'], port_vip_dict, port_vip_dict) for allowed_addr_pair in port[addr_pair.ADDRESS_PAIRS]: vip = allowed_addr_pair['ip_address'] mac = allowed_addr_pair['mac_address'] os_fip = fips_per_vip.get(vip) if os_fip: vsd_l3domain_id = nuagedb.get_ent_rtr_mapping_by_rtrid( context.session, os_fip['router_id'])['nuage_router_id'] subnet_mapping = nuagedb.get_subnet_l2dom_by_id( context.session, os_fip['fip_subnet_id']) os_fip['vsd_fip_subnet_id'] = subnet_mapping['nuage_subnet_id'] else: vsd_l3domain_id = None params = { 'vip': vip, 'mac': mac, 'subnet_id': subnet_mapping['nuage_subnet_id'], 'vsd_subnet': vsd_subnet, 'vport_id': nuage_vport['ID'], 'port_ips': [ip['ip_address'] for ip in port['fixed_ips']], 'port_mac': port['mac_address'], 'externalID': port['id'], 'os_fip': os_fip, 'vsd_l3domain_id': vsd_l3domain_id } try: enable_spoofing |= self.vsdclient.create_vip(params) nuage_vip_dict[params['vip']] = params['mac'] except Exception as e: if not self._get_port_from_neutron(context, port): return with excutils.save_and_reraise_exception(): LOG.error( "Error in creating vip for ip %(vip)s and mac " "%(mac)s: %(err)s", { 'vip': vip, 'mac': mac, 'err': str(e) }) self.vsdclient.delete_vips(nuage_vport['ID'], nuage_vip_dict, nuage_vip_dict) if port[portsecurity.PORTSECURITY]: try: self.vsdclient.update_mac_spoofing_on_vport( nuage_vport['ID'], constants.ENABLED if enable_spoofing else constants.DISABLED) except Exception: if not self._get_port_from_neutron(context, port): return raise