Skip to content

Commit 1c300bd

Browse files
authored
x-elbv2 - Fix index at which to pull the service name (#787)
* Fix index at which to pull the service name. Otherwise pulls the port * Fixing targets names vs service names using ports in service name * Allowing for ProtocolVersion to be set on TargetGroup [Enum in spec]
1 parent 8656355 commit 1c300bd

File tree

5 files changed

+40
-26
lines changed

5 files changed

+40
-26
lines changed

ecs_composex/compose/x_resources/services_resources.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ def __init__(
3434
):
3535
self.services = []
3636
self.families_targets: list[tuple] = []
37-
self.families_scaling = []
37+
self.families_scaling: list = []
3838
self.arn_parameter = None
3939
super().__init__(name, definition, module, settings)
40-
self.services = set_else_none("Services", definition, alt_value={})
40+
self.services: dict = set_else_none("Services", definition, alt_value={})
4141
self.set_services_targets(settings)
4242
self.set_services_scaling(settings)
4343

ecs_composex/elbv2/elbv2_ecs.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,9 @@ def define_service_target_group(
524524
if not keyisset("protocol", target_definition)
525525
else target_definition["protocol"]
526526
)
527+
props["ProtocolVersion"] = set_else_none(
528+
"ProtocolVersion", target_definition, Ref(AWS_NO_VALUE)
529+
)
527530
props["TargetType"] = "ip"
528531
import_target_group_attributes(props, target_definition, resource)
529532
validate_props_and_service_definition(props, service)
@@ -606,20 +609,25 @@ def handle_services_association(
606609
identified = []
607610
for target in load_balancer.families_targets:
608611
family: ComposeFamily = target[0]
609-
print("TARGET?", target)
612+
target_service: ComposeService = target[1]
613+
service_def: dict = target[2]
614+
target_combo_name: str = target[3]
610615
if target[1].launch_type == "EXTERNAL":
611616
LOG.error(
612617
f"x-elbv2.{load_balancer.name} - Target family {family.name} uses EXTERNAL launch type. Ignoring"
613618
)
614619
continue
615-
tgt_group = define_service_target_group_definition(
616-
load_balancer, family, target[1], target[2], res_root_stack
620+
tgt_group: ComposeTargetGroup = define_service_target_group_definition(
621+
load_balancer, family, target_service, service_def, res_root_stack
617622
)
618623
for service_name, service in load_balancer.services.items():
619-
target_name = f"{family.name}:{target[1].name}"
624+
target_name = f"{family.name}:{target_service.name}"
620625
if target_name not in service_name:
621626
continue
622-
if target_name == service_name and tgt_group.Port == int(service["port"]):
627+
if (service_name == target_combo_name) or (
628+
service_name.find(target_name) == 0
629+
and tgt_group.Port == int(service["port"])
630+
):
623631
service["target_arn"] = Ref(tgt_group)
624632
identified.append(True)
625633
break
@@ -629,7 +637,6 @@ def handle_services_association(
629637
f"{load_balancer.module.res_key}.{load_balancer.name} - No services found as targets. Skipping association"
630638
)
631639
return
632-
633640
for listener in load_balancer.new_listeners:
634641
listener.map_lb_target_groups_service_to_listener_targets(load_balancer)
635642

@@ -657,13 +664,15 @@ def handle_target_groups_association(
657664
add_outputs(template, load_balancer.outputs)
658665
_targets = set_else_none("TargetGroups", load_balancer.definition, {})
659666
if not _targets:
660-
print("NO TARGET GROUPS")
661667
return
662668
for _target_name, _target_def in _targets.items():
663669
props = {}
664670
set_healthcheck_definition(props, _target_def, "HealthCheck")
665671
props["Port"] = _target_def["Port"]
666672
props["Protocol"] = _target_def["Protocol"]
673+
props["ProtocolVersion"] = set_else_none(
674+
"ProtocolVersion", _target_def, Ref(AWS_NO_VALUE)
675+
)
667676
props["TargetType"] = "ip"
668677
import_target_group_attributes(props, _target_def, load_balancer)
669678
_tgt_group = MergedTargetGroup(
@@ -686,7 +695,6 @@ def handle_target_groups_association(
686695
listener.map_target_group_to_listener(_tgt_group)
687696

688697
for listener in load_balancer.lookup_listeners.values():
689-
print("MAPPING TARGET TO LISTENER", _tgt_group, listener)
690698
listener.map_target_group_to_listener(_tgt_group)
691699

692700
for listener_port, listener_def in load_balancer.lookup_listeners.items():

ecs_composex/elbv2/elbv2_stack/elbv2.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,15 @@ def set_listeners(self, template):
156156
f" - Target {target['name']} is not a valid value. Must match",
157157
LISTENER_TARGET_RE.pattern,
158158
)
159-
if (
159+
simple_family: str = (
160160
f"{target_parts.group('family')}:{target_parts.group('container')}"
161-
not in self.services
162-
):
161+
)
162+
family_id: str = (
163+
simple_family + ":" + target_parts.group("port")
164+
if target_parts.group("port")
165+
else simple_family
166+
)
167+
if family_id not in self.services:
163168
listener_def["Targets"].remove(target)
164169
if keyisset("Targets", listener_def) or keyisset(
165170
"DefaultActions", listener_def
@@ -199,8 +204,9 @@ def set_services_targets(self, settings):
199204
LOG.debug(f"{self.module.res_key}.{self.name} No Services defined.")
200205
return
201206
for family_combo_name, service_def in self.services.items():
202-
service_name = family_combo_name.split(":")[-1]
203-
family_name = NONALPHANUM.sub("", family_combo_name.split(":")[0])
207+
family_combo_parts: list[str] = family_combo_name.split(":")
208+
family_name: str = NONALPHANUM.sub("", family_combo_parts[0])
209+
service_name: str = family_combo_parts[1]
204210
LOG.info(
205211
f"{self.module.res_key}.{self.name} - Adding target {family_name}:{service_name}"
206212
)
@@ -229,7 +235,7 @@ def set_services_targets(self, settings):
229235
f_service.family,
230236
f_service,
231237
service_def,
232-
f"{family_combo_name}{service_def['port']}",
238+
family_combo_name,
233239
)
234240
)
235241
break

ecs_composex/elbv2/elbv2_stack/elbv2_listener/lookup_listener.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from troposphere import Template
1212

1313
from compose_x_common.aws.elasticloadbalancing import LB_V2_LISTENER_ARN_RE
14-
from compose_x_common.compose_x_common import keyisset, keypresent, set_else_none
14+
from compose_x_common.compose_x_common import keyisset, set_else_none
1515
from troposphere import Ref
1616
from troposphere.cognito import UserPoolClient
1717
from troposphere.elasticloadbalancingv2 import ListenerRule
@@ -21,16 +21,10 @@
2121
from ecs_composex.common.logging import LOG
2222
from ecs_composex.elbv2.elbv2_stack.helpers import (
2323
LISTENER_TARGET_RE,
24-
add_acm_certs_arn,
2524
define_actions,
26-
define_listener_rules_actions,
2725
define_target_conditions,
28-
handle_default_actions,
29-
handle_non_default_services,
3026
import_cognito_pool,
31-
import_new_acm_certs,
3227
map_service_target,
33-
tea_pot,
3428
validate_duplicate_targets,
3529
)
3630
from ecs_composex.resources_import import import_record_properties
@@ -86,7 +80,6 @@ def __init__(self, lb: Elbv2, port: int, definition: dict):
8680
and isinstance(self.definition[self.targets_keys], list)
8781
else []
8882
)
89-
print("PROPS?", self.properties)
9083

9184
def __repr__(self):
9285
return self.arn
@@ -216,13 +209,11 @@ def map_lb_target_groups_service_to_listener_targets(self, lb: Elbv2) -> None:
216209
)
217210

218211
def map_target_group_to_listener(self, target_group: MergedTargetGroup) -> None:
219-
print("MAPPING TARGET TO LOOKUP LISTENER")
220212
if not self.services:
221213
LOG.warning(
222214
f"{self.lb.module.res_key}.{self.lb.name} - Listener {self.Port} - No Targets defined."
223215
)
224216
return
225-
print("TARGET GROUP??", target_group)
226217
for _tgt_group in self.services:
227218
_tgt_name = _tgt_group["name"]
228219
if _tgt_name == target_group.name:

ecs_composex/elbv2/x-elbv2.spec.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,15 @@
283283
},
284284
"TargetGroupAttributes": {
285285
"$ref": "#/definitions/TargetGroupAttributeDef"
286+
},
287+
"ProtocolVersion": {
288+
"type": "string",
289+
"description": "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-targetgroup.html#cfn-elasticloadbalancingv2-targetgroup-protocolversion",
290+
"enum": [
291+
"GRPC",
292+
"HTTP1",
293+
"HTTP2"
294+
]
286295
}
287296
}
288297
},

0 commit comments

Comments
 (0)