From 7421b60832bbc4be6fcac402cf7d0aae925b6141 Mon Sep 17 00:00:00 2001 From: Yi Chun Huang Date: Tue, 21 Feb 2017 15:05:03 +0800 Subject: [PATCH] Insert os_version into instance obj when boot-from-volume An instance object should have the os and version information so that a volume can be attached to it when it's inactive. Change-Id: I232f743a446dbfcaaf3794df02c084515bdd45fe --- nova/tests/unit/virt/zvm/test_zvm.py | 269 ++++++++++++--------------- nova/virt/zvm/driver.py | 2 + nova/virt/zvm/volumeop.py | 6 +- 3 files changed, 126 insertions(+), 151 deletions(-) diff --git a/nova/tests/unit/virt/zvm/test_zvm.py b/nova/tests/unit/virt/zvm/test_zvm.py index 0f71a3a..6a73846 100644 --- a/nova/tests/unit/virt/zvm/test_zvm.py +++ b/nova/tests/unit/virt/zvm/test_zvm.py @@ -2456,6 +2456,7 @@ class ZVMVolumeOperatorTestCase(ZVMTestCase): def setUp(self): super(ZVMVolumeOperatorTestCase, self).setUp() self.volumeop = volumeop.VolumeOperator() + self.fake_inst = self.instance self.mox.UnsetStubs() def test_init(self): @@ -2463,7 +2464,6 @@ class ZVMVolumeOperatorTestCase(ZVMTestCase): def test_attach_volume_to_instance_check_args(self): fake_connection_info = {'info': 'fake_info'} - fake_instance = {'name': 'fake_instance'} farg = mox.IgnoreArg() self.assertRaises(exception.ZVMDriverError, @@ -2471,11 +2471,10 @@ class ZVMVolumeOperatorTestCase(ZVMTestCase): fake_connection_info, None, farg, True) self.assertRaises(exception.ZVMDriverError, self.volumeop.attach_volume_to_instance, None, - None, fake_instance, farg, False) + None, self.fake_inst, farg, False) def test_detach_volume_from_instance_check_args(self): fake_connection_info = {'info': 'fake_info'} - fake_instance = {'name': 'fake_instance'} farg = mox.IgnoreArg() self.assertRaises(exception.ZVMDriverError, @@ -2483,11 +2482,10 @@ class ZVMVolumeOperatorTestCase(ZVMTestCase): fake_connection_info, None, farg, True) self.assertRaises(exception.ZVMDriverError, self.volumeop.detach_volume_from_instance, - None, fake_instance, farg, False) + None, self.fake_inst, farg, False) def test_attach_volume_to_instance_active(self): fake_connection_info = {'info': 'fake_info'} - fake_instance = {'name': 'fake_instance'} is_active = True farg = mox.IgnoreArg() @@ -2498,12 +2496,12 @@ class ZVMVolumeOperatorTestCase(ZVMTestCase): self.mox.ReplayAll() self.volumeop.attach_volume_to_instance(farg, fake_connection_info, - fake_instance, farg, is_active) + self.fake_inst, farg, + is_active) self.mox.VerifyAll() def test_attach_volume_to_instance_inactive(self): fake_connection_info = {'info': 'fake_info'} - fake_instance = {'name': 'fake_instance'} is_active = False farg = mox.IgnoreArg() @@ -2514,12 +2512,12 @@ class ZVMVolumeOperatorTestCase(ZVMTestCase): self.mox.ReplayAll() self.volumeop.attach_volume_to_instance(farg, fake_connection_info, - fake_instance, farg, is_active) + self.fake_inst, farg, + is_active) self.mox.VerifyAll() def test_detach_volume_from_instance_active(self): fake_connection_info = {'info': 'fake_info'} - fake_instance = {'name': 'fake_instance'} is_active = True farg = mox.IgnoreArg() @@ -2530,13 +2528,12 @@ class ZVMVolumeOperatorTestCase(ZVMTestCase): self.mox.ReplayAll() self.volumeop.detach_volume_from_instance(fake_connection_info, - fake_instance, farg, + self.fake_inst, farg, is_active) self.mox.VerifyAll() def test_detach_volume_from_instance_inactive(self): fake_connection_info = {'info': 'fake_info'} - fake_instance = {'name': 'fake_instance'} is_active = False farg = mox.IgnoreArg() @@ -2547,7 +2544,7 @@ class ZVMVolumeOperatorTestCase(ZVMTestCase): self.mox.ReplayAll() self.volumeop.detach_volume_from_instance(fake_connection_info, - fake_instance, farg, + self.fake_inst, farg, is_active) self.mox.VerifyAll() @@ -2755,6 +2752,8 @@ class SVCDriverTestCase(ZVMTestCase): super(SVCDriverTestCase, self).setUp() self.driver = volumeop.SVCDriver() self.flags(zvm_multiple_fcp=False) + self.fake_inst = self.instance + self.inst_name = self.fake_inst['name'] self.mox.UnsetStubs() def test_init(self): @@ -3108,20 +3107,18 @@ class SVCDriverTestCase(ZVMTestCase): self.assertEqual(target_info, connection_info) def test_get_volume_connector_no_fcp(self): - fake_instance = {'name': 'fake'} self.mox.StubOutWithMock(self.driver, '_get_fcp_from_pool') self.driver._get_fcp_from_pool().AndReturn(None) self.mox.ReplayAll() empty_connector = {'zvm_fcp': [], 'wwpns': [], 'host': ''} self.assertEqual(empty_connector, - self.driver.get_volume_connector(fake_instance)) + self.driver.get_volume_connector(self.fake_inst)) self.mox.VerifyAll() def test_get_volume_connector_from_instance(self): - fake_instance = {'name': 'fake'} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} farg = mox.IgnoreArg() self.mox.StubOutWithMock(self.driver, '_get_wwpn') @@ -3132,13 +3129,12 @@ class SVCDriverTestCase(ZVMTestCase): 'wwpns': ['0000000100000001'], 'zvm_fcp': ['1faa']} self.assertEqual(target_connector, - self.driver.get_volume_connector(fake_instance)) + self.driver.get_volume_connector(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_get_volume_connector_from_pool(self): - fake_instance = {'name': 'fake'} self.driver._fcp_pool = {'1faa': self.driver.FCP([]), '1fab': self.driver.FCP([])} self.mox.StubOutWithMock(self.driver, '_get_fcp_from_pool') @@ -3153,16 +3149,15 @@ class SVCDriverTestCase(ZVMTestCase): 'wwpns': ['0000000100000001', '0000000200000002'], 'zvm_fcp': ['1faa', '1fab']} self.assertEqual(target_connector, - self.driver.get_volume_connector(fake_instance)) + self.driver.get_volume_connector(self.fake_inst)) self.assertEqual({'fcp_list': ['1faa', '1fab'], 'count': 0}, - self.driver._instance_fcp_map.get('fake')) + self.driver._instance_fcp_map.get(self.inst_name)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} self.driver._fcp_pool = {} def test_get_volume_connector_no_wwpn(self): - fake_instance = {'name': 'fake'} self.driver._fcp_pool = {'0001': self.driver.FCP([])} self.mox.StubOutWithMock(self.driver, '_get_fcp_from_pool') self.mox.StubOutWithMock(self.driver, '_get_wwpn') @@ -3173,7 +3168,7 @@ class SVCDriverTestCase(ZVMTestCase): empty_connector = {'zvm_fcp': [], 'wwpns': [], 'host': ''} self.assertEqual(empty_connector, - self.driver.get_volume_connector(fake_instance)) + self.driver.get_volume_connector(self.fake_inst)) self.mox.VerifyAll() self.driver._fcp_pool = {} @@ -3434,7 +3429,6 @@ class SVCDriverTestCase(ZVMTestCase): def test_attach_volume_active_error_no_rollback(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake'} fake_mountpoint = '/dev/vdd' self.driver._instance_fcp_map = {} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} @@ -3455,15 +3449,14 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.attach_volume_active, farg, - farg, fake_instance, fake_mountpoint, rollback) - self.assertFalse(self.driver._is_fcp_in_use(fake_instance)) + farg, self.fake_inst, fake_mountpoint, rollback) + self.assertFalse(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_active_error_rollback_and_detach(self): fake_info = ('lun', 'wwpn', '1G', '1faa') fake_mountpoint = '/dev/vdd' - fake_instance = {'name': 'fake'} self.driver._instance_fcp_map = {} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -3494,17 +3487,16 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.attach_volume_active, farg, farg, - fake_instance, fake_mountpoint, rollback) - self.assertFalse(self.driver._is_fcp_in_use(fake_instance)) + self.fake_inst, fake_mountpoint, rollback) + self.assertFalse(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_active_error_rollback_no_detach(self): fake_info = ('lun', 'wwpn', '1G', '1faa') fake_mountpoint = '/dev/vdd' - fake_instance = {'name': 'fake'} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -3532,15 +3524,14 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.attach_volume_active, farg, - farg, fake_instance, fake_mountpoint, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + farg, self.fake_inst, fake_mountpoint, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_active(self): fake_info = ('lun', 'wwpn', '1G', '1faa') fake_mountpoint = '/dev/vdd' - fake_instance = {'name': 'fake'} self.driver._instance_fcp_map = {} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -3558,16 +3549,15 @@ class SVCDriverTestCase(ZVMTestCase): None) self.mox.ReplayAll() - self.driver.attach_volume_active(farg, farg, fake_instance, + self.driver.attach_volume_active(farg, farg, self.fake_inst, fake_mountpoint, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_active_multi_fcp(self): fake_info = ('lun', 'wwpn', '1G', '1faa;1fab') fake_mountpoint = '/dev/vdd' - fake_instance = {'name': 'fake'} self.driver._instance_fcp_map = {} self.driver._fcp_pool = {'1faa': self.driver.FCP([]), '1fab': self.driver.FCP([])} @@ -3586,15 +3576,14 @@ class SVCDriverTestCase(ZVMTestCase): None) self.mox.ReplayAll() - self.driver.attach_volume_active(farg, farg, fake_instance, + self.driver.attach_volume_active(farg, farg, self.fake_inst, fake_mountpoint, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_active_no_mountpoint(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake'} self.driver._instance_fcp_map = {} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -3610,18 +3599,17 @@ class SVCDriverTestCase(ZVMTestCase): self.driver._add_zfcp(farg, farg, farg, farg, farg).AndReturn(None) self.mox.ReplayAll() - self.driver.attach_volume_active(farg, farg, fake_instance, + self.driver.attach_volume_active(farg, farg, self.fake_inst, None, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_active_error_no_rollback(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake'} fake_mountpoint = '/dev/vdd' - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = False @@ -3642,17 +3630,16 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.detach_volume_active, farg, - fake_instance, fake_mountpoint, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.fake_inst, fake_mountpoint, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_active_error_rollback_with_mountpoint(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake'} fake_mountpoint = '/dev/vdd' - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -3682,16 +3669,15 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.detach_volume_active, farg, - fake_instance, fake_mountpoint, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.fake_inst, fake_mountpoint, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_active_error_rollback_no_mountpoint(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake'} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -3715,17 +3701,16 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.detach_volume_active, - farg, fake_instance, None, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + farg, self.fake_inst, None, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_active_and_detach_fcp(self): fake_info = ('lun', 'wwpn', '1G', '1faa') fake_mountpoint = '/dev/vdd' - fake_instance = {'name': 'fake'} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = False @@ -3743,18 +3728,17 @@ class SVCDriverTestCase(ZVMTestCase): self.driver._detach_device(farg, farg).AndReturn(None) self.mox.ReplayAll() - self.driver.detach_volume_active(farg, fake_instance, + self.driver.detach_volume_active(farg, self.fake_inst, fake_mountpoint, rollback) - self.assertFalse(self.driver._is_fcp_in_use(fake_instance)) + self.assertFalse(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_active_and_reserve_fcp(self): fake_info = ('lun', 'wwpn', '1G', '1faa') fake_mountpoint = '/dev/vdd' - fake_instance = {'name': 'fake'} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 2}} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 2}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = False @@ -3770,18 +3754,18 @@ class SVCDriverTestCase(ZVMTestCase): self.driver._remove_zfcp_from_pool(farg, farg).AndReturn(None) self.mox.ReplayAll() - self.driver.detach_volume_active(farg, fake_instance, + self.driver.detach_volume_active(farg, self.fake_inst, fake_mountpoint, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_active_multi_fcp(self): fake_info = ('lun', 'wwpn', '1G', '1faa;1fab') fake_mountpoint = '/dev/vdd' - fake_instance = {'name': 'fake'} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa', '1fab'], - 'count': 2}} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': [ + '1faa', '1fab'], + 'count': 2}} self.driver._fcp_pool = {'1faa': self.driver.FCP([]), '1fab': self.driver.FCP([])} rollback = False @@ -3798,16 +3782,15 @@ class SVCDriverTestCase(ZVMTestCase): self.driver._remove_zfcp_from_pool(farg, farg).AndReturn(None) self.mox.ReplayAll() - self.driver.detach_volume_active(farg, fake_instance, + self.driver.detach_volume_active(farg, self.fake_inst, fake_mountpoint, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_inactive_error_no_rollback(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} self.driver._instance_fcp_map = {} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = False @@ -3831,15 +3814,14 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.attach_volume_inactive, farg, - farg, fake_instance, farg, rollback) - self.assertFalse(self.driver._is_fcp_in_use(fake_instance)) + farg, self.fake_inst, farg, rollback) + self.assertFalse(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_inactive_error_rollback_and_detach(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} self.driver._instance_fcp_map = {} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -3872,17 +3854,16 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.attach_volume_inactive, farg, - farg, fake_instance, farg, rollback) - self.assertFalse(self.driver._is_fcp_in_use(fake_instance)) + farg, self.fake_inst, farg, rollback) + self.assertFalse(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_inactive_error_rollback_no_detach(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -3910,15 +3891,14 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.attach_volume_inactive, farg, - farg, fake_instance, farg, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + farg, self.fake_inst, farg, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_inactive(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} self.driver._instance_fcp_map = {} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -3939,16 +3919,15 @@ class SVCDriverTestCase(ZVMTestCase): self.driver._attach_device(farg, farg).AndReturn(None) self.mox.ReplayAll() - self.driver.attach_volume_inactive(farg, farg, fake_instance, + self.driver.attach_volume_inactive(farg, farg, self.fake_inst, farg, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_inactive_multi_fcp(self): fake_info = ('lun', 'wwpn', '1G', '1faa;1fab') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} self.driver._instance_fcp_map = {} self.driver._fcp_pool = {'1faa': self.driver.FCP([]), '1fab': self.driver.FCP([])} @@ -3971,18 +3950,17 @@ class SVCDriverTestCase(ZVMTestCase): self.driver._attach_device(farg, farg).AndReturn(None) self.mox.ReplayAll() - self.driver.attach_volume_inactive(farg, farg, fake_instance, + self.driver.attach_volume_inactive(farg, farg, self.fake_inst, farg, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_attach_volume_inactive_no_attach(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -4000,18 +3978,17 @@ class SVCDriverTestCase(ZVMTestCase): farg).AndReturn(None) self.mox.ReplayAll() - self.driver.attach_volume_inactive(farg, farg, fake_instance, + self.driver.attach_volume_inactive(farg, farg, self.fake_inst, farg, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_inactive_error_no_rollback(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = False @@ -4033,17 +4010,16 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.detach_volume_inactive, - farg, fake_instance, farg, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + farg, self.fake_inst, farg, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_inactive_error_detach_rollback(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -4077,17 +4053,16 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.detach_volume_inactive, - farg, fake_instance, farg, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + farg, self.fake_inst, farg, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_inactive_error_no_detach_rollback(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 2}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 2}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -4120,17 +4095,16 @@ class SVCDriverTestCase(ZVMTestCase): self.assertRaises(exception.ZVMVolumeError, self.driver.detach_volume_inactive, - farg, fake_instance, farg, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + farg, self.fake_inst, farg, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_inactive_and_detach(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 1}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 1}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -4149,18 +4123,17 @@ class SVCDriverTestCase(ZVMTestCase): self.driver._detach_device(farg, farg).AndReturn(None) self.mox.ReplayAll() - self.driver.detach_volume_inactive(farg, fake_instance, + self.driver.detach_volume_inactive(farg, self.fake_inst, farg, rollback) - self.assertFalse(self.driver._is_fcp_in_use(fake_instance)) + self.assertFalse(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_inactive_no_detach(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 2}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 2}} self.driver._fcp_pool = {'1faa': self.driver.FCP([])} rollback = True @@ -4177,17 +4150,17 @@ class SVCDriverTestCase(ZVMTestCase): farg).AndReturn(None) self.mox.ReplayAll() - self.driver.detach_volume_inactive(farg, fake_instance, farg, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.driver.detach_volume_inactive(farg, self.fake_inst, + farg, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} def test_detach_volume_inactive_multi_path(self): fake_info = ('lun', 'wwpn', '1G', '1faa') - fake_instance = {'name': 'fake', - 'system_metadata': {'image_os_version': 'sles11'}} - self.driver._instance_fcp_map = {'fake': {'fcp_list': ['1faa'], - 'count': 2}} + self.fake_inst.system_metadata = {'image_os_version': 'sles11'} + self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'], + 'count': 2}} self.driver._fcp_pool = {'1faa': self.driver.FCP([]), '1fab': self.driver.FCP([])} rollback = True @@ -4205,8 +4178,9 @@ class SVCDriverTestCase(ZVMTestCase): farg).AndReturn(None) self.mox.ReplayAll() - self.driver.detach_volume_inactive(farg, fake_instance, farg, rollback) - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.driver.detach_volume_inactive(farg, self.fake_inst, + farg, rollback) + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() self.driver._instance_fcp_map = {} @@ -4218,26 +4192,25 @@ class SVCDriverTestCase(ZVMTestCase): def test_is_fcp_in_use_no_record(self): self.driver._instance_fcp_map = {} - fake_instance = {'name': 'fake'} - self.assertFalse(self.driver._is_fcp_in_use(fake_instance)) + self.assertFalse(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() def test_is_fcp_in_use_reserved(self): - self.driver._instance_fcp_map = {'fake': {'fcp': '1faa', 'count': 0}} - fake_instance = {'name': 'fake'} - self.assertFalse(self.driver._is_fcp_in_use(fake_instance)) + self.driver._instance_fcp_map = {self.inst_name: {'fcp': '1faa', + 'count': 0}} + self.assertFalse(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() def test_is_fcp_in_use_only_one(self): - self.driver._instance_fcp_map = {'fake': {'fcp': '1faa', 'count': 1}} - fake_instance = {'name': 'fake'} - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.driver._instance_fcp_map = {self.inst_name: {'fcp': '1faa', + 'count': 1}} + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() def test_is_fcp_in_use_multi_volume(self): - self.driver._instance_fcp_map = {'fake': {'fcp': '1faa', 'count': 3}} - fake_instance = {'name': 'fake'} - self.assertTrue(self.driver._is_fcp_in_use(fake_instance)) + self.driver._instance_fcp_map = {self.inst_name: {'fcp': '1faa', + 'count': 3}} + self.assertTrue(self.driver._is_fcp_in_use(self.fake_inst)) self.mox.VerifyAll() diff --git a/nova/virt/zvm/driver.py b/nova/virt/zvm/driver.py index 1ccaa10..1f6144a 100644 --- a/nova/virt/zvm/driver.py +++ b/nova/virt/zvm/driver.py @@ -290,6 +290,8 @@ class ZVMDriver(driver.ComputeDriver): volume_summery = self._volume_api.get(context, volume_id) volume_meta = volume_summery['volume_metadata'] os_version = volume_meta['os_version'] + instance.system_metadata['image_os_version'] = os_version + instance.save() linuxdist = self._dist_manager.get_linux_dist(os_version)() files_and_cmds = linuxdist.create_network_configuration_files( diff --git a/nova/virt/zvm/volumeop.py b/nova/virt/zvm/volumeop.py index 03d11ee..7272716 100644 --- a/nova/virt/zvm/volumeop.py +++ b/nova/virt/zvm/volumeop.py @@ -822,7 +822,7 @@ class SVCDriver(DriverAPI): do_attach = not self._is_fcp_in_use(instance) self._update_instance_fcp_map_if_unlocked(instance['name'], fcp_list, self._INCREASE) - os_version = instance['system_metadata']['image_os_version'] + os_version = instance.system_metadata['image_os_version'] try: self._add_zfcp_to_pool(fcp, wwpn, lun, size) self._allocate_zfcp(instance, fcp, size, wwpn, lun) @@ -862,7 +862,7 @@ class SVCDriver(DriverAPI): self._update_instance_fcp_map_if_unlocked(instance['name'], fcp_list, self._DECREASE) do_detach = not self._is_fcp_in_use(instance) - os_version = instance['system_metadata']['image_os_version'] + os_version = instance.system_metadata['image_os_version'] try: self._remove_zfcp(instance, fcp, wwpn, lun) self._remove_zfcp_from_pool(wwpn, lun) @@ -1049,7 +1049,7 @@ class SVCDriver(DriverAPI): self._xcat_chvm(instance['name'], body) def _create_mountpoint(self, instance, fcp, wwpn, lun, mountpoint): - os_version = instance['system_metadata']['image_os_version'] + os_version = instance.system_metadata['image_os_version'] dist = self._dist_manager.get_linux_dist(os_version)() srcdev = dist.assemble_zfcp_srcdev(fcp, wwpn, lun) body = [" ".join(['--createfilesysnode', srcdev, mountpoint])]