from tests import EXAMPLE_AMI_ID

template = {
    "Description": "AWS CloudFormation Sample Template vpc_single_instance_in_subnet.template: Sample template showing how to create a VPC and add an EC2 instance with an Elastic IP address and a security group. **WARNING** This template creates an Amazon EC2 instance. You will be billed for the AWS resources used if you create a stack from this template.",
    "Parameters": {
        "SSHLocation": {
            "ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x.",
            "Description": " The IP address range that can be used to SSH to the EC2 instances",
            "Default": "0.0.0.0/0",
            "MinLength": "9",
            "AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})",
            "MaxLength": "18",
            "Type": "String",
        },
        "KeyName": {
            "Type": "String",
            "Description": "Name of an existing EC2 KeyPair to enable SSH access to the instance",
            "MinLength": "1",
            "AllowedPattern": "[\\x20-\\x7E]*",
            "MaxLength": "255",
            "ConstraintDescription": "can contain only ASCII characters.",
        },
        "InstanceType": {
            "Default": "m1.small",
            "ConstraintDescription": "must be a valid EC2 instance type.",
            "Type": "String",
            "Description": "WebServer EC2 instance type",
            "AllowedValues": [
                "t1.micro",
                "m1.small",
                "m1.medium",
                "m1.large",
                "m1.xlarge",
                "m2.xlarge",
                "m2.2xlarge",
                "m2.4xlarge",
                "m3.xlarge",
                "m3.2xlarge",
                "c1.medium",
                "c1.xlarge",
                "cc1.4xlarge",
                "cc2.8xlarge",
                "cg1.4xlarge",
            ],
        },
    },
    "AWSTemplateFormatVersion": "2010-09-09",
    "Outputs": {
        "URL": {
            "Description": "Newly created application URL",
            "Value": {
                "Fn::Join": [
                    "",
                    ["http://", {"Fn::GetAtt": ["WebServerInstance", "PublicIp"]}],
                ]
            },
        }
    },
    "Resources": {
        "Subnet": {
            "Type": "AWS::EC2::Subnet",
            "Properties": {
                "VpcId": {"Ref": "VPC"},
                "CidrBlock": "10.0.0.0/24",
                "Tags": [{"Value": {"Ref": "AWS::StackId"}, "Key": "Application"}],
            },
        },
        "WebServerWaitHandle": {"Type": "AWS::CloudFormation::WaitConditionHandle"},
        "Route": {
            "Type": "AWS::EC2::Route",
            "Properties": {
                "GatewayId": {"Ref": "InternetGateway"},
                "DestinationCidrBlock": "0.0.0.0/0",
                "RouteTableId": {"Ref": "RouteTable"},
            },
            "DependsOn": "AttachGateway",
        },
        "SubnetRouteTableAssociation": {
            "Type": "AWS::EC2::SubnetRouteTableAssociation",
            "Properties": {
                "SubnetId": {"Ref": "Subnet"},
                "RouteTableId": {"Ref": "RouteTable"},
            },
        },
        "InternetGateway": {
            "Type": "AWS::EC2::InternetGateway",
            "Properties": {
                "Tags": [{"Value": {"Ref": "AWS::StackId"}, "Key": "Application"}]
            },
        },
        "RouteTable": {
            "Type": "AWS::EC2::RouteTable",
            "Properties": {
                "VpcId": {"Ref": "VPC"},
                "Tags": [{"Value": {"Ref": "AWS::StackId"}, "Key": "Application"}],
            },
        },
        "WebServerWaitCondition": {
            "Type": "AWS::CloudFormation::WaitCondition",
            "Properties": {"Handle": {"Ref": "WebServerWaitHandle"}, "Timeout": "300"},
            "DependsOn": "WebServerInstance",
        },
        "VPC": {
            "Type": "AWS::EC2::VPC",
            "Properties": {
                "CidrBlock": "10.0.0.0/16",
                "Tags": [{"Value": {"Ref": "AWS::StackId"}, "Key": "Application"}],
            },
        },
        "InstanceSecurityGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "SecurityGroupIngress": [
                    {
                        "ToPort": "22",
                        "IpProtocol": "tcp",
                        "CidrIp": {"Ref": "SSHLocation"},
                        "FromPort": "22",
                    },
                    {
                        "ToPort": "80",
                        "IpProtocol": "tcp",
                        "CidrIp": "0.0.0.0/0",
                        "FromPort": "80",
                    },
                ],
                "VpcId": {"Ref": "VPC"},
                "GroupDescription": "Enable SSH access via port 22",
            },
        },