) = (
'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):
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,
'''
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
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)
expected = {'Foo': False,
'Bar': True,
'AWS::Region': True,
+ 'AWS::StackId': True,
'AWS::StackName': True}
self.assertEqual(params.map(lambda p: p.has_default()), expected)