in pkg/deploy/lattice/target_group_manager.go [284:337]
func (s *defaultTargetGroupManager) findTargetGroup(
ctx context.Context,
modelTargetGroup *model.TargetGroup,
) (*vpclattice.GetTargetGroupOutput, error) {
arns, err := s.cloud.Tagging().FindResourcesByTags(ctx, services.ResourceTypeTargetGroup,
model.TagsFromTGTagFields(modelTargetGroup.Spec.TargetGroupTagFields))
if err != nil {
return nil, err
}
if len(arns) == 0 {
return nil, nil
}
for _, arn := range arns {
latticeTg, err := s.cloud.Lattice().GetTargetGroupWithContext(ctx, &vpclattice.GetTargetGroupInput{
TargetGroupIdentifier: &arn,
})
if err != nil {
if services.IsNotFoundError(err) {
continue
}
return nil, err
}
// we ignore create failed status, so may as well check for it first
status := aws.StringValue(latticeTg.Status)
if status == vpclattice.TargetGroupStatusCreateFailed {
continue
}
// Check the immutable fields to ensure TG is valid
match, err := s.IsTargetGroupMatch(ctx, modelTargetGroup, &vpclattice.TargetGroupSummary{
Arn: latticeTg.Arn,
Port: latticeTg.Config.Port,
Protocol: latticeTg.Config.Protocol,
IpAddressType: latticeTg.Config.IpAddressType,
Type: latticeTg.Type,
VpcIdentifier: latticeTg.Config.VpcIdentifier,
}, nil) // we already know that tags match
if err != nil {
return nil, err
}
if match {
switch status {
case vpclattice.TargetGroupStatusCreateInProgress, vpclattice.TargetGroupStatusDeleteInProgress:
return nil, errors.New(LATTICE_RETRY)
case vpclattice.TargetGroupStatusDeleteFailed, vpclattice.TargetGroupStatusActive:
return latticeTg, nil
}
}
}
return nil, nil
}