Restore resource metadata attribute

For backwards compatibility the Resource.metadata attribute
has been restored, however reading or assigning this attribute
will result in a deprecation warning.

Reading metadata will force a refresh from the database, which
maintains the previous behaviour rather than optimising for
performance.

Change-Id: Ifdcf3d98b99a09aac8755c84ef3f59d8602fc6a8
Closes-Bug: #1324704
This commit is contained in:
Steve Baker
2014-06-13 12:49:52 +12:00
parent 590899cb1f
commit 19a8dbfa5f
2 changed files with 27 additions and 1 deletions

View File

@@ -14,8 +14,8 @@
import base64
import copy
from datetime import datetime
import six
import warnings
from heat.common import exception
from heat.common import identifier
@@ -175,6 +175,22 @@ class Resource(object):
return result
return not result
@property
def metadata(self):
"""DEPRECATED. use method metadata_get instead."""
warnings.warn('metadata attribute is deprecated, '
'use method metadata_get instead',
DeprecationWarning)
return self.metadata_get(True)
@metadata.setter
def metadata(self, metadata):
"""DEPRECATED. use method metadata_set instead."""
warnings.warn('metadata attribute is deprecated, '
'use method metadata_set instead',
DeprecationWarning)
self.metadata_set(metadata)
def metadata_get(self, refresh=False):
if refresh:
self._rsrc_metadata = None

View File

@@ -305,6 +305,7 @@ class ResourceTest(HeatTestCase):
tmpl = {'Type': 'Foo'}
res = generic_rsrc.GenericResource('test_resource', tmpl, self.stack)
self.assertEqual({}, res.metadata_get())
self.assertEqual({}, res.metadata)
def test_equals_different_stacks(self):
tmpl1 = {'Type': 'Foo'}
@@ -761,6 +762,7 @@ class ResourceAdoptTest(HeatTestCase):
adopt = scheduler.TaskRunner(res.adopt, res_data)
adopt()
self.assertEqual({}, res.metadata_get())
self.assertEqual({}, res.metadata)
self.assertEqual((res.ADOPT, res.COMPLETE), res.state)
def test_adopt_with_resource_data_and_metadata(self):
@@ -790,6 +792,7 @@ class ResourceAdoptTest(HeatTestCase):
self.assertEqual("test-value",
db_api.resource_data_get(res, "test-key"))
self.assertEqual({"os_distro": "test-distro"}, res.metadata_get())
self.assertEqual({"os_distro": "test-distro"}, res.metadata)
self.assertEqual((res.ADOPT, res.COMPLETE), res.state)
def test_adopt_resource_missing(self):
@@ -1309,12 +1312,19 @@ class MetadataTest(HeatTestCase):
def test_read_initial(self):
self.assertEqual({'Test': 'Initial metadata'}, self.res.metadata_get())
self.assertEqual({'Test': 'Initial metadata'}, self.res.metadata)
def test_write(self):
test_data = {'Test': 'Newly-written data'}
self.res.metadata_set(test_data)
self.assertEqual(test_data, self.res.metadata_get())
def test_assign_attribute(self):
test_data = {'Test': 'Newly-written data'}
self.res.metadata = test_data
self.assertEqual(test_data, self.res.metadata_get())
self.assertEqual(test_data, self.res.metadata)
class ReducePhysicalResourceNameTest(HeatTestCase):
scenarios = [