From 51310a746894804739946a92850a9d0047745ad1 Mon Sep 17 00:00:00 2001 From: bdiggity Date: Thu, 15 Jun 2023 16:25:10 -0500 Subject: [PATCH 1/6] feat: add tgw accepter for cloud wan --- .../networkmanager/attachment_accepter.go | 34 ++++++++++++++++++- ...kmanager_attachment_accepter.html.markdown | 2 +- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/internal/service/networkmanager/attachment_accepter.go b/internal/service/networkmanager/attachment_accepter.go index 77a288cadbea..18b5495639c1 100644 --- a/internal/service/networkmanager/attachment_accepter.go +++ b/internal/service/networkmanager/attachment_accepter.go @@ -48,7 +48,8 @@ func ResourceAttachmentAccepter() *schema.Resource { networkmanager.AttachmentTypeVpc, networkmanager.AttachmentTypeSiteToSiteVpn, networkmanager.AttachmentTypeConnect, - }, false), + networkmanager.AttachmentTypeTransitGatewayRouteTable, + }, false), }, "core_network_arn": { Type: schema.TypeString, @@ -123,6 +124,17 @@ func resourceAttachmentAccepterCreate(ctx context.Context, d *schema.ResourceDat d.SetId(attachmentID) + case networkmanager.AttachmentTypeTransitGatewayRouteTable: + tgwAttachment, err := FindTransitGatewayRouteTableAttachmentByID(ctx, conn, attachmentID) + + if err != nil { + return diag.Errorf("reading Network Manager Transit Gateway Route Table Attachment (%s): %s", attachmentID, err) + } + + state = aws.StringValue(tgwAttachment.Attachment.State) + + d.SetId(attachmentID) + default: return diag.Errorf("unsupported Network Manager Attachment type: %s", attachmentType) } @@ -153,6 +165,11 @@ func resourceAttachmentAccepterCreate(ctx context.Context, d *schema.ResourceDat if _, err := waitConnectAttachmentAvailable(ctx, conn, attachmentID, d.Timeout(schema.TimeoutCreate)); err != nil { return diag.Errorf("waiting for Network Manager Connect Attachment (%s) create: %s", attachmentID, err) } + + case networkmanager.AttachmentTypeTransitGatewayRouteTable: + if _, err := waitTransitGatewayRouteTableAttachmentCreated(ctx, conn, attachmentID, d.Timeout(schema.TimeoutCreate)); err != nil { + return diag.Errorf("waiting for Network Manager Transit Gateway Route Table Attachment (%s) create: %s", attachmentID, err) + } } } @@ -209,6 +226,21 @@ func resourceAttachmentAccepterRead(ctx context.Context, d *schema.ResourceData, } a = connectAttachment.Attachment + + case networkmanager.AttachmentTypeTransitGatewayRouteTable: + tgwAttachment, err := FindTransitGatewayRouteTableAttachmentByID(ctx, conn, d.Id()) + + if !d.IsNewResource() && tfresource.NotFound(err) { + log.Printf("[WARN] Network Manager Transit Gateway Route Table Attachment %s not found, removing from state", d.Id()) + d.SetId("") + return nil + } + + if err != nil { + return diag.Errorf("reading Network Manager Transit Gateway Route Table Attachment (%s): %s", d.Id(), err) + } + + a = tgwAttachment.Attachment } d.Set("attachment_policy_rule_number", a.AttachmentPolicyRuleNumber) diff --git a/website/docs/r/networkmanager_attachment_accepter.html.markdown b/website/docs/r/networkmanager_attachment_accepter.html.markdown index 2110a44f3b1b..8b4d35bfbff1 100644 --- a/website/docs/r/networkmanager_attachment_accepter.html.markdown +++ b/website/docs/r/networkmanager_attachment_accepter.html.markdown @@ -35,7 +35,7 @@ resource "aws_networkmanager_attachment_accepter" "test" { The following arguments are required: - `attachment_id` - (Required) The ID of the attachment. -- `attachment_type` - The type of attachment. Valid values can be found in the [AWS Documentation](https://docs.aws.amazon.com/networkmanager/latest/APIReference/API_ListAttachments.html#API_ListAttachments_RequestSyntax) +- `attachment_type` - (Required) The type of attachment. Valid values can be found in the [AWS Documentation](https://docs.aws.amazon.com/networkmanager/latest/APIReference/API_ListAttachments.html#API_ListAttachments_RequestSyntax) ## Attributes Reference From d01f61bced6e2c442af8b6e7c7fc6cdf79c7cac8 Mon Sep 17 00:00:00 2001 From: bdiggity Date: Thu, 15 Jun 2023 16:55:50 -0500 Subject: [PATCH 2/6] changelog --- .changelog/32023.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/32023.txt diff --git a/.changelog/32023.txt b/.changelog/32023.txt new file mode 100644 index 000000000000..5595ba98dee7 --- /dev/null +++ b/.changelog/32023.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/aws_networkmanager_attachment_accepter: Added support for Transit Gateway route table attachments +``` \ No newline at end of file From 69736dd66da087dd224e56c77f7ed0e3eeae4936 Mon Sep 17 00:00:00 2001 From: bdiggity Date: Thu, 15 Jun 2023 17:05:05 -0500 Subject: [PATCH 3/6] lint --- internal/service/networkmanager/attachment_accepter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/networkmanager/attachment_accepter.go b/internal/service/networkmanager/attachment_accepter.go index 18b5495639c1..df30e31a9334 100644 --- a/internal/service/networkmanager/attachment_accepter.go +++ b/internal/service/networkmanager/attachment_accepter.go @@ -49,7 +49,7 @@ func ResourceAttachmentAccepter() *schema.Resource { networkmanager.AttachmentTypeSiteToSiteVpn, networkmanager.AttachmentTypeConnect, networkmanager.AttachmentTypeTransitGatewayRouteTable, - }, false), + }, false), }, "core_network_arn": { Type: schema.TypeString, From ce6ebf390c73ca922488f6d6ca16291bcc020ba4 Mon Sep 17 00:00:00 2001 From: bdiggity Date: Thu, 15 Jun 2023 21:40:35 -0500 Subject: [PATCH 4/6] attachfunc --- .../networkmanager/attachment_accepter.go | 2 +- .../transit_gateway_route_table_attachment.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/internal/service/networkmanager/attachment_accepter.go b/internal/service/networkmanager/attachment_accepter.go index df30e31a9334..54fd62f68e3e 100644 --- a/internal/service/networkmanager/attachment_accepter.go +++ b/internal/service/networkmanager/attachment_accepter.go @@ -167,7 +167,7 @@ func resourceAttachmentAccepterCreate(ctx context.Context, d *schema.ResourceDat } case networkmanager.AttachmentTypeTransitGatewayRouteTable: - if _, err := waitTransitGatewayRouteTableAttachmentCreated(ctx, conn, attachmentID, d.Timeout(schema.TimeoutCreate)); err != nil { + if _, err := waitTransitGatewayRouteTableAttachmentAvailable(ctx, conn, attachmentID, d.Timeout(schema.TimeoutCreate)); err != nil { return diag.Errorf("waiting for Network Manager Transit Gateway Route Table Attachment (%s) create: %s", attachmentID, err) } } diff --git a/internal/service/networkmanager/transit_gateway_route_table_attachment.go b/internal/service/networkmanager/transit_gateway_route_table_attachment.go index 09bd0573f630..a3847f618a47 100644 --- a/internal/service/networkmanager/transit_gateway_route_table_attachment.go +++ b/internal/service/networkmanager/transit_gateway_route_table_attachment.go @@ -268,3 +268,20 @@ func waitTransitGatewayRouteTableAttachmentDeleted(ctx context.Context, conn *ne return nil, err } + +func waitTransitGatewayRouteTableAttachmentAvailable(ctx context.Context, conn *networkmanager.NetworkManager, id string, timeout time.Duration) (*networkmanager.TransitGatewayRouteTableAttachment, error) { + stateConf := &retry.StateChangeConf{ + Pending: []string{networkmanager.AttachmentStateCreating, networkmanager.AttachmentStatePendingAttachmentAcceptance, networkmanager.AttachmentStatePendingNetworkUpdate}, + Target: []string{networkmanager.AttachmentStateAvailable}, + Timeout: timeout, + Refresh: StatusTransitGatewayRouteTableAttachmentState(ctx, conn, id), + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + + if output, ok := outputRaw.(*networkmanager.TransitGatewayRouteTableAttachment); ok { + return output, err + } + + return nil, err +} From 5db15492ee2ea8f09a04906387be5998f797d8be Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 16 Jun 2023 10:53:55 -0400 Subject: [PATCH 5/6] Cosmetics. --- .../service/networkmanager/attachment_accepter.go | 13 ++++--------- .../transit_gateway_route_table_attachment.go | 8 ++++---- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/internal/service/networkmanager/attachment_accepter.go b/internal/service/networkmanager/attachment_accepter.go index 54fd62f68e3e..6cb9aff139ab 100644 --- a/internal/service/networkmanager/attachment_accepter.go +++ b/internal/service/networkmanager/attachment_accepter.go @@ -41,15 +41,10 @@ func ResourceAttachmentAccepter() *schema.Resource { // querying attachments requires knowing the type ahead of time // therefore type is required in provider, though not on the API "attachment_type": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validation.StringInSlice([]string{ - networkmanager.AttachmentTypeVpc, - networkmanager.AttachmentTypeSiteToSiteVpn, - networkmanager.AttachmentTypeConnect, - networkmanager.AttachmentTypeTransitGatewayRouteTable, - }, false), + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: validation.StringInSlice(networkmanager.AttachmentType_Values(), false), }, "core_network_arn": { Type: schema.TypeString, diff --git a/internal/service/networkmanager/transit_gateway_route_table_attachment.go b/internal/service/networkmanager/transit_gateway_route_table_attachment.go index a3847f618a47..a0f21cfaedeb 100644 --- a/internal/service/networkmanager/transit_gateway_route_table_attachment.go +++ b/internal/service/networkmanager/transit_gateway_route_table_attachment.go @@ -218,7 +218,7 @@ func FindTransitGatewayRouteTableAttachmentByID(ctx context.Context, conn *netwo return output.TransitGatewayRouteTableAttachment, nil } -func StatusTransitGatewayRouteTableAttachmentState(ctx context.Context, conn *networkmanager.NetworkManager, id string) retry.StateRefreshFunc { +func statusTransitGatewayRouteTableAttachmentState(ctx context.Context, conn *networkmanager.NetworkManager, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { output, err := FindTransitGatewayRouteTableAttachmentByID(ctx, conn, id) @@ -239,7 +239,7 @@ func waitTransitGatewayRouteTableAttachmentCreated(ctx context.Context, conn *ne Pending: []string{networkmanager.AttachmentStateCreating, networkmanager.AttachmentStatePendingNetworkUpdate}, Target: []string{networkmanager.AttachmentStateAvailable, networkmanager.AttachmentStatePendingAttachmentAcceptance}, Timeout: timeout, - Refresh: StatusTransitGatewayRouteTableAttachmentState(ctx, conn, id), + Refresh: statusTransitGatewayRouteTableAttachmentState(ctx, conn, id), } outputRaw, err := stateConf.WaitForStateContext(ctx) @@ -256,7 +256,7 @@ func waitTransitGatewayRouteTableAttachmentDeleted(ctx context.Context, conn *ne Pending: []string{networkmanager.AttachmentStateDeleting}, Target: []string{}, Timeout: timeout, - Refresh: StatusTransitGatewayRouteTableAttachmentState(ctx, conn, id), + Refresh: statusTransitGatewayRouteTableAttachmentState(ctx, conn, id), NotFoundChecks: 1, } @@ -274,7 +274,7 @@ func waitTransitGatewayRouteTableAttachmentAvailable(ctx context.Context, conn * Pending: []string{networkmanager.AttachmentStateCreating, networkmanager.AttachmentStatePendingAttachmentAcceptance, networkmanager.AttachmentStatePendingNetworkUpdate}, Target: []string{networkmanager.AttachmentStateAvailable}, Timeout: timeout, - Refresh: StatusTransitGatewayRouteTableAttachmentState(ctx, conn, id), + Refresh: statusTransitGatewayRouteTableAttachmentState(ctx, conn, id), } outputRaw, err := stateConf.WaitForStateContext(ctx) From b8aacbcca03fe6b3ebb934b13fc5ba70527c8c6b Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 16 Jun 2023 11:26:05 -0400 Subject: [PATCH 6/6] r/aws_networkmanager_transit_gateway_route_table_attachment: Fixup acceptance tests. --- .../transit_gateway_peering_test.go | 6 +++++- ...ansit_gateway_route_table_attachment_test.go | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/internal/service/networkmanager/transit_gateway_peering_test.go b/internal/service/networkmanager/transit_gateway_peering_test.go index 7e8618b2d579..4a56f84f2e85 100644 --- a/internal/service/networkmanager/transit_gateway_peering_test.go +++ b/internal/service/networkmanager/transit_gateway_peering_test.go @@ -200,13 +200,17 @@ resource "aws_networkmanager_global_network" "test" { resource "aws_networkmanager_core_network" "test" { global_network_id = aws_networkmanager_global_network.test.id - policy_document = data.aws_networkmanager_core_network_policy_document.test.json tags = { Name = %[1]q } } +resource "aws_networkmanager_core_network_policy_attachment" "test" { + core_network_id = aws_networkmanager_core_network.test.id + policy_document = data.aws_networkmanager_core_network_policy_document.test.json +} + data "aws_networkmanager_core_network_policy_document" "test" { core_network_configuration { # Don't overlap with default TGW ASN: 64512. diff --git a/internal/service/networkmanager/transit_gateway_route_table_attachment_test.go b/internal/service/networkmanager/transit_gateway_route_table_attachment_test.go index 5cac87a0f2e1..6af17579f5ec 100644 --- a/internal/service/networkmanager/transit_gateway_route_table_attachment_test.go +++ b/internal/service/networkmanager/transit_gateway_route_table_attachment_test.go @@ -183,7 +183,7 @@ resource "aws_networkmanager_transit_gateway_peering" "test" { Name = %[1]q } - depends_on = [aws_ec2_transit_gateway_policy_table.test] + depends_on = [aws_ec2_transit_gateway_policy_table.test, aws_networkmanager_core_network_policy_attachment.test] } resource "aws_ec2_transit_gateway_route_table" "test" { @@ -209,6 +209,11 @@ resource "aws_networkmanager_transit_gateway_route_table_attachment" "test" { depends_on = [aws_ec2_transit_gateway_policy_table_association.test] } + +resource "aws_networkmanager_attachment_accepter" "test" { + attachment_id = aws_networkmanager_transit_gateway_route_table_attachment.test.id + attachment_type = aws_networkmanager_transit_gateway_route_table_attachment.test.attachment_type +} `) } @@ -224,6 +229,11 @@ resource "aws_networkmanager_transit_gateway_route_table_attachment" "test" { depends_on = [aws_ec2_transit_gateway_policy_table_association.test] } + +resource "aws_networkmanager_attachment_accepter" "test" { + attachment_id = aws_networkmanager_transit_gateway_route_table_attachment.test.id + attachment_type = aws_networkmanager_transit_gateway_route_table_attachment.test.attachment_type +} `, tagKey1, tagValue1)) } @@ -240,5 +250,10 @@ resource "aws_networkmanager_transit_gateway_route_table_attachment" "test" { depends_on = [aws_ec2_transit_gateway_policy_table_association.test] } + +resource "aws_networkmanager_attachment_accepter" "test" { + attachment_id = aws_networkmanager_transit_gateway_route_table_attachment.test.id + attachment_type = aws_networkmanager_transit_gateway_route_table_attachment.test.attachment_type +} `, tagKey1, tagValue1, tagKey2, tagValue2)) }