Merge "heat engine : Set stack parameters AWS::StackId on stack create/store"
This commit is contained in:
commit
fce0c8a20a
|
@ -84,6 +84,8 @@ class Stack(object):
|
|||
parameters = Parameters(self.name, self.t)
|
||||
self.parameters = parameters
|
||||
|
||||
self._set_param_stackid()
|
||||
|
||||
if resolve_data:
|
||||
self.outputs = self.resolve_static_data(self.t[template.OUTPUTS])
|
||||
else:
|
||||
|
@ -96,6 +98,20 @@ class Stack(object):
|
|||
|
||||
self.dependencies = self._get_dependencies(self.resources.itervalues())
|
||||
|
||||
def _set_param_stackid(self):
|
||||
'''
|
||||
Update self.parameters with the current ARN which is then provided
|
||||
via the Parameters class as the AWS::StackId pseudo parameter
|
||||
'''
|
||||
# This can fail if constructor called without a valid context,
|
||||
# as it is in many tests
|
||||
try:
|
||||
stack_arn = self.identifier().arn()
|
||||
except (AttributeError, ValueError, TypeError):
|
||||
logger.warning("Unable to set parameters StackId identifier")
|
||||
else:
|
||||
self.parameters.set_stack_id(stack_arn)
|
||||
|
||||
@staticmethod
|
||||
def _get_dependencies(resources):
|
||||
'''Return the dependency graph for a list of resources'''
|
||||
|
@ -148,6 +164,8 @@ class Stack(object):
|
|||
new_s = db_api.stack_create(self.context, s)
|
||||
self.id = new_s.id
|
||||
|
||||
self._set_param_stackid()
|
||||
|
||||
return self.id
|
||||
|
||||
def identifier(self):
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
import unittest
|
||||
from nose.plugins.attrib import attr
|
||||
import mox
|
||||
import uuid
|
||||
|
||||
from heat.common import context
|
||||
from heat.common import exception
|
||||
|
@ -299,6 +300,7 @@ class StackTest(unittest.TestCase):
|
|||
self.ctx = context.get_admin_context()
|
||||
self.m.StubOutWithMock(self.ctx, 'username')
|
||||
self.ctx.username = self.username
|
||||
self.ctx.tenant_id = 'test_tenant'
|
||||
|
||||
self.m.ReplayAll()
|
||||
|
||||
|
@ -336,11 +338,42 @@ class StackTest(unittest.TestCase):
|
|||
parser.Template({}))
|
||||
self.stack.store()
|
||||
identifier = self.stack.identifier()
|
||||
self.assertEqual(identifier.tenant, self.ctx.tenant)
|
||||
self.assertEqual(identifier.tenant, self.ctx.tenant_id)
|
||||
self.assertEqual(identifier.stack_name, 'identifier_test')
|
||||
self.assertTrue(identifier.stack_id)
|
||||
self.assertFalse(identifier.path)
|
||||
|
||||
@stack_delete_after
|
||||
def test_set_param_id(self):
|
||||
dummy_stackid = 'STACKABCD1234'
|
||||
self.m.StubOutWithMock(uuid, 'uuid4')
|
||||
uuid.uuid4().AndReturn(dummy_stackid)
|
||||
self.m.ReplayAll()
|
||||
self.stack = parser.Stack(self.ctx, 'param_arn_test',
|
||||
parser.Template({}))
|
||||
exp_prefix = 'arn:openstack:heat::test_tenant:stacks/param_arn_test/'
|
||||
self.assertEqual(self.stack.parameters['AWS::StackId'],
|
||||
exp_prefix + 'None')
|
||||
self.stack.store()
|
||||
identifier = self.stack.identifier()
|
||||
self.assertEqual(self.stack.parameters['AWS::StackId'],
|
||||
exp_prefix + dummy_stackid)
|
||||
self.assertEqual(self.stack.parameters['AWS::StackId'],
|
||||
identifier.arn())
|
||||
self.m.VerifyAll()
|
||||
|
||||
@stack_delete_after
|
||||
def test_load_param_id(self):
|
||||
self.stack = parser.Stack(self.ctx, 'param_load_arn_test',
|
||||
parser.Template({}))
|
||||
self.stack.store()
|
||||
identifier = self.stack.identifier()
|
||||
self.assertEqual(self.stack.parameters['AWS::StackId'],
|
||||
identifier.arn())
|
||||
|
||||
newstack = parser.Stack.load(self.ctx, stack_id=self.stack.id)
|
||||
self.assertEqual(newstack.parameters['AWS::StackId'], identifier.arn())
|
||||
|
||||
@stack_delete_after
|
||||
def test_created_time(self):
|
||||
self.stack = parser.Stack(self.ctx, 'creation_time_test',
|
||||
|
|
Loading…
Reference in New Issue