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
This commit is contained in:
@@ -2351,6 +2351,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):
|
||||
@@ -2358,7 +2359,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,
|
||||
@@ -2366,11 +2366,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,
|
||||
@@ -2378,11 +2377,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()
|
||||
@@ -2393,12 +2391,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()
|
||||
@@ -2409,12 +2407,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()
|
||||
@@ -2425,13 +2423,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()
|
||||
@@ -2442,7 +2439,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()
|
||||
|
||||
@@ -2650,6 +2647,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):
|
||||
@@ -3003,19 +3002,17 @@ 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'],
|
||||
self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'],
|
||||
'count': 1}}
|
||||
|
||||
farg = mox.IgnoreArg()
|
||||
@@ -3027,13 +3024,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')
|
||||
@@ -3048,16 +3044,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')
|
||||
@@ -3068,7 +3063,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 = {}
|
||||
|
||||
@@ -3329,7 +3324,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([])}
|
||||
@@ -3350,15 +3344,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
|
||||
@@ -3389,16 +3382,15 @@ 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'],
|
||||
self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'],
|
||||
'count': 1}}
|
||||
self.driver._fcp_pool = {'1faa': self.driver.FCP([])}
|
||||
rollback = True
|
||||
@@ -3427,15 +3419,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
|
||||
@@ -3453,16 +3444,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([])}
|
||||
@@ -3481,15 +3471,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
|
||||
@@ -3505,17 +3494,16 @@ 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'],
|
||||
self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'],
|
||||
'count': 1}}
|
||||
self.driver._fcp_pool = {'1faa': self.driver.FCP([])}
|
||||
rollback = False
|
||||
@@ -3537,16 +3525,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_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'],
|
||||
self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'],
|
||||
'count': 1}}
|
||||
self.driver._fcp_pool = {'1faa': self.driver.FCP([])}
|
||||
rollback = True
|
||||
@@ -3577,15 +3564,14 @@ 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'],
|
||||
self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'],
|
||||
'count': 1}}
|
||||
self.driver._fcp_pool = {'1faa': self.driver.FCP([])}
|
||||
rollback = True
|
||||
@@ -3610,16 +3596,15 @@ 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'],
|
||||
self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'],
|
||||
'count': 1}}
|
||||
self.driver._fcp_pool = {'1faa': self.driver.FCP([])}
|
||||
rollback = False
|
||||
@@ -3638,17 +3623,16 @@ 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'],
|
||||
self.driver._instance_fcp_map = {self.inst_name: {'fcp_list': ['1faa'],
|
||||
'count': 2}}
|
||||
self.driver._fcp_pool = {'1faa': self.driver.FCP([])}
|
||||
rollback = False
|
||||
@@ -3665,17 +3649,17 @@ 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'],
|
||||
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([])}
|
||||
@@ -3693,16 +3677,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
|
||||
@@ -3726,15 +3709,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
|
||||
@@ -3767,16 +3749,15 @@ 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'],
|
||||
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
|
||||
@@ -3805,15 +3786,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
|
||||
@@ -3834,16 +3814,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([])}
|
||||
@@ -3866,17 +3845,16 @@ 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'],
|
||||
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
|
||||
@@ -3895,17 +3873,16 @@ 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'],
|
||||
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
|
||||
@@ -3928,16 +3905,15 @@ 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'],
|
||||
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
|
||||
@@ -3972,16 +3948,15 @@ 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'],
|
||||
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
|
||||
@@ -4015,16 +3990,15 @@ 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'],
|
||||
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
|
||||
@@ -4044,17 +4018,16 @@ 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'],
|
||||
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
|
||||
@@ -4072,16 +4045,16 @@ 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'],
|
||||
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([])}
|
||||
@@ -4100,8 +4073,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 = {}
|
||||
|
||||
@@ -4113,26 +4087,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()
|
||||
|
||||
|
||||
|
||||
@@ -276,6 +276,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(
|
||||
|
||||
@@ -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])]
|
||||
|
||||
Reference in New Issue
Block a user