Merge "StackResource add force_reload to nested() accessor method"

This commit is contained in:
Jenkins
2014-11-11 16:51:18 +00:00
committed by Gerrit Code Review
3 changed files with 36 additions and 6 deletions

View File

@@ -247,7 +247,7 @@ class Stack(collections.Mapping):
@classmethod
def load(cls, context, stack_id=None, stack=None, parent_resource=None,
show_deleted=True, use_stored_context=False):
show_deleted=True, use_stored_context=False, force_reload=False):
'''Retrieve a Stack from the database.'''
if stack is None:
stack = db_api.stack_get(context, stack_id,
@@ -257,6 +257,9 @@ class Stack(collections.Mapping):
message = _('No stack exists with id "%s"') % str(stack_id)
raise exception.NotFound(message)
if force_reload:
stack.refresh()
return cls._from_db(context, stack, parent_resource=parent_resource,
use_stored_context=use_stored_context)

View File

@@ -52,15 +52,21 @@ class StackResource(resource.Resource):
self.attributes_schema,
self._resolve_attribute)
def nested(self):
def nested(self, force_reload=False):
'''
Return a Stack object representing the nested (child) stack.
:param force_reload: Forces reloading from the DB instead of returning
the locally cached Stack object
'''
if force_reload:
self._nested = None
if self._nested is None and self.resource_id is not None:
self._nested = parser.Stack.load(self.context,
self.resource_id,
parent_resource=self,
show_deleted=False)
show_deleted=False,
force_reload=force_reload)
if self._nested is None:
raise exception.NotFound(_("Nested stack not found in DB"))

View File

@@ -486,12 +486,31 @@ class StackResourceTest(common.HeatTestCase):
parser.Stack.load(self.parent_resource.context,
self.parent_resource.resource_id,
parent_resource=self.parent_resource,
show_deleted=False).AndReturn('s')
show_deleted=False,
force_reload=False).AndReturn('s')
self.m.ReplayAll()
self.parent_resource.nested()
self.m.VerifyAll()
def test_load_nested_force_reload(self):
create_creator = self.parent_resource.create_with_template(
self.templ, {"KeyName": "key"})
create_creator.run_to_completion()
expected_state = (parser.Stack.CREATE, parser.Stack.COMPLETE)
self.assertEqual(expected_state, self.parent_resource.nested().state)
stack = parser.Stack.load(
self.parent_resource.context,
self.parent_resource.resource_id,
parent_resource=self.parent_resource,
show_deleted=False)
stack.state_set(parser.Stack.CREATE, parser.Stack.FAILED, "foo")
self.assertEqual(expected_state, self.parent_resource.nested().state)
expected_state = (parser.Stack.CREATE, parser.Stack.FAILED)
self.assertEqual(expected_state,
self.parent_resource.nested(force_reload=True).state)
def test_load_nested_non_exist(self):
self.parent_resource.create_with_template(self.templ,
{"KeyName": "key"})
@@ -502,7 +521,8 @@ class StackResourceTest(common.HeatTestCase):
parser.Stack.load(self.parent_resource.context,
self.parent_resource.resource_id,
parent_resource=self.parent_resource,
show_deleted=False)
show_deleted=False,
force_reload=False)
self.m.ReplayAll()
self.assertRaises(exception.NotFound, self.parent_resource.nested)
@@ -529,7 +549,8 @@ class StackResourceTest(common.HeatTestCase):
self.parent_resource.context,
self.parent_resource.resource_id,
parent_resource=self.parent_resource,
show_deleted=False).AndRaise(exception.NotFound(''))
show_deleted=False, force_reload=False
).AndRaise(exception.NotFound(''))
self.m.ReplayAll()
self.assertIsNone(self.parent_resource.delete_nested())