9e1fcac9d4
Moto's implementation of autoscaling:CreateLaunchConfiguration is a little too loose, allowing the ImageId parameter to be omitted and defaulting it to None, which results in dozens of deprecation warnings: `PendingDeprecationWarning: Could not find AMI with image-id:ami-123456, in the near future this will cause an error.` This commit refactors calls to CreateLaunchConfiguration to explicitly pass in a known AMI ImageId in order to avoid these warnings. The integrity of the tests is unaffected by this change.
153 lines
5.3 KiB
Python
153 lines
5.3 KiB
Python
import boto3
|
|
from moto import mock_cloudformation, mock_ecs, mock_autoscaling, mock_s3
|
|
import json
|
|
from tests import EXAMPLE_AMI_ID
|
|
|
|
depends_on_template_list = {
|
|
"AWSTemplateFormatVersion": "2010-09-09",
|
|
"Resources": {
|
|
"ECSCluster": {
|
|
"Type": "AWS::ECS::Cluster",
|
|
"Properties": {"ClusterName": "test-cluster"},
|
|
},
|
|
"AutoScalingGroup": {
|
|
"Type": "AWS::AutoScaling::AutoScalingGroup",
|
|
"Properties": {
|
|
"AutoScalingGroupName": "test-scaling-group",
|
|
"DesiredCapacity": 1,
|
|
"MinSize": 1,
|
|
"MaxSize": 50,
|
|
"LaunchConfigurationName": "test-launch-config",
|
|
"AvailabilityZones": ["us-east-1a"],
|
|
},
|
|
"DependsOn": ["ECSCluster", "LaunchConfig"],
|
|
},
|
|
"LaunchConfig": {
|
|
"Type": "AWS::AutoScaling::LaunchConfiguration",
|
|
"Properties": {
|
|
"LaunchConfigurationName": "test-launch-config",
|
|
"ImageId": EXAMPLE_AMI_ID,
|
|
"InstanceType": "t2.medium",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
depends_on_template_string = {
|
|
"AWSTemplateFormatVersion": "2010-09-09",
|
|
"Resources": {
|
|
"AutoScalingGroup": {
|
|
"Type": "AWS::AutoScaling::AutoScalingGroup",
|
|
"Properties": {
|
|
"AutoScalingGroupName": "test-scaling-group",
|
|
"DesiredCapacity": 1,
|
|
"MinSize": 1,
|
|
"MaxSize": 50,
|
|
"LaunchConfigurationName": "test-launch-config",
|
|
"AvailabilityZones": ["us-east-1a"],
|
|
},
|
|
"DependsOn": "LaunchConfig",
|
|
},
|
|
"LaunchConfig": {
|
|
"Type": "AWS::AutoScaling::LaunchConfiguration",
|
|
"Properties": {
|
|
"LaunchConfigurationName": "test-launch-config",
|
|
"ImageId": EXAMPLE_AMI_ID,
|
|
"InstanceType": "t2.medium",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
|
|
def make_chained_depends_on_template():
|
|
depends_on_template_linked_dependencies = {
|
|
"AWSTemplateFormatVersion": "2010-09-09",
|
|
"Resources": {
|
|
"Bucket1": {
|
|
"Type": "AWS::S3::Bucket",
|
|
"Properties": {"BucketName": "test-bucket-0-us-east-1"},
|
|
},
|
|
},
|
|
}
|
|
|
|
for i in range(1, 10):
|
|
depends_on_template_linked_dependencies["Resources"]["Bucket" + str(i)] = {
|
|
"Type": "AWS::S3::Bucket",
|
|
"Properties": {"BucketName": "test-bucket-" + str(i) + "-us-east-1"},
|
|
"DependsOn": ["Bucket" + str(i - 1)],
|
|
}
|
|
|
|
return json.dumps(depends_on_template_linked_dependencies)
|
|
|
|
|
|
depends_on_template_list_json = json.dumps(depends_on_template_list)
|
|
depends_on_template_string_json = json.dumps(depends_on_template_string)
|
|
|
|
|
|
@mock_cloudformation
|
|
@mock_autoscaling
|
|
@mock_ecs
|
|
def test_create_stack_with_depends_on():
|
|
boto3.client("cloudformation", region_name="us-east-1").create_stack(
|
|
StackName="depends_on_test", TemplateBody=depends_on_template_list_json
|
|
)
|
|
|
|
autoscaling = boto3.client("autoscaling", region_name="us-east-1")
|
|
autoscaling_group = autoscaling.describe_auto_scaling_groups()["AutoScalingGroups"][
|
|
0
|
|
]
|
|
assert autoscaling_group["AutoScalingGroupName"] == "test-scaling-group"
|
|
assert autoscaling_group["DesiredCapacity"] == 1
|
|
assert autoscaling_group["MinSize"] == 1
|
|
assert autoscaling_group["MaxSize"] == 50
|
|
assert autoscaling_group["AvailabilityZones"] == ["us-east-1a"]
|
|
|
|
launch_configuration = autoscaling.describe_launch_configurations()[
|
|
"LaunchConfigurations"
|
|
][0]
|
|
assert launch_configuration["LaunchConfigurationName"] == "test-launch-config"
|
|
|
|
ecs = boto3.client("ecs", region_name="us-east-1")
|
|
cluster_arn = ecs.list_clusters()["clusterArns"][0]
|
|
assert cluster_arn == "arn:aws:ecs:us-east-1:012345678910:cluster/test-cluster"
|
|
|
|
|
|
@mock_cloudformation
|
|
@mock_autoscaling
|
|
def test_create_stack_with_depends_on_string():
|
|
boto3.client("cloudformation", region_name="us-east-1").create_stack(
|
|
StackName="depends_on_string_test", TemplateBody=depends_on_template_string_json
|
|
)
|
|
|
|
autoscaling = boto3.client("autoscaling", region_name="us-east-1")
|
|
autoscaling_group = autoscaling.describe_auto_scaling_groups()["AutoScalingGroups"][
|
|
0
|
|
]
|
|
assert autoscaling_group["AutoScalingGroupName"] == "test-scaling-group"
|
|
assert autoscaling_group["DesiredCapacity"] == 1
|
|
assert autoscaling_group["MinSize"] == 1
|
|
assert autoscaling_group["MaxSize"] == 50
|
|
assert autoscaling_group["AvailabilityZones"] == ["us-east-1a"]
|
|
|
|
launch_configuration = autoscaling.describe_launch_configurations()[
|
|
"LaunchConfigurations"
|
|
][0]
|
|
assert launch_configuration["LaunchConfigurationName"] == "test-launch-config"
|
|
|
|
|
|
@mock_cloudformation
|
|
@mock_s3
|
|
def test_create_chained_depends_on_stack():
|
|
boto3.client("cloudformation", region_name="us-east-1").create_stack(
|
|
StackName="linked_depends_on_test",
|
|
TemplateBody=make_chained_depends_on_template(),
|
|
)
|
|
|
|
s3 = boto3.client("s3", region_name="us-east-1")
|
|
bucket_response = s3.list_buckets()["Buckets"]
|
|
|
|
assert sorted([bucket["Name"] for bucket in bucket_response]) == [
|
|
"test-bucket-" + str(i) + "-us-east-1" for i in range(1, 10)
|
|
]
|