diff --git a/docs/blueprints.rst b/docs/blueprints.rst index 464b57f97..149ec438b 100644 --- a/docs/blueprints.rst +++ b/docs/blueprints.rst @@ -244,9 +244,10 @@ CFNType The ``CFNType`` can be used to signal that a variable should be submitted to CloudFormation as a Parameter instead of only available to the -Blueprint when rendering. This is useful if you want to leverage AWS -specific Parameter types like ``List``. See -``stacker.blueprints.variables.types`` for available subclasses of the +Blueprint when rendering. This is useful if you want to leverage AWS- +Specific Parameter types (e.g. ``List``) or Systems +Manager Parameter Store values (e.g. ``AWS::SSM::Parameter::Value``). +See ``stacker.blueprints.variables.types`` for available subclasses of the ``CFNType``. Example diff --git a/stacker/blueprints/variables/types.py b/stacker/blueprints/variables/types.py index 4ffe60c5f..5bfa77108 100644 --- a/stacker/blueprints/variables/types.py +++ b/stacker/blueprints/variables/types.py @@ -127,10 +127,14 @@ def __init__(self, parameter_type): self.parameter_type = parameter_type +# General CFN types CFNString = CFNType("String") CFNNumber = CFNType("Number") CFNNumberList = CFNType("List") CFNCommaDelimitedList = CFNType("CommaDelimitedList") + +# AWS-Specific Parameter Types +# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#aws-specific-parameter-types EC2AvailabilityZoneName = CFNType("AWS::EC2::AvailabilityZone::Name") EC2ImageId = CFNType("AWS::EC2::Image::Id") EC2InstanceId = CFNType("AWS::EC2::Instance::Id") @@ -151,3 +155,51 @@ def __init__(self, parameter_type): EC2VolumeIdList = CFNType("List") EC2VPCIdList = CFNType("List") Route53HostedZoneIdList = CFNType("List") + +# SSM Parameter Types +# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#aws-ssm-parameter-types +SSMParameterName = CFNType("AWS::SSM::Parameter::Name") +SSMParameterValueString = CFNType("AWS::SSM::Parameter::Value") +SSMParameterValueStringList = CFNType( + "AWS::SSM::Parameter::Value>") +SSMParameterValueCommaDelimitedList = CFNType( + "AWS::SSM::Parameter::Value") +# Each AWS-specific type here is repeated from the the list above +SSMParameterValueEC2AvailabilityZoneName = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueEC2ImageId = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueEC2InstanceId = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueEC2KeyPairKeyName = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueEC2SecurityGroupGroupName = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueEC2SecurityGroupId = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueEC2SubnetId = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueEC2VolumeId = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueEC2VPCId = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueRoute53HostedZoneId = CFNType( + "AWS::SSM::Parameter::Value") +SSMParameterValueEC2AvailabilityZoneNameList = CFNType( + "AWS::SSM::Parameter::Value>") +SSMParameterValueEC2ImageIdList = CFNType( + "AWS::SSM::Parameter::Value>") +SSMParameterValueEC2InstanceIdList = CFNType( + "AWS::SSM::Parameter::Value>") +SSMParameterValueEC2SecurityGroupGroupNameList = CFNType( + "AWS::SSM::Parameter::Value>") +SSMParameterValueEC2SecurityGroupIdList = CFNType( + "AWS::SSM::Parameter::Value>") +SSMParameterValueEC2SubnetIdList = CFNType( + "AWS::SSM::Parameter::Value>") +SSMParameterValueEC2VolumeIdList = CFNType( + "AWS::SSM::Parameter::Value>") +SSMParameterValueEC2VPCIdList = CFNType( + "AWS::SSM::Parameter::Value>") +SSMParameterValueRoute53HostedZoneIdList = CFNType( + "AWS::SSM::Parameter::Value>")