Make 'name' updatable for cinder volume type

Make property 'name' updatable for OS::Cinder::VolumeType.

Change-Id: I5e8e6d9740f2dfd4ac3ca6e609675a5ee183b9a4
This commit is contained in:
huangtianhua 2015-06-08 11:32:22 +08:00
parent 4aa1d21875
commit ae1dbc6b29
2 changed files with 36 additions and 23 deletions

View File

@ -53,7 +53,8 @@ class CinderVolumeType(resource.Resource):
NAME: properties.Schema(
properties.Schema.STRING,
_('Name of the volume type.'),
required=True
required=True,
update_allowed=True,
),
METADATA: properties.Schema(
properties.Schema.MAP,
@ -90,10 +91,14 @@ class CinderVolumeType(resource.Resource):
def handle_update(self, json_snippet, tmpl_diff, prop_diff):
"""Update the name, description and metadata for volume type."""
# Update the description of cinder volume type
update_args = {}
# Update the name, description of cinder volume type
if self.DESCRIPTION in prop_diff:
self.cinder().volume_types.update(
self.resource_id, description=prop_diff.get(self.DESCRIPTION))
update_args['description'] = prop_diff.get(self.DESCRIPTION)
if self.NAME in prop_diff:
update_args['name'] = prop_diff.get(self.NAME)
if update_args:
self.cinder().volume_types.update(self.resource_id, **update_args)
# Update the key-value pairs of cinder volume type.
if self.METADATA in prop_diff:
volume_type = self.cinder().volume_types.get(self.resource_id)

View File

@ -78,32 +78,40 @@ class CinderVolumeTypeTest(common.HeatTestCase):
def test_volume_type_handle_create_not_public(self):
self._test_handle_create(is_public=False)
def test_volume_type_handle_update_description(self):
volume_type_id = '927202df-1afb-497f-8368-9c2d2f26e5db'
self.my_volume_type.resource_id = volume_type_id
update_description = 'update'
prop_diff = {'description': update_description}
def _test_update(self, update_args, is_update_metadata=False):
if is_update_metadata:
value = mock.MagicMock()
self.volume_types.get.return_value = value
value.get_keys.return_value = {'volume_backend_name': 'lvmdriver'}
else:
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,
description=update_description)
prop_diff=update_args)
if is_update_metadata:
value.unset_keys.assert_called_once_with(
{'volume_backend_name': 'lvmdriver'})
value.set_keys.assert_called_once_with(
update_args['metadata'])
else:
self.volume_types.update.assert_called_once_with(
volume_type_id, **update_args)
def test_volume_type_handle_update_matadata(self):
value = mock.MagicMock()
self.volume_types.get.return_value = value
value.get_keys.return_value = {'volume_backend_name': 'lvmdriver'}
def test_volume_type_handle_update_description(self):
update_args = {'description': 'update'}
self._test_update(update_args)
def test_volume_type_handle_update_name(self):
update_args = {'name': 'update'}
self._test_update(update_args)
def test_volume_type_handle_update_metadata(self):
new_keys = {'volume_backend_name': 'lvmdriver',
'capabilities:replication': 'True'}
prop_diff = {'metadata': new_keys}
self.my_volume_type.handle_update(json_snippet=None,
tmpl_diff=None,
prop_diff=prop_diff)
value.unset_keys.assert_called_once_with(
{'volume_backend_name': 'lvmdriver'})
value.set_keys.assert_called_once_with(new_keys)
self._test_update(prop_diff, is_update_metadata=True)
def test_volume_type_handle_delete(self):
self.resource_id = None