Merge "Make volume type is_public property updatable"

This commit is contained in:
Jenkins 2016-01-14 14:18:15 +00:00 committed by Gerrit Code Review
commit fb438f453e
2 changed files with 20 additions and 3 deletions

View File

@ -59,6 +59,7 @@ class CinderVolumeType(resource.Resource):
_('Whether the volume type is accessible to the public.'),
default=True,
support_status=support.SupportStatus(version='5.0.0'),
update_allowed=True
),
DESCRIPTION: properties.Schema(
properties.Schema.STRING,
@ -106,11 +107,15 @@ class CinderVolumeType(resource.Resource):
"""Update the name, description and metadata for volume type."""
update_args = {}
# Update the name, description of cinder volume type
# Update the name, description, is_public of cinder volume type
is_public = self.properties[self.IS_PUBLIC]
if self.DESCRIPTION in prop_diff:
update_args['description'] = prop_diff.get(self.DESCRIPTION)
if self.NAME in prop_diff:
update_args['name'] = prop_diff.get(self.NAME)
if self.IS_PUBLIC in prop_diff:
is_public = prop_diff.get(self.IS_PUBLIC)
update_args['is_public'] = is_public
if update_args:
self.client().volume_types.update(self.resource_id, **update_args)
# Update the key-value pairs of cinder volume type.
@ -122,7 +127,7 @@ class CinderVolumeType(resource.Resource):
if new_keys is not None:
volume_type.set_keys(new_keys)
# Update the projects access for volume type
if self.PROJECTS in prop_diff:
if self.PROJECTS in prop_diff and not is_public:
old_access_list = self.cinder().volume_type_access.list(
self.resource_id)
old_projects = [ac._info['project_id'] for ac in old_access_list]

View File

@ -127,6 +127,18 @@ class CinderVolumeTypeTest(common.HeatTestCase):
update_args = {'name': 'update'}
self._test_update(update_args)
def test_volume_type_handle_update_is_public(self):
prop_diff = {'is_public': True, "projects": []}
self.patchobject(self.volume_type_access, 'list')
volume_type_id = '927202df-1afb-497f-8368-9c2d2f26e5db'
self.my_volume_type.resource_id = volume_type_id
self.my_volume_type.handle_update(json_snippet=None,
tmpl_diff=None,
prop_diff=prop_diff)
self.volume_types.update.assert_called_once_with(
volume_type_id, is_public=True)
self.volume_type_access.list.assert_not_called()
def test_volume_type_handle_update_metadata(self):
new_keys = {'volume_backend_name': 'lvmdriver',
'capabilities:replication': 'True'}
@ -135,7 +147,7 @@ class CinderVolumeTypeTest(common.HeatTestCase):
def test_volume_type_update_projects(self):
self.my_volume_type.resource_id = '8aeaa446459a4d3196bc573fc252800b'
prop_diff = {'projects': ['id2', 'id3']}
prop_diff = {'projects': ['id2', 'id3'], 'is_public': False}
class Access(object):
def __init__(self, idx, project):