def _create_vmi(self, pod_name, pod_namespace, pod_id, vm_obj, vn_obj, parent_vmi, idx, network=None): proj_fq_name = vnc_kube_config.cluster_project_fq_name(pod_namespace) proj_obj = self._vnc_lib.project_read(fq_name=proj_fq_name) if network and 'namespace' in network: network.pop('namespace') vmi_prop = None if self._is_pod_nested() and parent_vmi: # Pod is nested. # Allocate a vlan-id for this pod from the vlan space managed # in the VMI of the underlay VM. parent_vmi = VirtualMachineInterfaceKM.get(parent_vmi.uuid) vlan_id = parent_vmi.alloc_vlan() vmi_prop = VirtualMachineInterfacePropertiesType( sub_interface_vlan_tag=vlan_id) obj_uuid = str(uuid.uuid1()) name = VncCommon.make_name(pod_name, obj_uuid) vmi_obj = VirtualMachineInterface( name=name, parent_obj=proj_obj, virtual_machine_interface_properties=vmi_prop, display_name=name) vmi_obj.uuid = obj_uuid vmi_obj.set_virtual_network(vn_obj) vmi_obj.set_virtual_machine(vm_obj) self._associate_security_groups(vmi_obj, proj_obj, pod_namespace) vmi_obj.port_security_enabled = True VirtualMachineInterfaceKM.add_annotations(self, vmi_obj, pod_namespace, pod_name, index=idx, **network) try: vmi_uuid = self._vnc_lib.virtual_machine_interface_create(vmi_obj) except RefsExistError: vmi_uuid = self._vnc_lib.virtual_machine_interface_update(vmi_obj) VirtualMachineInterfaceKM.locate(vmi_uuid) return vmi_uuid
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_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_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_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)