Merge "Fix multiattach set to false after retype"
This commit is contained in:
commit
7b84c0842b
@ -21,6 +21,7 @@ from cinder.policies import volume_actions as vol_action_policies
|
|||||||
from cinder.policies import volumes as volume_policies
|
from cinder.policies import volumes as volume_policies
|
||||||
from cinder import quota
|
from cinder import quota
|
||||||
from cinder.tests.unit import fake_constants as fake
|
from cinder.tests.unit import fake_constants as fake
|
||||||
|
from cinder.tests.unit import utils as tests_utils
|
||||||
from cinder.tests.unit import volume as base
|
from cinder.tests.unit import volume as base
|
||||||
from cinder.volume import volume_types
|
from cinder.volume import volume_types
|
||||||
|
|
||||||
@ -40,10 +41,6 @@ class VolumeRetypeTestCase(base.BaseVolumeTestCase):
|
|||||||
self.user_context = context.RequestContext(user_id=fake.USER_ID,
|
self.user_context = context.RequestContext(user_id=fake.USER_ID,
|
||||||
project_id=fake.PROJECT_ID)
|
project_id=fake.PROJECT_ID)
|
||||||
|
|
||||||
volume_types.create(self.context,
|
|
||||||
"old-type",
|
|
||||||
{},
|
|
||||||
description="test-multiattach")
|
|
||||||
volume_types.create(self.context,
|
volume_types.create(self.context,
|
||||||
"fake_vol_type",
|
"fake_vol_type",
|
||||||
{},
|
{},
|
||||||
@ -52,16 +49,25 @@ class VolumeRetypeTestCase(base.BaseVolumeTestCase):
|
|||||||
"multiattach-type",
|
"multiattach-type",
|
||||||
{'multiattach': "<is> True"},
|
{'multiattach': "<is> True"},
|
||||||
description="test-multiattach")
|
description="test-multiattach")
|
||||||
|
volume_types.create(self.context,
|
||||||
|
"multiattach-type2",
|
||||||
|
{'multiattach': "<is> True"},
|
||||||
|
description="test-multiattach")
|
||||||
self.default_vol_type = objects.VolumeType.get_by_name_or_id(
|
self.default_vol_type = objects.VolumeType.get_by_name_or_id(
|
||||||
self.context,
|
self.context,
|
||||||
'fake_vol_type')
|
'fake_vol_type')
|
||||||
self.multiattach_type = objects.VolumeType.get_by_name_or_id(
|
self.multiattach_type = objects.VolumeType.get_by_name_or_id(
|
||||||
self.context,
|
self.context,
|
||||||
'multiattach-type')
|
'multiattach-type')
|
||||||
|
self.multiattach_type2 = objects.VolumeType.get_by_name_or_id(
|
||||||
|
self.context,
|
||||||
|
'multiattach-type2')
|
||||||
|
|
||||||
def fake_get_vtype(self, context, identifier):
|
def fake_get_vtype(self, context, identifier):
|
||||||
if identifier == "multiattach-type":
|
if identifier == "multiattach-type":
|
||||||
return self.multiattach_type
|
return self.multiattach_type
|
||||||
|
elif identifier == 'multiattach-type2':
|
||||||
|
return self.multiattach_type2
|
||||||
else:
|
else:
|
||||||
return self.default_vol_type
|
return self.default_vol_type
|
||||||
|
|
||||||
@ -97,7 +103,7 @@ class VolumeRetypeTestCase(base.BaseVolumeTestCase):
|
|||||||
vol.save()
|
vol.save()
|
||||||
self.volume_api.retype(self.user_context,
|
self.volume_api.retype(self.user_context,
|
||||||
vol,
|
vol,
|
||||||
'fake_vol-type')
|
'fake_vol_type')
|
||||||
vol = objects.Volume.get_by_id(self.context, vol.id)
|
vol = objects.Volume.get_by_id(self.context, vol.id)
|
||||||
self.assertFalse(vol.multiattach)
|
self.assertFalse(vol.multiattach)
|
||||||
|
|
||||||
@ -120,3 +126,23 @@ class VolumeRetypeTestCase(base.BaseVolumeTestCase):
|
|||||||
mock.call(vol_action_policies.RETYPE_POLICY, target_obj=mock.ANY),
|
mock.call(vol_action_policies.RETYPE_POLICY, target_obj=mock.ANY),
|
||||||
mock.call(vol_action_policies.RETYPE_POLICY, target_obj=mock.ANY),
|
mock.call(vol_action_policies.RETYPE_POLICY, target_obj=mock.ANY),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
@mock.patch('cinder.context.RequestContext.authorize')
|
||||||
|
def test_multiattach_to_multiattach_retype(self, mock_authorize):
|
||||||
|
# Test going from multiattach to multiattach
|
||||||
|
|
||||||
|
vol = tests_utils.create_volume(self.context,
|
||||||
|
multiattach=True,
|
||||||
|
volume_type_id=
|
||||||
|
self.multiattach_type.id)
|
||||||
|
|
||||||
|
self.assertTrue(vol.multiattach)
|
||||||
|
self.volume_api.retype(self.user_context,
|
||||||
|
vol,
|
||||||
|
'multiattach-type2')
|
||||||
|
vol.refresh()
|
||||||
|
self.assertTrue(vol.multiattach)
|
||||||
|
|
||||||
|
mock_authorize.assert_has_calls(
|
||||||
|
[mock.call(vol_action_policies.RETYPE_POLICY, target_obj=mock.ANY)
|
||||||
|
])
|
||||||
|
@ -44,6 +44,7 @@ from cinder.message import message_field
|
|||||||
from cinder import objects
|
from cinder import objects
|
||||||
from cinder.objects import base as objects_base
|
from cinder.objects import base as objects_base
|
||||||
from cinder.objects import fields
|
from cinder.objects import fields
|
||||||
|
from cinder.objects import volume_type
|
||||||
from cinder.policies import attachments as attachment_policy
|
from cinder.policies import attachments as attachment_policy
|
||||||
from cinder.policies import services as svr_policy
|
from cinder.policies import services as svr_policy
|
||||||
from cinder.policies import snapshot_metadata as s_meta_policy
|
from cinder.policies import snapshot_metadata as s_meta_policy
|
||||||
@ -1601,7 +1602,8 @@ class API(base.Base):
|
|||||||
# Support specifying volume type by ID or name
|
# Support specifying volume type by ID or name
|
||||||
try:
|
try:
|
||||||
new_type = (
|
new_type = (
|
||||||
volume_types.get_by_name_or_id(context.elevated(), new_type))
|
volume_type.VolumeType.get_by_name_or_id(context.elevated(),
|
||||||
|
new_type))
|
||||||
except exception.InvalidVolumeType:
|
except exception.InvalidVolumeType:
|
||||||
msg = _('Invalid volume_type passed: %s.') % new_type
|
msg = _('Invalid volume_type passed: %s.') % new_type
|
||||||
LOG.error(msg)
|
LOG.error(msg)
|
||||||
|
Loading…
Reference in New Issue
Block a user