def build_ri_config(self): vn_dict = self.get_vn_li_map() vn_irb_ip_map = None if self.is_gateway(): self.physical_router.evaluate_vn_irb_ip_map( set(vn_dict.keys()), 'l2_l3', 'irb', False) self.physical_router.evaluate_vn_irb_ip_map( set(vn_dict.keys()), 'l3', 'lo0', True) vn_irb_ip_map = self.physical_router.get_vn_irb_ip_map() for vn_id, interfaces in self.get_sorted_key_value_pairs(vn_dict): vn_obj = VirtualNetworkDM.get(vn_id) if (vn_obj is None or vn_obj.get_vxlan_vni() is None or vn_obj.vn_network_id is None): continue export_set = None import_set = None for ri_id in vn_obj.routing_instances: # Find the primary RI by matching the name ri_obj = RoutingInstanceDM.get(ri_id) if ri_obj is None: continue if ri_obj.fq_name[-1] == vn_obj.fq_name[-1]: vrf_name_l2 = DMUtils.make_vrf_name( vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l2') vrf_name_l3 = DMUtils.make_vrf_name( vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3') if vn_obj.route_targets: export_set = vn_obj.route_targets & ri_obj.export_targets import_set = vn_obj.route_targets & ri_obj.import_targets else: export_set = copy.copy(ri_obj.export_targets) import_set = copy.copy(ri_obj.import_targets) for ri2_id in ri_obj.routing_instances: ri2 = RoutingInstanceDM.get(ri2_id) if ri2 is None: continue import_set |= ri2.export_targets if vn_obj.get_forwarding_mode() in ['l2', 'l2_l3']: irb_ips = None if vn_obj.get_forwarding_mode( ) == 'l2_l3' and self.is_gateway(): irb_ips = vn_irb_ip_map['irb'].get(vn_id, []) ri_conf = { 'ri_name': vrf_name_l2, 'vn': vn_obj, 'is_l2': True, 'is_l2_l3': (vn_obj.get_forwarding_mode() == 'l2_l3'), 'import_targets': import_set, 'export_targets': export_set, 'prefixes': vn_obj.get_prefixes(), 'gateways': irb_ips, 'router_external': vn_obj.router_external, 'interfaces': interfaces, 'vni': vn_obj.get_vxlan_vni(), 'network_id': vn_obj.vn_network_id, 'encapsulation_priorities': GlobalVRouterConfigDM. global_encapsulation_priorities } self.add_routing_instance(ri_conf) if vn_obj.get_forwarding_mode() in ['l3', 'l2_l3']: interfaces = [] lo0_ips = None if vn_obj.get_forwarding_mode() == 'l2_l3': interfaces = [ JunosInterface( 'irb.' + str(vn_obj.vn_network_id), 'l3', 0) ] elif self.is_gateway(): lo0_ips = vn_irb_ip_map['lo0'].get(vn_id, []) is_internal_vn = True if '_contrail_lr_internal_vn_' in vn_obj.name else False is_dci_vn = True if '_contrail_dci_internal_vn_' in vn_obj.name else False ri_conf = { 'ri_name': vrf_name_l3, 'vn': vn_obj, 'is_l2': False, 'is_l2_l3': vn_obj.get_forwarding_mode() == 'l2_l3', 'import_targets': import_set, 'export_targets': export_set, 'prefixes': vn_obj.get_prefixes(), 'router_external': vn_obj.router_external, 'interfaces': interfaces, 'gateways': lo0_ips, 'network_id': vn_obj.vn_network_id } if is_dci_vn: ri_conf["prefixes"] = vn_obj.get_prefixes( self.physical_router.uuid) ri_conf['vni'] = vn_obj.get_vxlan_vni( is_dci_vn=is_dci_vn) ri_conf['is_dci_network'] = True elif is_internal_vn: ri_conf['vni'] = vn_obj.get_vxlan_vni( is_internal_vn=is_internal_vn) lr_uuid = DMUtils.extract_lr_uuid_from_internal_vn_name( vrf_name_l3) lr = LogicalRouterDM.get(lr_uuid) if lr: ri_conf[ 'router_external'] = lr.logical_router_gateway_external if lr.data_center_interconnect: ri_conf[ 'connected_dci_network'] = lr.data_center_interconnect self.add_routing_instance(ri_conf) break if export_set and\ self.physical_router.is_junos_service_ports_enabled() and\ len(vn_obj.instance_ip_map) > 0: service_port_ids = DMUtils.get_service_ports( vn_obj.vn_network_id) if not self.physical_router \ .is_service_port_id_valid(service_port_ids[0]): self._logger.error("DM can't allocate service interfaces" " for (vn, vn-id)=(%s,%s)" % (vn_obj.fq_name, vn_obj.vn_network_id)) else: vrf_name = DMUtils.make_vrf_name(vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3', True) interfaces = [] service_ports = self.physical_router.junos_service_ports.\ get('service_port') interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[0]), 'l3', 0)) interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[1]), 'l3', 0)) ri_conf = { 'ri_name': vrf_name, 'vn': vn_obj, 'import_targets': import_set, 'interfaces': interfaces, 'fip_map': vn_obj.instance_ip_map, 'network_id': vn_obj.vn_network_id, 'restrict_proxy_arp': vn_obj.router_external } self.add_routing_instance(ri_conf) return
def push_conf(self, is_delete=False): if not self.physical_router: return 0 if is_delete: return self.send_conf(is_delete=True) if not self.physical_router.bgp_router: self._logger.info("bgp router not configured for pr: " + \ self.physical_router.name) return 0 self.build_bgp_config() vn_dict = self.get_vn_li_map() self.physical_router.evaluate_vn_irb_ip_map(set(vn_dict.keys()), 'l2_l3', 'irb', False) self.physical_router.evaluate_vn_irb_ip_map(set(vn_dict.keys()), 'l3', 'lo0', True) vn_irb_ip_map = self.physical_router.get_vn_irb_ip_map() first_vrf = [] pnfs = self.config_pnf_logical_interface() pnf_dict = pnfs[0] pnf_ris = pnfs[1] for vn_id, interfaces in vn_dict.items(): vn_obj = VirtualNetworkDM.get(vn_id) if (vn_obj is None or vn_obj.get_vxlan_vni() is None or vn_obj.vn_network_id is None): continue export_set = None import_set = None for ri_id in vn_obj.routing_instances: # Find the primary RI by matching the name ri_obj = RoutingInstanceDM.get(ri_id) if ri_obj is None: continue if ri_obj.fq_name[-1] == vn_obj.fq_name[-1]: vrf_name_l2 = DMUtils.make_vrf_name( vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l2') vrf_name_l3 = DMUtils.make_vrf_name( vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3') export_set = copy.copy(ri_obj.export_targets) import_set = copy.copy(ri_obj.import_targets) for ri2_id in ri_obj.routing_instances: ri2 = RoutingInstanceDM.get(ri2_id) if ri2 in pnf_ris: first_vrf.append(ri2) if ri2 is None: continue import_set |= ri2.export_targets if vn_obj.get_forwarding_mode() in ['l2', 'l2_l3']: irb_ips = None if vn_obj.get_forwarding_mode() == 'l2_l3': irb_ips = vn_irb_ip_map['irb'].get(vn_id, []) ri_conf = {'ri_name': vrf_name_l2, 'vn': vn_obj} ri_conf['is_l2'] = True ri_conf['is_l2_l3'] = ( vn_obj.get_forwarding_mode() == 'l2_l3') ri_conf['import_targets'] = import_set ri_conf['export_targets'] = export_set ri_conf['prefixes'] = vn_obj.get_prefixes() ri_conf['gateways'] = irb_ips ri_conf['router_external'] = vn_obj.router_external ri_conf['interfaces'] = interfaces ri_conf['vni'] = vn_obj.get_vxlan_vni() ri_conf['network_id'] = vn_obj.vn_network_id ri_conf['highest_enapsulation_priority'] = \ GlobalVRouterConfigDM.global_encapsulation_priority self.add_routing_instance(ri_conf) if vn_obj.get_forwarding_mode() in ['l3', 'l2_l3']: interfaces = [] lo0_ips = None if vn_obj.get_forwarding_mode() == 'l2_l3': interfaces = [ JunosInterface( 'irb.' + str(vn_obj.vn_network_id), 'l3', 0) ] else: lo0_ips = vn_irb_ip_map['lo0'].get(vn_id, []) ri_conf = {'ri_name': vrf_name_l3, 'vn': vn_obj} ri_conf['is_l2_l3'] = ( vn_obj.get_forwarding_mode() == 'l2_l3') ri_conf['import_targets'] = import_set ri_conf['export_targets'] = export_set ri_conf['prefixes'] = vn_obj.get_prefixes() ri_conf['router_external'] = vn_obj.router_external ri_conf['interfaces'] = interfaces ri_conf['gateways'] = lo0_ips ri_conf['network_id'] = vn_obj.vn_network_id self.add_routing_instance(ri_conf) break if (export_set is not None and self.physical_router.is_junos_service_ports_enabled() and len(vn_obj.instance_ip_map) > 0): service_port_ids = DMUtils.get_service_ports( vn_obj.vn_network_id) if self.physical_router.is_service_port_id_valid( service_port_ids[0]) == False: self._logger.error( "DM can't allocate service interfaces for " "(vn, vn-id)=(%s,%s)" % (vn_obj.fq_name, vn_obj.vn_network_id)) else: vrf_name = DMUtils.make_vrf_name(vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3', True) interfaces = [] service_ports = self.physical_router.junos_service_ports.get( 'service_port') interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[0]), 'l3', 0)) interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[1]), 'l3', 0)) ri_conf = {'ri_name': vrf_name, 'vn': vn_obj} ri_conf['import_targets'] = import_set ri_conf['interfaces'] = interfaces ri_conf['fip_map'] = vn_obj.instance_ip_map ri_conf['network_id'] = vn_obj.vn_network_id ri_conf['restrict_proxy_arp'] = vn_obj.router_external self.add_routing_instance(ri_conf) # Add PNF ri configuration self.add_pnf_vrfs(first_vrf, pnf_dict, pnf_ris) self.set_as_config() self.set_route_targets_config() self.set_bgp_group_config() return self.send_conf()
def build_ri_config(self): vn_dict = self.get_vn_li_map() vn_irb_ip_map = None if self.is_gateway(): self.physical_router.evaluate_vn_irb_ip_map(set(vn_dict.keys()), 'l2_l3', 'irb', False) self.physical_router.evaluate_vn_irb_ip_map(set(vn_dict.keys()), 'l3', 'lo0', True) vn_irb_ip_map = self.physical_router.get_vn_irb_ip_map() for vn_id, interfaces in self.get_sorted_key_value_pairs(vn_dict): vn_obj = VirtualNetworkDM.get(vn_id) if (vn_obj is None or vn_obj.get_vxlan_vni() is None or vn_obj.vn_network_id is None): continue export_set = None import_set = None for ri_id in vn_obj.routing_instances: # Find the primary RI by matching the name ri_obj = RoutingInstanceDM.get(ri_id) if ri_obj is None: continue if ri_obj.fq_name[-1] == vn_obj.fq_name[-1]: vrf_name_l2 = DMUtils.make_vrf_name(vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l2') vrf_name_l3 = DMUtils.make_vrf_name(vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3') if vn_obj.route_targets: export_set = vn_obj.route_targets & ri_obj.export_targets import_set = vn_obj.route_targets & ri_obj.import_targets else: export_set = copy.copy(ri_obj.export_targets) import_set = copy.copy(ri_obj.import_targets) for ri2_id in ri_obj.routing_instances: ri2 = RoutingInstanceDM.get(ri2_id) if ri2 is None: continue import_set |= ri2.export_targets if vn_obj.get_forwarding_mode() in ['l2', 'l2_l3']: irb_ips = None if vn_obj.get_forwarding_mode() == 'l2_l3' and self.is_gateway(): irb_ips = vn_irb_ip_map['irb'].get(vn_id, []) ri_conf = {'ri_name': vrf_name_l2, 'vn': vn_obj, 'is_l2': True, 'is_l2_l3': ( vn_obj.get_forwarding_mode() == 'l2_l3'), 'import_targets': import_set, 'export_targets': export_set, 'prefixes': vn_obj.get_prefixes(), 'gateways': irb_ips, 'router_external': vn_obj.router_external, 'interfaces': interfaces, 'vni': vn_obj.get_vxlan_vni(), 'network_id': vn_obj.vn_network_id, 'encapsulation_priorities': GlobalVRouterConfigDM. global_encapsulation_priorities} self.add_routing_instance(ri_conf) if vn_obj.get_forwarding_mode() in ['l3', 'l2_l3']: interfaces = [] lo0_ips = None if vn_obj.get_forwarding_mode() == 'l2_l3': interfaces = [ JunosInterface( 'irb.' + str(vn_obj.vn_network_id), 'l3', 0)] elif self.is_gateway(): lo0_ips = vn_irb_ip_map['lo0'].get(vn_id, []) is_internal_vn = True if '_contrail_lr_internal_vn_' in vn_obj.name else False is_dci_vn = True if '_contrail_dci_internal_vn_' in vn_obj.name else False ri_conf = {'ri_name': vrf_name_l3, 'vn': vn_obj, 'is_l2': False, 'is_l2_l3': vn_obj.get_forwarding_mode() == 'l2_l3', 'import_targets': import_set, 'export_targets': export_set, 'prefixes': vn_obj.get_prefixes(), 'router_external': vn_obj.router_external, 'interfaces': interfaces, 'gateways': lo0_ips, 'network_id': vn_obj.vn_network_id} if is_dci_vn: ri_conf["prefixes"] = vn_obj.get_prefixes(self.physical_router.uuid) ri_conf['vni'] = vn_obj.get_vxlan_vni(is_dci_vn = is_dci_vn) ri_conf['is_dci_network'] = True elif is_internal_vn: ri_conf['vni'] = vn_obj.get_vxlan_vni(is_internal_vn = is_internal_vn) lr_uuid = DMUtils.extract_lr_uuid_from_internal_vn_name(vrf_name_l3) lr = LogicalRouterDM.get(lr_uuid) if lr: ri_conf['router_external'] = lr.logical_router_gateway_external if lr.data_center_interconnect: ri_conf['connected_dci_network'] = lr.data_center_interconnect self.add_routing_instance(ri_conf) break if export_set and\ self.physical_router.is_junos_service_ports_enabled() and\ len(vn_obj.instance_ip_map) > 0: service_port_ids = DMUtils.get_service_ports( vn_obj.vn_network_id) if not self.physical_router \ .is_service_port_id_valid(service_port_ids[0]): self._logger.error("DM can't allocate service interfaces" " for (vn, vn-id)=(%s,%s)" % (vn_obj.fq_name, vn_obj.vn_network_id)) else: vrf_name = DMUtils.make_vrf_name(vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3', True) interfaces = [] service_ports = self.physical_router.junos_service_ports.\ get('service_port') interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[0]), 'l3', 0)) interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[1]), 'l3', 0)) ri_conf = {'ri_name': vrf_name, 'vn': vn_obj, 'import_targets': import_set, 'interfaces': interfaces, 'fip_map': vn_obj.instance_ip_map, 'network_id': vn_obj.vn_network_id, 'restrict_proxy_arp': vn_obj.router_external} self.add_routing_instance(ri_conf) return
def push_conf(self, is_delete=False): if not self.physical_router: return 0 if is_delete: return self.send_conf(is_delete=True) if not self.ensure_bgp_config(): return 0 self.build_bgp_config() vn_dict = self.get_vn_li_map() self.physical_router.evaluate_vn_irb_ip_map(set(vn_dict.keys()), 'l2_l3', 'irb', False) self.physical_router.evaluate_vn_irb_ip_map(set(vn_dict.keys()), 'l3', 'lo0', True) vn_irb_ip_map = self.physical_router.get_vn_irb_ip_map() first_vrf = [] pnfs = self.config_pnf_logical_interface() pnf_dict = pnfs[0] pnf_ris = pnfs[1] for vn_id, interfaces in vn_dict.items(): vn_obj = VirtualNetworkDM.get(vn_id) if (vn_obj is None or vn_obj.get_vxlan_vni() is None or vn_obj.vn_network_id is None): continue export_set = None import_set = None for ri_id in vn_obj.routing_instances: # Find the primary RI by matching the name ri_obj = RoutingInstanceDM.get(ri_id) if ri_obj is None: continue if ri_obj.fq_name[-1] == vn_obj.fq_name[-1]: vrf_name_l2 = DMUtils.make_vrf_name(vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l2') vrf_name_l3 = DMUtils.make_vrf_name(vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3') export_set = copy.copy(ri_obj.export_targets) import_set = copy.copy(ri_obj.import_targets) for ri2_id in ri_obj.routing_instances: ri2 = RoutingInstanceDM.get(ri2_id) if ri2 in pnf_ris: first_vrf.append(ri2) if ri2 is None: continue import_set |= ri2.export_targets if vn_obj.get_forwarding_mode() in ['l2', 'l2_l3']: irb_ips = None if vn_obj.get_forwarding_mode() == 'l2_l3': irb_ips = vn_irb_ip_map['irb'].get(vn_id, []) ri_conf = { 'ri_name': vrf_name_l2, 'vn': vn_obj } ri_conf['is_l2'] = True ri_conf['is_l2_l3'] = (vn_obj.get_forwarding_mode() == 'l2_l3') ri_conf['import_targets'] = import_set ri_conf['export_targets'] = export_set ri_conf['prefixes'] = vn_obj.get_prefixes() ri_conf['gateways'] = irb_ips ri_conf['router_external'] = vn_obj.router_external ri_conf['interfaces'] = interfaces ri_conf['vni'] = vn_obj.get_vxlan_vni() ri_conf['network_id'] = vn_obj.vn_network_id ri_conf['highest_enapsulation_priority'] = \ GlobalVRouterConfigDM.global_encapsulation_priority self.add_routing_instance(ri_conf) if vn_obj.get_forwarding_mode() in ['l3', 'l2_l3']: interfaces = [] lo0_ips = None if vn_obj.get_forwarding_mode() == 'l2_l3': interfaces = [ JunosInterface( 'irb.' + str(vn_obj.vn_network_id), 'l3', 0)] else: lo0_ips = vn_irb_ip_map['lo0'].get(vn_id, []) ri_conf = { 'ri_name': vrf_name_l3, 'vn': vn_obj } ri_conf['is_l2_l3'] = (vn_obj.get_forwarding_mode() == 'l2_l3') ri_conf['import_targets'] = import_set ri_conf['export_targets'] = export_set ri_conf['prefixes'] = vn_obj.get_prefixes() ri_conf['router_external'] = vn_obj.router_external ri_conf['interfaces'] = interfaces ri_conf['gateways'] = lo0_ips ri_conf['network_id'] = vn_obj.vn_network_id self.add_routing_instance(ri_conf) break if (export_set is not None and self.physical_router.is_junos_service_ports_enabled() and len(vn_obj.instance_ip_map) > 0): service_port_ids = DMUtils.get_service_ports(vn_obj.vn_network_id) if self.physical_router.is_service_port_id_valid(service_port_ids[0]) == False: self._logger.error("DM can't allocate service interfaces for " "(vn, vn-id)=(%s,%s)" % ( vn_obj.fq_name, vn_obj.vn_network_id)) else: vrf_name = DMUtils.make_vrf_name(vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3', True) interfaces = [] service_ports = self.physical_router.junos_service_ports.get( 'service_port') interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[0]), 'l3', 0)) interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[1]), 'l3', 0)) ri_conf = { 'ri_name': vrf_name, 'vn': vn_obj } ri_conf['import_targets'] = import_set ri_conf['interfaces'] = interfaces ri_conf['fip_map'] = vn_obj.instance_ip_map ri_conf['network_id'] = vn_obj.vn_network_id ri_conf['restrict_proxy_arp'] = vn_obj.router_external self.add_routing_instance(ri_conf) # Add PNF ri configuration self.add_pnf_vrfs(first_vrf, pnf_dict, pnf_ris) self.set_as_config() self.set_route_targets_config() self.set_bgp_group_config() return self.send_conf()
def build_ri_config(self): if not self.is_spine(): esi_map = self.get_ae_alloc_esi_map() self.physical_router.evaluate_ae_id_map(esi_map) self.build_ae_config(esi_map) vn_dict = self.get_vn_li_map() vn_irb_ip_map = None if self.is_spine(): self.physical_router.evaluate_vn_irb_ip_map( set(vn_dict.keys()), 'l2_l3', 'irb', False) self.physical_router.evaluate_vn_irb_ip_map( set(vn_dict.keys()), 'l3', 'lo0', True) vn_irb_ip_map = self.physical_router.get_vn_irb_ip_map() for vn_id, interfaces in vn_dict.items(): vn_obj = VirtualNetworkDM.get(vn_id) if (vn_obj is None or vn_obj.get_vxlan_vni() is None or vn_obj.vn_network_id is None): continue export_set = None import_set = None for ri_id in vn_obj.routing_instances: # Find the primary RI by matching the name ri_obj = RoutingInstanceDM.get(ri_id) if ri_obj is None: continue if ri_obj.fq_name[-1] == vn_obj.fq_name[-1]: vrf_name_l2 = DMUtils.make_vrf_name( vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l2') vrf_name_l3 = DMUtils.make_vrf_name( vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3') export_set = copy.copy(ri_obj.export_targets) import_set = copy.copy(ri_obj.import_targets) if self.is_spine(): for ri2_id in ri_obj.routing_instances: ri2 = RoutingInstanceDM.get(ri2_id) if ri2 is None: continue import_set |= ri2.export_targets if vn_obj.get_forwarding_mode() in ['l2', 'l2_l3']: irb_ips = None if vn_obj.get_forwarding_mode( ) == 'l2_l3' and self.is_spine(): irb_ips = vn_irb_ip_map['irb'].get(vn_id, []) ri_conf = { 'ri_name': vrf_name_l2, 'vn': vn_obj, 'is_l2': True, 'is_l2_l3': (vn_obj.get_forwarding_mode() == 'l2_l3'), 'import_targets': import_set, 'prefixes': vn_obj.get_prefixes(), 'gateways': irb_ips, 'router_external': vn_obj.router_external, 'interfaces': interfaces, 'vni': vn_obj.get_vxlan_vni(), 'network_id': vn_obj.vn_network_id, 'highest_encapsulation_priority': GlobalVRouterConfigDM.global_encapsulation_priority } if self.is_spine(): ri_conf['export_targets'] = export_set self.add_routing_instance(ri_conf) if vn_obj.get_forwarding_mode() in ['l3', 'l2_l3']: interfaces = [] lo0_ips = None if vn_obj.get_forwarding_mode() == 'l2_l3': interfaces = [ JunosInterface( 'irb.' + str(vn_obj.vn_network_id), 'l3', 0) ] elif self.is_spine(): lo0_ips = vn_irb_ip_map['lo0'].get(vn_id, []) ri_conf = { 'ri_name': vrf_name_l3, 'vn': vn_obj, 'is_l2': False, 'is_l2_l3': vn_obj.get_forwarding_mode() == 'l2_l3', 'import_targets': import_set, 'export_targets': export_set, 'prefixes': vn_obj.get_prefixes(), 'router_external': vn_obj.router_external, 'interfaces': interfaces, 'gateways': lo0_ips, 'network_id': vn_obj.vn_network_id } self.add_routing_instance(ri_conf) break if export_set and\ self.physical_router.is_junos_service_ports_enabled() and\ len(vn_obj.instance_ip_map) > 0: service_port_ids = DMUtils.get_service_ports( vn_obj.vn_network_id) if not self.physical_router \ .is_service_port_id_valid(service_port_ids[0]): self._logger.error("DM can't allocate service interfaces" " for (vn, vn-id)=(%s,%s)" % (vn_obj.fq_name, vn_obj.vn_network_id)) else: vrf_name = DMUtils.make_vrf_name(vn_obj.fq_name[-1], vn_obj.vn_network_id, 'l3', True) interfaces = [] service_ports = self.physical_router.junos_service_ports.\ get('service_port') interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[0]), 'l3', 0)) interfaces.append( JunosInterface( service_ports[0] + "." + str(service_port_ids[1]), 'l3', 0)) ri_conf = { 'ri_name': vrf_name, 'vn': vn_obj, 'import_targets': import_set, 'interfaces': interfaces, 'fip_map': vn_obj.instance_ip_map, 'network_id': vn_obj.vn_network_id, 'restrict_proxy_arp': vn_obj.router_external } self.add_routing_instance(ri_conf) return