Add _show_resource function to Cinder resources (6)

Resource in CinderClient has no to_dict method,
This patch adds entity attribute and _show_resource function
for heat (cinder) resources:
 - volume
 - volume type

Change-Id: I10c73847059fa5d32277b7877c5df41e2d4732d7
This commit is contained in:
huangtianhua 2015-07-30 17:03:11 +08:00
parent 17d36a51e9
commit 37e7ae790a
5 changed files with 25 additions and 0 deletions

View File

@ -45,6 +45,8 @@ class CinderVolumeType(resource.Resource):
default_client_name = 'cinder'
entity = 'volume_types'
PROPERTIES = (
NAME, METADATA, IS_PUBLIC, DESCRIPTION,
) = (
@ -119,6 +121,11 @@ class CinderVolumeType(resource.Resource):
except Exception as e:
self.client_plugin().ignore_not_found(e)
# TODO(huangtianhua): remove this method when bug #1479641 is fixed.
def _show_resource(self):
vtype = self.client().volume_types.get(self.resource_id)
return vtype._info
def resource_mapping():
return {

View File

@ -205,6 +205,8 @@ class CinderVolume(vb.BaseVolume):
_volume_creating_status = ['creating', 'restoring-backup', 'downloading']
entity = 'volumes'
def translation_rules(self):
return [
properties.TranslationRule(
@ -256,6 +258,11 @@ class CinderVolume(vb.BaseVolume):
return vol.description
return six.text_type(getattr(vol, name))
# TODO(huangtianhua): remove this method when bug #1479641 is fixed.
def _show_resource(self):
volume = self.client().volumes.get(self.resource_id)
return volume._info
def handle_create(self):
vol_id = super(CinderVolume, self).handle_create()
read_only_flag = self.properties.get(self.READ_ONLY)

View File

@ -123,3 +123,12 @@ class CinderVolumeTypeTest(common.HeatTestCase):
exc = self.cinderclient.HTTPClientError('Not Found.')
self.volume_types.delete.side_effect = exc
self.assertIsNone(self.my_volume_type.handle_delete())
def test_volume_type_show_resource(self):
volume_type_id = '927202df-1afb-497f-8368-9c2d2f26e5db'
self.my_volume_type.resource_id = volume_type_id
volume_type = mock.Mock()
volume_type._info = {'vtype': 'info'}
self.volume_types.get.return_value = volume_type
self.assertEqual({'vtype': 'info'},
self.my_volume_type.FnGetAtt('show'))

View File

@ -261,6 +261,7 @@ class CinderVolumeTest(vt_base.BaseVolumeTest):
self.assertEqual(u'False', rsrc.FnGetAtt('bootable'))
self.assertEqual(u'False', rsrc.FnGetAtt('encrypted'))
self.assertEqual(u'[]', rsrc.FnGetAtt('attachments'))
self.assertEqual({'volume': 'info'}, rsrc.FnGetAtt('show'))
error = self.assertRaises(exception.InvalidTemplateAttribute,
rsrc.FnGetAtt, 'unknown')
self.assertEqual(

View File

@ -99,6 +99,7 @@ class FakeVolume(object):
def __init__(self, status, **attrs):
self.status = status
self._info = {'volume': 'info'}
for key, value in six.iteritems(attrs):
setattr(self, key, value)
if 'id' not in attrs: