Exception logged in screen-h-api.log is
2014-07-31 19:10:54.162 29106 WARNING oslo.messaging._drivers.amqpdriver [req-9e945e84-c08d-4ebe-b573-42a547925a42 ] No calling threads waiting for msg_id : 83c7257b7e1544cabe13a4ca1aca62fc, message : {u\
'_unique_id': u'ae2b95e1d8bf4ef6bd5ed790e87e4a97', u'failure': u'{"args": [], "module": "heat.common.exception", "kwargs": {"explanation": "Template version was not provided"}, "message": "The template v\
ersion is invalid: Template version was not provided", "tb": ["Traceback (most recent call last):\\n", " File \\"/opt/stack/heat/heat/engine/service.py\\", line 63, in wrapped\\n return func(self, ct\
x, *args, **kwargs)\\n", " File \\"/opt/stack/heat/heat/engine/service.py\\", line 539, in preview_stack\\n return api.format_stack_preview(stack)\\n", " File \\"/opt/stack/heat/heat/engine/api.py\\\
", line 169, in format_stack_preview\\n fmt_resources = map(format_resource, stack.preview_resources())\\n", " File \\"/opt/stack/heat/heat/engine/stack.py\\", line 509, in preview_resources\\n fo\
r resource in self.resources.itervalues()]\\n", " File \\"/opt/stack/heat/heat/engine/stack_resource.py\\", line 102, in preview\\n template = parser.Template(self.child_template())\\n", " File \\"/\
opt/stack/heat/heat/engine/template.py\\", line 121, in __new__\\n TemplateClass = get_template_class(cls._plugins, template)\\n", " File \\"/opt/stack/heat/heat/engine/template.py\\", line 90, in ge\
t_template_class\\n version = get_version(template_data, available_versions)\\n", " File \\"/opt/stack/heat/heat/engine/template.py\\", line 73, in get_version\\n explanation = _(\'Template versio\
n was not provided\')\\n", "InvalidTemplateVersion: The template version is invalid: Template version was not provided\\n"], "class": "InvalidTemplateVersion"}', u'result': None}
The immediate cause appears to be that heat/engine/template.py, method get_version(template_data, available_versions):
when operating on the the nested stack, is being passed a heat.engine.cfn.template.CfnTemplate for template_data when it expect a dict.
The following (crude) patch works and causes no obvious problems. Will submit as a patch to gerrit. engine/ template. py b/heat/ engine/ template. py engine/ template. py engine/ template. py anager( object) :
diff --git a/heat/
index c26bebe..e1d26a1 100644
--- a/heat/
+++ b/heat/
@@ -56,6 +56,8 @@ class TemplatePluginM
def get_version( template_ data, available_ versions) : template_ data, Template): data.iteritems( ) if
isinstance (v, basestring))
+ if isinstance(
+ template_data = template_data.t
version_keys = set(key for key, version in available_versions)
candidate_keys = set(k for k, v in template_