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 physical_interface_create(name, physical_router, **kwargs): ''' Create specific Contrail physical interface CLI Example: .. code-block:: bash salt '*' contrail.physical_interface_create ge-0/0/10 physical_router_name ''' ret = {} vnc_client = _auth(**kwargs) gsc_obj = _get_config(vnc_client) pinterf_obj = physical_interface_get(name, physical_router, **kwargs) if 'Error' not in pinterf_obj: return { 'OK': 'Physical interface ' + name + ' on ' + physical_router + ' already exists' } else: if __opts__['test']: return "Physical interface " + name + " will be created" prouter = physical_router_get(physical_router) prouter_obj = vnc_client._object_read( 'physical-router', id=prouter[physical_router]['_uuid']) pinterf_obj = PhysicalInterface(name, prouter_obj) vnc_client.physical_interface_create(pinterf_obj) return "Created"
def test_single_untagged_vmi_for_enterprise(self): proj_obj, fabric_obj, pr_obj = self._create_prerequisites() esi_id = '00:11:22:33:44:55:66:77:88:99' pi_name = self.id() + '_physical_interface1' pi = PhysicalInterface(name=pi_name, parent_obj=pr_obj, ethernet_segment_identifier=esi_id) pi_uuid = self._vnc_lib.physical_interface_create(pi) pi_obj = self._vnc_lib.physical_interface_read(id=pi_uuid) self._validate_untagged_vmis(fabric_obj, proj_obj, pi_obj) self.api.physical_interface_delete(id=pi_uuid) self.api.physical_router_delete(id=pr_obj.uuid) self.api.fabric_delete(id=fabric_obj.uuid)
def setUp(self): super(TestVMIVirtualPortGroupRelation, self).setUp() if six.PY3: self.assertItemsEqual = self.assertCountEqual # Create project self.proj_obj = Project('%s-project' % (self.id())) self.api.project_create(self.proj_obj) # Create Fabric self.fabric_obj = Fabric('%s-fabric' % (self.id())) _ = self.api.fabric_create(self.fabric_obj) self.fabric_name = self.fabric_obj.get_fq_name() # Create physical router pr_name = self.id() + '_physical_router' pr = PhysicalRouter(pr_name) pr_uuid = self.api.physical_router_create(pr) self.pr_obj = self.api.physical_router_read(id=pr_uuid) # Create Physical interface esi_id = '00:11:22:33:44:55:66:77:88:99' pi_name = self.id() + '_physical_interface1' pi = PhysicalInterface(name=pi_name, parent_obj=self.pr_obj, ethernet_segment_identifier=esi_id) self.pi_uuid = self.api.physical_interface_create(pi) pi_obj = self.api.physical_interface_read(id=self.pi_uuid) self.pi_fq_name = pi_obj.get_fq_name() # Create VN self.vn = VirtualNetwork('vn-%s' % (self.id()), parent_obj=self.proj_obj) self.vn_uuid = self.api.virtual_network_create(self.vn) # Create VPG self.vpg_name = "vpg-%s" % self.id() vpg = VirtualPortGroup(self.vpg_name, parent_obj=self.fabric_obj) self.vpg_uuid = self.api.virtual_port_group_create(vpg) vpg_obj = self.api.virtual_port_group_read(id=self.vpg_uuid) self.vpg_name = vpg_obj.get_fq_name()
def _create_vpg_prerequisites(self, enterprise_style_flag=True, create_second_pr=False, disable_vlan_vn_uniqueness_check=False): # Create project first proj_obj = Project('%s-project' % (self.id())) self.api.project_create(proj_obj) # Create Fabric with enterprise style flag set to false fabric_obj = Fabric('%s-fabric' % (self.id())) fabric_obj.set_fabric_enterprise_style(enterprise_style_flag) fabric_obj.set_disable_vlan_vn_uniqueness_check( disable_vlan_vn_uniqueness_check) fabric_uuid = self.api.fabric_create(fabric_obj) fabric_obj = self.api.fabric_read(id=fabric_uuid) # Create physical router pr_name = self.id() + '_physical_router' pr = PhysicalRouter(pr_name) pr_uuid = self._vnc_lib.physical_router_create(pr) pr_obj = self._vnc_lib.physical_router_read(id=pr_uuid) # Create physical interface esi_id = '00:11:22:33:44:55:66:77:88:99' pi_name = self.id() + '__phy_intf_1' pi = PhysicalInterface(name=pi_name, parent_obj=pr_obj, ethernet_segment_identifier=esi_id) pi_uuid = self.api.physical_interface_create(pi) pi_obj = self.api.physical_interface_read(id=pi_uuid) # Create VN vn_name = 'vn-%s-1' % self.id() vn = VirtualNetwork(vn_name, parent_obj=proj_obj) vn_uuid = self.api.virtual_network_create(vn) vn_obj = self.api.virtual_network_read(id=vn_uuid) return proj_obj, fabric_obj, pr_obj, pi_obj, vn_obj
def _create_fabrics_prs_fip_snat(self, dict_prs, qfx_pi_name="xe-0/0/0", name="DC"): self._init_fabric_prs() self.create_features(['dc-gateway']) self.create_physical_roles(['leaf', 'spine']) ov_roles = ['crb-access', 'dc-gateway'] self.create_overlay_roles(ov_roles) self.create_role_definitions([ AttrDict({ 'name': 'dc-gateway@spine', 'physical_role': 'spine', 'overlay_role': 'dc-gateway', 'features': ['dc-gateway'], 'feature_configs': {} }), AttrDict({ 'name': 'crb-access@leaf', 'physical_role': 'leaf', 'overlay_role': 'crb-access', 'features': ['dc-gateway'], 'feature_configs': {} }) ]) jt = self.create_job_template('job-template-' + name + self.id()) self.job_templates.append(jt) fabric = self.create_fabric('fab-' + name + self.id()) self.fabrics.append(fabric) np1, rc1 = self._create_node_profile(name + '-leaf' + self.id(), 'junos-qfx', 'leaf', ['crb-access'], jt) np2, rc2 = self._create_node_profile(name + self.id(), 'junos', 'spine', ['dc-gateway'], jt) num = 22 for prname in dict_prs.keys(): if 'qfx' in prname: br, pr = self.create_router( prname + self.id(), '7.7.7.8', product='qfx10002', family='junos-qfx', role='leaf', rb_roles=['crb-access'], physical_role=self.physical_roles['leaf'], overlay_role=self.overlay_roles['crb-access'], fabric=fabric, node_profile=np1) else: br, pr = self.create_router( prname + self.id(), '7.7.7.7', product='mx240', family='junos', role='spine', rb_roles=['dc-gateway'], physical_role=self.physical_roles['spine'], overlay_role=self.overlay_roles['dc-gateway'], fabric=fabric, node_profile=np2) pr.set_physical_router_loopback_ip('30.30.0.%s' % num) num += 1 self._vnc_lib.physical_router_update(pr) if 'qfx' in prname: pi_name = qfx_pi_name qfx_pi_obj_1 = PhysicalInterface(pi_name, parent_obj=pr) self._vnc_lib.physical_interface_create(qfx_pi_obj_1) self.physical_routers.append(pr) self.bgp_routers.append(br) dict_prs[prname] = pr return fabric, qfx_pi_obj_1
def test_vmi_update(self): proj_obj, fabric_obj, pr_objs = self._create_prerequisites( enterprise_style_flag=False, create_second_pr=True) pr_obj_1 = pr_objs[0] pr_obj_2 = pr_objs[1] # Create first PI esi_id = '00:11:22:33:44:55:66:77:88:99' pi_name = self.id() + '_physical_interface1' pi_1 = PhysicalInterface(name=pi_name, parent_obj=pr_obj_1, ethernet_segment_identifier=esi_id) pi_uuid_1 = self._vnc_lib.physical_interface_create(pi_1) pi_obj_1 = self._vnc_lib.physical_interface_read(id=pi_uuid_1) fabric_name = fabric_obj.get_fq_name() pi_fq_name_1 = pi_obj_1.get_fq_name() # Create second PI pi_name = self.id() + '_physical_interface2' pi_2 = PhysicalInterface(name=pi_name, parent_obj=pr_obj_2, ethernet_segment_identifier=esi_id) pi_uuid_2 = self._vnc_lib.physical_interface_create(pi_2) pi_obj_2 = self._vnc_lib.physical_interface_read(id=pi_uuid_2) fabric_name = fabric_obj.get_fq_name() pi_fq_name_2 = pi_obj_2.get_fq_name() # Create VPG vpg_name = "vpg-1" vpg = VirtualPortGroup(vpg_name, parent_obj=fabric_obj) vpg_uuid = self.api.virtual_port_group_create(vpg) vpg_obj = self._vnc_lib.virtual_port_group_read(id=vpg_uuid) vpg_name = vpg_obj.get_fq_name() # Create single VN vn1 = VirtualNetwork('vn1-%s' % (self.id()), parent_obj=proj_obj) self.api.virtual_network_create(vn1) # Create a VMI that's attached to vpg-1 and having reference # to vn1 vmi_obj = VirtualMachineInterface(self.id() + "1", parent_obj=proj_obj) vmi_obj.set_virtual_network(vn1) # Populate binding profile to be used in VMI create binding_profile = {'local_link_information': [ {'port_id': pi_fq_name_1[2], 'switch_id': pi_fq_name_1[2], 'fabric': fabric_name[-1], 'switch_info': pi_fq_name_1[1]}, {'port_id': pi_fq_name_2[2], 'switch_id': pi_fq_name_2[2], 'fabric': fabric_name[-1], 'switch_info': pi_fq_name_2[1]}]} kv_pairs = KeyValuePairs( [KeyValuePair(key='vpg', value=vpg_name[-1]), KeyValuePair(key='vif_type', value='vrouter'), KeyValuePair(key='vnic_type', value='baremetal'), KeyValuePair(key='profile', value=json.dumps(binding_profile))]) vmi_obj.set_virtual_machine_interface_bindings(kv_pairs) vmi_obj.set_virtual_machine_interface_properties( VirtualMachineInterfacePropertiesType(sub_interface_vlan_tag=42)) vmi_uuid_1 = self.api.virtual_machine_interface_create(vmi_obj) # Read physical interface type, it should be set to access pi_obj_1 = self._vnc_lib.physical_interface_read(id=pi_uuid_1) pi_obj_2 = self._vnc_lib.physical_interface_read(id=pi_uuid_2) intf_type_pi_1 = pi_obj_1.get_physical_interface_type() self.assertEqual(intf_type_pi_1, 'access') intf_type_pi_2 = pi_obj_2.get_physical_interface_type() self.assertEqual(intf_type_pi_2, 'access') vpg_obj.add_virtual_machine_interface(vmi_obj) self.api.virtual_port_group_update(vpg_obj) # Now, remove one of the local_link_information binding_profile = {'local_link_information': [ {'port_id': pi_fq_name_1[2], 'switch_id': pi_fq_name_1[2], 'fabric': fabric_name[-1], 'switch_info': pi_fq_name_1[1]}]} vmi_obj.set_virtual_machine_interface_bindings(kv_pairs) self.api.virtual_machine_interface_update(vmi_obj) self.api.virtual_machine_interface_delete(id=vmi_uuid_1) self.api.virtual_port_group_delete(id=vpg_obj.uuid) # Read physical interface type again, it should be set to None pi_obj_1 = self._vnc_lib.physical_interface_read(id=pi_uuid_1) pi_obj_2 = self._vnc_lib.physical_interface_read(id=pi_uuid_2) intf_type_pi_1 = pi_obj_1.get_physical_interface_type() self.assertEqual(intf_type_pi_1, None) intf_type_pi_2 = pi_obj_2.get_physical_interface_type() self.assertEqual(intf_type_pi_2, None) self.api.physical_interface_delete(id=pi_uuid_1) self.api.physical_interface_delete(id=pi_uuid_2) self.api.physical_router_delete(id=pr_obj_1.uuid) self.api.physical_router_delete(id=pr_obj_2.uuid) self.api.fabric_delete(id=fabric_obj.uuid)
def test_single_vn_in_vpg_with_different_vlan_for_service_provider(self): proj_obj, fabric_obj, pr_obj = self._create_prerequisites( enterprise_style_flag=False) esi_id = '00:11:22:33:44:55:66:77:88:99' pi_name = self.id() + '_physical_interface1' pi = PhysicalInterface(name=pi_name, parent_obj=pr_obj, ethernet_segment_identifier=esi_id) pi_uuid = self._vnc_lib.physical_interface_create(pi) pi_obj = self._vnc_lib.physical_interface_read(id=pi_uuid) fabric_name = fabric_obj.get_fq_name() pi_fq_name = pi_obj.get_fq_name() # Create VPG vpg_name = "vpg-1" vpg = VirtualPortGroup(vpg_name, parent_obj=fabric_obj) vpg_uuid = self.api.virtual_port_group_create(vpg) vpg_obj = self._vnc_lib.virtual_port_group_read(id=vpg_uuid) vpg_name = vpg_obj.get_fq_name() # Create single VN vn1 = VirtualNetwork('vn1-%s' % (self.id()), parent_obj=proj_obj) self.api.virtual_network_create(vn1) # Create a VMI that's attached to vpg-1 and having reference # to vn1 vmi_obj = VirtualMachineInterface(self.id() + "1", parent_obj=proj_obj) vmi_obj.set_virtual_network(vn1) # Create KV_Pairs for this VMI kv_pairs = self._create_kv_pairs(pi_fq_name, fabric_name, vpg_name) vmi_obj.set_virtual_machine_interface_bindings(kv_pairs) vmi_obj.set_virtual_machine_interface_properties( VirtualMachineInterfacePropertiesType(sub_interface_vlan_tag=42)) vmi_uuid_1 = self.api.virtual_machine_interface_create(vmi_obj) vpg_obj.add_virtual_machine_interface(vmi_obj) self.api.virtual_port_group_update(vpg_obj) # Now, try to create the second VMI with same VN, but with a different # VLAN. This should pass vmi_obj_2 = VirtualMachineInterface(self.id() + "2", parent_obj=proj_obj) vmi_obj_2.set_virtual_network(vn1) # Create KV_Pairs for this VMI kv_pairs = self._create_kv_pairs(pi_fq_name, fabric_name, vpg_name) vmi_obj_2.set_virtual_machine_interface_bindings(kv_pairs) vmi_obj_2.set_virtual_machine_interface_properties( VirtualMachineInterfacePropertiesType(sub_interface_vlan_tag=43)) vmi_uuid_2 = self.api.virtual_machine_interface_create(vmi_obj_2) self.api.virtual_machine_interface_delete(id=vmi_uuid_1) self.api.virtual_machine_interface_delete(id=vmi_uuid_2) self.api.virtual_port_group_delete(id=vpg_obj.uuid) self.api.physical_interface_delete(id=pi_uuid) self.api.physical_router_delete(id=pr_obj.uuid) self.api.fabric_delete(id=fabric_obj.uuid)
def test_different_vn_on_same_vlan_across_vpgs_in_enterprise(self): proj_obj, fabric_obj, pr_obj = self._create_prerequisites() # Create Physical Interface for VPG-1 esi_id = '00:11:22:33:44:55:66:77:88:99' pi_name = self.id() + '_physical_interface1' pi = PhysicalInterface(name=pi_name, parent_obj=pr_obj, ethernet_segment_identifier=esi_id) pi_uuid = self._vnc_lib.physical_interface_create(pi) pi_obj = self._vnc_lib.physical_interface_read(id=pi_uuid) fabric_name = fabric_obj.get_fq_name() pi_fq_name_1 = pi_obj.get_fq_name() # Create Physical Interface for VPG-2 esi_id = '00:11:22:33:44:55:66:77:88:99' pi_name = self.id() + '_physical_interface2' pi = PhysicalInterface(name=pi_name, parent_obj=pr_obj, ethernet_segment_identifier=esi_id) pi_uuid_2 = self._vnc_lib.physical_interface_create(pi) pi_obj = self._vnc_lib.physical_interface_read(id=pi_uuid_2) fabric_name = fabric_obj.get_fq_name() pi_fq_name_2 = pi_obj.get_fq_name() # Create VPG-1 vpg_name = "vpg-1" vpg = VirtualPortGroup(vpg_name, parent_obj=fabric_obj) vpg_uuid = self.api.virtual_port_group_create(vpg) vpg_obj_1 = self._vnc_lib.virtual_port_group_read(id=vpg_uuid) vpg_name_1 = vpg_obj_1.get_fq_name() # Create VPG-2 vpg_name = "vpg-2" vpg = VirtualPortGroup(vpg_name, parent_obj=fabric_obj) vpg_uuid = self.api.virtual_port_group_create(vpg) vpg_obj_2 = self._vnc_lib.virtual_port_group_read(id=vpg_uuid) vpg_name_2 = vpg_obj_2.get_fq_name() # Create VN-1 vn1 = VirtualNetwork('vn1-%s' % (self.id()), parent_obj=proj_obj) self.api.virtual_network_create(vn1) # Create VN-2 vn2 = VirtualNetwork('vn2-%s' % (self.id()), parent_obj=proj_obj) self.api.virtual_network_create(vn2) # Create a VMI that's attached to vpg-1 and having reference # to vn1 vmi_obj = VirtualMachineInterface(self.id() + "1", parent_obj=proj_obj) vmi_obj.set_virtual_network(vn1) # Create KV_Pairs for this VMI kv_pairs = self._create_kv_pairs(pi_fq_name_1, fabric_name, vpg_name_1) vmi_obj.set_virtual_machine_interface_bindings(kv_pairs) vmi_obj.set_virtual_machine_interface_properties( VirtualMachineInterfacePropertiesType(sub_interface_vlan_tag=42)) vmi_uuid_1 = self.api.virtual_machine_interface_create(vmi_obj) vpg_obj_1.add_virtual_machine_interface(vmi_obj) self.api.virtual_port_group_update(vpg_obj_1) # Create a VMI that's attached to vpg-2 and having reference # to vn2, but with same vlan_tag=42, this should fail vmi_obj_2 = VirtualMachineInterface(self.id() + "2", parent_obj=proj_obj) vmi_obj_2.set_virtual_network(vn2) # Create KV_Pairs for this VMI kv_pairs = self._create_kv_pairs(pi_fq_name_2, fabric_name, vpg_name_2) vmi_obj_2.set_virtual_machine_interface_bindings(kv_pairs) vmi_obj_2.set_virtual_machine_interface_properties( VirtualMachineInterfacePropertiesType(sub_interface_vlan_tag=42)) with ExpectedException(BadRequest): self.api.virtual_machine_interface_create(vmi_obj_2) self.api.virtual_machine_interface_delete(id=vmi_uuid_1) self.api.virtual_port_group_delete(id=vpg_obj_1.uuid) self.api.virtual_port_group_delete(id=vpg_obj_2.uuid) self.api.physical_interface_delete(id=pi_uuid) self.api.physical_interface_delete(id=pi_uuid_2) self.api.physical_router_delete(id=pr_obj.uuid) self.api.fabric_delete(id=fabric_obj.uuid)
def test_same_vn_in_same_vpg_for_enterprise(self): proj_obj, fabric_obj, pr_obj = self._create_prerequisites() esi_id = '00:11:22:33:44:55:66:77:88:99' pi_name = self.id() + '_physical_interface1' pi = PhysicalInterface(name=pi_name, parent_obj=pr_obj, ethernet_segment_identifier=esi_id) pi_uuid = self._vnc_lib.physical_interface_create(pi) pi_obj = self._vnc_lib.physical_interface_read(id=pi_uuid) fabric_name = fabric_obj.get_fq_name() pi_fq_name = pi_obj.get_fq_name() # Create VPG vpg_name = "vpg-1" vpg = VirtualPortGroup(vpg_name, parent_obj=fabric_obj) vpg_uuid = self.api.virtual_port_group_create(vpg) vpg_obj = self._vnc_lib.virtual_port_group_read(id=vpg_uuid) vpg_name = vpg_obj.get_fq_name() # Create single VN vn1 = VirtualNetwork('vn1-%s' % (self.id()), parent_obj=proj_obj) self.api.virtual_network_create(vn1) # Create a VMI that's attached to vpg-1 and having reference # to vn1 vmi_obj = VirtualMachineInterface(self.id() + "1", parent_obj=proj_obj) vmi_obj.set_virtual_network(vn1) # Create KV_Pairs for this VMI kv_pairs = self._create_kv_pairs(pi_fq_name, fabric_name, vpg_name) vmi_obj.set_virtual_machine_interface_bindings(kv_pairs) vmi_obj.set_virtual_machine_interface_properties( VirtualMachineInterfacePropertiesType(sub_interface_vlan_tag=42)) vmi_uuid_1 = self.api.virtual_machine_interface_create(vmi_obj) vpg_obj.add_virtual_machine_interface(vmi_obj) self.api.virtual_port_group_update(vpg_obj) # Now, try to create the second VMI. # This should fail as a VN can be attached to a VPG only once # in a Enterprise style fabric vmi_obj_2 = VirtualMachineInterface(self.id() + "2", parent_obj=proj_obj) vmi_obj_2.set_virtual_network(vn1) # Create KV_Pairs for this VMI kv_pairs = self._create_kv_pairs(pi_fq_name, fabric_name, vpg_name) vmi_obj_2.set_virtual_machine_interface_bindings(kv_pairs) vmi_obj_2.set_virtual_machine_interface_properties( VirtualMachineInterfacePropertiesType(sub_interface_vlan_tag=43)) with ExpectedException(BadRequest): self.api.virtual_machine_interface_create(vmi_obj_2) self.api.virtual_machine_interface_delete(id=vmi_uuid_1) self.api.virtual_port_group_delete(id=vpg_obj.uuid) self.api.physical_interface_delete(id=pi_uuid) self.api.physical_router_delete(id=pr_obj.uuid) self.api.fabric_delete(id=fabric_obj.uuid)