From: Steven Hardy Date: Mon, 25 Feb 2013 14:47:45 +0000 (+0000) Subject: heat engine : Add parser parameter support for AWS::StackId X-Git-Tag: 2014.1~848^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=8a4a1960f152431bd0ae822b249da156dc9d3bf1;p=openstack-build%2Fheat-build.git heat engine : Add parser parameter support for AWS::StackId Adds support for the AWS::StackId pseudo parameter, which will allow us to to reference the stack ARN in the template, e.g so that stacks can query their resource metadata via ARN not stack name, which will solve the problem with nested resource being unable to query their metadata. ref bug 1131666 Change-Id: Ib7b1d380fa8766b6d0c968bd66270da8ce8245c4 --- diff --git a/heat/engine/parameters.py b/heat/engine/parameters.py index 3b6d56b7..bc1bf281 100644 --- a/heat/engine/parameters.py +++ b/heat/engine/parameters.py @@ -32,7 +32,11 @@ PARAMETER_TYPES = ( ) = ( 'String', 'Number', 'CommaDelimitedList' ) -(PARAM_STACK_NAME, PARAM_REGION) = ('AWS::StackName', 'AWS::Region') +PSEUDO_PARAMETERS = ( + PARAM_STACK_ID, PARAM_STACK_NAME, PARAM_REGION +) = ( + 'AWS::StackId', 'AWS::StackName', 'AWS::Region' +) class Parameter(object): @@ -214,13 +218,16 @@ class Parameters(collections.Mapping): The parameters of a stack, with type checking, defaults &c. specified by the stack's template. ''' - - def __init__(self, stack_name, tmpl, user_params={}): + def __init__(self, stack_name, tmpl, user_params={}, stack_id=None): ''' Create the parameter container for a stack from the stack name and template, optionally setting the user-supplied parameter values. ''' def parameters(): + yield Parameter(PARAM_STACK_ID, + {TYPE: STRING, + DESCRIPTION: 'Stack ID', + DEFAULT: str(stack_id)}) if stack_name is not None: yield Parameter(PARAM_STACK_NAME, {TYPE: STRING, @@ -271,3 +278,9 @@ class Parameters(collections.Mapping): ''' return self.map(lambda p: p.user_value, lambda p: p.user_value is not None) + + def set_stack_id(self, stack_id): + ''' + Set the AWS::StackId pseudo parameter value + ''' + self.params[PARAM_STACK_ID].schema[DEFAULT] = stack_id diff --git a/heat/tests/test_parameters.py b/heat/tests/test_parameters.py index 80c4aad1..dc530e79 100644 --- a/heat/tests/test_parameters.py +++ b/heat/tests/test_parameters.py @@ -278,8 +278,17 @@ class ParametersTest(unittest.TestCase): params = parameters.Parameters('test_stack', {"Parameters": {}}) self.assertEqual(params['AWS::StackName'], 'test_stack') + self.assertEqual(params['AWS::StackId'], 'None') self.assertTrue('AWS::Region' in params) + def test_pseudo_param_stackid(self): + params = parameters.Parameters('test_stack', {'Parameters': {}}, + stack_id='123::foo') + + self.assertEqual(params['AWS::StackId'], '123::foo') + params.set_stack_id('456::bar') + self.assertEqual(params['AWS::StackId'], '456::bar') + def test_user_param(self): user_params = {'User': 'wibble'} params = parameters.Parameters('test', params_schema, user_params) @@ -316,6 +325,7 @@ class ParametersTest(unittest.TestCase): expected = {'Foo': False, 'Bar': True, 'AWS::Region': True, + 'AWS::StackId': True, 'AWS::StackName': True} self.assertEqual(params.map(lambda p: p.has_default()), expected)