Merge "StackResource add force_reload to nested() accessor method"
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user