def _pre_create_physical_router(self): physical_router = PhysicalRouter(name='test-physical-router') self.physical_router_hostname = 'test-physical-router-hostname' physical_router.set_fabric(self.fabric) physical_router.set_physical_router_hostname( self.physical_router_hostname) physical_router_uuid = self.api.physical_router_create(physical_router) self.physical_router = \ self.api.physical_router_read(id=physical_router_uuid) # create physical_interface_red physical_interface_red = PhysicalInterface( name='test-physical-interface-red', parent_obj=self.physical_router) self.physical_interface_red_port_id = \ 'test-physical-interface-red-port-id' physical_interface_red.set_display_name( self.physical_interface_red_port_id) physical_interface_red_uuid = \ self.api.physical_interface_create(physical_interface_red) self.physical_interface_red = \ self.api.physical_interface_read(id=physical_interface_red_uuid) # create physical_interface_green physical_interface_green = PhysicalInterface( name='test-physical-interface-green', parent_obj=self.physical_router) self.physical_interface_green_port_id = \ 'test-physical-interface-green-port-id' physical_interface_green.set_display_name( self.physical_interface_green_port_id) physical_interface_green_uuid = \ self.api.physical_interface_create(physical_interface_green) self.physical_interface_green = \ self.api.physical_interface_read(id=physical_interface_green_uuid)
def test_l2_dci_mode(self): """Validate l2 mode dci object create and edit operation. It executes following steps: - Create 3 fabric, each one with one PR, all PR except one PR should be marked not DCI-gateway. - Create 3 VN, two tenant VN and one routed VN Validate l2 mode dci create failure by doing following operation: - Remove two fabrics from dci and keep only one fabric in dci and verify create dci fails as not having two fabrics. - Remove all VN from dci and verify create dci fails as not having at least one VN. - Create l2 mode dci with 3 fabric and 2 tenant vn, verify it fails with Error of fabric does not have DCI-gateway RB role PR. - Remove faulty fabric. and add 3rd routed vn to dci. verify create operation fails with error routed vn not allowed. Create successfully l2 dci with 2 fabrics and 2 vn. execute following edit operation verification: - Add fabric to dci having no DCI-gw role PR, verify error. - Add routed vnto dci, verify error. : Args: : return: : it generates exception on failure : """ dict_fabrics = {} dict_prs = {} dict_vns = {} non_dci_fabric_name = '' routed_vn_name = '' ipam_obj = self.create_vn_ipam(self.id()) subnetmask = 24 vn_starting_index = 21 for i in range(1, 4): fabric_name = '%s-fabric%s' % (self.id(), str(i)) fabric_obj = Fabric(fabric_name) dict_fabrics[fabric_name] = fabric_obj fabric_uuid = self._vnc_lib.fabric_create(fabric_obj) self._vnc_lib.fabric_read(id=fabric_uuid) pr_name = '%s-PR%s' % (self.id(), str(i)) pr = PhysicalRouter(pr_name) pr.set_fabric(fabric_obj) if i != 3: pr.set_routing_bridging_roles( RoutingBridgingRolesType(rb_roles=['DCI-Gateway'])) else: non_dci_fabric_name = fabric_name pr.set_routing_bridging_roles( RoutingBridgingRolesType(rb_roles=['DC-Gateway'])) dict_prs[pr_name] = pr pr_uuid = self._vnc_lib.physical_router_create(pr) self._vnc_lib.physical_router_read(id=pr_uuid) subnet = "%s.0.0.0" % vn_starting_index vn_starting_index += 1 vn_name = self.make_vn_name(i) vn_category = 'tenant' if i == 3: routed_vn_name = vn_name vn_category = 'routed' dict_vns[vn_name] = self.create_vn_with_subnets( i, vn_name, ipam_obj, subnet, subnetmask, vn_category) vn_list = [] for vnname, obj in dict_vns.items(): if vnname != routed_vn_name: vn_list.append(obj) fabric_list = [] for fname, obj in dict_fabrics.items(): if fname != non_dci_fabric_name: fabric_list.append(obj) dci_obj, dci_uuid = self._verify_l2_dci_create_edit( 'l2_dci', dict_fabrics, dict_vns, non_dci_fabric_name, routed_vn_name, vn_list, fabric_list, None) # validate Edit Operation dci_obj, dci_uuid = self._verify_l2_dci_create_edit( 'l2_dci', dict_fabrics, dict_vns, non_dci_fabric_name, routed_vn_name, vn_list, fabric_list, dci_obj) # cleanup self._vnc_lib.data_center_interconnect_delete(id=dci_uuid) for name, obj in dict_vns.items(): self._vnc_lib.virtual_network_delete(id=obj.get_uuid()) self._vnc_lib.network_ipam_delete(id=ipam_obj.uuid) for name, obj in dict_prs.items(): self._vnc_lib.physical_router_delete(id=obj.get_uuid()) for name, obj in dict_fabrics.items(): self._vnc_lib.fabric_delete(id=obj.get_uuid())