def test_find_pports_for_portlabel_blank(self, mock_sys_get): physnet = 'default' sriov_adaps = [ mock.Mock(phys_ports=[ mock.Mock(loc_code='port1', label=''), mock.Mock(loc_code='port3', label='data1')]), mock.Mock(phys_ports=[ mock.Mock(loc_code='port4', label='data2'), mock.Mock(loc_code='port2', label='')])] sys = mock.Mock(asio_config=mock.Mock(sriov_adapters=sriov_adaps)) mock_sys_get.return_value = [sys] pports = tsriov.find_pports_for_portlabel(physnet, sriov_adaps) self.assertEqual({'port1', 'port2'}, {pport.loc_code for pport in pports})
def plug(self, vif, slot_num, new_vif=True): if not new_vif: return None physnet = vif.get_physical_network() if not physnet: # Get physnet from neutron network if not present in vif # TODO(svenkat): This section of code will be eliminated in # pike release. Design will be in place to fix any vif # that has physical_network missing. The fix will be in # compute startup code. net_id = vif['network']['id'] admin_context = ctx.get_admin_context() napi = net_api.API() network = napi.get(admin_context, net_id) physnet = network.physical_network LOG.debug("Plugging vNIC SR-IOV vif for physical network %(physnet)s.", {'physnet': physnet}, instance=self.instance) # Get the msys msys = pvm_ms.System.get(self.adapter)[0] # Physical ports for the given port label pports_w = sriovtask.find_pports_for_portlabel(physnet, self.adapter, msys) pports = [pport.loc_code for pport in pports_w] if not pports: raise exception.VirtualInterfacePlugException( _("Unable to find acceptable Ethernet ports on physical " "network '%(physnet)s' for instance %(inst)s for SRIOV " "based VIF with MAC address %(vif_mac)s.") % { 'physnet': physnet, 'inst': self.instance.name, 'vif_mac': vif['address'] }) # MAC mac_address = pvm_util.sanitize_mac_for_api(vif['address']) # vlan id vlan_id = int(vif['details']['vlan']) # Redundancy: plugin sets from binding:profile, then conf, then default redundancy = int(vif['details']['redundancy']) # Capacity: plugin sets from binding:profile, then conf, then default capacity = vif['details']['capacity'] vnic = pvm_card.VNIC.bld(self.adapter, vlan_id, slot_num=slot_num, mac_addr=mac_address, allowed_vlans=pvm_util.VLANList.NONE, allowed_macs=pvm_util.MACList.NONE) sriovtask.set_vnic_back_devs(vnic, pports, sys_w=msys, redundancy=redundancy, capacity=capacity, check_port_status=True) return vnic.create(parent_type=pvm_lpar.LPAR, parent_uuid=vm.get_pvm_uuid(self.instance))