diff --git a/lower-constraints.txt b/lower-constraints.txt index e049d4bf..77d268e5 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -120,7 +120,7 @@ PyNaCl==1.2.1 pyOpenSSL==17.5.0 pyparsing==2.2.0 pyperclip==1.6.0 -pypowervm==1.1.18 +pypowervm==1.1.20 pyroute2==0.4.21 pytest==3.4.2 python-barbicanclient==4.5.2 diff --git a/nova_powervm/tests/virt/powervm/volume/test_vscsi.py b/nova_powervm/tests/virt/powervm/volume/test_vscsi.py index d68f7a45..685edcf9 100644 --- a/nova_powervm/tests/virt/powervm/volume/test_vscsi.py +++ b/nova_powervm/tests/virt/powervm/volume/test_vscsi.py @@ -71,6 +71,7 @@ class BaseVSCSITest(test_vol.TestVolumeAdapter): }, 'target_lun': '1', 'volume_id': 'a_volume_identifier', + 'pg83NAA': '4567' }, } mock_inst = mock.MagicMock() @@ -542,16 +543,18 @@ class TestVSCSIAdapterMultiVIOS(BaseVSCSITest): self.slot_mgr = mock.Mock() self.slot_mgr.build_map.get_vscsi_slot.return_value = 62, 'the_lua' + @mock.patch('pypowervm.tasks.hdisk.build_itls') @mock.patch('pypowervm.tasks.scsi_mapper.add_map') @mock.patch('pypowervm.tasks.scsi_mapper.build_vscsi_mapping') @mock.patch('pypowervm.tasks.hdisk.discover_hdisk') @mock.patch('nova_powervm.virt.powervm.vm.get_vm_id') def test_connect_volume_multi_vio(self, mock_vm_id, mock_discover_hdisk, - mock_build_map, mock_add_map): + mock_build_map, mock_add_map, mock_itls): # The mock return values mock_discover_hdisk.return_value = ( hdisk.LUAStatus.DEVICE_AVAILABLE, 'devname', 'udid') mock_vm_id.return_value = 'partition_id' + mock_itls.return_value = 'fake_itls' def build_map_func(host_uuid, vios_w, lpar_uuid, pv, lpar_slot_num=None, lua=None, target_name=None): @@ -568,6 +571,13 @@ class TestVSCSIAdapterMultiVIOS(BaseVSCSITest): # Run the method self.vol_drv.connect_volume(self.slot_mgr) + # Assert the discover_hdisk call parameters + mock_discover_hdisk.assert_has_calls([ + mock.call( + self.adpt, vio.uuid, 'fake_itls', + device_id='NDU2Nw=='.encode()) + for vio in self.feed], any_order=True) + # As initialized above, remove_maps returns True to trigger update. self.assertEqual(2, mock_add_map.call_count) self.assertEqual(2, mock_build_map.call_count) diff --git a/nova_powervm/virt/powervm/volume/vscsi.py b/nova_powervm/virt/powervm/volume/vscsi.py index 7bf59b7f..5ad24ad9 100644 --- a/nova_powervm/virt/powervm/volume/vscsi.py +++ b/nova_powervm/virt/powervm/volume/vscsi.py @@ -29,9 +29,9 @@ from pypowervm.tasks import partition as pvm_tpar from pypowervm.utils import transaction as tx from pypowervm.wrappers import virtual_io_server as pvm_vios +import base64 import six - CONF = cfg.CONF LOG = logging.getLogger(__name__) @@ -189,8 +189,13 @@ class PVVscsiFCVolumeAdapter(volume.VscsiVolumeAdapter, instance=self.instance) return None, None, None + device_id = self.connection_info.get('data', {}).get('pg83NAA') + if device_id: + device_id = base64.b64encode(device_id.encode()) + status, device_name, udid = hdisk.discover_hdisk(self.adapter, - vios_w.uuid, itls) + vios_w.uuid, itls, + device_id=device_id) if hdisk.good_discovery(status, device_name): LOG.info('Discovered %(hdisk)s on vios %(vios)s for volume ' diff --git a/requirements.txt b/requirements.txt index 7bdcfca3..9fc76de6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ oslo.config>=5.2.0 # Apache-2.0 oslo.log>=3.36.0 # Apache-2.0 oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0 oslo.utils>=3.37.0 # Apache-2.0 -pypowervm>=1.1.18 # Apache-2.0 +pypowervm>=1.1.20 # Apache-2.0 python-swiftclient>=3.2.0 # Apache-2.0 taskflow>=2.16.0 # Apache-2.0 setuptools!=24.0.0,!=34.0.0,!=34.0.1,!=34.0.2,!=34.0.3,!=34.1.0,!=34.1.1,!=34.2.0,!=34.3.0,!=34.3.1,!=34.3.2,!=36.2.0,>=21.0.0 # PSF/ZPL