Merge "Get rid of resource_validate flag in Stack"

This commit is contained in:
Jenkins 2017-05-04 13:12:39 +00:00 committed by Gerrit Code Review
commit 655a92971e
6 changed files with 15 additions and 33 deletions

View File

@ -221,8 +221,6 @@ class Resource(status.ResourceStatus):
self.context = stack.context
self.name = name
self.t = definition
# Only translate in cases where resource_validate is True
# ex. for template-validate
self.reparse(client_resolve=False)
self.update_policy = self.t.update_policy(self.update_policy_schema,
self.context)

View File

@ -1231,11 +1231,11 @@ class EngineService(service.ServiceBase):
stack_name = 'dummy'
stack = parser.Stack(cnxt, stack_name, tmpl,
strict_validate=False,
resource_validate=False,
service_check_defer=service_check_defer)
try:
stack.validate(ignorable_errors=ignorable_errors,
validate_by_deps=False)
validate_by_deps=False,
validate_res_tmpl_only=True)
except exception.StackValidationFailed as ex:
return {'Error': six.text_type(ex)}
@ -2428,8 +2428,7 @@ class EngineService(service.ServiceBase):
continue
stk = parser.Stack.load(cnxt, stack=s,
service_check_defer=True,
resource_validate=False)
service_check_defer=True)
LOG.info('Engine %(engine)s went down when stack '
'%(stack_id)s was in action %(action)s',
{'engine': engine_id, 'action': stk.action,

View File

@ -124,7 +124,7 @@ class Stack(collections.Mapping):
use_stored_context=False, username=None,
nested_depth=0, strict_validate=True, convergence=False,
current_traversal=None, tags=None, prev_raw_template_id=None,
current_deps=None, cache_data=None, resource_validate=True,
current_deps=None, cache_data=None,
service_check_defer=False, deleted_time=None):
"""Initialise the Stack.
@ -192,13 +192,6 @@ class Stack(collections.Mapping):
# for not-yet-created resources (which return None)
self.strict_validate = strict_validate
# resource_validate can be used to disable resource plugin subclass
# validate methods, which is useful when you want to validate
# template integrity but some parameters may not be provided
# at all, thus we can't yet reference property values such as is
# commonly done in plugin validate() methods
self.resource_validate = resource_validate
# service_check_defer can be used to defer the validation of service
# availability for a given resource, which helps to create the resource
# dependency tree completely when respective service is not available,
@ -509,8 +502,7 @@ class Stack(collections.Mapping):
@classmethod
def load(cls, context, stack_id=None, stack=None, show_deleted=True,
use_stored_context=False, force_reload=False, cache_data=None,
service_check_defer=False, resource_validate=True,
load_template=True):
service_check_defer=False, load_template=True):
"""Retrieve a Stack from the database."""
if stack is None:
stack = stack_object.Stack.get_by_id(
@ -528,7 +520,6 @@ class Stack(collections.Mapping):
use_stored_context=use_stored_context,
cache_data=cache_data,
service_check_defer=service_check_defer,
resource_validate=resource_validate,
load_template=load_template)
@classmethod
@ -563,8 +554,7 @@ class Stack(collections.Mapping):
@classmethod
def _from_db(cls, context, stack,
use_stored_context=False, cache_data=None,
service_check_defer=False, resource_validate=True,
load_template=True):
service_check_defer=False, load_template=True):
if load_template:
template = tmpl.Template.load(
context, stack.raw_template_id, stack.raw_template)
@ -589,8 +579,7 @@ class Stack(collections.Mapping):
current_deps=stack.current_deps, cache_data=cache_data,
nested_depth=stack.nested_depth,
deleted_time=stack.deleted_at,
service_check_defer=service_check_defer,
resource_validate=resource_validate)
service_check_defer=service_check_defer)
def get_kwargs_for_cloning(self, keep_status=False, only_db=False):
"""Get common kwargs for calling Stack() for cloning.
@ -797,7 +786,8 @@ class Stack(collections.Mapping):
return handler and handler(resource_name)
@profiler.trace('Stack.validate', hide_args=False)
def validate(self, ignorable_errors=None, validate_by_deps=True):
def validate(self, ignorable_errors=None, validate_by_deps=True,
validate_res_tmpl_only=False):
"""Validates the stack."""
# TODO(sdake) Should return line number of invalid reference
@ -852,7 +842,7 @@ class Stack(collections.Mapping):
if res.name not in unique_defn_names:
continue
try:
if self.resource_validate:
if not validate_res_tmpl_only:
if res.external_id is not None:
res.validate_external()
continue

View File

@ -1338,8 +1338,7 @@ class StackServiceTest(common.HeatTestCase):
])
mock_stack_load.assert_called_once_with(self.ctx,
stack=db_stack,
service_check_defer=True,
resource_validate=False)
service_check_defer=True)
self.assertTrue(lock2.release.called)
reason = ('Engine went down during stack %s' % fake_stack.action)
mock_thread.start_with_acquired_lock.assert_called_once_with(

View File

@ -193,9 +193,7 @@ class ResourceTest(common.HeatTestCase):
self.assertEqual(0, mock_load.call_count)
# set stack._resources = None to reload the resources
# and set resource_validate = False
stack._resources = None
stack.resource_validate = False
mock_db_get.return_value = mock.Mock()
self.assertEqual(1, len(stack.resources))
self.assertEqual(2, mock_translate.call_count)

View File

@ -445,8 +445,7 @@ class StackTest(common.HeatTestCase):
current_deps=None, cache_data=None,
nested_depth=0,
deleted_time=None,
service_check_defer=False,
resource_validate=True)
service_check_defer=False)
self.m.ReplayAll()
stack.Stack.load(self.ctx, stack_id=self.stack.id)
@ -2029,8 +2028,7 @@ class StackTest(common.HeatTestCase):
self.assertIn("The Parameter (aparam) was not provided",
six.text_type(ex))
self.stack.resource_validate = False
self.assertIsNone(self.stack.validate())
self.assertIsNone(self.stack.validate(validate_res_tmpl_only=True))
def test_nodisable_validate_tmpl_err(self):
tmpl = template_format.parse("""
@ -2058,9 +2056,9 @@ class StackTest(common.HeatTestCase):
"The specified reference \"noexist\" (in AResource) is incorrect",
six.text_type(ex))
self.stack.resource_validate = False
ex = self.assertRaises(exception.InvalidTemplateReference,
self.stack.validate)
self.stack.validate,
validate_res_tmpl_only=True)
self.assertIn(
"The specified reference \"noexist\" (in AResource) is incorrect",
six.text_type(ex))