def test_bgpaas_shared(self): vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, ['10.0.0.0/24', '1000::/16']) project_name = ['default-domain', 'default-project'] project_obj = self._vnc_lib.project_read(fq_name=project_name) port_name1 = self.id() + 'p1' port_obj1 = VirtualMachineInterface(port_name1, parent_obj=project_obj) port_obj1.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port_obj1) port_name2 = self.id() + 'p2' port_obj2 = VirtualMachineInterface(port_name2, parent_obj=project_obj) port_obj2.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port_obj2) # Create a shared BGPaaS server. It means BGP Router object # does not get created for VMI on the network. bgpaas_name = self.id() + 'bgp1' bgpaas = BgpAsAService(bgpaas_name, parent_obj=project_obj, autonomous_system=64512, bgpaas_shared=True, bgpaas_ip_address = '1.1.1.1') bgpaas.add_virtual_machine_interface(port_obj1) self._vnc_lib.bgp_as_a_service_create(bgpaas) self.wait_to_get_object(config_db.BgpAsAServiceST, bgpaas.get_fq_name_str()) router1_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + bgpaas_name router2_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + 'bgpaas-server' # Check for two BGP routers - one with the BGPaaS name and not with Port name self.wait_to_get_object(config_db.BgpRouterST, router1_name) self.wait_to_get_object(config_db.BgpRouterST, router2_name) # check whether shared IP address is assigned to the BGP rotuer self.check_bgp_router_ip(router1_name, '1.1.1.1') # Add a new VMI to the BGPaaS. This should not create a new BGP router bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name_str=bgpaas.get_fq_name_str()) bgpaas.add_virtual_machine_interface(port_obj2) self._vnc_lib.bgp_as_a_service_update(bgpaas) # Check for the absence of BGP router along with the new VMI. router3_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + port_name2 try: bgp_router = self._vnc_lib.bgp_router_read(fq_name_str=router3_name) except NoIdError: print 'Second BGP Router not created for second port - PASS' else: assert(True) bgpaas.del_virtual_machine_interface(port_obj1) bgpaas.del_virtual_machine_interface(port_obj2) self._vnc_lib.bgp_as_a_service_update(bgpaas) self._vnc_lib.bgp_as_a_service_delete(id=bgpaas.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port_obj1.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port_obj2.uuid) self._vnc_lib.virtual_network_delete(fq_name=vn1_obj.get_fq_name()) self.check_ri_is_deleted(vn1_obj.fq_name+[vn1_obj.name])
def create_bgpaas(self): proj = self.api.project_read( fq_name=["default-domain", "default-project"]) bgpaas_obj = BgpAsAService(name='bgpaas_update', parent_obj=proj) # Set a valid ASN and create bgpaas object bgpaas_obj.autonomous_system = 64512 bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) return bgpaas_uuid, bgpaas_obj
def test_bgpaas_create_within_invalid_2_byte_asn(self): proj = self.api.project_read( fq_name=["default-domain", "default-project"]) bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) # Set a invalid ASN and create bgpaas object bgpaas_obj.autonomous_system = 700000 self.assertRaises(BadRequest, self.api.bgp_as_a_service_create, bgpaas_obj)
def test_bgpaas_shared(self): vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, ['10.0.0.0/24', '1000::/16']) project_name = ['default-domain', 'default-project'] project_obj = self._vnc_lib.project_read(fq_name=project_name) port_name1 = self.id() + 'p1' port_obj1 = VirtualMachineInterface(port_name1, parent_obj=project_obj) port_obj1.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port_obj1) port_name2 = self.id() + 'p2' port_obj2 = VirtualMachineInterface(port_name2, parent_obj=project_obj) port_obj2.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port_obj2) # Create a shared BGPaaS server. It means BGP Router object # does not get created for VMI on the network. bgpaas_name = self.id() + 'bgp1' bgpaas = BgpAsAService(bgpaas_name, parent_obj=project_obj, autonomous_system=64512, bgpaas_shared=True, bgpaas_ip_address = '1.1.1.1') bgpaas.add_virtual_machine_interface(port_obj1) self._vnc_lib.bgp_as_a_service_create(bgpaas) self.wait_to_get_object(config_db.BgpAsAServiceST, bgpaas.get_fq_name_str()) router1_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + bgpaas_name router2_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + 'bgpaas-server' # Check for two BGP routers - one with the BGPaaS name and not with Port name self.wait_to_get_object(config_db.BgpRouterST, router1_name) self.wait_to_get_object(config_db.BgpRouterST, router2_name) # check whether shared IP address is assigned to the BGP rotuer self.check_bgp_router_ip(router1_name, '1.1.1.1') # Add a new VMI to the BGPaaS. This should not create a new BGP router bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name_str=bgpaas.get_fq_name_str()) bgpaas.add_virtual_machine_interface(port_obj2) self._vnc_lib.bgp_as_a_service_update(bgpaas) # Check for the absence of BGP router along with the new VMI. router3_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + port_name2 try: bgp_router = self._vnc_lib.bgp_router_read(fq_name_str=router3_name) except NoIdError: print 'Second BGP Router not created for second port - PASS' else: assert(True) bgpaas.del_virtual_machine_interface(port_obj1) bgpaas.del_virtual_machine_interface(port_obj2) self._vnc_lib.bgp_as_a_service_update(bgpaas) self._vnc_lib.bgp_as_a_service_delete(id=bgpaas.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port_obj1.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port_obj2.uuid) self._vnc_lib.virtual_network_delete(fq_name=vn1_obj.get_fq_name()) self.check_ri_is_deleted(vn1_obj.fq_name+[vn1_obj.name])
def test_bgpaas_create_with_valid_2_byte_asn(self): proj = self.api.project_read( fq_name=["default-domain", "default-project"]) bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) # Set a valid ASN and create bgpaas object bgpaas_obj.autonomous_system = 64512 bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) # Now delete the bgpaas object self.api.bgp_as_a_service_delete(id=bgpaas_uuid)
def create_bgpaas_with_local_asn(self): proj = self.api.project_read( fq_name=["default-domain", "default-project"]) bgp_session_attr = BgpSessionAttributes(local_autonomous_system=64500) bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj, bgpaas_session_attributes=bgp_session_attr) bgpaas_obj.autonomous_system = 64512 bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) return bgpaas_uuid, bgpaas_obj
def test_bgpaas_create_with_invalid_2_byte_local_asn(self): proj = self.api.project_read( fq_name=["default-domain", "default-project"]) # Set a invalid Local ASN and create bgpaas object bgp_session_attr = BgpSessionAttributes(local_autonomous_system=700001) bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj, bgpaas_session_attributes=bgp_session_attr) bgpaas_obj.autonomous_system = 64512 self.assertRaises(BadRequest, self.api.bgp_as_a_service_create, bgpaas_obj)
def test_bgpaas_create_with_invalid_4_byte_asn(self): gsc = self.api.global_system_config_read(GlobalSystemConfig().fq_name) # Enable 4 byte ASN flag in GSC gsc.enable_4byte_as = True self.api.global_system_config_update(gsc) proj = self.api.project_read( fq_name=["default-domain", "default-project"]) bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) # Set a invalid ASN and create bgpaas object bgpaas_obj.autonomous_system = 0x1FFFFFFFF self.assertRaises(BadRequest, self.api.bgp_as_a_service_create, bgpaas_obj) # Finally, disable 4 byte ASN flag gsc.enable_4byte_as = False self.api.global_system_config_update(gsc)
def test_bgpaas_create_with_valid_4_byte_asn(self): gsc = self.api.global_system_config_read(GlobalSystemConfig().fq_name) # Enable 4 byte ASN flag in GSC gsc.enable_4byte_as = True self.api.global_system_config_update(gsc) proj = self.api.project_read( fq_name=["default-domain", "default-project"]) bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) # Set a valid ASN and create bgpaas object bgpaas_obj.autonomous_system = 700000 bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) # Now delete the bgpaas object and disable 4 byte ASN flag self.api.bgp_as_a_service_delete(id=bgpaas_uuid) gsc.enable_4byte_as = False self.api.global_system_config_update(gsc)
def test_bgpaas_update_with_hold_time(self): # Create bgpaas object proj = self.api.project_read( fq_name=['default-domain', 'default-project']) bgpaas_obj = BgpAsAService(name='bgpaas_update', parent_obj=proj) bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) for test in self.hold_time_test_cases: # Update hold time with valid and invalid values bgp_session_attr = BgpSessionAttributes( hold_time=test['hold_time']) bgpaas_obj.set_bgpaas_session_attributes(bgp_session_attr) if test['should_pass']: self.api.bgp_as_a_service_update(bgpaas_obj) else: self.assertRaises(BadRequest, self.api.bgp_as_a_service_update, bgpaas_obj) # Finally, delete the bgpaas object self.api.bgp_as_a_service_delete(id=bgpaas_uuid)
def test_bgpaas_create_with_hold_time(self): proj = self.api.project_read( fq_name=["default-domain", "default-project"]) for test in self.hold_time_test_cases: bgp_session_attr = BgpSessionAttributes( hold_time=test['hold_time']) bgpaas_obj = BgpAsAService( name='bgpaas', parent_obj=proj, bgpaas_session_attributes=bgp_session_attr) if test['should_pass']: # Create bgpaas object with proper hold time bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) # Now delete the bgpaas object self.api.bgp_as_a_service_delete(id=bgpaas_uuid) else: # Try to create bgpaas object with improper hold time # and expect error self.assertRaises(BadRequest, self.api.bgp_as_a_service_create, bgpaas_obj)
def test_bgpaas(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, ['10.0.0.0/24', '1000::/16']) project_name = ['default-domain', 'default-project'] project_obj = self._vnc_lib.project_read(fq_name=project_name) port_name = self.id() + 'p1' port_obj = VirtualMachineInterface(port_name, parent_obj=project_obj) port_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port_obj) v6_obj = InstanceIp(name=port_name + '-v6') v6_obj.set_virtual_machine_interface(port_obj) v6_obj.set_virtual_network(vn1_obj) v6_obj.set_instance_ip_family('v6') self._vnc_lib.instance_ip_create(v6_obj) v4_obj = InstanceIp(name=port_name + '-v4') v4_obj.set_virtual_machine_interface(port_obj) v4_obj.set_virtual_network(vn1_obj) v4_obj.set_instance_ip_family('v4') self._vnc_lib.instance_ip_create(v4_obj) bgpaas_name = self.id() + 'bgp1' bgpaas = BgpAsAService(bgpaas_name, parent_obj=project_obj, autonomous_system=64512) bgpaas.add_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_create(bgpaas) router1_name = vn1_obj.get_fq_name_str( ) + ':' + vn1_name + ':' + port_name self.wait_to_get_object(config_db.BgpAsAServiceST, bgpaas.get_fq_name_str()) self.wait_to_get_object(config_db.BgpRouterST, router1_name) server_fq_name = ':'.join(self.get_ri_name(vn1_obj)) + ':bgpaas-server' self.wait_to_get_object(config_db.BgpRouterST, server_fq_name) server_router_obj = self._vnc_lib.bgp_router_read( fq_name_str=server_fq_name) router1_name = vn1_obj.get_fq_name_str( ) + ':' + vn1_name + ':' + port_name mx_bgp_router = self.create_bgp_router("mx-bgp-router", "contrail") mx_bgp_router_name = mx_bgp_router.get_fq_name_str() self.wait_to_get_object(config_db.BgpRouterST, mx_bgp_router_name) mx_bgp_router = self._vnc_lib.bgp_router_read( fq_name_str=mx_bgp_router_name) self.check_bgp_no_peering(server_router_obj, mx_bgp_router) for i in range(5): router1_obj = self._vnc_lib.bgp_router_read( fq_name_str=router1_name) params = router1_obj.get_bgp_router_parameters() if not params: gevent.sleep(1) continue self.assertEqual(router1_obj.get_bgp_router_parameters().address, '10.0.0.252') self.assertEqual( router1_obj.get_bgp_router_parameters().identifier, '10.0.0.252') self.assertNotEqual(params, None) # verify ref from vmi to bgp-router is created port_obj_updated = self._vnc_lib.virtual_machine_interface_read( id=port_obj.uuid) self.assertEqual(port_obj_updated.bgp_router_refs[0]['to'], router1_obj.fq_name) # remove bgp-router ref from vmi self._vnc_lib.ref_update(obj_uuid=port_obj_updated.uuid, obj_type='virtual_machine_interface', ref_uuid=router1_obj.uuid, ref_fq_name=router1_obj.fq_name, ref_type='bgp-router', operation='DELETE') port_obj_updated = self._vnc_lib.virtual_machine_interface_read( id=port_obj.uuid) self.assertIsNone(port_obj_updated.get_bgp_router_refs()) # check bgp-router ref in vmi is restored during reinit config_db.VirtualMachineST._dict = {} config_db.BgpRouterST._dict = {} config_db.BgpAsAServiceST._dict = {} to_bgp.transformer.reinit() port_obj_updated = self._vnc_lib.virtual_machine_interface_read( id=port_obj.uuid) refs = port_obj_updated.get_bgp_router_refs() self.assertNotEqual(refs, None) self.assertEqual(refs[0]['to'], router1_obj.fq_name) # remove VMI from bgpaas and ensure bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name=bgpaas.fq_name) port_obj_updated = self._vnc_lib.virtual_machine_interface_read( id=port_obj.uuid) bgpaas.del_virtual_machine_interface(port_obj_updated) self._vnc_lib.bgp_as_a_service_update(bgpaas) bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name=bgpaas.fq_name) port_obj_updated = self._vnc_lib.virtual_machine_interface_read( id=port_obj.uuid) # ensure vmi is not attached to bpgaas self.assertEqual(bgpaas.get_virtual_machine_interface_refs(), None) # vmi loses vmi->bgp-router ref self.assertEqual(port_obj_updated.get_bgp_router_refs(), None) # ensure VMI has no bgpaas ref self.assertEqual(port_obj_updated.get_bgp_as_a_service_back_refs(), None) # add VMI back to bgpaas bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name=bgpaas.fq_name) port_obj_updated = self._vnc_lib.virtual_machine_interface_read( id=port_obj.uuid) bgpaas.add_virtual_machine_interface(port_obj_updated) self._vnc_lib.bgp_as_a_service_update(bgpaas) bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name=bgpaas.fq_name) port_obj_updated = self._vnc_lib.virtual_machine_interface_read( id=port_obj.uuid) # ensure vmi is attached to bgpaas self.assertNotEqual(bgpaas.get_virtual_machine_interface_refs(), None) # VMI has bgpaas ref self.assertNotEqual(port_obj_updated.get_bgp_as_a_service_back_refs(), None) # vmi got vmi->bgp-router ref for i in range(10): port_obj_updated = self._vnc_lib.virtual_machine_interface_read( id=port_obj.uuid) if not port_obj_updated.get_bgp_router_refs(): gevent.sleep(1) print 'retrying...' self.assertNotEqual(port_obj_updated.get_bgp_router_refs(), None, msg="vmi did not get ref to bgp-router") self.check_bgp_peering(server_router_obj, router1_obj, 1) self.check_v4_bgp_gateway(router1_name, '10.0.0.254') self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') # Set suppress_route_advertisement; and expect the gateways # to be reset to None in bgpaas-client router bgpaas.set_bgpaas_suppress_route_advertisement(True) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v4_bgp_gateway(router1_name, None) self.check_v6_bgp_gateway(router1_name, None) # Unset suppress_route_advertisement; and expect the gateways # to be set to gateway addresses in bgpaas-client router bgpaas.set_bgpaas_suppress_route_advertisement(False) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v4_bgp_gateway(router1_name, '10.0.0.254') self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') # Set bgpaas_ipv4_mapped_ipv6_nexthop and expect the # ipv4-mapped ipv6 address is set as gateway bgpaas.set_bgpaas_ipv4_mapped_ipv6_nexthop(True) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v6_bgp_gateway(router1_name, '::ffff:10.0.0.254') # unset bgpaas_ipv4_mapped_ipv6_nexthop and expect the # subnets ipv6 gateway address is set as gateway bgpaas.set_bgpaas_ipv4_mapped_ipv6_nexthop(False) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') self._vnc_lib.instance_ip_delete(id=v4_obj.uuid) v4_obj = InstanceIp(name=port_name + '-v4') v4_obj.set_virtual_machine_interface(port_obj) v4_obj.set_virtual_network(vn1_obj) v4_obj.set_instance_ip_family('v4') v4_obj.set_instance_ip_address('10.0.0.60') self._vnc_lib.instance_ip_create(v4_obj) self.check_bgp_router_ip(router1_name, '10.0.0.60') self.check_bgp_router_identifier(router1_name, '10.0.0.60') bgpaas.set_bgpaas_ip_address('10.0.0.70') self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_bgp_router_ip(router1_name, '10.0.0.70') v4_obj.del_virtual_machine_interface(port_obj) v4_obj.del_virtual_network(vn1_obj) self._vnc_lib.instance_ip_delete(id=v4_obj.uuid) self.check_bgp_router_ip(router1_name, '10.0.0.70') self.check_bgp_router_identifier(router1_name, '10.0.0.70') port2_name = self.id() + 'p2' port2_obj = VirtualMachineInterface(port2_name, parent_obj=project_obj) port2_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port2_obj) bgpaas.add_virtual_machine_interface(port2_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) router2_name = vn1_obj.get_fq_name_str( ) + ':' + vn1_name + ':' + port2_name self.wait_to_get_object(config_db.BgpRouterST, router2_name) router2_obj = self._vnc_lib.bgp_router_read(fq_name_str=router2_name) self.check_bgp_peering(server_router_obj, router2_obj, 2) self.check_bgp_peering(server_router_obj, router1_obj, 2) bgpaas.del_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.wait_to_delete_object(config_db.BgpRouterST, router1_name) self._vnc_lib.bgp_as_a_service_delete(id=bgpaas.uuid) self.wait_to_delete_object(config_db.BgpRouterST, router2_name) self._vnc_lib.instance_ip_delete(id=v6_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port2_obj.uuid) self._vnc_lib.virtual_network_delete(fq_name=vn1_obj.get_fq_name()) self.check_ri_is_deleted(vn1_obj.fq_name + [vn1_obj.name]) self._vnc_lib.bgp_router_delete(id=mx_bgp_router.uuid)
def test_bgpaas(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, ['10.0.0.0/24', '1000::/16']) project_name = ['default-domain', 'default-project'] project_obj = self._vnc_lib.project_read(fq_name=project_name) port_name = self.id() + 'p1' port_obj = VirtualMachineInterface(port_name, parent_obj=project_obj) port_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port_obj) v6_obj = InstanceIp(name=port_name + '-v6') v6_obj.set_virtual_machine_interface(port_obj) v6_obj.set_virtual_network(vn1_obj) v6_obj.set_instance_ip_family('v6') self._vnc_lib.instance_ip_create(v6_obj) v4_obj = InstanceIp(name=port_name + '-v4') v4_obj.set_virtual_machine_interface(port_obj) v4_obj.set_virtual_network(vn1_obj) v4_obj.set_instance_ip_family('v4') self._vnc_lib.instance_ip_create(v4_obj) bgpaas_name = self.id() + 'bgp1' bgpaas = BgpAsAService(bgpaas_name, parent_obj=project_obj, autonomous_system=64512) bgpaas.add_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_create(bgpaas) router1_name = vn1_obj.get_fq_name_str( ) + ':' + vn1_name + ':' + port_name self.wait_to_get_object(config_db.BgpAsAServiceST, bgpaas.get_fq_name_str()) self.wait_to_get_object(config_db.BgpRouterST, router1_name) server_fq_name = ':'.join(self.get_ri_name(vn1_obj)) + ':bgpaas-server' self.wait_to_get_object(config_db.BgpRouterST, server_fq_name) server_router_obj = self._vnc_lib.bgp_router_read( fq_name_str=server_fq_name) mx_bgp_router = self.create_bgp_router("mx-bgp-router", "contrail") mx_bgp_router_name = mx_bgp_router.get_fq_name_str() self.wait_to_get_object(config_db.BgpRouterST, mx_bgp_router_name) mx_bgp_router = self._vnc_lib.bgp_router_read( fq_name_str=mx_bgp_router_name) self.check_bgp_no_peering(server_router_obj, mx_bgp_router) router1_obj = self._vnc_lib.bgp_router_read(fq_name_str=router1_name) self.assertEqual(router1_obj.get_bgp_router_parameters().address, '10.0.0.252') self.assertEqual(router1_obj.get_bgp_router_parameters().identifier, '10.0.0.252') self.check_bgp_peering(server_router_obj, router1_obj, 1) self.check_v4_bgp_gateway(router1_name, '10.0.0.254') self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') # Set suppress_route_advertisement; and expect the gateways # to be reset to None in bgpaas-client router bgpaas.set_bgpaas_suppress_route_advertisement(True) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v4_bgp_gateway(router1_name, None) self.check_v6_bgp_gateway(router1_name, None) # Unset suppress_route_advertisement; and expect the gateways # to be set to gateway addresses in bgpaas-client router bgpaas.set_bgpaas_suppress_route_advertisement(False) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v4_bgp_gateway(router1_name, '10.0.0.254') self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') # Set bgpaas_ipv4_mapped_ipv6_nexthop and expect the # ipv4-mapped ipv6 address is set as gateway bgpaas.set_bgpaas_ipv4_mapped_ipv6_nexthop(True) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v6_bgp_gateway(router1_name, '::ffff:10.0.0.254') # unset bgpaas_ipv4_mapped_ipv6_nexthop and expect the # subnets ipv6 gateway address is set as gateway bgpaas.set_bgpaas_ipv4_mapped_ipv6_nexthop(False) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') self._vnc_lib.instance_ip_delete(id=v4_obj.uuid) v4_obj = InstanceIp(name=port_name + '-v4') v4_obj.set_virtual_machine_interface(port_obj) v4_obj.set_virtual_network(vn1_obj) v4_obj.set_instance_ip_family('v4') v4_obj.set_instance_ip_address('10.0.0.60') self._vnc_lib.instance_ip_create(v4_obj) self.check_bgp_router_ip(router1_name, '10.0.0.60') self.check_bgp_router_identifier(router1_name, '10.0.0.60') bgpaas.set_bgpaas_ip_address('10.0.0.70') self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_bgp_router_ip(router1_name, '10.0.0.70') v4_obj.del_virtual_machine_interface(port_obj) v4_obj.del_virtual_network(vn1_obj) self._vnc_lib.instance_ip_delete(id=v4_obj.uuid) self.check_bgp_router_ip(router1_name, '10.0.0.70') self.check_bgp_router_identifier(router1_name, '10.0.0.70') port2_name = self.id() + 'p2' port2_obj = VirtualMachineInterface(port2_name, parent_obj=project_obj) port2_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port2_obj) bgpaas.add_virtual_machine_interface(port2_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) router2_name = vn1_obj.get_fq_name_str( ) + ':' + vn1_name + ':' + port2_name self.wait_to_get_object(config_db.BgpRouterST, router2_name) router2_obj = self._vnc_lib.bgp_router_read(fq_name_str=router2_name) self.check_bgp_peering(server_router_obj, router2_obj, 2) self.check_bgp_peering(server_router_obj, router1_obj, 2) bgpaas.del_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.wait_to_delete_object(config_db.BgpRouterST, router1_name) self._vnc_lib.bgp_as_a_service_delete(id=bgpaas.uuid) self.wait_to_delete_object(config_db.BgpRouterST, router2_name) self._vnc_lib.instance_ip_delete(id=v6_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port2_obj.uuid) self._vnc_lib.virtual_network_delete(fq_name=vn1_obj.get_fq_name()) self.check_ri_is_deleted(vn1_obj.fq_name + [vn1_obj.name]) self._vnc_lib.bgp_router_delete(id=mx_bgp_router.uuid)
def test_bgpaas(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, ['10.0.0.0/24', '1000::/16']) project_name = ['default-domain', 'default-project'] project_obj = self._vnc_lib.project_read(fq_name=project_name) port_name = self.id() + 'p1' port_obj = VirtualMachineInterface(port_name, parent_obj=project_obj) port_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port_obj) v6_obj = InstanceIp(name=port_name+'-v6') v6_obj.set_virtual_machine_interface(port_obj) v6_obj.set_virtual_network(vn1_obj) v6_obj.set_instance_ip_family('v6') self._vnc_lib.instance_ip_create(v6_obj) v4_obj = InstanceIp(name=port_name+'-v4') v4_obj.set_virtual_machine_interface(port_obj) v4_obj.set_virtual_network(vn1_obj) v4_obj.set_instance_ip_family('v4') self._vnc_lib.instance_ip_create(v4_obj) bgpaas_name = self.id() + 'bgp1' bgpaas = BgpAsAService(bgpaas_name, parent_obj=project_obj, autonomous_system=64512) bgpaas.add_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_create(bgpaas) router1_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + port_name self.wait_to_get_object(config_db.BgpAsAServiceST, bgpaas.get_fq_name_str()) self.wait_to_get_object(config_db.BgpRouterST, router1_name) server_fq_name = ':'.join(self.get_ri_name(vn1_obj)) + ':bgpaas-server' self.wait_to_get_object(config_db.BgpRouterST, server_fq_name) server_router_obj = self._vnc_lib.bgp_router_read(fq_name_str=server_fq_name) mx_bgp_router = self.create_bgp_router("mx-bgp-router", "contrail") mx_bgp_router_name = mx_bgp_router.get_fq_name_str() self.wait_to_get_object(config_db.BgpRouterST, mx_bgp_router_name) mx_bgp_router = self._vnc_lib.bgp_router_read(fq_name_str=mx_bgp_router_name) self.check_bgp_no_peering(server_router_obj, mx_bgp_router) router1_obj = self._vnc_lib.bgp_router_read(fq_name_str=router1_name) self.assertEqual(router1_obj.get_bgp_router_parameters().address, '10.0.0.252') self.assertEqual(router1_obj.get_bgp_router_parameters().identifier, '10.0.0.252') self.check_bgp_peering(server_router_obj, router1_obj, 1) self.check_v4_bgp_gateway(router1_name, '10.0.0.254') self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') # Set suppress_route_advertisement; and expect the gateways # to be reset to None in bgpaas-client router bgpaas.set_bgpaas_suppress_route_advertisement(True) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v4_bgp_gateway(router1_name, None) self.check_v6_bgp_gateway(router1_name, None) # Unset suppress_route_advertisement; and expect the gateways # to be set to gateway addresses in bgpaas-client router bgpaas.set_bgpaas_suppress_route_advertisement(False) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v4_bgp_gateway(router1_name, '10.0.0.254') self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') # Set bgpaas_ipv4_mapped_ipv6_nexthop and expect the # ipv4-mapped ipv6 address is set as gateway bgpaas.set_bgpaas_ipv4_mapped_ipv6_nexthop(True) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v6_bgp_gateway(router1_name, '::ffff:10.0.0.254') # unset bgpaas_ipv4_mapped_ipv6_nexthop and expect the # subnets ipv6 gateway address is set as gateway bgpaas.set_bgpaas_ipv4_mapped_ipv6_nexthop(False) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') v4_obj.set_instance_ip_address('10.0.0.60') self._vnc_lib.instance_ip_update(v4_obj) self.check_bgp_router_ip(router1_name, '10.0.0.60') self.check_bgp_router_identifier(router1_name, '10.0.0.60') bgpaas.set_bgpaas_ip_address('10.0.0.70') self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_bgp_router_ip(router1_name, '10.0.0.70') v4_obj.del_virtual_machine_interface(port_obj) v4_obj.del_virtual_network(vn1_obj) self._vnc_lib.instance_ip_delete(id=v4_obj.uuid) self.check_bgp_router_ip(router1_name, '10.0.0.70') self.check_bgp_router_identifier(router1_name, '10.0.0.70') port2_name = self.id() + 'p2' port2_obj = VirtualMachineInterface(port2_name, parent_obj=project_obj) port2_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port2_obj) bgpaas.add_virtual_machine_interface(port2_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) router2_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + port2_name self.wait_to_get_object(config_db.BgpRouterST, router2_name) router2_obj = self._vnc_lib.bgp_router_read(fq_name_str=router2_name) self.check_bgp_peering(server_router_obj, router2_obj, 2) self.check_bgp_peering(server_router_obj, router1_obj, 2) bgpaas.del_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.wait_to_delete_object(config_db.BgpRouterST, router1_name) self._vnc_lib.bgp_as_a_service_delete(id=bgpaas.uuid) self.wait_to_delete_object(config_db.BgpRouterST, router2_name) self._vnc_lib.instance_ip_delete(id=v6_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port2_obj.uuid) self._vnc_lib.virtual_network_delete(fq_name=vn1_obj.get_fq_name()) self.check_ri_is_deleted(vn1_obj.fq_name+[vn1_obj.name]) self._vnc_lib.bgp_router_delete(id=mx_bgp_router.uuid)
def test_control_node_zone(self): gsc = self.api.global_system_config_read(GlobalSystemConfig().fq_name) cnz = [] for i in range(2): cnz_name = "cnz-" + str(i) cnz.append(ControlNodeZone(name=cnz_name, parent_obj=gsc)) self.api.control_node_zone_create(cnz[i]) proj = self.api.project_read( fq_name=["default-domain", "default-project"]) bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) primary_attr = BGPaaSControlNodeZoneAttributes("primary") secondary_attr = BGPaaSControlNodeZoneAttributes("secondary") # create bgpaas with two control-node-zones as "primary" bgpaas_obj.add_control_node_zone(cnz[0], primary_attr) bgpaas_obj.add_control_node_zone(cnz[1], primary_attr) try: self.api.bgp_as_a_service_create(bgpaas_obj) except BadRequest: pass # create bgpaas with two control-node-zones as "secondary" bgpaas_obj.add_control_node_zone(cnz[0], secondary_attr) bgpaas_obj.add_control_node_zone(cnz[1], secondary_attr) try: self.api.bgp_as_a_service_create(bgpaas_obj) except BadRequest: pass # update bgpaas with two control-node-zones as "primary" bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) bgpaas_obj = self.api.bgp_as_a_service_read(id=bgpaas_uuid) bgpaas_obj.add_control_node_zone(cnz[0], primary_attr) bgpaas_obj.add_control_node_zone(cnz[1], primary_attr) try: self.api.bgp_as_a_service_update(bgpaas_obj) except BadRequest: self.api.bgp_as_a_service_delete(id=bgpaas_uuid) # update bgpaas with two control-node-zones as "secondary" bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) bgpaas_obj = self.api.bgp_as_a_service_read(id=bgpaas_uuid) bgpaas_obj.add_control_node_zone(cnz[0], secondary_attr) bgpaas_obj.add_control_node_zone(cnz[1], secondary_attr) try: self.api.bgp_as_a_service_update(bgpaas_obj) except BadRequest: self.api.bgp_as_a_service_delete(id=bgpaas_uuid) # update bgpaas with same control-node-zone as "primary" bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) bgpaas_obj.add_control_node_zone(cnz[0], primary_attr) bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) bgpaas_obj = self.api.bgp_as_a_service_read(id=bgpaas_uuid) bgpaas_obj.add_control_node_zone(cnz[0], primary_attr) self.api.bgp_as_a_service_update(bgpaas_obj) self.api.bgp_as_a_service_delete(id=bgpaas_uuid) # update bgpaas with same control-node-zone as "secondary" bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) bgpaas_obj.add_control_node_zone(cnz[0], primary_attr) bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) bgpaas_obj = self.api.bgp_as_a_service_read(id=bgpaas_uuid) bgpaas_obj.add_control_node_zone(cnz[0], secondary_attr) self.api.bgp_as_a_service_update(bgpaas_obj) self.api.bgp_as_a_service_delete(id=bgpaas_uuid) # update bgpaas with new control-node-zone as "primary" bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) bgpaas_obj.add_control_node_zone(cnz[0], primary_attr) bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) bgpaas_obj = self.api.bgp_as_a_service_read(id=bgpaas_uuid) bgpaas_obj.add_control_node_zone(cnz[1], primary_attr) try: self.api.bgp_as_a_service_update(bgpaas_obj) except BadRequest: self.api.bgp_as_a_service_delete(id=bgpaas_uuid) # update bgpaas with same control-node-zone as "secondary" bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) bgpaas_obj.add_control_node_zone(cnz[0], secondary_attr) bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) bgpaas_obj = self.api.bgp_as_a_service_read(id=bgpaas_uuid) bgpaas_obj.add_control_node_zone(cnz[0], secondary_attr) self.api.bgp_as_a_service_update(bgpaas_obj) self.api.bgp_as_a_service_delete(id=bgpaas_uuid) # update bgpaas with same control-node-zone as "primary" bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) bgpaas_obj.add_control_node_zone(cnz[0], secondary_attr) bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) bgpaas_obj = self.api.bgp_as_a_service_read(id=bgpaas_uuid) bgpaas_obj.add_control_node_zone(cnz[0], primary_attr) self.api.bgp_as_a_service_update(bgpaas_obj) self.api.bgp_as_a_service_delete(id=bgpaas_uuid) # update bgpaas with new control-node-zone as "secondary" bgpaas_obj = BgpAsAService(name='bgpaas', parent_obj=proj) bgpaas_obj.add_control_node_zone(cnz[0], secondary_attr) bgpaas_uuid = self.api.bgp_as_a_service_create(bgpaas_obj) bgpaas_obj = self.api.bgp_as_a_service_read(id=bgpaas_uuid) bgpaas_obj.add_control_node_zone(cnz[1], secondary_attr) try: self.api.bgp_as_a_service_update(bgpaas_obj) except BadRequest: self.api.bgp_as_a_service_delete(id=bgpaas_uuid) for i in range(2): self.api.control_node_zone_delete(fq_name=cnz[i].fq_name)
def test_bgpaas(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, ['10.0.0.0/24', '1000::/16']) project_name = ['default-domain', 'default-project'] project_obj = self._vnc_lib.project_read(fq_name=project_name) port_name = self.id() + 'p1' port_obj = VirtualMachineInterface(port_name, parent_obj=project_obj) port_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port_obj) v6_obj = InstanceIp(name=port_name+'-v6') v6_obj.set_virtual_machine_interface(port_obj) v6_obj.set_virtual_network(vn1_obj) v6_obj.set_instance_ip_family('v6') self._vnc_lib.instance_ip_create(v6_obj) v4_obj = InstanceIp(name=port_name+'-v4') v4_obj.set_virtual_machine_interface(port_obj) v4_obj.set_virtual_network(vn1_obj) v4_obj.set_instance_ip_family('v4') self._vnc_lib.instance_ip_create(v4_obj) bgpaas_name = self.id() + 'bgp1' bgpaas = BgpAsAService(bgpaas_name, parent_obj=project_obj, autonomous_system=64512) bgpaas.add_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_create(bgpaas) router1_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + port_name self.wait_to_get_object(config_db.BgpAsAServiceST, bgpaas.get_fq_name_str()) self.wait_to_get_object(config_db.BgpRouterST, router1_name) server_fq_name = ':'.join(self.get_ri_name(vn1_obj)) + ':bgpaas-server' self.wait_to_get_object(config_db.BgpRouterST, server_fq_name) server_router_obj = self._vnc_lib.bgp_router_read(fq_name_str=server_fq_name) router1_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + port_name mx_bgp_router = self.create_bgp_router("mx-bgp-router", "contrail") mx_bgp_router_name = mx_bgp_router.get_fq_name_str() self.wait_to_get_object(config_db.BgpRouterST, mx_bgp_router_name) mx_bgp_router = self._vnc_lib.bgp_router_read(fq_name_str=mx_bgp_router_name) self.check_bgp_no_peering(server_router_obj, mx_bgp_router) for i in range(5): router1_obj = self._vnc_lib.bgp_router_read(fq_name_str=router1_name) params = router1_obj.get_bgp_router_parameters() if not params: gevent.sleep(1) continue self.assertEqual(router1_obj.get_bgp_router_parameters().address, '10.0.0.252') self.assertEqual(router1_obj.get_bgp_router_parameters().identifier, '10.0.0.252') self.assertNotEqual(params, None) # verify ref from vmi to bgp-router is created port_obj_updated = self._vnc_lib.virtual_machine_interface_read(id=port_obj.uuid) self.assertEqual(port_obj_updated.bgp_router_refs[0]['to'], router1_obj.fq_name) # remove bgp-router ref from vmi self._vnc_lib.ref_update(obj_uuid=port_obj_updated.uuid, obj_type='virtual_machine_interface', ref_uuid=router1_obj.uuid, ref_fq_name=router1_obj.fq_name, ref_type='bgp-router', operation='DELETE') port_obj_updated = self._vnc_lib.virtual_machine_interface_read(id=port_obj.uuid) self.assertIsNone(port_obj_updated.get_bgp_router_refs()) # check bgp-router ref in vmi is restored during reinit config_db.VirtualMachineST._dict = {} config_db.BgpRouterST._dict = {} config_db.BgpAsAServiceST._dict = {} to_bgp.transformer.reinit() gevent.sleep(1) port_obj_updated = self._vnc_lib.virtual_machine_interface_read(id=port_obj.uuid) refs = port_obj_updated.get_bgp_router_refs() self.assertNotEqual(refs, None) self.assertEqual(refs[0]['to'], router1_obj.fq_name) # remove VMI from bgpaas and ensure bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name=bgpaas.fq_name) port_obj_updated = self._vnc_lib.virtual_machine_interface_read(id=port_obj.uuid) bgpaas.del_virtual_machine_interface(port_obj_updated) self._vnc_lib.bgp_as_a_service_update(bgpaas) gevent.sleep(1) bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name=bgpaas.fq_name) port_obj_updated = self._vnc_lib.virtual_machine_interface_read(id=port_obj.uuid) # ensure vmi is not attached to bpgaas self.assertEqual(bgpaas.get_virtual_machine_interface_refs(), None) # vmi loses vmi->bgp-router ref self.assertEqual(port_obj_updated.get_bgp_router_refs(), None) # ensure VMI has no bgpaas ref self.assertEqual(port_obj_updated.get_bgp_as_a_service_back_refs(), None) # add VMI back to bgpaas bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name=bgpaas.fq_name) port_obj_updated = self._vnc_lib.virtual_machine_interface_read(id=port_obj.uuid) bgpaas.add_virtual_machine_interface(port_obj_updated) self._vnc_lib.bgp_as_a_service_update(bgpaas) bgpaas = self._vnc_lib.bgp_as_a_service_read(fq_name=bgpaas.fq_name) port_obj_updated = self._vnc_lib.virtual_machine_interface_read(id=port_obj.uuid) # ensure vmi is attached to bgpaas self.assertNotEqual(bgpaas.get_virtual_machine_interface_refs(), None) # VMI has bgpaas ref self.assertNotEqual(port_obj_updated.get_bgp_as_a_service_back_refs(), None) # vmi got vmi->bgp-router ref for i in range(10): port_obj_updated = self._vnc_lib.virtual_machine_interface_read(id=port_obj.uuid) if not port_obj_updated.get_bgp_router_refs(): gevent.sleep(1) print 'retrying...' self.assertNotEqual(port_obj_updated.get_bgp_router_refs(), None, msg="vmi did not get ref to bgp-router") self.check_bgp_peering(server_router_obj, router1_obj, 1) self.check_v4_bgp_gateway(router1_name, '10.0.0.254') self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') # Set suppress_route_advertisement; and expect the gateways # to be reset to None in bgpaas-client router bgpaas.set_bgpaas_suppress_route_advertisement(True) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v4_bgp_gateway(router1_name, None) self.check_v6_bgp_gateway(router1_name, None) # Unset suppress_route_advertisement; and expect the gateways # to be set to gateway addresses in bgpaas-client router bgpaas.set_bgpaas_suppress_route_advertisement(False) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v4_bgp_gateway(router1_name, '10.0.0.254') self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') # Set bgpaas_ipv4_mapped_ipv6_nexthop and expect the # ipv4-mapped ipv6 address is set as gateway bgpaas.set_bgpaas_ipv4_mapped_ipv6_nexthop(True) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v6_bgp_gateway(router1_name, '::ffff:10.0.0.254') # unset bgpaas_ipv4_mapped_ipv6_nexthop and expect the # subnets ipv6 gateway address is set as gateway bgpaas.set_bgpaas_ipv4_mapped_ipv6_nexthop(False) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_v6_bgp_gateway(router1_name, '1000:ffff:ffff:ffff:ffff:ffff:ffff:fffe') self._vnc_lib.instance_ip_delete(id=v4_obj.uuid) v4_obj = InstanceIp(name=port_name+'-v4') v4_obj.set_virtual_machine_interface(port_obj) v4_obj.set_virtual_network(vn1_obj) v4_obj.set_instance_ip_family('v4') v4_obj.set_instance_ip_address('10.0.0.60') self._vnc_lib.instance_ip_create(v4_obj) self.check_bgp_router_ip(router1_name, '10.0.0.60') self.check_bgp_router_identifier(router1_name, '10.0.0.60') bgpaas.set_bgpaas_ip_address('10.0.0.70') self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_bgp_router_ip(router1_name, '10.0.0.70') v4_obj.del_virtual_machine_interface(port_obj) v4_obj.del_virtual_network(vn1_obj) self._vnc_lib.instance_ip_delete(id=v4_obj.uuid) self.check_bgp_router_ip(router1_name, '10.0.0.70') self.check_bgp_router_identifier(router1_name, '10.0.0.70') port2_name = self.id() + 'p2' port2_obj = VirtualMachineInterface(port2_name, parent_obj=project_obj) port2_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port2_obj) bgpaas.add_virtual_machine_interface(port2_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) router2_name = vn1_obj.get_fq_name_str() + ':' + vn1_name + ':' + port2_name self.wait_to_get_object(config_db.BgpRouterST, router2_name) router2_obj = self._vnc_lib.bgp_router_read(fq_name_str=router2_name) self.check_bgp_peering(server_router_obj, router2_obj, 2) self.check_bgp_peering(server_router_obj, router1_obj, 2) bgpaas.del_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.wait_to_delete_object(config_db.BgpRouterST, router1_name) self._vnc_lib.bgp_as_a_service_delete(id=bgpaas.uuid) self.wait_to_delete_object(config_db.BgpRouterST, router2_name) self._vnc_lib.instance_ip_delete(id=v6_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port2_obj.uuid) self._vnc_lib.virtual_network_delete(fq_name=vn1_obj.get_fq_name()) self.check_ri_is_deleted(vn1_obj.fq_name+[vn1_obj.name]) self._vnc_lib.bgp_router_delete(id=mx_bgp_router.uuid)
def test_bgpaas(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, ['10.0.0.0/24', '1000::/16']) project_name = ['default-domain', 'default-project'] project_obj = self._vnc_lib.project_read(fq_name=project_name) port_name = self.id() + 'p1' port_obj = VirtualMachineInterface(port_name, parent_obj=project_obj) port_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port_obj) v6_obj = InstanceIp(name=port_name + '-v6') v6_obj.set_virtual_machine_interface(port_obj) v6_obj.set_virtual_network(vn1_obj) v6_obj.set_instance_ip_family('v6') self._vnc_lib.instance_ip_create(v6_obj) v4_obj = InstanceIp(name=port_name + '-v4') v4_obj.set_virtual_machine_interface(port_obj) v4_obj.set_virtual_network(vn1_obj) v4_obj.set_instance_ip_family('v4') self._vnc_lib.instance_ip_create(v4_obj) bgpaas_name = self.id() + 'bgp1' bgpaas = BgpAsAService(bgpaas_name, parent_obj=project_obj, autonomous_system=64512) bgpaas.add_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_create(bgpaas) router1_name = vn1_obj.get_fq_name_str( ) + ':' + vn1_name + ':' + port_name self.wait_to_get_object(config_db.BgpAsAServiceST, bgpaas.get_fq_name_str()) self.wait_to_get_object(config_db.BgpRouterST, router1_name) server_fq_name = ':'.join(self.get_ri_name(vn1_obj)) + ':bgpaas-server' self.wait_to_get_object(config_db.BgpRouterST, server_fq_name) server_router_obj = self._vnc_lib.bgp_router_read( fq_name_str=server_fq_name) mx_bgp_router = self.create_bgp_router("mx-bgp-router", "contrail") mx_bgp_router_name = mx_bgp_router.get_fq_name_str() self.wait_to_get_object(config_db.BgpRouterST, mx_bgp_router_name) mx_bgp_router = self._vnc_lib.bgp_router_read( fq_name_str=mx_bgp_router_name) self.check_bgp_no_peering(server_router_obj, mx_bgp_router) router1_obj = self._vnc_lib.bgp_router_read(fq_name_str=router1_name) self.assertEqual(router1_obj.get_bgp_router_parameters().address, '10.0.0.252') self.assertEqual(router1_obj.get_bgp_router_parameters().identifier, '10.0.0.252') self.check_bgp_peering(server_router_obj, router1_obj, 1) v4_obj.set_instance_ip_address('10.0.0.60') self._vnc_lib.instance_ip_update(v4_obj) self.check_bgp_router_ip(router1_name, '10.0.0.60') self.check_bgp_router_identifier(router1_name, '10.0.0.60') bgpaas.set_bgpaas_ip_address('10.0.0.70') self._vnc_lib.bgp_as_a_service_update(bgpaas) self.check_bgp_router_ip(router1_name, '10.0.0.70') v4_obj.del_virtual_machine_interface(port_obj) v4_obj.del_virtual_network(vn1_obj) self._vnc_lib.instance_ip_delete(id=v4_obj.uuid) self.check_bgp_router_ip(router1_name, '10.0.0.70') self.check_bgp_router_identifier(router1_name, '10.0.0.70') port2_name = self.id() + 'p2' port2_obj = VirtualMachineInterface(port2_name, parent_obj=project_obj) port2_obj.add_virtual_network(vn1_obj) self._vnc_lib.virtual_machine_interface_create(port2_obj) bgpaas.add_virtual_machine_interface(port2_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) router2_name = vn1_obj.get_fq_name_str( ) + ':' + vn1_name + ':' + port2_name self.wait_to_get_object(config_db.BgpRouterST, router2_name) router2_obj = self._vnc_lib.bgp_router_read(fq_name_str=router2_name) self.check_bgp_peering(server_router_obj, router2_obj, 2) self.check_bgp_peering(server_router_obj, router1_obj, 2) bgpaas.del_virtual_machine_interface(port_obj) self._vnc_lib.bgp_as_a_service_update(bgpaas) self.wait_to_delete_object(config_db.BgpRouterST, router1_name) self._vnc_lib.bgp_as_a_service_delete(id=bgpaas.uuid) self.wait_to_delete_object(config_db.BgpRouterST, router2_name) self._vnc_lib.instance_ip_delete(id=v6_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port_obj.uuid) self._vnc_lib.virtual_machine_interface_delete(id=port2_obj.uuid) self._vnc_lib.virtual_network_delete(fq_name=vn1_obj.get_fq_name()) self.check_ri_is_deleted(vn1_obj.fq_name + [vn1_obj.name]) self._vnc_lib.bgp_router_delete(id=mx_bgp_router.uuid)