277 lines
9.1 KiB
Python
277 lines
9.1 KiB
Python
|
import boto3
|
||
|
import sure # noqa
|
||
|
|
||
|
from moto import (
|
||
|
mock_autoscaling,
|
||
|
mock_cloudformation,
|
||
|
mock_ec2,
|
||
|
)
|
||
|
|
||
|
from utils import setup_networking
|
||
|
|
||
|
|
||
|
@mock_autoscaling
|
||
|
@mock_cloudformation
|
||
|
def test_launch_configuration():
|
||
|
cf_client = boto3.client("cloudformation", region_name="us-east-1")
|
||
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
||
|
|
||
|
stack_name = "test-launch-configuration"
|
||
|
|
||
|
cf_template = """
|
||
|
Resources:
|
||
|
LaunchConfiguration:
|
||
|
Type: AWS::AutoScaling::LaunchConfiguration
|
||
|
Properties:
|
||
|
ImageId: ami-0cc293023f983ed53
|
||
|
InstanceType: t2.micro
|
||
|
LaunchConfigurationName: test_launch_configuration
|
||
|
Outputs:
|
||
|
LaunchConfigurationName:
|
||
|
Value: !Ref LaunchConfiguration
|
||
|
""".strip()
|
||
|
|
||
|
cf_client.create_stack(
|
||
|
StackName=stack_name, TemplateBody=cf_template,
|
||
|
)
|
||
|
stack = cf_client.describe_stacks(StackName=stack_name)["Stacks"][0]
|
||
|
stack["Outputs"][0]["OutputValue"].should.be.equal("test_launch_configuration")
|
||
|
|
||
|
lc = client.describe_launch_configurations()["LaunchConfigurations"][0]
|
||
|
lc["LaunchConfigurationName"].should.be.equal("test_launch_configuration")
|
||
|
lc["ImageId"].should.be.equal("ami-0cc293023f983ed53")
|
||
|
lc["InstanceType"].should.be.equal("t2.micro")
|
||
|
|
||
|
cf_template = """
|
||
|
Resources:
|
||
|
LaunchConfiguration:
|
||
|
Type: AWS::AutoScaling::LaunchConfiguration
|
||
|
Properties:
|
||
|
ImageId: ami-1ea5b10a3d8867db4
|
||
|
InstanceType: m5.large
|
||
|
LaunchConfigurationName: test_launch_configuration
|
||
|
Outputs:
|
||
|
LaunchConfigurationName:
|
||
|
Value: !Ref LaunchConfiguration
|
||
|
""".strip()
|
||
|
|
||
|
cf_client.update_stack(
|
||
|
StackName=stack_name, TemplateBody=cf_template,
|
||
|
)
|
||
|
stack = cf_client.describe_stacks(StackName=stack_name)["Stacks"][0]
|
||
|
stack["Outputs"][0]["OutputValue"].should.be.equal("test_launch_configuration")
|
||
|
|
||
|
lc = client.describe_launch_configurations()["LaunchConfigurations"][0]
|
||
|
lc["LaunchConfigurationName"].should.be.equal("test_launch_configuration")
|
||
|
lc["ImageId"].should.be.equal("ami-1ea5b10a3d8867db4")
|
||
|
lc["InstanceType"].should.be.equal("m5.large")
|
||
|
|
||
|
|
||
|
@mock_autoscaling
|
||
|
@mock_cloudformation
|
||
|
def test_autoscaling_group_from_launch_config():
|
||
|
subnet_id = setup_networking()["subnet1"]
|
||
|
|
||
|
cf_client = boto3.client("cloudformation", region_name="us-east-1")
|
||
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
||
|
|
||
|
client.create_launch_configuration(
|
||
|
LaunchConfigurationName="test_launch_configuration", InstanceType="t2.micro",
|
||
|
)
|
||
|
stack_name = "test-auto-scaling-group"
|
||
|
|
||
|
cf_template = """
|
||
|
Parameters:
|
||
|
SubnetId:
|
||
|
Type: AWS::EC2::Subnet::Id
|
||
|
Resources:
|
||
|
AutoScalingGroup:
|
||
|
Type: AWS::AutoScaling::AutoScalingGroup
|
||
|
Properties:
|
||
|
AutoScalingGroupName: test_auto_scaling_group
|
||
|
AvailabilityZones:
|
||
|
- us-east-1a
|
||
|
LaunchConfigurationName: test_launch_configuration
|
||
|
MaxSize: "5"
|
||
|
MinSize: "1"
|
||
|
VPCZoneIdentifier:
|
||
|
- !Ref SubnetId
|
||
|
Outputs:
|
||
|
AutoScalingGroupName:
|
||
|
Value: !Ref AutoScalingGroup
|
||
|
""".strip()
|
||
|
|
||
|
cf_client.create_stack(
|
||
|
StackName=stack_name,
|
||
|
TemplateBody=cf_template,
|
||
|
Parameters=[{"ParameterKey": "SubnetId", "ParameterValue": subnet_id}],
|
||
|
)
|
||
|
stack = cf_client.describe_stacks(StackName=stack_name)["Stacks"][0]
|
||
|
stack["Outputs"][0]["OutputValue"].should.be.equal("test_auto_scaling_group")
|
||
|
|
||
|
asg = client.describe_auto_scaling_groups()["AutoScalingGroups"][0]
|
||
|
asg["AutoScalingGroupName"].should.be.equal("test_auto_scaling_group")
|
||
|
asg["MinSize"].should.be.equal(1)
|
||
|
asg["MaxSize"].should.be.equal(5)
|
||
|
asg["LaunchConfigurationName"].should.be.equal("test_launch_configuration")
|
||
|
|
||
|
client.create_launch_configuration(
|
||
|
LaunchConfigurationName="test_launch_configuration_new",
|
||
|
InstanceType="t2.micro",
|
||
|
)
|
||
|
|
||
|
cf_template = """
|
||
|
Parameters:
|
||
|
SubnetId:
|
||
|
Type: AWS::EC2::Subnet::Id
|
||
|
Resources:
|
||
|
AutoScalingGroup:
|
||
|
Type: AWS::AutoScaling::AutoScalingGroup
|
||
|
Properties:
|
||
|
AutoScalingGroupName: test_auto_scaling_group
|
||
|
AvailabilityZones:
|
||
|
- us-east-1a
|
||
|
LaunchConfigurationName: test_launch_configuration_new
|
||
|
MaxSize: "6"
|
||
|
MinSize: "2"
|
||
|
VPCZoneIdentifier:
|
||
|
- !Ref SubnetId
|
||
|
Outputs:
|
||
|
AutoScalingGroupName:
|
||
|
Value: !Ref AutoScalingGroup
|
||
|
""".strip()
|
||
|
|
||
|
cf_client.update_stack(
|
||
|
StackName=stack_name,
|
||
|
TemplateBody=cf_template,
|
||
|
Parameters=[{"ParameterKey": "SubnetId", "ParameterValue": subnet_id}],
|
||
|
)
|
||
|
stack = cf_client.describe_stacks(StackName=stack_name)["Stacks"][0]
|
||
|
stack["Outputs"][0]["OutputValue"].should.be.equal("test_auto_scaling_group")
|
||
|
|
||
|
asg = client.describe_auto_scaling_groups()["AutoScalingGroups"][0]
|
||
|
asg["AutoScalingGroupName"].should.be.equal("test_auto_scaling_group")
|
||
|
asg["MinSize"].should.be.equal(2)
|
||
|
asg["MaxSize"].should.be.equal(6)
|
||
|
asg["LaunchConfigurationName"].should.be.equal("test_launch_configuration_new")
|
||
|
|
||
|
|
||
|
@mock_autoscaling
|
||
|
@mock_cloudformation
|
||
|
@mock_ec2
|
||
|
def test_autoscaling_group_from_launch_template():
|
||
|
subnet_id = setup_networking()["subnet1"]
|
||
|
|
||
|
cf_client = boto3.client("cloudformation", region_name="us-east-1")
|
||
|
ec2_client = boto3.client("ec2", region_name="us-east-1")
|
||
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
||
|
|
||
|
template_response = ec2_client.create_launch_template(
|
||
|
LaunchTemplateName="test_launch_template",
|
||
|
LaunchTemplateData={
|
||
|
"ImageId": "ami-0cc293023f983ed53",
|
||
|
"InstanceType": "t2.micro",
|
||
|
},
|
||
|
)
|
||
|
launch_template_id = template_response["LaunchTemplate"]["LaunchTemplateId"]
|
||
|
stack_name = "test-auto-scaling-group"
|
||
|
|
||
|
cf_template = """
|
||
|
Parameters:
|
||
|
SubnetId:
|
||
|
Type: AWS::EC2::Subnet::Id
|
||
|
LaunchTemplateId:
|
||
|
Type: String
|
||
|
Resources:
|
||
|
AutoScalingGroup:
|
||
|
Type: AWS::AutoScaling::AutoScalingGroup
|
||
|
Properties:
|
||
|
AutoScalingGroupName: test_auto_scaling_group
|
||
|
AvailabilityZones:
|
||
|
- us-east-1a
|
||
|
LaunchTemplate:
|
||
|
LaunchTemplateId: !Ref LaunchTemplateId
|
||
|
Version: "1"
|
||
|
MaxSize: "5"
|
||
|
MinSize: "1"
|
||
|
VPCZoneIdentifier:
|
||
|
- !Ref SubnetId
|
||
|
Outputs:
|
||
|
AutoScalingGroupName:
|
||
|
Value: !Ref AutoScalingGroup
|
||
|
""".strip()
|
||
|
|
||
|
cf_client.create_stack(
|
||
|
StackName=stack_name,
|
||
|
TemplateBody=cf_template,
|
||
|
Parameters=[
|
||
|
{"ParameterKey": "SubnetId", "ParameterValue": subnet_id},
|
||
|
{"ParameterKey": "LaunchTemplateId", "ParameterValue": launch_template_id},
|
||
|
],
|
||
|
)
|
||
|
stack = cf_client.describe_stacks(StackName=stack_name)["Stacks"][0]
|
||
|
stack["Outputs"][0]["OutputValue"].should.be.equal("test_auto_scaling_group")
|
||
|
|
||
|
asg = client.describe_auto_scaling_groups()["AutoScalingGroups"][0]
|
||
|
asg["AutoScalingGroupName"].should.be.equal("test_auto_scaling_group")
|
||
|
asg["MinSize"].should.be.equal(1)
|
||
|
asg["MaxSize"].should.be.equal(5)
|
||
|
lt = asg["LaunchTemplate"]
|
||
|
lt["LaunchTemplateId"].should.be.equal(launch_template_id)
|
||
|
lt["LaunchTemplateName"].should.be.equal("test_launch_template")
|
||
|
lt["Version"].should.be.equal("1")
|
||
|
|
||
|
template_response = ec2_client.create_launch_template(
|
||
|
LaunchTemplateName="test_launch_template_new",
|
||
|
LaunchTemplateData={
|
||
|
"ImageId": "ami-1ea5b10a3d8867db4",
|
||
|
"InstanceType": "m5.large",
|
||
|
},
|
||
|
)
|
||
|
launch_template_id = template_response["LaunchTemplate"]["LaunchTemplateId"]
|
||
|
|
||
|
cf_template = """
|
||
|
Parameters:
|
||
|
SubnetId:
|
||
|
Type: AWS::EC2::Subnet::Id
|
||
|
LaunchTemplateId:
|
||
|
Type: String
|
||
|
Resources:
|
||
|
AutoScalingGroup:
|
||
|
Type: AWS::AutoScaling::AutoScalingGroup
|
||
|
Properties:
|
||
|
AutoScalingGroupName: test_auto_scaling_group
|
||
|
AvailabilityZones:
|
||
|
- us-east-1a
|
||
|
LaunchTemplate:
|
||
|
LaunchTemplateId: !Ref LaunchTemplateId
|
||
|
Version: "1"
|
||
|
MaxSize: "6"
|
||
|
MinSize: "2"
|
||
|
VPCZoneIdentifier:
|
||
|
- !Ref SubnetId
|
||
|
Outputs:
|
||
|
AutoScalingGroupName:
|
||
|
Value: !Ref AutoScalingGroup
|
||
|
""".strip()
|
||
|
|
||
|
cf_client.update_stack(
|
||
|
StackName=stack_name,
|
||
|
TemplateBody=cf_template,
|
||
|
Parameters=[
|
||
|
{"ParameterKey": "SubnetId", "ParameterValue": subnet_id},
|
||
|
{"ParameterKey": "LaunchTemplateId", "ParameterValue": launch_template_id},
|
||
|
],
|
||
|
)
|
||
|
stack = cf_client.describe_stacks(StackName=stack_name)["Stacks"][0]
|
||
|
stack["Outputs"][0]["OutputValue"].should.be.equal("test_auto_scaling_group")
|
||
|
|
||
|
asg = client.describe_auto_scaling_groups()["AutoScalingGroups"][0]
|
||
|
asg["AutoScalingGroupName"].should.be.equal("test_auto_scaling_group")
|
||
|
asg["MinSize"].should.be.equal(2)
|
||
|
asg["MaxSize"].should.be.equal(6)
|
||
|
lt = asg["LaunchTemplate"]
|
||
|
lt["LaunchTemplateId"].should.be.equal(launch_template_id)
|
||
|
lt["LaunchTemplateName"].should.be.equal("test_launch_template_new")
|
||
|
lt["Version"].should.be.equal("1")
|