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.
141 lines
4.9 KiB
Python
141 lines
4.9 KiB
Python
from __future__ import unicode_literals
|
|
import boto3
|
|
|
|
import sure # noqa
|
|
from moto import mock_autoscaling, mock_ec2, mock_elbv2
|
|
|
|
from .utils import setup_networking
|
|
from tests import EXAMPLE_AMI_ID
|
|
|
|
|
|
@mock_elbv2
|
|
@mock_autoscaling
|
|
def test_attach_detach_target_groups():
|
|
mocked_networking = setup_networking()
|
|
INSTANCE_COUNT = 2
|
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
|
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
|
|
|
response = elbv2_client.create_target_group(
|
|
Name="a-target",
|
|
Protocol="HTTP",
|
|
Port=8080,
|
|
VpcId=mocked_networking["vpc"],
|
|
HealthCheckProtocol="HTTP",
|
|
HealthCheckPort="8080",
|
|
HealthCheckPath="/",
|
|
HealthCheckIntervalSeconds=5,
|
|
HealthCheckTimeoutSeconds=5,
|
|
HealthyThresholdCount=5,
|
|
UnhealthyThresholdCount=2,
|
|
Matcher={"HttpCode": "200"},
|
|
)
|
|
target_group_arn = response["TargetGroups"][0]["TargetGroupArn"]
|
|
|
|
client.create_launch_configuration(
|
|
LaunchConfigurationName="test_launch_configuration",
|
|
ImageId=EXAMPLE_AMI_ID,
|
|
InstanceType="t2.medium",
|
|
)
|
|
|
|
# create asg, attach to target group on create
|
|
client.create_auto_scaling_group(
|
|
AutoScalingGroupName="test_asg",
|
|
LaunchConfigurationName="test_launch_configuration",
|
|
MinSize=0,
|
|
MaxSize=INSTANCE_COUNT,
|
|
DesiredCapacity=INSTANCE_COUNT,
|
|
TargetGroupARNs=[target_group_arn],
|
|
VPCZoneIdentifier=mocked_networking["subnet1"],
|
|
)
|
|
# create asg without attaching to target group
|
|
client.create_auto_scaling_group(
|
|
AutoScalingGroupName="test_asg2",
|
|
LaunchConfigurationName="test_launch_configuration",
|
|
MinSize=0,
|
|
MaxSize=INSTANCE_COUNT,
|
|
DesiredCapacity=INSTANCE_COUNT,
|
|
VPCZoneIdentifier=mocked_networking["subnet2"],
|
|
)
|
|
|
|
response = client.describe_load_balancer_target_groups(
|
|
AutoScalingGroupName="test_asg"
|
|
)
|
|
list(response["LoadBalancerTargetGroups"]).should.have.length_of(1)
|
|
|
|
response = elbv2_client.describe_target_health(TargetGroupArn=target_group_arn)
|
|
list(response["TargetHealthDescriptions"]).should.have.length_of(INSTANCE_COUNT)
|
|
|
|
client.attach_load_balancer_target_groups(
|
|
AutoScalingGroupName="test_asg2", TargetGroupARNs=[target_group_arn]
|
|
)
|
|
|
|
response = elbv2_client.describe_target_health(TargetGroupArn=target_group_arn)
|
|
list(response["TargetHealthDescriptions"]).should.have.length_of(INSTANCE_COUNT * 2)
|
|
|
|
response = client.detach_load_balancer_target_groups(
|
|
AutoScalingGroupName="test_asg2", TargetGroupARNs=[target_group_arn]
|
|
)
|
|
response = elbv2_client.describe_target_health(TargetGroupArn=target_group_arn)
|
|
list(response["TargetHealthDescriptions"]).should.have.length_of(INSTANCE_COUNT)
|
|
|
|
|
|
@mock_elbv2
|
|
@mock_autoscaling
|
|
def test_detach_all_target_groups():
|
|
mocked_networking = setup_networking()
|
|
INSTANCE_COUNT = 2
|
|
client = boto3.client("autoscaling", region_name="us-east-1")
|
|
elbv2_client = boto3.client("elbv2", region_name="us-east-1")
|
|
|
|
response = elbv2_client.create_target_group(
|
|
Name="a-target",
|
|
Protocol="HTTP",
|
|
Port=8080,
|
|
VpcId=mocked_networking["vpc"],
|
|
HealthCheckProtocol="HTTP",
|
|
HealthCheckPort="8080",
|
|
HealthCheckPath="/",
|
|
HealthCheckIntervalSeconds=5,
|
|
HealthCheckTimeoutSeconds=5,
|
|
HealthyThresholdCount=5,
|
|
UnhealthyThresholdCount=2,
|
|
Matcher={"HttpCode": "200"},
|
|
)
|
|
target_group_arn = response["TargetGroups"][0]["TargetGroupArn"]
|
|
|
|
client.create_launch_configuration(
|
|
LaunchConfigurationName="test_launch_configuration",
|
|
ImageId=EXAMPLE_AMI_ID,
|
|
InstanceType="t2.medium",
|
|
)
|
|
|
|
client.create_auto_scaling_group(
|
|
AutoScalingGroupName="test_asg",
|
|
LaunchConfigurationName="test_launch_configuration",
|
|
MinSize=0,
|
|
MaxSize=INSTANCE_COUNT,
|
|
DesiredCapacity=INSTANCE_COUNT,
|
|
TargetGroupARNs=[target_group_arn],
|
|
VPCZoneIdentifier=mocked_networking["subnet1"],
|
|
)
|
|
|
|
response = client.describe_load_balancer_target_groups(
|
|
AutoScalingGroupName="test_asg"
|
|
)
|
|
list(response["LoadBalancerTargetGroups"]).should.have.length_of(1)
|
|
|
|
response = elbv2_client.describe_target_health(TargetGroupArn=target_group_arn)
|
|
list(response["TargetHealthDescriptions"]).should.have.length_of(INSTANCE_COUNT)
|
|
|
|
response = client.detach_load_balancer_target_groups(
|
|
AutoScalingGroupName="test_asg", TargetGroupARNs=[target_group_arn]
|
|
)
|
|
|
|
response = elbv2_client.describe_target_health(TargetGroupArn=target_group_arn)
|
|
list(response["TargetHealthDescriptions"]).should.have.length_of(0)
|
|
response = client.describe_load_balancer_target_groups(
|
|
AutoScalingGroupName="test_asg"
|
|
)
|
|
list(response["LoadBalancerTargetGroups"]).should.have.length_of(0)
|