summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-04-11 12:58:29 +0000
committerGerrit Code Review <review@openstack.org>2017-04-11 12:58:29 +0000
commite555ef99fd8ed7b6cfa6e16bec22e67a8f0c71f8 (patch)
tree2869e627dd13e09e9f352f4653fd3036c9d3ba4c
parent692bb31b24a6ce2db1200005281791b87a1053f1 (diff)
parentf94d76cb322f14a001e7990c0918a67f1a09ea16 (diff)
downloadheat-9.0.0.0b1.tar.gz
Merge "Generate placeholders for resource proxies before validation"9.0.0.0b1
-rw-r--r--heat/engine/resource.py15
-rw-r--r--heat/engine/stack.py9
-rw-r--r--heat/tests/engine/test_check_resource.py2
3 files changed, 18 insertions, 8 deletions
diff --git a/heat/engine/resource.py b/heat/engine/resource.py
index e077fd60c..f10c13926 100644
--- a/heat/engine/resource.py
+++ b/heat/engine/resource.py
@@ -871,10 +871,17 @@ class Resource(status.ResourceStatus):
def get_attrs(attrs):
for attr in attrs:
path = (attr,) if isinstance(attr, six.string_types) else attr
- try:
- yield attr, self.get_attribute(*path)
- except exception.InvalidTemplateAttribute as ita:
- LOG.info('%s', ita)
+ if self.action == self.INIT:
+ if (type(self).get_attribute != Resource.get_attribute or
+ type(self).FnGetAtt != Resource.FnGetAtt or
+ path[0] in self.attributes):
+ # TODO(ricolin) make better placeholder values here
+ yield path, None
+ else:
+ try:
+ yield attr, self.get_attribute(*path)
+ except exception.InvalidTemplateAttribute as ita:
+ LOG.info('%s', ita)
dep_attrs = set(self.stack.get_dep_attrs(
six.itervalues(self.stack.resources),
diff --git a/heat/engine/stack.py b/heat/engine/stack.py
index f89cfc9f4..a07cea7e5 100644
--- a/heat/engine/stack.py
+++ b/heat/engine/stack.py
@@ -839,10 +839,11 @@ class Stack(collections.Mapping):
raise exception.StackValidationFailed(
message=_("Duplicate names %s") % dup_names)
- if validate_by_deps:
- iter_rsc = self.dependencies
- else:
- iter_rsc = six.itervalues(resources)
+ iter_rsc = (self.dependencies if validate_by_deps
+ else six.itervalues(resources))
+
+ for name, res in six.iteritems(resources):
+ stk_defn.update_resource_data(self.defn, name, res.node_data())
unique_defns = set(res.t for res in six.itervalues(resources))
unique_defn_names = set(defn.name for defn in unique_defns)
diff --git a/heat/tests/engine/test_check_resource.py b/heat/tests/engine/test_check_resource.py
index 09d59bf60..ea9215207 100644
--- a/heat/tests/engine/test_check_resource.py
+++ b/heat/tests/engine/test_check_resource.py
@@ -604,6 +604,7 @@ class MiscMethodsTest(common.HeatTestCase):
self.resource = self.stack['A']
def test_node_data_ok(self):
+ self.resource.action = self.resource.CREATE
expected_input_data = {'attrs': {(u'flat_dict', u'key2'): 'val2',
(u'flat_dict', u'key3'): 'val3',
(u'nested_dict', u'dict', u'a'): 1,
@@ -618,6 +619,7 @@ class MiscMethodsTest(common.HeatTestCase):
self.assertEqual(expected_input_data, actual_input_data.as_dict())
def test_node_data_exception(self):
+ self.resource.action = self.resource.CREATE
expected_input_data = {'attrs': {},
'id': mock.ANY,
'reference_id': 'A',