diff --git a/nova_powervm/tests/virt/powervm/test_driver.py b/nova_powervm/tests/virt/powervm/test_driver.py index d340a54f..3bc2266d 100644 --- a/nova_powervm/tests/virt/powervm/test_driver.py +++ b/nova_powervm/tests/virt/powervm/test_driver.py @@ -357,9 +357,8 @@ class TestPowerVMDriver(test.NoDBTestCase): # _vol_drv_iter not called from spawn because not recreate; but still # called from _add_volume_connection_tasks. - mock_vdi.assert_has_calls([mock.call( - 'context', self.inst, [], - stg_ftsk=self.build_tx_feed.return_value)]) + mock_vdi.assert_called_once_with( + self.inst, [], stg_ftsk=self.build_tx_feed.return_value) # Assert the correct tasks were called self.assertTrue(mock_plug_vifs.called) self.assertTrue(mock_plug_mgmt_vif.called) @@ -621,8 +620,7 @@ class TestPowerVMDriver(test.NoDBTestCase): # _add_volume_connection_tasks. # TODO(IBM): Find a way to make the call just once. Unless it's cheap. mock_vol_drv_iter.assert_has_calls([mock.call( - 'context', self.inst, [], - stg_ftsk=self.build_tx_feed.return_value)] * 2) + self.inst, [], stg_ftsk=self.build_tx_feed.return_value)] * 2) mock_build_slot_mgr.assert_called_once_with( self.inst, self.drv.store_api, adapter=self.drv.adapter, vol_drv_iter=mock_vol_drv_iter.return_value) @@ -927,7 +925,7 @@ class TestPowerVMDriver(test.NoDBTestCase): return_value=vals) as mock_vdi: self.drv._add_volume_connection_tasks( 'context', 'instance', 'bdms', flow, 'stg_ftsk', 'slot_mgr') - mock_vdi.assert_called_once_with('context', 'instance', 'bdms', + mock_vdi.assert_called_once_with('instance', 'bdms', stg_ftsk='stg_ftsk') mock_conn_vol.assert_has_calls([mock.call(vol_drv1, 'slot_mgr'), mock.call(vol_drv2, 'slot_mgr')]) @@ -948,7 +946,7 @@ class TestPowerVMDriver(test.NoDBTestCase): return_value=vals) as mock_vdi: self.drv._add_volume_disconnection_tasks( 'context', 'instance', 'bdms', flow, 'stg_ftsk', 'slot_mgr') - mock_vdi.assert_called_once_with('context', 'instance', 'bdms', + mock_vdi.assert_called_once_with('instance', 'bdms', stg_ftsk='stg_ftsk') mock_disconn_vol.assert_has_calls([mock.call(vol_drv1, 'slot_mgr'), mock.call(vol_drv2, 'slot_mgr')]) @@ -1965,9 +1963,8 @@ class TestPowerVMDriver(test.NoDBTestCase): # Patch so we get the same mock back each time. with mock.patch('nova_powervm.virt.powervm.volume.' 'build_volume_driver', return_value=vol_adpt): - return [ - (bdm, vol_drv) for bdm, vol_drv in self.drv._vol_drv_iter( - 'context', self.inst, bdms)] + return [(bdm, vol_drv) for bdm, vol_drv in + self.drv._vol_drv_iter(self.inst, bdms)] results = _get_results(bdms) self.assertEqual( diff --git a/nova_powervm/virt/powervm/driver.py b/nova_powervm/virt/powervm/driver.py index f0df5b5c..acbfe4e5 100644 --- a/nova_powervm/virt/powervm/driver.py +++ b/nova_powervm/virt/powervm/driver.py @@ -392,8 +392,7 @@ class PowerVMDriver(driver.ComputeDriver): # Build the PowerVM Slot lookup map. Only the recreate action needs # the volume driver iterator (to look up volumes and their client # mappings). - vol_drv_iter = (self._vol_drv_iter(context, instance, bdms, - stg_ftsk=stg_ftsk) + vol_drv_iter = (self._vol_drv_iter(instance, bdms, stg_ftsk=stg_ftsk) if recreate else None) slot_mgr = slot.build_slot_mgr( instance, self.store_api, adapter=self.adapter, @@ -493,7 +492,7 @@ class PowerVMDriver(driver.ComputeDriver): :param slot_mgr: A NovaSlotManager. Used to store/retrieve the client slots used when a volume is attached to a VM. """ - for bdm, vol_drv in self._vol_drv_iter(context, instance, bdms, + for bdm, vol_drv in self._vol_drv_iter(instance, bdms, stg_ftsk=stg_ftsk): # First connect the volume. This will update the # connection_info. @@ -519,7 +518,7 @@ class PowerVMDriver(driver.ComputeDriver): slots used when a volume is detached from a VM. """ # TODO(thorst) Do we need to do something on the disconnect for slots? - for bdm, vol_drv in self._vol_drv_iter(context, instance, bdms, + for bdm, vol_drv in self._vol_drv_iter(instance, bdms, stg_ftsk=stg_ftsk): flow.add(tf_stg.DisconnectVolume(vol_drv, slot_mgr)) @@ -1166,8 +1165,8 @@ class PowerVMDriver(driver.ComputeDriver): # adapters in the same slots. slot_mgr = slot.build_slot_mgr( instance, self.store_api, adapter=self.adapter, - vol_drv_iter=self._vol_drv_iter( - context, instance, bdms, stg_ftsk=stg_ftsk)) + vol_drv_iter=self._vol_drv_iter(instance, bdms, + stg_ftsk=stg_ftsk)) # Determine if there are volumes to disconnect. If so, remove each # volume (within the transaction manager) @@ -1263,8 +1262,8 @@ class PowerVMDriver(driver.ComputeDriver): # b) If adding/removing block devices, to register the slots. slot_mgr = slot.build_slot_mgr( instance, self.store_api, adapter=self.adapter, - vol_drv_iter=self._vol_drv_iter( - context, instance, bdms, stg_ftsk=stg_ftsk)) + vol_drv_iter=self._vol_drv_iter(instance, bdms, + stg_ftsk=stg_ftsk)) else: stg_ftsk = None @@ -1662,26 +1661,24 @@ class PowerVMDriver(driver.ComputeDriver): mig.post_live_migration_at_destination(network_info, vol_drvs) del self.live_migrations[instance.uuid] - def _vol_drv_iter(self, context, instance, bdms, stg_ftsk=None): + def _vol_drv_iter(self, instance, bdms, stg_ftsk=None): """Yields a bdm and volume driver.""" # Get a volume driver for each volume for bdm in bdms or []: - conn_info = bdm.get('connection_info') - # if it doesn't have connection_info, it's not a volume - if not conn_info: + # Ignore if it's not a volume + if not bdm.is_volume: continue vol_drv = vol_attach.build_volume_driver( - self.adapter, self.host_uuid, instance, conn_info, - stg_ftsk=stg_ftsk) + self.adapter, self.host_uuid, instance, + bdm.get('connection_info'), stg_ftsk=stg_ftsk) yield bdm, vol_drv def _build_vol_drivers(self, context, instance, block_device_info): """Builds the volume connector drivers for a block device info.""" # Get a volume driver for each volume bdms = self._extract_bdm(block_device_info) - return [vol_drv for bdm, vol_drv in self._vol_drv_iter( - context, instance, bdms)] + return [vol_drv for bdm, vol_drv in self._vol_drv_iter(instance, bdms)] def unfilter_instance(self, instance, network_info): """Stop filtering instance."""