def format_event(context, event):
- stack = parser.Stack.load(context, event.stack.id)
+ stack = parser.Stack.load(context, stack=event.stack)
result = {
EVENT_ID: event.id,
EVENT_STACK_ID: dict(stack.identifier()),
return deps
@classmethod
- def load(cls, context, stack_id, resolve_data=True):
+ def load(cls, context, stack_id=None, stack=None, resolve_data=True):
'''Retrieve a Stack from the database'''
- s = db_api.stack_get(context, stack_id)
- if s is None:
+ if stack is None:
+ stack = db_api.stack_get(context, stack_id)
+ if stack is None:
message = 'No stack exists with id "%s"' % str(stack_id)
raise exception.NotFound(message)
- template = Template.load(context, s.raw_template_id)
- params = Parameters(s.name, template, s.parameters)
- stack = cls(context, s.name, template, params,
- stack_id, s.status, s.status_reason, s.timeout,
+ template = Template.load(context, stack.raw_template_id)
+ params = Parameters(stack.name, template, stack.parameters)
+ stack = cls(context, stack.name, template, params,
+ stack.id, stack.status, stack.status_reason, stack.timeout,
resolve_data)
return stack
"""
s = db_api.stack_get_by_name(context, stack_name)
if s:
- stack = parser.Stack.load(context, s.id)
+ stack = parser.Stack.load(context, stack=s)
return dict(stack.identifier())
else:
raise AttributeError('Unknown stack name')
stacks = [self._get_stack(context, stack_identity)]
def format_stack_detail(s):
- stack = parser.Stack.load(context, s.id)
+ stack = parser.Stack.load(context, stack=s)
return api.format_stack(stack)
return {'stacks': [format_stack_detail(s) for s in stacks]}
stacks = db_api.stack_get_by_tenant(context) or []
def format_stack_detail(s):
- stack = parser.Stack.load(context, s.id, resolve_data=False)
+ stack = parser.Stack.load(context, stack=s, resolve_data=False)
return api.format_stack(stack)
return {'stacks': [format_stack_detail(s) for s in stacks]}
# Get the database representation of the existing stack
db_stack = self._get_stack(context, stack_identity)
- current_stack = parser.Stack.load(context, db_stack.id)
+ current_stack = parser.Stack.load(context, stack=db_stack)
# Now parse the template and any parameters for the updated
# stack definition.
logger.info('deleting stack %s' % st.name)
- stack = parser.Stack.load(context, st.id)
+ stack = parser.Stack.load(context, stack=st)
# TODO Angus do we need a kill or will stop do?
if st.id in self.stg:
def describe_stack_resource(self, context, stack_identity, resource_name):
s = self._get_stack(context, stack_identity)
- stack = parser.Stack.load(context, s.id)
+ stack = parser.Stack.load(context, stack=s)
if resource_name not in stack:
raise AttributeError('Unknown resource name')
if not s:
raise AttributeError("The specified stack doesn't exist")
- stack = parser.Stack.load(context, s.id)
+ stack = parser.Stack.load(context, stack=s)
if logical_resource_id is not None:
name_match = lambda r: r.name == logical_resource_id
def list_stack_resources(self, context, stack_identity):
s = self._get_stack(context, stack_identity)
- stack = parser.Stack.load(context, s.id)
+ stack = parser.Stack.load(context, stack=s)
return [api.format_stack_resource(resource)
for resource in stack if resource.id is not None]
logger.warn("Stack %s not found" % stack_name)
return ['stack', None]
- stack = parser.Stack.load(None, s.id)
+ stack = parser.Stack.load(None, stack=s)
if resource_name not in stack:
logger.warn("Resource not found %s:%s." % (stack_name,
resource_name))
logger.warn("Stack %s not found" % stack_id)
return ['stack', None]
- stack = parser.Stack.load(None, s.id)
+ stack = parser.Stack.load(None, stack=s)
if resource_name not in stack:
logger.warn("Resource not found %s:%s." % (stack_id,
resource_name))
parser.Stack.UPDATE_COMPLETE):
user_creds = db_api.user_creds_get(s.user_creds_id)
ctxt = ctxtlib.RequestContext.from_dict(user_creds)
- stack = parser.Stack.load(ctxt, s.id)
+ stack = parser.Stack.load(ctxt, stack=s)
for a in self.rule[self.ACTION_MAP[new_state]]:
greenpool.spawn_n(stack[a].alarm)
actioned = True
u'stack_name': u'wordpress',
u'stack_status': u'CREATE_COMPLETE'}]}
self.m.StubOutWithMock(rpc, 'call')
- rpc.call(dummy_req.context, self.topic, {'method': 'show_stack',
- 'args': {'stack_identity': None},
+ rpc.call(dummy_req.context, self.topic, {'method': 'list_stacks',
+ 'args': {},
'version': self.api_version}, None
).AndReturn(engine_resp)
# Insert an engine RPC error and ensure we map correctly to the
# heat exception type
self.m.StubOutWithMock(rpc, 'call')
- rpc.call(dummy_req.context, self.topic, {'method': 'show_stack',
- 'args': {'stack_identity': None},
+ rpc.call(dummy_req.context, self.topic, {'method': 'list_stacks',
+ 'args': {},
'version': self.api_version}, None
).AndRaise(rpc_common.RemoteError("AttributeError"))
# Insert an engine RPC error and ensure we map correctly to the
# heat exception type
self.m.StubOutWithMock(rpc, 'call')
- rpc.call(dummy_req.context, self.topic, {'method': 'show_stack',
- 'args': {'stack_identity': None},
+ rpc.call(dummy_req.context, self.topic, {'method': 'list_stacks',
+ 'args': {},
'version': self.api_version}, None
).AndRaise(rpc_common.RemoteError("Exception"))
}
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
- {'method': 'show_stack',
- 'args': {'stack_identity': None},
+ {'method': 'list_stacks',
+ 'args': {},
'version': self.api_version},
None).AndReturn(engine_resp)
self.m.ReplayAll()
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
- {'method': 'show_stack',
- 'args': {'stack_identity': None},
+ {'method': 'list_stacks',
+ 'args': {},
'version': self.api_version},
None).AndRaise(rpc_common.RemoteError("AttributeError"))
self.m.ReplayAll()
self.m.StubOutWithMock(rpc, 'call')
rpc.call(req.context, self.topic,
- {'method': 'show_stack',
- 'args': {'stack_identity': None},
+ {'method': 'list_stacks',
+ 'args': {},
'version': self.api_version},
None).AndRaise(rpc_common.RemoteError("Exception"))
self.m.ReplayAll()
def test_stack_delete(self):
stack_name = 'service_delete_test_stack'
stack = get_wordpress_stack(stack_name, self.ctx)
- stack.store()
+ sid = stack.store()
+ s = db_api.stack_get(self.ctx, sid)
self.m.StubOutWithMock(parser.Stack, 'load')
#self.m.StubOutWithMock(threadgroup, 'ThreadGroup')
#threadgroup.ThreadGroup(stack_name).AndReturn(DummyThreadGroup())
- parser.Stack.load(self.ctx, stack.id).AndReturn(stack)
+ parser.Stack.load(self.ctx, stack=s).AndReturn(stack)
self.m.ReplayAll()
template = '{ "Template": "data" }'
old_stack = get_wordpress_stack(stack_name, self.ctx)
- old_stack.store()
+ sid = old_stack.store()
+ s = db_api.stack_get(self.ctx, sid)
stack = get_wordpress_stack(stack_name, self.ctx)
self.m.StubOutWithMock(parser, 'Stack')
self.m.StubOutWithMock(parser.Stack, 'load')
- parser.Stack.load(self.ctx, old_stack.id).AndReturn(old_stack)
+ parser.Stack.load(self.ctx, stack=s).AndReturn(old_stack)
self.m.StubOutWithMock(parser, 'Template')
self.m.StubOutWithMock(parser, 'Parameters')
old_stack = get_wordpress_stack(stack_name, self.ctx)
old_stack.store()
+ sid = old_stack.store()
+ s = db_api.stack_get(self.ctx, sid)
stack = get_wordpress_stack(stack_name, self.ctx)
self.m.StubOutWithMock(parser, 'Stack')
self.m.StubOutWithMock(parser.Stack, 'load')
- parser.Stack.load(self.ctx, old_stack.id).AndReturn(old_stack)
+ parser.Stack.load(self.ctx, stack=s).AndReturn(old_stack)
self.m.StubOutWithMock(parser, 'Template')
self.m.StubOutWithMock(parser, 'Parameters')
self.assertTrue('event_time' in ev)
def test_stack_describe_all(self):
- sl = self.man.show_stack(self.ctx, None)
+ sl = self.man.list_stacks(self.ctx)
self.assertEqual(len(sl['stacks']), 1)
for s in sl['stacks']:
self.tenant = 'stack_describe_all_empty_tenant'
self.setUp()
- sl = self.man.show_stack(self.ctx, None)
+ sl = self.man.list_stacks(self.ctx)
self.assertEqual(len(sl['stacks']), 0)