def create_lr(self, lrname, vns, prs, vmis): lr_fq_name = ['default-domain', 'default-project', lrname] lr = LogicalRouter(fq_name=lr_fq_name, parent_type='project', logical_router_type='vxlan-routing') for pr in prs: probj = self._vnc_lib.physical_router_read(id=pr.get_uuid()) lr.add_physical_router(probj) for vn in vns: vminame = 'vmi-lr-to-vn' + vn.get_display_name() fq_name1 = ['default-domain', 'default-project', vminame] vmi = VirtualMachineInterface(fq_name=fq_name1, parent_type='project') vmi.set_virtual_network(vn) self._vnc_lib.virtual_machine_interface_create(vmi) vmis[vminame] = vmi lr.add_virtual_machine_interface(vmi) lr.set_logical_router_type('vxlan-routing') lr_uuid = self._vnc_lib.logical_router_create(lr) # make sure internal is created try: self.check_lr_internal_vn_state(lr) except Exception: pass return lr, self._vnc_lib.logical_router_read(id=lr_uuid)
def test_vn_internal_lr(self): proj_obj = self._vnc_lib.project_read( fq_name=['default-domain', 'default-project']) proj_obj.set_vxlan_routing(True) self._vnc_lib.project_update(proj_obj) lr_name = self.id() + '_logicalrouter' lr = LogicalRouter(lr_name) rtgt_list = RouteTargetList(route_target=['target:3:1']) lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_create(lr) lr_read = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name()) lr_target = self.check_lr_target(lr_read.get_fq_name()) ivn_name = get_lr_internal_vn_name(lr_read.uuid) lr_ivn_read = self._vnc_lib.virtual_network_read( fq_name=proj_obj.get_fq_name()+[ivn_name]) ri_name = self.get_ri_name(lr_ivn_read) self.check_route_target_in_routing_instance( ri_name,rtgt_list.get_route_target()) # change RT and see it is getting updated rtgt_list.delete_route_target('target:3:1') rtgt_list.add_route_target('target:4:1') lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_update(lr) self.check_route_target_in_routing_instance( ri_name,rtgt_list.get_route_target()) # cleanup self._vnc_lib.logical_router_delete(id=lr.uuid) self.check_lr_is_deleted(uuid=lr.uuid) self.check_vn_is_deleted(uuid=lr_ivn_read.uuid)
def test_asn(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') ident_name = self.get_obj_imid(vn1_obj) gevent.sleep(2) ifmap_ident = self.assertThat(FakeIfmapClient._graph, Contains(ident_name)) self.check_ri_asn(self.get_ri_name(vn1_obj), 'target:64512:8000001') # create router1 r1_name = self.id() + 'router1' router1 = self.create_bgp_router(r1_name, 'contrail') self.check_bgp_asn(router1.get_fq_name(), 64512) # create virtual machine interface vmi_name = self.id() + 'vmi1' vmi = VirtualMachineInterface( vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) # create logical router lr_name = self.id() + 'lr1' lr = LogicalRouter(lr_name) lr.add_virtual_machine_interface(vmi) self._vnc_lib.logical_router_create(lr) self.check_lr_asn(lr.get_fq_name(), 'target:64512:8000002') #update global system config but dont change asn value for equality path gs = self._vnc_lib.global_system_config_read( fq_name=['default-global-system-config']) gs.set_autonomous_system(64512) self._vnc_lib.global_system_config_update(gs) # check route targets self.check_ri_asn(self.get_ri_name(vn1_obj), 'target:64512:8000001') self.check_bgp_asn(router1.get_fq_name(), 64512) self.check_lr_asn(lr.get_fq_name(), 'target:64512:8000002') #update ASN value gs = self._vnc_lib.global_system_config_read( fq_name=[u'default-global-system-config']) gs.set_autonomous_system(50000) self._vnc_lib.global_system_config_update(gs) # check new route targets self.check_ri_asn(self.get_ri_name(vn1_obj), 'target:50000:8000001') self.check_bgp_asn(router1.get_fq_name(), 50000) self.check_lr_asn(lr.get_fq_name(), 'target:50000:8000002') self._vnc_lib.logical_router_delete(id=lr.uuid) self._vnc_lib.virtual_machine_interface_delete(id=vmi.uuid) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self.check_ri_is_deleted(fq_name=vn1_obj.fq_name + [vn1_obj.name]) self._vnc_lib.bgp_router_delete(id=router1.uuid)
def test_asn(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') self.assertTill(self.vnc_db_has_ident, obj=vn1_obj) ri_target = self.check_ri_target(self.get_ri_name(vn1_obj)) # create router1 r1_name = self.id() + 'router1' router1 = self.create_bgp_router(r1_name, 'contrail') self.check_bgp_asn(router1.get_fq_name(), 64512) # create virtual machine interface vmi_name = self.id() + 'vmi1' vmi = VirtualMachineInterface( vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) # create logical router lr_name = self.id() + 'lr1' lr = LogicalRouter(lr_name) lr.add_virtual_machine_interface(vmi) self._vnc_lib.logical_router_create(lr) lr_target = self.check_lr_target(lr.get_fq_name()) #update global system config but dont change asn value for equality path gs = self._vnc_lib.global_system_config_read( fq_name=['default-global-system-config']) gs.set_autonomous_system(64512) self._vnc_lib.global_system_config_update(gs) # check route targets self.check_ri_target(self.get_ri_name(vn1_obj), ri_target) self.check_bgp_asn(router1.get_fq_name(), 64512) self.check_lr_target(lr.get_fq_name(), lr_target) #update ASN value gs = self._vnc_lib.global_system_config_read( fq_name=[u'default-global-system-config']) gs.set_autonomous_system(50000) self._vnc_lib.global_system_config_update(gs) # check new route targets self.check_ri_target(self.get_ri_name(vn1_obj), ri_target.replace('64512', '50000')) self.check_bgp_asn(router1.get_fq_name(), 50000) self.check_lr_target(lr.get_fq_name(), lr_target.replace('64512', '50000')) self._vnc_lib.logical_router_delete(id=lr.uuid) self._vnc_lib.virtual_machine_interface_delete(id=vmi.uuid) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self.check_ri_is_deleted(fq_name=vn1_obj.fq_name + [vn1_obj.name]) self._vnc_lib.bgp_router_delete(id=router1.uuid)
def test_asn(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') ident_name = self.get_obj_imid(vn1_obj) gevent.sleep(2) ifmap_ident = self.assertThat(FakeIfmapClient._graph, Contains(ident_name)) self.check_ri_asn(self.get_ri_name(vn1_obj), 'target:64512:8000001') # create router1 r1_name = self.id() + 'router1' router1 = self.create_bgp_router(r1_name, 'contrail') self.check_bgp_asn(router1.get_fq_name(), 64512) # create virtual machine interface vmi_name = self.id() + 'vmi1' vmi = VirtualMachineInterface(vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) # create logical router lr_name = self.id() + 'lr1' lr = LogicalRouter(lr_name) lr.add_virtual_machine_interface(vmi) self._vnc_lib.logical_router_create(lr) self.check_lr_asn(lr.get_fq_name(), 'target:64512:8000002') #update global system config but dont change asn value for equality path gs = self._vnc_lib.global_system_config_read( fq_name=['default-global-system-config']) gs.set_autonomous_system(64512) self._vnc_lib.global_system_config_update(gs) # check route targets self.check_ri_asn(self.get_ri_name(vn1_obj), 'target:64512:8000001') self.check_bgp_asn(router1.get_fq_name(), 64512) self.check_lr_asn(lr.get_fq_name(), 'target:64512:8000002') #update ASN value gs = self._vnc_lib.global_system_config_read( fq_name=[u'default-global-system-config']) gs.set_autonomous_system(50000) self._vnc_lib.global_system_config_update(gs) # check new route targets self.check_ri_asn(self.get_ri_name(vn1_obj), 'target:50000:8000001') self.check_bgp_asn(router1.get_fq_name(), 50000) self.check_lr_asn(lr.get_fq_name(), 'target:50000:8000002') self._vnc_lib.logical_router_delete(id=lr.uuid) self._vnc_lib.virtual_machine_interface_delete(id=vmi.uuid) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self.check_ri_is_deleted(fq_name=vn1_obj.fq_name+[vn1_obj.name]) self._vnc_lib.bgp_router_delete(id=router1.uuid)
def test_asn(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') self.assertTill(self.vnc_db_has_ident, obj=vn1_obj) ri_target = self.check_ri_target(self.get_ri_name(vn1_obj)) # create router1 r1_name = self.id() + 'router1' router1 = self.create_bgp_router(r1_name, 'contrail') self.check_bgp_asn(router1.get_fq_name(), 64512) # create virtual machine interface vmi_name = self.id() + 'vmi1' vmi = VirtualMachineInterface(vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) # create logical router lr_name = self.id() + 'lr1' lr = LogicalRouter(lr_name) lr.add_virtual_machine_interface(vmi) self._vnc_lib.logical_router_create(lr) lr_target = self.check_lr_target(lr.get_fq_name()) #update global system config but dont change asn value for equality path gs = self._vnc_lib.global_system_config_read( fq_name=['default-global-system-config']) gs.set_autonomous_system(64512) self._vnc_lib.global_system_config_update(gs) # check route targets self.check_ri_target(self.get_ri_name(vn1_obj), ri_target) self.check_bgp_asn(router1.get_fq_name(), 64512) self.check_lr_target(lr.get_fq_name(), lr_target) #update ASN value gs = self._vnc_lib.global_system_config_read( fq_name=[u'default-global-system-config']) gs.set_autonomous_system(50000) self._vnc_lib.global_system_config_update(gs) # check new route targets self.check_ri_target(self.get_ri_name(vn1_obj), ri_target.replace('64512', '50000')) self.check_bgp_asn(router1.get_fq_name(), 50000) self.check_lr_target(lr.get_fq_name(), lr_target.replace('64512', '50000')) self._vnc_lib.logical_router_delete(id=lr.uuid) self._vnc_lib.virtual_machine_interface_delete(id=vmi.uuid) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self.check_ri_is_deleted(fq_name=vn1_obj.fq_name+[vn1_obj.name]) self._vnc_lib.bgp_router_delete(id=router1.uuid)
def test_logical_router(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') # create virtual machine interface vmi_name = self.id() + 'vmi1' vmi = VirtualMachineInterface( vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) # create logical router lr_name = self.id() + 'lr1' lr = LogicalRouter(lr_name) rtgt_list = RouteTargetList(route_target=['target:1:1']) lr.set_configured_route_target_list(rtgt_list) lr.add_virtual_machine_interface(vmi) self._vnc_lib.logical_router_create(lr) ri_name = self.get_ri_name(vn1_obj) self.check_route_target_in_routing_instance( ri_name, rtgt_list.get_route_target()) rtgt_list.add_route_target('target:1:2') lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_update(lr) self.check_route_target_in_routing_instance( ri_name, rtgt_list.get_route_target()) rtgt_list.delete_route_target('target:1:1') lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_update(lr) self.check_route_target_in_routing_instance( ri_name, rtgt_list.get_route_target()) lr.del_virtual_machine_interface(vmi) self._vnc_lib.logical_router_update(lr) self._vnc_lib.virtual_machine_interface_delete(id=vmi.uuid) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self.check_vn_is_deleted(uuid=vn1_obj.uuid) self._vnc_lib.logical_router_delete(id=lr.uuid) self.check_lr_is_deleted(uuid=lr.uuid) self.check_rt_is_deleted(name='target:64512:8000002')
def test_public_snat_routes(self): # create private vn vn_private_name = self.id() + 'vn1' vn_private = self.create_virtual_network(vn_private_name, "1.0.0.0/24") # create virtual machine interface vmi_name = self.id() + 'vmi1' vmi = VirtualMachineInterface( vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn_private) self._vnc_lib.virtual_machine_interface_create(vmi) # create public vn vn_public_name = 'vn-public' vn_public = VirtualNetwork(vn_public_name) vn_public.set_router_external(True) ipam_obj = NetworkIpam('ipam') self._vnc_lib.network_ipam_create(ipam_obj) vn_public.add_network_ipam( ipam_obj, VnSubnetsType([IpamSubnetType(SubnetType("192.168.7.0", 24))])) self._vnc_lib.virtual_network_create(vn_public) # create logical router, set route targets, # add private network and extend lr to public network lr_name = self.id() + 'lr1' lr = LogicalRouter(lr_name) rtgt_list = RouteTargetList(route_target=['target:1:1']) lr.set_configured_route_target_list(rtgt_list) lr.add_virtual_machine_interface(vmi) lr.add_virtual_network(vn_public) self._vnc_lib.logical_router_create(lr) @retries(5) def _match_route_table(rtgt_list, ri_name): lri = self._vnc_lib.routing_instance_read(fq_name_str=ri_name) sr = lri.get_static_route_entries() if sr is None: raise Exception("sr is None") route = sr.route[0] self.assertEqual(route.prefix, "0.0.0.0/0") self.assertEqual(route.next_hop, "100.64.0.4") for rtgt in rtgt_list: self.assertIn(rtgt, route.route_target) @retries(5) def _wait_to_get_si(): si_list = self._vnc_lib.service_instances_list() si = si_list.get("service-instances")[0] si = self._vnc_lib.service_instance_read(id=si.get("uuid")) return si @retries(5) def _wait_to_delete_si(): si_list = self._vnc_lib.service_instances_list() try: si = si_list.get("service-instances")[0] si = self._vnc_lib.service_instance_read(id=si.get("uuid")) raise except Exception: pass @retries(5) def _wait_to_delete_ip(vn_fq_name): vn = self._vnc_lib.virtual_network_read(fq_name=vn_fq_name) ip_refs = vn.get_instance_ip_back_refs() if ip_refs: raise return # end si = _wait_to_get_si() si_props = si.get_service_instance_properties().get_interface_list()[1] ri_name = si_props.virtual_network + ":" + \ si_props.virtual_network.split(':')[-1] lr_rtgt = self._vnc_lib.logical_router_read( id=lr.uuid).route_target_refs[0]['to'][0] _match_route_table(['target:1:1', lr_rtgt], ri_name) rtgt_list = RouteTargetList(route_target=['target:2:2']) lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_update(lr) _match_route_table(['target:2:2', lr_rtgt], ri_name) lr.del_virtual_network(vn_public) self._vnc_lib.logical_router_update(lr) _wait_to_delete_si() # cleanup self._vnc_lib.logical_router_delete(fq_name=lr.get_fq_name()) self._vnc_lib.virtual_machine_interface_delete( fq_name=vmi.get_fq_name()) _wait_to_delete_ip(vn_private.get_fq_name()) self._vnc_lib.virtual_network_delete(fq_name=vn_private.get_fq_name()) _wait_to_delete_ip(vn_public.get_fq_name()) self._vnc_lib.virtual_network_delete(fq_name=vn_public.get_fq_name())
def test_vxlan_routing(self): proj_obj = self._vnc_lib.project_read( fq_name=['default-domain', 'default-project']) # create vn1 vn1_name = self.id() + '_vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') # create virtual machine interface vmi_name = self.id() + '_vmi1' vmi = VirtualMachineInterface( vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) # Enable vxlan_routing in the project # and verify RT not attached to LR proj_obj.set_vxlan_routing(True) self._vnc_lib.project_update(proj_obj) ri_name = self.get_ri_name(vn1_obj) ri_obj = self._vnc_lib.routing_instance_read(fq_name=ri_name) vn_rt_refs = set( [ref['to'][0] for ref in ri_obj.get_route_target_refs() or []]) # create logical router with RT lr_name = self.id() + '_lr1' lr = LogicalRouter(lr_name) rtgt_list = RouteTargetList(route_target=['target:1:1']) lr.set_configured_route_target_list(rtgt_list) lr.add_virtual_machine_interface(vmi) self._vnc_lib.logical_router_create(lr) lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name()) lr_target = self.check_lr_target(lr.get_fq_name()) ri_obj = self._vnc_lib.routing_instance_read(fq_name=ri_name) vn_rt_refs_with_lr = set( [ref['to'][0] for ref in ri_obj.get_route_target_refs() or []]) # ensure no RT from LR is attached to VN self.assertTrue(vn_rt_refs_with_lr == vn_rt_refs, msg='RT attached to VN is different after LR creation') # configure a new route target after # LR is created rtgt_list.add_route_target('target:1:2') lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_update(lr) lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name()) lr_target = self.check_lr_target(lr.get_fq_name()) ri_obj = self._vnc_lib.routing_instance_read(fq_name=ri_name) vn_rt_refs_with_lr = set( [ref['to'][0] for ref in ri_obj.get_route_target_refs() or []]) # ensure no RT from LR is attached to VN self.assertTrue(vn_rt_refs_with_lr == vn_rt_refs, msg='RT attached to VN is different after LR creation') # check no service instance generated self.check_no_si_in_lr(lr.get_fq_name()) # cleanup lr.del_virtual_machine_interface(vmi) self._vnc_lib.logical_router_update(lr) self._vnc_lib.virtual_machine_interface_delete(id=vmi.uuid) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self.check_vn_is_deleted(uuid=vn1_obj.uuid) self._vnc_lib.logical_router_delete(id=lr.uuid) self.check_lr_is_deleted(uuid=lr.uuid)
def test_logical_router(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') # create virtual machine interface vmi_name = self.id() + 'vmi1' vmi = VirtualMachineInterface(vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) # create logical router lr_name = self.id() + 'lr1' lr = LogicalRouter(lr_name) rtgt_list = RouteTargetList(route_target=['target:1:1']) lr.set_configured_route_target_list(rtgt_list) lr.add_virtual_machine_interface(vmi) self._vnc_lib.logical_router_create(lr) ri_name = self.get_ri_name(vn1_obj) self.check_route_target_in_routing_instance(ri_name,rtgt_list.get_route_target()) rtgt_list.add_route_target('target:1:2') lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_update(lr) self.check_route_target_in_routing_instance(ri_name, rtgt_list.get_route_target()) rtgt_list.delete_route_target('target:1:1') lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_update(lr) self.check_route_target_in_routing_instance(ri_name, rtgt_list.get_route_target()) lr.del_virtual_machine_interface(vmi) self._vnc_lib.logical_router_update(lr) self._vnc_lib.virtual_machine_interface_delete(id=vmi.uuid) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self.check_vn_is_deleted(uuid=vn1_obj.uuid) self._vnc_lib.logical_router_delete(id=lr.uuid) self.check_lr_is_deleted(uuid=lr.uuid) self.check_rt_is_deleted(name='target:64512:8000002')
def test_public_snat_routes(self): #create private vn vn_private_name = self.id() + 'vn1' vn_private = self.create_virtual_network(vn_private_name, "1.0.0.0/24") # create virtual machine interface vmi_name = self.id() + 'vmi1' vmi = VirtualMachineInterface(vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn_private) self._vnc_lib.virtual_machine_interface_create(vmi) #create public vn vn_public_name = 'vn-public' vn_public = VirtualNetwork(vn_public_name) vn_public.set_router_external(True) ipam_obj = NetworkIpam('ipam') self._vnc_lib.network_ipam_create(ipam_obj) vn_public.add_network_ipam(ipam_obj, VnSubnetsType( [IpamSubnetType(SubnetType("192.168.7.0", 24))])) self._vnc_lib.virtual_network_create(vn_public) #create logical router, set route targets, #add private network and extend lr to public network lr_name = self.id() + 'lr1' lr = LogicalRouter(lr_name) rtgt_list = RouteTargetList(route_target=['target:1:1']) lr.set_configured_route_target_list(rtgt_list) lr.add_virtual_machine_interface(vmi) lr.add_virtual_network(vn_public) self._vnc_lib.logical_router_create(lr) @retries(5) def _match_route_table(rtgt_list, ri_name): lri = self._vnc_lib.routing_instance_read( fq_name_str=ri_name) sr = lri.get_static_route_entries() if sr is None: raise Exception("sr is None") route = sr.route[0] self.assertEqual(route.prefix, "0.0.0.0/0") self.assertEqual(route.next_hop, "100.64.0.4") for rtgt in rtgt_list: self.assertIn(rtgt, route.route_target) @retries(5) def _wait_to_get_si(): si_list = self._vnc_lib.service_instances_list() si = si_list.get("service-instances")[0] si = self._vnc_lib.service_instance_read(id=si.get("uuid")) return si @retries(5) def _wait_to_delete_si(): si_list = self._vnc_lib.service_instances_list() try: si = si_list.get("service-instances")[0] si = self._vnc_lib.service_instance_read(id=si.get("uuid")) raise except: pass @retries(5) def _wait_to_delete_ip(vn_fq_name): vn = self._vnc_lib.virtual_network_read(fq_name=vn_fq_name) ip_refs = vn.get_instance_ip_back_refs() if ip_refs: raise return # end si = _wait_to_get_si() si_props = si.get_service_instance_properties().get_interface_list()[1] ri_name = si_props.virtual_network + ":" + si_props.virtual_network.split(':')[-1] lr_rtgt = self._vnc_lib.logical_router_read(id=lr.uuid).route_target_refs[0]['to'][0] _match_route_table(['target:1:1', lr_rtgt], ri_name) rtgt_list = RouteTargetList(route_target=['target:2:2']) lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_update(lr) _match_route_table(['target:2:2', lr_rtgt], ri_name) lr.del_virtual_network(vn_public) self._vnc_lib.logical_router_update(lr) _wait_to_delete_si() #cleanup self._vnc_lib.logical_router_delete(fq_name=lr.get_fq_name()) self._vnc_lib.virtual_machine_interface_delete(fq_name=vmi.get_fq_name()) _wait_to_delete_ip(vn_private.get_fq_name()) self._vnc_lib.virtual_network_delete(fq_name=vn_private.get_fq_name()) _wait_to_delete_ip(vn_public.get_fq_name()) self._vnc_lib.virtual_network_delete(fq_name=vn_public.get_fq_name())
def test_logical_router_delete(self): # configure vxlan routing proj_obj = self._vnc_lib.project_read( fq_name=['default-domain', 'default-project']) proj_obj.set_vxlan_routing(True) self._vnc_lib.project_update(proj_obj) # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') # create virtual machine interface vmi_name = self.id() + 'vmi1' vmi = VirtualMachineInterface(vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) # create logical router lr_name = self.id() + 'lr1' lr = LogicalRouter(lr_name) rtgt_list = RouteTargetList(route_target=['target:1:1']) lr.set_configured_route_target_list(rtgt_list) lr.add_virtual_machine_interface(vmi) self._vnc_lib.logical_router_create(lr) lr = self._vnc_lib.logical_router_read(id=lr.uuid) lr_target = self.check_lr_target(lr.get_fq_name()) intvns = self.get_lr_internal_vn(lr.get_fq_name()) # Deletion lr.del_virtual_machine_interface(vmi) self._vnc_lib.logical_router_update(lr) self._vnc_lib.virtual_machine_interface_delete(id=vmi.uuid) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self.check_vn_is_deleted(uuid=vn1_obj.uuid) # internalVN should be restored when LR delete fails try: # override libs org_dbe_delete = self._server_info['api_server']._db_conn.dbe_delete def tmp_dbe_delete(obj_type, id, read_result): if obj_type == 'logical_router': return False, (400, 'Fake LR delete failure') else: return org_dbe_delete(obj_type, id, read_result) self._server_info['api_server']._db_conn.dbe_delete = tmp_dbe_delete try: self._vnc_lib.logical_router_delete(id=lr.uuid) except BadRequest as err: lr = self._vnc_lib.logical_router_read(id=lr.uuid) self.get_lr_internal_vn(lr.get_fq_name()) else: raise Exception('UT: Fake LR delete didnt create BadRequest exception') finally: self._server_info['api_server']._db_conn.dbe_delete = org_dbe_delete # internalVN should be removed when LR is deleted successfully self._vnc_lib.logical_router_delete(id=lr.uuid) self.check_lr_is_deleted(uuid=lr.uuid) self.assertRaises(NoIdError, self._vnc_lib.virtual_network_read, intvns[0]['uuid']) self.check_rt_is_deleted(name=lr_target)
def test_dci_ibgp(self): self.init_fabric_prs() jt1 = self.create_job_template('job-template-1' + self.id()) fabric1 = self.create_fabric('fab1' + self.id()) asn = 64512 ns_fq_name = fabric1.fq_name + ["test_dci"] fabric_namespace1 = FabricNamespace( name='test_dci', fq_name=ns_fq_name, parent_type='fabric', fabric_namespace_type='ASN', fabric_namespace_value=NamespaceValue(asn={'asn': [asn]})) self._vnc_lib.fabric_namespace_create(fabric_namespace1) fabric2 = self.create_fabric('fab2' + self.id()) ns_fq_name2 = fabric2.fq_name + ["test_dci"] fabric_namespace2 = FabricNamespace( name='test_dci2', fq_name=ns_fq_name2, parent_type='fabric', fabric_namespace_type='ASN', fabric_namespace_value=NamespaceValue(asn={'asn': [asn]})) self._vnc_lib.fabric_namespace_create(fabric_namespace2) np1, rc1 = self.create_node_profile('node-profile-dci-1' + self.id(), device_family='junos-qfx', role_mappings=[ AttrDict({ 'physical_role': 'spine', 'rb_roles': ['DCI-Gateway'] }) ], job_template=jt1) br1, pr1 = self.create_router( 'device-1' + self.id(), '7.7.7.7', product='qfx10002', family='junos-qfx', role='spine', ignore_bgp=False, rb_roles=['DCI-Gateway'], physical_role=self.physical_roles['spine'], overlay_role=self.overlay_roles['DCI-Gateway'], fabric=fabric1, node_profile=np1, loopback_ip='30.30.0.22', asn_id=asn, set_local_asn=True) self._vnc_lib.physical_router_update(pr1) br2, pr2 = self.create_router( 'device-2' + self.id(), '7.7.7.8', product='qfx10002', family='junos-qfx', role='spine', rb_roles=['DCI-Gateway'], physical_role=self.physical_roles['spine'], overlay_role=self.overlay_roles['DCI-Gateway'], fabric=fabric2, node_profile=np1, loopback_ip='30.30.0.23', asn_id=asn, set_local_asn=True) self._vnc_lib.physical_router_update(pr2) vn1_obj = self.create_vn('1', '1.1.1.0') lr_fq_name = ['default-domain', 'default-project', 'lr-1' + self.id()] lr = LogicalRouter(fq_name=lr_fq_name, parent_type='project', logical_router_type='vxlan-routing', vxlan_network_identifier='3000') lr.set_physical_router(pr1) fq_name = ['default-domain', 'default-project', 'vmi3-' + self.id()] vmi3 = VirtualMachineInterface(fq_name=fq_name, parent_type='project') vmi3.set_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi3) lr.add_virtual_machine_interface(vmi3) lr_uuid = self._vnc_lib.logical_router_create(lr) lr = self._vnc_lib.logical_router_read(id=lr_uuid) vn2_obj = self.create_vn('2', '2.2.2.0') lr2_fq_name = ['default-domain', 'default-project', 'lr-2' + self.id()] lr2 = LogicalRouter(fq_name=lr2_fq_name, parent_type='project', logical_router_type='vxlan-routing', vxlan_network_identifier='4000') lr2.set_physical_router(pr2) fq2_name = ['default-domain', 'default-project', 'vmi4-' + self.id()] vmi4 = VirtualMachineInterface(fq_name=fq2_name, parent_type='project') vmi4.set_virtual_network(vn2_obj) self._vnc_lib.virtual_machine_interface_create(vmi4) lr2.add_virtual_machine_interface(vmi4) lr2_uuid = self._vnc_lib.logical_router_create(lr2) lr2 = self._vnc_lib.logical_router_read(id=lr2_uuid) dci = DataCenterInterconnect("test-dci") dci.add_logical_router(lr) dci.add_logical_router(lr2) self._vnc_lib.data_center_interconnect_create(dci) self.validate_abstract_configs_ibgp(pr1, pr2, lr, lr2) self._vnc_lib.data_center_interconnect_delete(fq_name=dci.fq_name) self._vnc_lib.logical_router_delete(fq_name=lr.fq_name) self._vnc_lib.logical_router_delete(fq_name=lr2.fq_name) self.delete_objects()
def test_vxlan_routing(self): proj_obj = self._vnc_lib.project_read( fq_name=['default-domain', 'default-project']) # create vn1 vn1_name = self.id() + '_vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') # create virtual machine interface vmi_name = self.id() + '_vmi1' vmi = VirtualMachineInterface(vmi_name, parent_type='project', fq_name=['default-domain', 'default-project', vmi_name]) vmi.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(vmi) # Enable vxlan_routing in the project # and verify RT not attached to LR proj_obj.set_vxlan_routing(True) self._vnc_lib.project_update(proj_obj) ri_name = self.get_ri_name(vn1_obj) ri_obj = self._vnc_lib.routing_instance_read(fq_name=ri_name) vn_rt_refs = set([ref['to'][0] for ref in ri_obj.get_route_target_refs() or []]) # create logical router with RT lr_name = self.id() + '_lr1' lr = LogicalRouter(lr_name) rtgt_list = RouteTargetList(route_target=['target:1:1']) lr.set_configured_route_target_list(rtgt_list) lr.add_virtual_machine_interface(vmi) self._vnc_lib.logical_router_create(lr) lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name()) lr_target = self.check_lr_target(lr.get_fq_name()) ri_obj = self._vnc_lib.routing_instance_read(fq_name=ri_name) vn_rt_refs_with_lr = set([ref['to'][0] for ref in ri_obj.get_route_target_refs() or []]) # ensure no RT from LR is attached to VN self.assertTrue(vn_rt_refs_with_lr == vn_rt_refs, msg='RT attached to VN is different after LR creation') # configure a new route target after # LR is created rtgt_list.add_route_target('target:1:2') lr.set_configured_route_target_list(rtgt_list) self._vnc_lib.logical_router_update(lr) lr = self._vnc_lib.logical_router_read(fq_name=lr.get_fq_name()) lr_target = self.check_lr_target(lr.get_fq_name()) ri_obj = self._vnc_lib.routing_instance_read(fq_name=ri_name) vn_rt_refs_with_lr = set([ref['to'][0] for ref in ri_obj.get_route_target_refs() or []]) # ensure no RT from LR is attached to VN self.assertTrue(vn_rt_refs_with_lr == vn_rt_refs, msg='RT attached to VN is different after LR creation') # check no service instance generated self.check_no_si_in_lr(lr.get_fq_name()) # cleanup lr.del_virtual_machine_interface(vmi) self._vnc_lib.logical_router_update(lr) self._vnc_lib.virtual_machine_interface_delete(id=vmi.uuid) self._vnc_lib.virtual_network_delete(id=vn1_obj.uuid) self.check_vn_is_deleted(uuid=vn1_obj.uuid) self._vnc_lib.logical_router_delete(id=lr.uuid) self.check_lr_is_deleted(uuid=lr.uuid)