Get rid of resource_validate flag in Stack
Why pass a parameter to a method to influence what it does when you can set some state on the object that the programmer always has to keep in their head to figure out what any given call will do? Change-Id: I020238de0a351dd2eaf51c6f970ae36ad0f931be
This commit is contained in:
parent
9513feca7d
commit
41ae901c3b
|
@ -220,8 +220,6 @@ class Resource(status.ResourceStatus):
|
||||||
self.context = stack.context
|
self.context = stack.context
|
||||||
self.name = name
|
self.name = name
|
||||||
self.t = definition
|
self.t = definition
|
||||||
# Only translate in cases where resource_validate is True
|
|
||||||
# ex. for template-validate
|
|
||||||
self.reparse(client_resolve=False)
|
self.reparse(client_resolve=False)
|
||||||
self.update_policy = self.t.update_policy(self.update_policy_schema,
|
self.update_policy = self.t.update_policy(self.update_policy_schema,
|
||||||
self.context)
|
self.context)
|
||||||
|
|
|
@ -1231,11 +1231,11 @@ class EngineService(service.ServiceBase):
|
||||||
stack_name = 'dummy'
|
stack_name = 'dummy'
|
||||||
stack = parser.Stack(cnxt, stack_name, tmpl,
|
stack = parser.Stack(cnxt, stack_name, tmpl,
|
||||||
strict_validate=False,
|
strict_validate=False,
|
||||||
resource_validate=False,
|
|
||||||
service_check_defer=service_check_defer)
|
service_check_defer=service_check_defer)
|
||||||
try:
|
try:
|
||||||
stack.validate(ignorable_errors=ignorable_errors,
|
stack.validate(ignorable_errors=ignorable_errors,
|
||||||
validate_by_deps=False)
|
validate_by_deps=False,
|
||||||
|
validate_res_tmpl_only=True)
|
||||||
except exception.StackValidationFailed as ex:
|
except exception.StackValidationFailed as ex:
|
||||||
return {'Error': six.text_type(ex)}
|
return {'Error': six.text_type(ex)}
|
||||||
|
|
||||||
|
@ -2428,8 +2428,7 @@ class EngineService(service.ServiceBase):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
stk = parser.Stack.load(cnxt, stack=s,
|
stk = parser.Stack.load(cnxt, stack=s,
|
||||||
service_check_defer=True,
|
service_check_defer=True)
|
||||||
resource_validate=False)
|
|
||||||
LOG.info('Engine %(engine)s went down when stack '
|
LOG.info('Engine %(engine)s went down when stack '
|
||||||
'%(stack_id)s was in action %(action)s',
|
'%(stack_id)s was in action %(action)s',
|
||||||
{'engine': engine_id, 'action': stk.action,
|
{'engine': engine_id, 'action': stk.action,
|
||||||
|
|
|
@ -124,7 +124,7 @@ class Stack(collections.Mapping):
|
||||||
use_stored_context=False, username=None,
|
use_stored_context=False, username=None,
|
||||||
nested_depth=0, strict_validate=True, convergence=False,
|
nested_depth=0, strict_validate=True, convergence=False,
|
||||||
current_traversal=None, tags=None, prev_raw_template_id=None,
|
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):
|
service_check_defer=False, deleted_time=None):
|
||||||
|
|
||||||
"""Initialise the Stack.
|
"""Initialise the Stack.
|
||||||
|
@ -192,13 +192,6 @@ class Stack(collections.Mapping):
|
||||||
# for not-yet-created resources (which return None)
|
# for not-yet-created resources (which return None)
|
||||||
self.strict_validate = strict_validate
|
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
|
# service_check_defer can be used to defer the validation of service
|
||||||
# availability for a given resource, which helps to create the resource
|
# availability for a given resource, which helps to create the resource
|
||||||
# dependency tree completely when respective service is not available,
|
# dependency tree completely when respective service is not available,
|
||||||
|
@ -509,8 +502,7 @@ class Stack(collections.Mapping):
|
||||||
@classmethod
|
@classmethod
|
||||||
def load(cls, context, stack_id=None, stack=None, show_deleted=True,
|
def load(cls, context, stack_id=None, stack=None, show_deleted=True,
|
||||||
use_stored_context=False, force_reload=False, cache_data=None,
|
use_stored_context=False, force_reload=False, cache_data=None,
|
||||||
service_check_defer=False, resource_validate=True,
|
service_check_defer=False, load_template=True):
|
||||||
load_template=True):
|
|
||||||
"""Retrieve a Stack from the database."""
|
"""Retrieve a Stack from the database."""
|
||||||
if stack is None:
|
if stack is None:
|
||||||
stack = stack_object.Stack.get_by_id(
|
stack = stack_object.Stack.get_by_id(
|
||||||
|
@ -528,7 +520,6 @@ class Stack(collections.Mapping):
|
||||||
use_stored_context=use_stored_context,
|
use_stored_context=use_stored_context,
|
||||||
cache_data=cache_data,
|
cache_data=cache_data,
|
||||||
service_check_defer=service_check_defer,
|
service_check_defer=service_check_defer,
|
||||||
resource_validate=resource_validate,
|
|
||||||
load_template=load_template)
|
load_template=load_template)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -563,8 +554,7 @@ class Stack(collections.Mapping):
|
||||||
@classmethod
|
@classmethod
|
||||||
def _from_db(cls, context, stack,
|
def _from_db(cls, context, stack,
|
||||||
use_stored_context=False, cache_data=None,
|
use_stored_context=False, cache_data=None,
|
||||||
service_check_defer=False, resource_validate=True,
|
service_check_defer=False, load_template=True):
|
||||||
load_template=True):
|
|
||||||
if load_template:
|
if load_template:
|
||||||
template = tmpl.Template.load(
|
template = tmpl.Template.load(
|
||||||
context, stack.raw_template_id, stack.raw_template)
|
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,
|
current_deps=stack.current_deps, cache_data=cache_data,
|
||||||
nested_depth=stack.nested_depth,
|
nested_depth=stack.nested_depth,
|
||||||
deleted_time=stack.deleted_at,
|
deleted_time=stack.deleted_at,
|
||||||
service_check_defer=service_check_defer,
|
service_check_defer=service_check_defer)
|
||||||
resource_validate=resource_validate)
|
|
||||||
|
|
||||||
def get_kwargs_for_cloning(self, keep_status=False, only_db=False):
|
def get_kwargs_for_cloning(self, keep_status=False, only_db=False):
|
||||||
"""Get common kwargs for calling Stack() for cloning.
|
"""Get common kwargs for calling Stack() for cloning.
|
||||||
|
@ -797,7 +786,8 @@ class Stack(collections.Mapping):
|
||||||
return handler and handler(resource_name)
|
return handler and handler(resource_name)
|
||||||
|
|
||||||
@profiler.trace('Stack.validate', hide_args=False)
|
@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."""
|
"""Validates the stack."""
|
||||||
# TODO(sdake) Should return line number of invalid reference
|
# 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:
|
if res.name not in unique_defn_names:
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
if self.resource_validate:
|
if not validate_res_tmpl_only:
|
||||||
if res.external_id is not None:
|
if res.external_id is not None:
|
||||||
res.validate_external()
|
res.validate_external()
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -1338,8 +1338,7 @@ class StackServiceTest(common.HeatTestCase):
|
||||||
])
|
])
|
||||||
mock_stack_load.assert_called_once_with(self.ctx,
|
mock_stack_load.assert_called_once_with(self.ctx,
|
||||||
stack=db_stack,
|
stack=db_stack,
|
||||||
service_check_defer=True,
|
service_check_defer=True)
|
||||||
resource_validate=False)
|
|
||||||
self.assertTrue(lock2.release.called)
|
self.assertTrue(lock2.release.called)
|
||||||
reason = ('Engine went down during stack %s' % fake_stack.action)
|
reason = ('Engine went down during stack %s' % fake_stack.action)
|
||||||
mock_thread.start_with_acquired_lock.assert_called_once_with(
|
mock_thread.start_with_acquired_lock.assert_called_once_with(
|
||||||
|
|
|
@ -193,9 +193,7 @@ class ResourceTest(common.HeatTestCase):
|
||||||
self.assertEqual(0, mock_load.call_count)
|
self.assertEqual(0, mock_load.call_count)
|
||||||
|
|
||||||
# set stack._resources = None to reload the resources
|
# set stack._resources = None to reload the resources
|
||||||
# and set resource_validate = False
|
|
||||||
stack._resources = None
|
stack._resources = None
|
||||||
stack.resource_validate = False
|
|
||||||
mock_db_get.return_value = mock.Mock()
|
mock_db_get.return_value = mock.Mock()
|
||||||
self.assertEqual(1, len(stack.resources))
|
self.assertEqual(1, len(stack.resources))
|
||||||
self.assertEqual(2, mock_translate.call_count)
|
self.assertEqual(2, mock_translate.call_count)
|
||||||
|
|
|
@ -445,8 +445,7 @@ class StackTest(common.HeatTestCase):
|
||||||
current_deps=None, cache_data=None,
|
current_deps=None, cache_data=None,
|
||||||
nested_depth=0,
|
nested_depth=0,
|
||||||
deleted_time=None,
|
deleted_time=None,
|
||||||
service_check_defer=False,
|
service_check_defer=False)
|
||||||
resource_validate=True)
|
|
||||||
|
|
||||||
self.m.ReplayAll()
|
self.m.ReplayAll()
|
||||||
stack.Stack.load(self.ctx, stack_id=self.stack.id)
|
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",
|
self.assertIn("The Parameter (aparam) was not provided",
|
||||||
six.text_type(ex))
|
six.text_type(ex))
|
||||||
|
|
||||||
self.stack.resource_validate = False
|
self.assertIsNone(self.stack.validate(validate_res_tmpl_only=True))
|
||||||
self.assertIsNone(self.stack.validate())
|
|
||||||
|
|
||||||
def test_nodisable_validate_tmpl_err(self):
|
def test_nodisable_validate_tmpl_err(self):
|
||||||
tmpl = template_format.parse("""
|
tmpl = template_format.parse("""
|
||||||
|
@ -2058,9 +2056,9 @@ class StackTest(common.HeatTestCase):
|
||||||
"The specified reference \"noexist\" (in AResource) is incorrect",
|
"The specified reference \"noexist\" (in AResource) is incorrect",
|
||||||
six.text_type(ex))
|
six.text_type(ex))
|
||||||
|
|
||||||
self.stack.resource_validate = False
|
|
||||||
ex = self.assertRaises(exception.InvalidTemplateReference,
|
ex = self.assertRaises(exception.InvalidTemplateReference,
|
||||||
self.stack.validate)
|
self.stack.validate,
|
||||||
|
validate_res_tmpl_only=True)
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
"The specified reference \"noexist\" (in AResource) is incorrect",
|
"The specified reference \"noexist\" (in AResource) is incorrect",
|
||||||
six.text_type(ex))
|
six.text_type(ex))
|
||||||
|
|
Loading…
Reference in New Issue