Add CloudFormation support to AWS::ElasticLoadBalancingV2::TargetGroup
This commit is contained in:
parent
8786c2df05
commit
dfd41d8c00
@ -63,6 +63,7 @@ MODEL_MAP = {
|
|||||||
"AWS::ECS::Service": ecs_models.Service,
|
"AWS::ECS::Service": ecs_models.Service,
|
||||||
"AWS::ElasticLoadBalancing::LoadBalancer": elb_models.FakeLoadBalancer,
|
"AWS::ElasticLoadBalancing::LoadBalancer": elb_models.FakeLoadBalancer,
|
||||||
"AWS::ElasticLoadBalancingV2::LoadBalancer": elbv2_models.FakeLoadBalancer,
|
"AWS::ElasticLoadBalancingV2::LoadBalancer": elbv2_models.FakeLoadBalancer,
|
||||||
|
"AWS::ElasticLoadBalancingV2::TargetGroup": elbv2_models.FakeTargetGroup,
|
||||||
"AWS::DataPipeline::Pipeline": datapipeline_models.Pipeline,
|
"AWS::DataPipeline::Pipeline": datapipeline_models.Pipeline,
|
||||||
"AWS::IAM::InstanceProfile": iam_models.InstanceProfile,
|
"AWS::IAM::InstanceProfile": iam_models.InstanceProfile,
|
||||||
"AWS::IAM::Role": iam_models.Role,
|
"AWS::IAM::Role": iam_models.Role,
|
||||||
|
@ -52,7 +52,9 @@ class FakeTargetGroup(BaseModel):
|
|||||||
healthcheck_interval_seconds,
|
healthcheck_interval_seconds,
|
||||||
healthcheck_timeout_seconds,
|
healthcheck_timeout_seconds,
|
||||||
healthy_threshold_count,
|
healthy_threshold_count,
|
||||||
unhealthy_threshold_count):
|
unhealthy_threshold_count,
|
||||||
|
matcher=None,
|
||||||
|
target_type=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.arn = arn
|
self.arn = arn
|
||||||
self.vpc_id = vpc_id
|
self.vpc_id = vpc_id
|
||||||
@ -67,6 +69,8 @@ class FakeTargetGroup(BaseModel):
|
|||||||
self.unhealthy_threshold_count = unhealthy_threshold_count
|
self.unhealthy_threshold_count = unhealthy_threshold_count
|
||||||
self.load_balancer_arns = []
|
self.load_balancer_arns = []
|
||||||
self.tags = {}
|
self.tags = {}
|
||||||
|
self.matcher = matcher
|
||||||
|
self.target_type = target_type
|
||||||
|
|
||||||
self.attributes = {
|
self.attributes = {
|
||||||
'deregistration_delay.timeout_seconds': 300,
|
'deregistration_delay.timeout_seconds': 300,
|
||||||
@ -99,6 +103,43 @@ class FakeTargetGroup(BaseModel):
|
|||||||
raise InvalidTargetError()
|
raise InvalidTargetError()
|
||||||
return FakeHealthStatus(t['id'], t['port'], self.healthcheck_port, 'healthy')
|
return FakeHealthStatus(t['id'], t['port'], self.healthcheck_port, 'healthy')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
|
||||||
|
properties = cloudformation_json['Properties']
|
||||||
|
|
||||||
|
elbv2_backend = elbv2_backends[region_name]
|
||||||
|
|
||||||
|
name = properties.get('Name')
|
||||||
|
vpc_id = properties.get("VpcId")
|
||||||
|
protocol = properties.get('Protocol')
|
||||||
|
port = properties.get("Port")
|
||||||
|
healthcheck_protocol = properties.get("HealthCheckProtocol")
|
||||||
|
healthcheck_port = properties.get("HealthCheckPort")
|
||||||
|
healthcheck_path = properties.get("HealthCheckPath")
|
||||||
|
healthcheck_interval_seconds = properties.get("HealthCheckIntervalSeconds")
|
||||||
|
healthcheck_timeout_seconds = properties.get("HealthCheckTimeoutSeconds")
|
||||||
|
healthy_threshold_count = properties.get("HealthyThresholdCount")
|
||||||
|
unhealthy_threshold_count = properties.get("UnhealthyThresholdCount")
|
||||||
|
matcher = properties.get("Matcher")
|
||||||
|
target_type = properties.get("TargetType")
|
||||||
|
|
||||||
|
target_group = elbv2_backend.create_target_group(
|
||||||
|
name=name,
|
||||||
|
vpc_id=vpc_id,
|
||||||
|
protocol=protocol,
|
||||||
|
port=port,
|
||||||
|
healthcheck_protocol=healthcheck_protocol,
|
||||||
|
healthcheck_port=healthcheck_port,
|
||||||
|
healthcheck_path=healthcheck_path,
|
||||||
|
healthcheck_interval_seconds=healthcheck_interval_seconds,
|
||||||
|
healthcheck_timeout_seconds=healthcheck_timeout_seconds,
|
||||||
|
healthy_threshold_count=healthy_threshold_count,
|
||||||
|
unhealthy_threshold_count=unhealthy_threshold_count,
|
||||||
|
matcher=matcher,
|
||||||
|
target_type=target_type,
|
||||||
|
)
|
||||||
|
return target_group
|
||||||
|
|
||||||
|
|
||||||
class FakeListener(BaseModel):
|
class FakeListener(BaseModel):
|
||||||
|
|
||||||
|
@ -472,9 +472,14 @@ CREATE_TARGET_GROUP_TEMPLATE = """<CreateTargetGroupResponse xmlns="http://elast
|
|||||||
<HealthCheckTimeoutSeconds>{{ target_group.healthcheck_timeout_seconds }}</HealthCheckTimeoutSeconds>
|
<HealthCheckTimeoutSeconds>{{ target_group.healthcheck_timeout_seconds }}</HealthCheckTimeoutSeconds>
|
||||||
<HealthyThresholdCount>{{ target_group.healthy_threshold_count }}</HealthyThresholdCount>
|
<HealthyThresholdCount>{{ target_group.healthy_threshold_count }}</HealthyThresholdCount>
|
||||||
<UnhealthyThresholdCount>{{ target_group.unhealthy_threshold_count }}</UnhealthyThresholdCount>
|
<UnhealthyThresholdCount>{{ target_group.unhealthy_threshold_count }}</UnhealthyThresholdCount>
|
||||||
|
{% if target_group.matcher %}
|
||||||
<Matcher>
|
<Matcher>
|
||||||
<HttpCode>200</HttpCode>
|
<HttpCode>{{ target_group.matcher['HttpCode'] }}</HttpCode>
|
||||||
</Matcher>
|
</Matcher>
|
||||||
|
{% endif %}
|
||||||
|
{% if target_group.target_type %}
|
||||||
|
<TargetType>{{ target_group.target_type }}</TargetType>
|
||||||
|
{% endif %}
|
||||||
</member>
|
</member>
|
||||||
</TargetGroups>
|
</TargetGroups>
|
||||||
</CreateTargetGroupResult>
|
</CreateTargetGroupResult>
|
||||||
@ -635,16 +640,21 @@ DESCRIBE_TARGET_GROUPS_TEMPLATE = """<DescribeTargetGroupsResponse xmlns="http:/
|
|||||||
<Protocol>{{ target_group.protocol }}</Protocol>
|
<Protocol>{{ target_group.protocol }}</Protocol>
|
||||||
<Port>{{ target_group.port }}</Port>
|
<Port>{{ target_group.port }}</Port>
|
||||||
<VpcId>{{ target_group.vpc_id }}</VpcId>
|
<VpcId>{{ target_group.vpc_id }}</VpcId>
|
||||||
<HealthCheckProtocol>{{ target_group.health_check_protocol }}</HealthCheckProtocol>
|
<HealthCheckProtocol>{{ target_group.healthcheck_protocol }}</HealthCheckProtocol>
|
||||||
<HealthCheckPort>{{ target_group.healthcheck_port }}</HealthCheckPort>
|
<HealthCheckPort>{{ target_group.healthcheck_port }}</HealthCheckPort>
|
||||||
<HealthCheckPath>{{ target_group.healthcheck_path }}</HealthCheckPath>
|
<HealthCheckPath>{{ target_group.healthcheck_path }}</HealthCheckPath>
|
||||||
<HealthCheckIntervalSeconds>{{ target_group.healthcheck_interval_seconds }}</HealthCheckIntervalSeconds>
|
<HealthCheckIntervalSeconds>{{ target_group.healthcheck_interval_seconds }}</HealthCheckIntervalSeconds>
|
||||||
<HealthCheckTimeoutSeconds>{{ target_group.healthcheck_timeout_seconds }}</HealthCheckTimeoutSeconds>
|
<HealthCheckTimeoutSeconds>{{ target_group.healthcheck_timeout_seconds }}</HealthCheckTimeoutSeconds>
|
||||||
<HealthyThresholdCount>{{ target_group.healthy_threshold_count }}</HealthyThresholdCount>
|
<HealthyThresholdCount>{{ target_group.healthy_threshold_count }}</HealthyThresholdCount>
|
||||||
<UnhealthyThresholdCount>{{ target_group.unhealthy_threshold_count }}</UnhealthyThresholdCount>
|
<UnhealthyThresholdCount>{{ target_group.unhealthy_threshold_count }}</UnhealthyThresholdCount>
|
||||||
|
{% if target_group.matcher %}
|
||||||
<Matcher>
|
<Matcher>
|
||||||
<HttpCode>200</HttpCode>
|
<HttpCode>{{ target_group.matcher['HttpCode'] }}</HttpCode>
|
||||||
</Matcher>
|
</Matcher>
|
||||||
|
{% endif %}
|
||||||
|
{% if target_group.target_type %}
|
||||||
|
<TargetType>{{ target_group.target_type }}</TargetType>
|
||||||
|
{% endif %}
|
||||||
<LoadBalancerArns>
|
<LoadBalancerArns>
|
||||||
{% for load_balancer_arn in target_group.load_balancer_arns %}
|
{% for load_balancer_arn in target_group.load_balancer_arns %}
|
||||||
<member>{{ load_balancer_arn }}</member>
|
<member>{{ load_balancer_arn }}</member>
|
||||||
|
@ -2216,8 +2216,23 @@ def test_stack_elbv2_resources_integration():
|
|||||||
elbv2_conn = boto3.client("elbv2", "us-west-1")
|
elbv2_conn = boto3.client("elbv2", "us-west-1")
|
||||||
|
|
||||||
load_balancers = elbv2_conn.describe_load_balancers()['LoadBalancers']
|
load_balancers = elbv2_conn.describe_load_balancers()['LoadBalancers']
|
||||||
assert len(load_balancers) == 1
|
len(load_balancers).should.equal(1)
|
||||||
assert load_balancers[0]['LoadBalancerName'] == 'myelbv2'
|
load_balancers[0]['LoadBalancerName'].should.equal('myelbv2')
|
||||||
assert load_balancers[0]['Scheme'] == 'internet-facing'
|
load_balancers[0]['Scheme'].should.equal('internet-facing')
|
||||||
assert load_balancers[0]['Type'] == 'application'
|
load_balancers[0]['Type'].should.equal('application')
|
||||||
assert load_balancers[0]['IpAddressType'] == 'ipv4'
|
load_balancers[0]['IpAddressType'].should.equal('ipv4')
|
||||||
|
|
||||||
|
target_groups = elbv2_conn.describe_target_groups()['TargetGroups']
|
||||||
|
len(target_groups).should.equal(1)
|
||||||
|
target_groups[0]['HealthCheckIntervalSeconds'].should.equal(30)
|
||||||
|
target_groups[0]['HealthCheckPath'].should.equal('/status')
|
||||||
|
target_groups[0]['HealthCheckPort'].should.equal('80')
|
||||||
|
target_groups[0]['HealthCheckProtocol'].should.equal('HTTP')
|
||||||
|
target_groups[0]['HealthCheckTimeoutSeconds'].should.equal(5)
|
||||||
|
target_groups[0]['HealthyThresholdCount'].should.equal(30)
|
||||||
|
target_groups[0]['UnhealthyThresholdCount'].should.equal(5)
|
||||||
|
target_groups[0]['Matcher'].should.equal({'HttpCode': '200,201'})
|
||||||
|
target_groups[0]['TargetGroupName'].should.equal('mytargetgroup')
|
||||||
|
target_groups[0]['Port'].should.equal(80)
|
||||||
|
target_groups[0]['Protocol'].should.equal('HTTP')
|
||||||
|
target_groups[0]['TargetType'].should.equal('instance')
|
||||||
|
Loading…
Reference in New Issue
Block a user