diff --git a/heat/engine/service.py b/heat/engine/service.py index 3400791aff..000ec6759b 100644 --- a/heat/engine/service.py +++ b/heat/engine/service.py @@ -1177,7 +1177,8 @@ class EngineService(service.Service): resource_validate=False, service_check_defer=service_check_defer) try: - stack.validate(ignorable_errors=ignorable_errors) + stack.validate(ignorable_errors=ignorable_errors, + validate_by_deps=False) except exception.StackValidationFailed as ex: return {'Error': six.text_type(ex)} diff --git a/heat/engine/stack.py b/heat/engine/stack.py index 7d3cd05268..f8e1c4a17a 100644 --- a/heat/engine/stack.py +++ b/heat/engine/stack.py @@ -710,7 +710,7 @@ class Stack(collections.Mapping): return handler and handler(resource_name) @profiler.trace('Stack.validate', hide_args=False) - def validate(self, ignorable_errors=None): + def validate(self, ignorable_errors=None, validate_by_deps=True): """Validates the stack.""" # TODO(sdake) Should return line number of invalid reference @@ -737,7 +737,12 @@ class Stack(collections.Mapping): raise exception.StackValidationFailed( message=_("Duplicate names %s") % dup_names) - for res in self.dependencies: + if validate_by_deps: + iter_rsc = self.dependencies + else: + iter_rsc = six.itervalues(self.resources) + + for res in iter_rsc: try: if self.resource_validate: result = res.validate()