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
This commit is contained in:
parent
d6f8dfed16
commit
8a4a1960f1
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue