summaryrefslogtreecommitdiff
path: root/heat
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2019-12-19 12:33:48 +0000
committerGerrit Code Review <review@openstack.org>2019-12-19 12:33:48 +0000
commit21aed54e5cc622468f634cf488012bf8c12d4333 (patch)
treef4ce491567de7dfcb779949d3e6a43d16c7b7942 /heat
parentd33d27af0d35eb4504b6cacbd0bdc641e7d733b4 (diff)
parentda974ed216625ff261f3ddeb9d2dc8d412fff17c (diff)
downloadheat-21aed54e5cc622468f634cf488012bf8c12d4333.tar.gz
Merge "Use resource description as default description property"
Diffstat (limited to 'heat')
-rw-r--r--heat/engine/properties.py8
-rw-r--r--heat/engine/rsrc_defn.py3
-rw-r--r--heat/tests/test_properties.py25
3 files changed, 34 insertions, 2 deletions
diff --git a/heat/engine/properties.py b/heat/engine/properties.py
index 14d688fa1..3e3cf5a43 100644
--- a/heat/engine/properties.py
+++ b/heat/engine/properties.py
@@ -377,7 +377,8 @@ class Property(object):
class Properties(collections.Mapping):
def __init__(self, schema, data, resolver=lambda d: d, parent_name=None,
- context=None, section=None, translation=None):
+ context=None, section=None, translation=None,
+ rsrc_description=None):
self.props = dict((k, Property(s, k, context, path=parent_name))
for k, s in schema.items())
self.resolve = resolver
@@ -387,6 +388,7 @@ class Properties(collections.Mapping):
self.context = context
self.translation = (trans.Translation(properties=self)
if translation is None else translation)
+ self.rsrc_description = rsrc_description or None
def update_translation(self, rules, client_resolve=True,
ignore_resolve_error=False):
@@ -507,6 +509,10 @@ class Properties(collections.Mapping):
translation=self.translation)
elif prop.required():
raise ValueError(_('Property %s not assigned') % key)
+ elif key == 'description' and prop.schema.update_allowed:
+ return self.rsrc_description
+ else:
+ return None
def __getitem__(self, key):
return self._get_property_value(key)
diff --git a/heat/engine/rsrc_defn.py b/heat/engine/rsrc_defn.py
index 6de61c373..2933631e9 100644
--- a/heat/engine/rsrc_defn.py
+++ b/heat/engine/rsrc_defn.py
@@ -306,7 +306,8 @@ class ResourceDefinition(object):
"""
props = properties.Properties(schema, self._properties or {},
function.resolve, context=context,
- section=PROPERTIES)
+ section=PROPERTIES,
+ rsrc_description=self.description)
props.update_translation(self._rules, self._client_resolve)
return props
diff --git a/heat/tests/test_properties.py b/heat/tests/test_properties.py
index cf5dd14ec..166856617 100644
--- a/heat/tests/test_properties.py
+++ b/heat/tests/test_properties.py
@@ -23,6 +23,7 @@ from heat.engine import parameters
from heat.engine import plugin_manager
from heat.engine import properties
from heat.engine import resources
+from heat.engine import rsrc_defn
from heat.engine import support
from heat.engine import translation
from heat.tests import common
@@ -1651,6 +1652,30 @@ class PropertiesTest(common.HeatTestCase):
props_b = properties.Properties(schema, {'foo': 1})
self.assertTrue(props_a != props_b)
+ def test_description_substitution(self):
+ schema = {
+ 'description': properties.Schema('String',
+ update_allowed=True),
+ 'not_description': properties.Schema('String',
+ update_allowed=True),
+ }
+ blank_rsrc = rsrc_defn.ResourceDefinition('foo', 'FooResource', {},
+ description='Foo resource')
+ bar_rsrc = rsrc_defn.ResourceDefinition('foo', 'FooResource',
+ {'description': 'bar'},
+ description='Foo resource')
+
+ blank_props = blank_rsrc.properties(schema)
+ self.assertEqual('Foo resource', blank_props['description'])
+ self.assertEqual(None, blank_props['not_description'])
+
+ replace_schema = {'description': properties.Schema('String')}
+ empty_props = blank_rsrc.properties(replace_schema)
+ self.assertEqual(None, empty_props['description'])
+
+ bar_props = bar_rsrc.properties(schema)
+ self.assertEqual('bar', bar_props['description'])
+
class PropertiesValidationTest(common.HeatTestCase):
def test_required(self):