Get stacks from the DB by either name or id

This code was previously misleading, as it appeared to get stacks by id,
but actually got them by name. This patch adds a separate API, so
get_stack() gets the stack by id and get_stack_by_name() gets it by name.

Change-Id: I1cbbb3f9211661ad665e208d87298f177825f8ac
Signed-off-by: Zane Bitter <zbitter@redhat.com>
This commit is contained in:
Zane Bitter 2012-06-17 16:05:57 +02:00
parent 42ad6a7a65
commit 892b99bff4
4 changed files with 34 additions and 21 deletions

View File

@ -99,6 +99,10 @@ def stack_get(context, stack_id):
return IMPL.stack_get(context, stack_id) return IMPL.stack_get(context, stack_id)
def stack_get_by_name(context, stack_name):
return IMPL.stack_get_by_name(context, stack_name)
def stack_get_all(context): def stack_get_all(context):
return IMPL.stack_get_all(context) return IMPL.stack_get_all(context)
@ -111,8 +115,8 @@ def stack_create(context, values):
return IMPL.stack_create(context, values) return IMPL.stack_create(context, values)
def stack_delete(context, stack_name): def stack_delete(context, stack_id):
return IMPL.stack_delete(context, stack_name) return IMPL.stack_delete(context, stack_id)
def user_creds_create(context): def user_creds_create(context):

View File

@ -124,11 +124,20 @@ def resource_get_all_by_stack(context, stack_id):
return results return results
def stack_get_by_name(context, stack_name):
result = model_query(context, models.Stack).\
filter_by(name=stack_name).first()
if (result is not None and context is not None and
result.username != context.username):
return None
return result
def stack_get(context, stack_id): def stack_get(context, stack_id):
result = model_query(context, models.Stack).\ result = model_query(context, models.Stack).\
filter_by(name=stack_id).first() filter_by(id=stack_id).first()
if result is not None and context is not None and\ if (result is not None and context is not None and
result.username != context.username: result.username != context.username):
return None return None
return result return result
@ -140,7 +149,7 @@ def stack_get_all(context):
def stack_get_by_user(context): def stack_get_by_user(context):
results = model_query(context, models.Stack).\ results = model_query(context, models.Stack).\
filter_by(username=context.username).all() filter_by(username=context.username).all()
return results return results
@ -151,8 +160,8 @@ def stack_create(context, values):
return stack_ref return stack_ref
def stack_delete(context, stack_name): def stack_delete(context, stack_id):
s = stack_get(context, stack_name) s = stack_get(context, stack_id)
if not s: if not s:
raise NotFound('Attempt to delete a stack with id: %s %s' % raise NotFound('Attempt to delete a stack with id: %s %s' %
(stack_name, 'that does not exist')) (stack_name, 'that does not exist'))

View File

@ -148,7 +148,7 @@ class EngineManager(manager.Manager):
self._authenticate(context) self._authenticate(context)
res = {'stacks': []} res = {'stacks': []}
s = db_api.stack_get(context, stack_name) s = db_api.stack_get_by_name(context, stack_name)
if s: if s:
ps = parser.Stack(context, s.name, ps = parser.Stack(context, s.name,
s.raw_template.parsed_template.template, s.raw_template.parsed_template.template,
@ -190,7 +190,7 @@ class EngineManager(manager.Manager):
self._authenticate(context) self._authenticate(context)
if db_api.stack_get(None, stack_name): if db_api.stack_get_by_name(None, stack_name):
return {'Error': 'Stack already exists with that name.'} return {'Error': 'Stack already exists with that name.'}
metadata_server = config.FLAGS.heat_metadata_server_url metadata_server = config.FLAGS.heat_metadata_server_url
@ -275,7 +275,7 @@ class EngineManager(manager.Manager):
arg3 -> Dict of http request parameters passed in from API side. arg3 -> Dict of http request parameters passed in from API side.
""" """
self._authenticate(context) self._authenticate(context)
s = db_api.stack_get(None, stack_name) s = db_api.stack_get_by_name(None, stack_name)
if s: if s:
return s.raw_template.template return s.raw_template.template
return None return None
@ -290,7 +290,7 @@ class EngineManager(manager.Manager):
self._authenticate(context) self._authenticate(context)
st = db_api.stack_get(context, stack_name) st = db_api.stack_get_by_name(context, stack_name)
if not st: if not st:
return {'Error': 'No stack by that name'} return {'Error': 'No stack by that name'}
@ -327,7 +327,7 @@ class EngineManager(manager.Manager):
self._authenticate(context) self._authenticate(context)
if stack_name is not None: if stack_name is not None:
st = db_api.stack_get(context, stack_name) st = db_api.stack_get_by_name(context, stack_name)
if not st: if not st:
return {'Error': 'No stack by that name'} return {'Error': 'No stack by that name'}
@ -343,7 +343,7 @@ class EngineManager(manager.Manager):
stack_name = event['stack'] stack_name = event['stack']
resource_name = event['resource'] resource_name = event['resource']
stack = db_api.stack_get(context, stack_name) stack = db_api.stack_get_by_name(context, stack_name)
resource = db_api.resource_get_by_name_and_stack(context, resource = db_api.resource_get_by_name_and_stack(context,
resource_name, resource_name,
stack.id) stack.id)
@ -381,7 +381,7 @@ class EngineManager(manager.Manager):
""" """
Return the resource IDs of the given stack. Return the resource IDs of the given stack.
""" """
stack = db_api.stack_get(context, stack_name) stack = db_api.stack_get_by_name(context, stack_name)
if stack: if stack:
return [res.name for res in stack] return [res.name for res in stack]
else: else:
@ -392,7 +392,7 @@ class EngineManager(manager.Manager):
Get the metadata for the given resource. Get the metadata for the given resource.
""" """
s = db_api.stack_get(context, stack_name) s = db_api.stack_get_by_name(context, stack_name)
if not s: if not s:
return ['stack', None] return ['stack', None]
@ -407,7 +407,7 @@ class EngineManager(manager.Manager):
""" """
Update the metadata for the given resource. Update the metadata for the given resource.
""" """
s = db_api.stack_get(context, stack_name) s = db_api.stack_get_by_name(context, stack_name)
if not s: if not s:
return ['stack', None] return ['stack', None]
pt_id = s.raw_template.parsed_template.id pt_id = s.raw_template.parsed_template.id
@ -460,7 +460,7 @@ class EngineManager(manager.Manager):
logger.info('no action for new state %s', logger.info('no action for new state %s',
new_state) new_state)
else: else:
s = db_api.stack_get(None, wr.stack_name) s = db_api.stack_get_by_name(None, wr.stack_name)
if s: if s:
ps = parser.Stack(context, s.name, ps = parser.Stack(context, s.name,
s.raw_template.parsed_template.template, s.raw_template.parsed_template.template,

View File

@ -153,7 +153,7 @@ class Stack(object):
created, so commands like describe will work. created, so commands like describe will work.
''' '''
if self.parsed_template_id == 0: if self.parsed_template_id == 0:
stack = db_api.stack_get(self.context, self.name) stack = db_api.stack_get(self.context, self.id)
if stack: if stack:
self.parsed_template_id = stack.raw_template.parsed_template.id self.parsed_template_id = stack.raw_template.parsed_template.id
else: else:
@ -242,7 +242,7 @@ class Stack(object):
'Failed to delete ' + ', '.join(failures)) 'Failed to delete ' + ', '.join(failures))
else: else:
self.state_set(self.DELETE_COMPLETE, 'Deleted successfully') self.state_set(self.DELETE_COMPLETE, 'Deleted successfully')
db_api.stack_delete(self.context, self.name) db_api.stack_delete(self.context, self.id)
def get_outputs(self): def get_outputs(self):
outputs = self.resolve_runtime_data(self.outputs) outputs = self.resolve_runtime_data(self.outputs)
@ -262,7 +262,7 @@ class Stack(object):
''' '''
if self.parsed_template_id == 0: if self.parsed_template_id == 0:
stack = db_api.stack_get(self.context, self.name) stack = db_api.stack_get(self.context, self.id)
if stack: if stack:
self.parsed_template_id = stack.raw_template.parsed_template.id self.parsed_template_id = stack.raw_template.parsed_template.id