Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

r/aws_lb_target_group - check no target group with the same name exists #26977

Merged
merged 2 commits into from
Jan 12, 2023

Conversation

mtt88
Copy link
Contributor

@mtt88 mtt88 commented Sep 26, 2022

When creating a target group check that a target group with the same name does not already exist.

The create target group API is idempotent

This operation is idempotent, which means that it completes at most one time. If you attempt to create multiple target groups with the same settings, each call succeeds.

As a result if we create 2 target groups with the same configuration Terraform will associate all the other identical target
groups with original's ARN.

We will now call the describe target group API before creating a new target group with the name of the target group we are about to create. If an existing target group exists then we will now prevent the target group from being created.

This is not a perfect fix. AWS will prevent users creating two different target groups with the same name, however
it will prevent the situation where the user may accidentally create a target group that is identical to an existing resource.

Note that these changes makes no attempt to fix this scenario occurring under race conditions (the user creates 2 identical target groups as part of the same Terraform apply).

Output from acceptance testing:

make testacc TESTS=TestAccELBV2TargetGroup_Name_noDuplicates PKG=elbv2
==> Checking that code complies with gofmt requirements...
TF_ACC=1 go test ./internal/service/elbv2/... -v -count 1 -parallel 20 -run='TestAccELBV2TargetGroup_Name_noDuplicates'  -timeout 180m
=== RUN   TestAccELBV2TargetGroup_Name_noDuplicates
=== PAUSE TestAccELBV2TargetGroup_Name_noDuplicates
=== CONT  TestAccELBV2TargetGroup_Name_noDuplicates
--- PASS: TestAccELBV2TargetGroup_Name_noDuplicates (37.97s)
PASS
ok      github.com/hashicorp/terraform-provider-aws/internal/service/elbv2      38.020s

...

@github-actions
Copy link

Community Note

Voting for Prioritization

  • Please vote on this pull request by adding a 👍 reaction to the original post to help the community and maintainers prioritize this pull request.
  • Please see our prioritization guide for information on how we prioritize.
  • Please do not leave "+1" or other comments that do not add relevant new information or questions, they generate extra noise for issue followers and do not help prioritize the request.

For Submitters

  • Please review the contribution guide relating to the type of change you are making to ensure all of the necessary steps have been taken.
  • Whether or not the branch has been rebased will not impact prioritization, but doing so is always a welcome surprise.

@github-actions github-actions bot added size/M Managed by automation to categorize the size of a PR. needs-triage Waiting for first response or review from a maintainer. service/elbv2 Issues and PRs that pertain to the elbv2 service. tests PRs: expanded test coverage. Issues: expanded coverage, enhancements to test infrastructure. labels Sep 26, 2022
there are no target groups with the same name

Fixes an issue where target groups with an identical configuration
could both point to the same ARN
@mtt88 mtt88 force-pushed the b-aws_lb_target_group-duplicate-names branch from 45baa6e to f2b8b6f Compare September 26, 2022 18:42
@justinretzolk justinretzolk added bug Addresses a defect in current functionality. and removed needs-triage Waiting for first response or review from a maintainer. labels Oct 21, 2022
@ewbankkit ewbankkit force-pushed the b-aws_lb_target_group-duplicate-names branch from d9e3dbd to 9a0d0f9 Compare January 12, 2023 14:20
Copy link
Contributor

@ewbankkit ewbankkit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀.

% make testacc TESTARGS='-run=TestAccELBV2TargetGroup_' PKG=elbv2 ACCTEST_PARALLELISM=3
==> Checking that code complies with gofmt requirements...
TF_ACC=1 go test ./internal/service/elbv2/... -v -count 1 -parallel 3  -run=TestAccELBV2TargetGroup_ -timeout 180m
=== RUN   TestAccELBV2TargetGroup_backwardsCompatibility
=== PAUSE TestAccELBV2TargetGroup_backwardsCompatibility
=== RUN   TestAccELBV2TargetGroup_ProtocolVersion_basic
=== PAUSE TestAccELBV2TargetGroup_ProtocolVersion_basic
=== RUN   TestAccELBV2TargetGroup_ProtocolVersion_grpcHealthCheck
=== PAUSE TestAccELBV2TargetGroup_ProtocolVersion_grpcHealthCheck
=== RUN   TestAccELBV2TargetGroup_ProtocolVersion_grpcUpdate
=== PAUSE TestAccELBV2TargetGroup_ProtocolVersion_grpcUpdate
=== RUN   TestAccELBV2TargetGroup_HealthCheck_tcp
=== PAUSE TestAccELBV2TargetGroup_HealthCheck_tcp
=== RUN   TestAccELBV2TargetGroup_ipAddressType
=== PAUSE TestAccELBV2TargetGroup_ipAddressType
=== RUN   TestAccELBV2TargetGroup_tls
=== PAUSE TestAccELBV2TargetGroup_tls
=== RUN   TestAccELBV2TargetGroup_HealthCheck_tcpHTTPS
=== PAUSE TestAccELBV2TargetGroup_HealthCheck_tcpHTTPS
=== RUN   TestAccELBV2TargetGroup_attrsOnCreate
=== PAUSE TestAccELBV2TargetGroup_attrsOnCreate
=== RUN   TestAccELBV2TargetGroup_basic
=== PAUSE TestAccELBV2TargetGroup_basic
=== RUN   TestAccELBV2TargetGroup_udp
=== PAUSE TestAccELBV2TargetGroup_udp
=== RUN   TestAccELBV2TargetGroup_ForceNew_name
=== PAUSE TestAccELBV2TargetGroup_ForceNew_name
=== RUN   TestAccELBV2TargetGroup_ForceNew_port
=== PAUSE TestAccELBV2TargetGroup_ForceNew_port
=== RUN   TestAccELBV2TargetGroup_ForceNew_protocol
=== PAUSE TestAccELBV2TargetGroup_ForceNew_protocol
=== RUN   TestAccELBV2TargetGroup_ForceNew_vpc
=== PAUSE TestAccELBV2TargetGroup_ForceNew_vpc
=== RUN   TestAccELBV2TargetGroup_Defaults_application
=== PAUSE TestAccELBV2TargetGroup_Defaults_application
=== RUN   TestAccELBV2TargetGroup_Defaults_network
=== PAUSE TestAccELBV2TargetGroup_Defaults_network
=== RUN   TestAccELBV2TargetGroup_HealthCheck_enable
=== PAUSE TestAccELBV2TargetGroup_HealthCheck_enable
=== RUN   TestAccELBV2TargetGroup_Name_generated
=== PAUSE TestAccELBV2TargetGroup_Name_generated
=== RUN   TestAccELBV2TargetGroup_Name_prefix
=== PAUSE TestAccELBV2TargetGroup_Name_prefix
=== RUN   TestAccELBV2TargetGroup_NetworkLB_targetGroup
=== PAUSE TestAccELBV2TargetGroup_NetworkLB_targetGroup
=== RUN   TestAccELBV2TargetGroup_networkLB_TargetGroupWithConnectionTermination
=== PAUSE TestAccELBV2TargetGroup_networkLB_TargetGroupWithConnectionTermination
=== RUN   TestAccELBV2TargetGroup_NetworkLB_targetGroupWithProxy
=== PAUSE TestAccELBV2TargetGroup_NetworkLB_targetGroupWithProxy
=== RUN   TestAccELBV2TargetGroup_preserveClientIPValid
=== PAUSE TestAccELBV2TargetGroup_preserveClientIPValid
=== RUN   TestAccELBV2TargetGroup_Geneve_basic
=== PAUSE TestAccELBV2TargetGroup_Geneve_basic
=== RUN   TestAccELBV2TargetGroup_Geneve_notSticky
=== PAUSE TestAccELBV2TargetGroup_Geneve_notSticky
=== RUN   TestAccELBV2TargetGroup_Stickiness_defaultALB
=== PAUSE TestAccELBV2TargetGroup_Stickiness_defaultALB
=== RUN   TestAccELBV2TargetGroup_Stickiness_defaultNLB
=== PAUSE TestAccELBV2TargetGroup_Stickiness_defaultNLB
=== RUN   TestAccELBV2TargetGroup_Stickiness_invalidALB
=== PAUSE TestAccELBV2TargetGroup_Stickiness_invalidALB
=== RUN   TestAccELBV2TargetGroup_Stickiness_invalidNLB
=== PAUSE TestAccELBV2TargetGroup_Stickiness_invalidNLB
=== RUN   TestAccELBV2TargetGroup_Stickiness_validALB
=== PAUSE TestAccELBV2TargetGroup_Stickiness_validALB
=== RUN   TestAccELBV2TargetGroup_Stickiness_validNLB
=== PAUSE TestAccELBV2TargetGroup_Stickiness_validNLB
=== RUN   TestAccELBV2TargetGroup_tags
=== PAUSE TestAccELBV2TargetGroup_tags
=== RUN   TestAccELBV2TargetGroup_Stickiness_updateAppEnabled
=== PAUSE TestAccELBV2TargetGroup_Stickiness_updateAppEnabled
=== RUN   TestAccELBV2TargetGroup_HealthCheck_update
=== PAUSE TestAccELBV2TargetGroup_HealthCheck_update
=== RUN   TestAccELBV2TargetGroup_Stickiness_updateEnabled
=== PAUSE TestAccELBV2TargetGroup_Stickiness_updateEnabled
=== RUN   TestAccELBV2TargetGroup_HealthCheck_without
=== PAUSE TestAccELBV2TargetGroup_HealthCheck_without
=== RUN   TestAccELBV2TargetGroup_ALBAlias_basic
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_basic
=== RUN   TestAccELBV2TargetGroup_ALBAlias_changeNameForceNew
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_changeNameForceNew
=== RUN   TestAccELBV2TargetGroup_ALBAlias_changePortForceNew
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_changePortForceNew
=== RUN   TestAccELBV2TargetGroup_ALBAlias_changeProtocolForceNew
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_changeProtocolForceNew
=== RUN   TestAccELBV2TargetGroup_ALBAlias_changeVPCForceNew
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_changeVPCForceNew
=== RUN   TestAccELBV2TargetGroup_ALBAlias_generatedName
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_generatedName
=== RUN   TestAccELBV2TargetGroup_ALBAlias_lambda
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_lambda
=== RUN   TestAccELBV2TargetGroup_ALBAlias_lambdaMultiValueHeadersEnabled
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_lambdaMultiValueHeadersEnabled
=== RUN   TestAccELBV2TargetGroup_ALBAlias_missingPortProtocolVPC
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_missingPortProtocolVPC
=== RUN   TestAccELBV2TargetGroup_ALBAlias_namePrefix
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_namePrefix
=== RUN   TestAccELBV2TargetGroup_ALBAlias_setAndUpdateSlowStart
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_setAndUpdateSlowStart
=== RUN   TestAccELBV2TargetGroup_ALBAlias_tags
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_tags
=== RUN   TestAccELBV2TargetGroup_ALBAlias_updateHealthCheck
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_updateHealthCheck
=== RUN   TestAccELBV2TargetGroup_ALBAlias_updateLoadBalancingAlgorithmType
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_updateLoadBalancingAlgorithmType
=== RUN   TestAccELBV2TargetGroup_ALBAlias_updateStickinessEnabled
=== PAUSE TestAccELBV2TargetGroup_ALBAlias_updateStickinessEnabled
=== RUN   TestAccELBV2TargetGroup_Name_noDuplicates
=== PAUSE TestAccELBV2TargetGroup_Name_noDuplicates
=== CONT  TestAccELBV2TargetGroup_backwardsCompatibility
=== CONT  TestAccELBV2TargetGroup_ALBAlias_changeNameForceNew
=== CONT  TestAccELBV2TargetGroup_ALBAlias_namePrefix
--- PASS: TestAccELBV2TargetGroup_backwardsCompatibility (21.26s)
=== CONT  TestAccELBV2TargetGroup_Name_noDuplicates
--- PASS: TestAccELBV2TargetGroup_ALBAlias_namePrefix (21.29s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_tags
--- PASS: TestAccELBV2TargetGroup_ALBAlias_changeNameForceNew (38.84s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_setAndUpdateSlowStart
--- PASS: TestAccELBV2TargetGroup_Name_noDuplicates (27.09s)
=== CONT  TestAccELBV2TargetGroup_Name_prefix
--- PASS: TestAccELBV2TargetGroup_ALBAlias_tags (34.69s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_basic
--- PASS: TestAccELBV2TargetGroup_Name_prefix (19.48s)
=== CONT  TestAccELBV2TargetGroup_HealthCheck_without
--- PASS: TestAccELBV2TargetGroup_ALBAlias_setAndUpdateSlowStart (34.89s)
=== CONT  TestAccELBV2TargetGroup_Stickiness_updateEnabled
--- PASS: TestAccELBV2TargetGroup_ALBAlias_basic (19.34s)
=== CONT  TestAccELBV2TargetGroup_HealthCheck_update
--- PASS: TestAccELBV2TargetGroup_HealthCheck_without (15.99s)
=== CONT  TestAccELBV2TargetGroup_Stickiness_updateAppEnabled
--- PASS: TestAccELBV2TargetGroup_HealthCheck_update (34.61s)
=== CONT  TestAccELBV2TargetGroup_tags
--- PASS: TestAccELBV2TargetGroup_Stickiness_updateEnabled (49.74s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_updateHealthCheck
--- PASS: TestAccELBV2TargetGroup_Stickiness_updateAppEnabled (49.19s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_updateStickinessEnabled
--- PASS: TestAccELBV2TargetGroup_ALBAlias_updateHealthCheck (34.13s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_updateLoadBalancingAlgorithmType
--- PASS: TestAccELBV2TargetGroup_tags (49.70s)
=== CONT  TestAccELBV2TargetGroup_Geneve_notSticky
--- PASS: TestAccELBV2TargetGroup_ALBAlias_updateStickinessEnabled (49.17s)
=== CONT  TestAccELBV2TargetGroup_Stickiness_validALB
--- PASS: TestAccELBV2TargetGroup_Geneve_notSticky (35.57s)
=== CONT  TestAccELBV2TargetGroup_Stickiness_invalidNLB
--- PASS: TestAccELBV2TargetGroup_ALBAlias_updateLoadBalancingAlgorithmType (48.01s)
=== CONT  TestAccELBV2TargetGroup_Stickiness_invalidALB
--- PASS: TestAccELBV2TargetGroup_Stickiness_validALB (35.04s)
=== CONT  TestAccELBV2TargetGroup_Stickiness_defaultNLB
--- PASS: TestAccELBV2TargetGroup_Stickiness_invalidNLB (36.00s)
=== CONT  TestAccELBV2TargetGroup_Stickiness_validNLB
--- PASS: TestAccELBV2TargetGroup_Stickiness_invalidALB (38.41s)
=== CONT  TestAccELBV2TargetGroup_Geneve_basic
--- PASS: TestAccELBV2TargetGroup_Geneve_basic (22.54s)
=== CONT  TestAccELBV2TargetGroup_preserveClientIPValid
--- PASS: TestAccELBV2TargetGroup_Stickiness_defaultNLB (51.65s)
=== CONT  TestAccELBV2TargetGroup_NetworkLB_targetGroupWithProxy
--- PASS: TestAccELBV2TargetGroup_Stickiness_validNLB (70.95s)
=== CONT  TestAccELBV2TargetGroup_networkLB_TargetGroupWithConnectionTermination
--- PASS: TestAccELBV2TargetGroup_preserveClientIPValid (37.60s)
=== CONT  TestAccELBV2TargetGroup_NetworkLB_targetGroup
--- PASS: TestAccELBV2TargetGroup_NetworkLB_targetGroupWithProxy (38.97s)
=== CONT  TestAccELBV2TargetGroup_udp
--- PASS: TestAccELBV2TargetGroup_udp (20.16s)
=== CONT  TestAccELBV2TargetGroup_Name_generated
--- PASS: TestAccELBV2TargetGroup_networkLB_TargetGroupWithConnectionTermination (37.67s)
=== CONT  TestAccELBV2TargetGroup_HealthCheck_enable
--- PASS: TestAccELBV2TargetGroup_Name_generated (21.20s)
=== CONT  TestAccELBV2TargetGroup_Defaults_network
--- PASS: TestAccELBV2TargetGroup_NetworkLB_targetGroup (57.44s)
=== CONT  TestAccELBV2TargetGroup_Defaults_application
--- PASS: TestAccELBV2TargetGroup_HealthCheck_enable (29.28s)
=== CONT  TestAccELBV2TargetGroup_ForceNew_vpc
--- PASS: TestAccELBV2TargetGroup_Defaults_network (24.91s)
=== CONT  TestAccELBV2TargetGroup_ForceNew_protocol
--- PASS: TestAccELBV2TargetGroup_Defaults_application (20.00s)
=== CONT  TestAccELBV2TargetGroup_ForceNew_port
--- PASS: TestAccELBV2TargetGroup_ForceNew_vpc (32.66s)
=== CONT  TestAccELBV2TargetGroup_ForceNew_name
--- PASS: TestAccELBV2TargetGroup_ForceNew_protocol (37.91s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_generatedName
--- PASS: TestAccELBV2TargetGroup_ForceNew_port (36.87s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_missingPortProtocolVPC
--- PASS: TestAccELBV2TargetGroup_ALBAlias_generatedName (24.28s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_lambdaMultiValueHeadersEnabled
--- PASS: TestAccELBV2TargetGroup_ALBAlias_missingPortProtocolVPC (26.28s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_lambda
--- PASS: TestAccELBV2TargetGroup_ForceNew_name (44.14s)
=== CONT  TestAccELBV2TargetGroup_ProtocolVersion_grpcUpdate
--- PASS: TestAccELBV2TargetGroup_ALBAlias_lambda (22.68s)
=== CONT  TestAccELBV2TargetGroup_HealthCheck_tcp
--- PASS: TestAccELBV2TargetGroup_ProtocolVersion_grpcUpdate (43.10s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_changeProtocolForceNew
--- PASS: TestAccELBV2TargetGroup_ALBAlias_lambdaMultiValueHeadersEnabled (55.31s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_changeVPCForceNew
--- PASS: TestAccELBV2TargetGroup_HealthCheck_tcp (39.75s)
=== CONT  TestAccELBV2TargetGroup_ipAddressType
--- PASS: TestAccELBV2TargetGroup_ALBAlias_changeVPCForceNew (32.78s)
=== CONT  TestAccELBV2TargetGroup_attrsOnCreate
--- PASS: TestAccELBV2TargetGroup_ALBAlias_changeProtocolForceNew (37.57s)
=== CONT  TestAccELBV2TargetGroup_HealthCheck_tcpHTTPS
--- PASS: TestAccELBV2TargetGroup_ipAddressType (20.15s)
=== CONT  TestAccELBV2TargetGroup_tls
--- PASS: TestAccELBV2TargetGroup_tls (19.55s)
=== CONT  TestAccELBV2TargetGroup_ALBAlias_changePortForceNew
--- PASS: TestAccELBV2TargetGroup_attrsOnCreate (35.70s)
=== CONT  TestAccELBV2TargetGroup_ProtocolVersion_grpcHealthCheck
--- PASS: TestAccELBV2TargetGroup_HealthCheck_tcpHTTPS (35.76s)
=== CONT  TestAccELBV2TargetGroup_ProtocolVersion_basic
--- PASS: TestAccELBV2TargetGroup_ProtocolVersion_grpcHealthCheck (20.42s)
=== CONT  TestAccELBV2TargetGroup_basic
--- PASS: TestAccELBV2TargetGroup_ProtocolVersion_basic (19.94s)
=== CONT  TestAccELBV2TargetGroup_Stickiness_defaultALB
--- PASS: TestAccELBV2TargetGroup_ALBAlias_changePortForceNew (36.86s)
--- PASS: TestAccELBV2TargetGroup_basic (19.92s)
--- PASS: TestAccELBV2TargetGroup_Stickiness_defaultALB (19.66s)
PASS
ok  	github.com/hashicorp/terraform-provider-aws/internal/service/elbv2	606.591s

@ewbankkit
Copy link
Contributor

@mtt88 Thanks for the contribution 🎉 👏.

@ewbankkit ewbankkit merged commit 165566e into hashicorp:main Jan 12, 2023
@github-actions github-actions bot added this to the v4.50.0 milestone Jan 12, 2023
@github-actions
Copy link

This functionality has been released in v4.50.0 of the Terraform AWS Provider. Please see the Terraform documentation on provider versioning or reach out if you need any assistance upgrading.

For further feature requests or bug reports with this functionality, please create a new GitHub issue following the template. Thank you!

@github-actions
Copy link

I'm going to lock this pull request because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.
If you have found a problem that seems related to this change, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 13, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Addresses a defect in current functionality. service/elbv2 Issues and PRs that pertain to the elbv2 service. size/M Managed by automation to categorize the size of a PR. tests PRs: expanded test coverage. Issues: expanded coverage, enhancements to test infrastructure.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants