Skip to content

Commit

Permalink
directconnect: Migrate to AWS SDK v2
Browse files Browse the repository at this point in the history
  • Loading branch information
mattburgess committed May 1, 2024
1 parent e540a96 commit cc940ef
Show file tree
Hide file tree
Showing 57 changed files with 829 additions and 909 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ require (
github.com/aws/aws-sdk-go-v2/service/datazone v1.8.0
github.com/aws/aws-sdk-go-v2/service/dax v1.19.4
github.com/aws/aws-sdk-go-v2/service/devopsguru v1.30.4
github.com/aws/aws-sdk-go-v2/service/directconnect v1.24.4
github.com/aws/aws-sdk-go-v2/service/directoryservice v1.24.4
github.com/aws/aws-sdk-go-v2/service/docdbelastic v1.9.3
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ github.com/aws/aws-sdk-go-v2/service/dax v1.19.4 h1:S3mvtYjRVVsg1R4EuV1LWZUiD72t
github.com/aws/aws-sdk-go-v2/service/dax v1.19.4/go.mod h1:ZfNHbSICNHSqX4l5pJ6APeyWdgXgQg3PbuSFS2e5mCo=
github.com/aws/aws-sdk-go-v2/service/devopsguru v1.30.4 h1:qnMBNiyAPWwI9XSbtfOPr9rLZMdLFD2GAcZujMqw7Ow=
github.com/aws/aws-sdk-go-v2/service/devopsguru v1.30.4/go.mod h1:+ezG+QXnBXCWFp1rCQrxyebQMM5lBAxziL4iuswpxqo=
github.com/aws/aws-sdk-go-v2/service/directconnect v1.24.4 h1:9g0G4b/HG8Yw9YQQMUotq2QjvOYxX8kHxnAO6Yq7FuI=
github.com/aws/aws-sdk-go-v2/service/directconnect v1.24.4/go.mod h1:+Y1uRuhFUQpU4/cV2zgdkk6SlE/oiZEDRP8ilynvDZk=
github.com/aws/aws-sdk-go-v2/service/directoryservice v1.24.4 h1:XBgx3sdaA0SoPXsZSNSUL14H0UnYnTSVArieaYNv0EI=
github.com/aws/aws-sdk-go-v2/service/directoryservice v1.24.4/go.mod h1:Lm/qj7nCC0zEFoAdjbun8xLkflPFNbbspQVZgQQiOz8=
github.com/aws/aws-sdk-go-v2/service/docdbelastic v1.9.3 h1:HihsSNvSKUYna0rE7OAcNnsfNjita5nFz4OfC+lX1jc=
Expand Down
6 changes: 3 additions & 3 deletions internal/conns/awsclient_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 13 additions & 12 deletions internal/service/directconnect/acc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,19 @@ import (
"context"
"fmt"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/directconnect"
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/directconnect"
awstypes "github.com/aws/aws-sdk-go-v2/service/directconnect/types"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"github.com/hashicorp/terraform-provider-aws/internal/acctest"
"github.com/hashicorp/terraform-provider-aws/internal/conns"
"github.com/hashicorp/terraform-provider-aws/internal/errs"
)

func testAccCheckVirtualInterfaceExists(ctx context.Context, name string, vif *directconnect.VirtualInterface) resource.TestCheckFunc {
func testAccCheckVirtualInterfaceExists(ctx context.Context, name string, vif *awstypes.VirtualInterface) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := acctest.Provider.Meta().(*conns.AWSClient).DirectConnectConn(ctx)
conn := acctest.Provider.Meta().(*conns.AWSClient).DirectConnectClient(ctx)

rs, ok := s.RootModule().Resources[name]
if !ok {
Expand All @@ -28,16 +29,16 @@ func testAccCheckVirtualInterfaceExists(ctx context.Context, name string, vif *d
return fmt.Errorf("No ID is set")
}

resp, err := conn.DescribeVirtualInterfacesWithContext(ctx, &directconnect.DescribeVirtualInterfacesInput{
resp, err := conn.DescribeVirtualInterfaces(ctx, &directconnect.DescribeVirtualInterfacesInput{
VirtualInterfaceId: aws.String(rs.Primary.ID),
})
if err != nil {
return err
}

for _, v := range resp.VirtualInterfaces {
if aws.StringValue(v.VirtualInterfaceId) == rs.Primary.ID {
*vif = *v
if aws.ToString(v.VirtualInterfaceId) == rs.Primary.ID {
*vif = v

return nil
}
Expand All @@ -48,7 +49,7 @@ func testAccCheckVirtualInterfaceExists(ctx context.Context, name string, vif *d
}

func testAccCheckVirtualInterfaceDestroy(ctx context.Context, s *terraform.State, t string) error { // nosemgrep:ci.semgrep.acctest.naming.destroy-check-signature
conn := acctest.Provider.Meta().(*conns.AWSClient).DirectConnectConn(ctx)
conn := acctest.Provider.Meta().(*conns.AWSClient).DirectConnectClient(ctx)

for _, rs := range s.RootModule().Resources {
if rs.Type != t {
Expand All @@ -58,18 +59,18 @@ func testAccCheckVirtualInterfaceDestroy(ctx context.Context, s *terraform.State
return fmt.Errorf("No ID is set")
}

resp, err := conn.DescribeVirtualInterfacesWithContext(ctx, &directconnect.DescribeVirtualInterfacesInput{
resp, err := conn.DescribeVirtualInterfaces(ctx, &directconnect.DescribeVirtualInterfacesInput{
VirtualInterfaceId: aws.String(rs.Primary.ID),
})
if tfawserr.ErrMessageContains(err, directconnect.ErrCodeClientException, "does not exist") {
if errs.IsAErrorMessageContains[*awstypes.DirectConnectClientException](err, "does not exist") {
continue
}
if err != nil {
return err
}

for _, v := range resp.VirtualInterfaces {
if aws.StringValue(v.VirtualInterfaceId) == rs.Primary.ID && aws.StringValue(v.VirtualInterfaceState) != directconnect.VirtualInterfaceStateDeleted {
if aws.ToString(v.VirtualInterfaceId) == rs.Primary.ID && v.VirtualInterfaceState != awstypes.VirtualInterfaceStateDeleted {
return fmt.Errorf("[DESTROY ERROR] Direct Connect virtual interface (%s) not deleted", rs.Primary.ID)
}
}
Expand Down
73 changes: 31 additions & 42 deletions internal/service/directconnect/bgp_peer.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@ import (
"log"
"time"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/directconnect"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/directconnect"
awstypes "github.com/aws/aws-sdk-go-v2/service/directconnect/types"
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
"github.com/hashicorp/terraform-provider-aws/internal/conns"
"github.com/hashicorp/terraform-provider-aws/internal/enum"
"github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag"
)

Expand All @@ -29,10 +30,10 @@ func ResourceBGPPeer() *schema.Resource {

Schema: map[string]*schema.Schema{
"address_family": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{directconnect.AddressFamilyIpv4, directconnect.AddressFamilyIpv6}, false),
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateDiagFunc: enum.Validate[awstypes.AddressFamily](),
},
"bgp_asn": {
Type: schema.TypeInt,
Expand Down Expand Up @@ -85,17 +86,17 @@ func ResourceBGPPeer() *schema.Resource {

func resourceBGPPeerCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
var diags diag.Diagnostics
conn := meta.(*conns.AWSClient).DirectConnectConn(ctx)
conn := meta.(*conns.AWSClient).DirectConnectClient(ctx)

vifId := d.Get("virtual_interface_id").(string)
addrFamily := d.Get("address_family").(string)
asn := int64(d.Get("bgp_asn").(int))
asn := int32(d.Get("bgp_asn").(int))

req := &directconnect.CreateBGPPeerInput{
VirtualInterfaceId: aws.String(vifId),
NewBGPPeer: &directconnect.NewBGPPeer{
AddressFamily: aws.String(addrFamily),
Asn: aws.Int64(asn),
NewBGPPeer: &awstypes.NewBGPPeer{
AddressFamily: awstypes.AddressFamily(addrFamily),
Asn: asn,
},
}
if v, ok := d.GetOk("amazon_address"); ok {
Expand All @@ -109,21 +110,16 @@ func resourceBGPPeerCreate(ctx context.Context, d *schema.ResourceData, meta int
}

log.Printf("[DEBUG] Creating Direct Connect BGP peer: %#v", req)
_, err := conn.CreateBGPPeerWithContext(ctx, req)
_, err := conn.CreateBGPPeer(ctx, req)
if err != nil {
return sdkdiag.AppendErrorf(diags, "creating Direct Connect BGP peer: %s", err)
}

d.SetId(fmt.Sprintf("%s-%s-%d", vifId, addrFamily, asn))

stateConf := &retry.StateChangeConf{
Pending: []string{
directconnect.BGPPeerStatePending,
},
Target: []string{
directconnect.BGPPeerStateAvailable,
directconnect.BGPPeerStateVerifying,
},
Pending: enum.Slice(awstypes.BGPPeerStatePending),
Target: enum.Slice(awstypes.BGPPeerStateAvailable, awstypes.BGPPeerStateVerifying),
Refresh: bgpPeerStateRefresh(ctx, conn, vifId, addrFamily, asn),
Timeout: d.Timeout(schema.TimeoutDelete),
Delay: 10 * time.Second,
Expand All @@ -139,23 +135,23 @@ func resourceBGPPeerCreate(ctx context.Context, d *schema.ResourceData, meta int

func resourceBGPPeerRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
var diags diag.Diagnostics
conn := meta.(*conns.AWSClient).DirectConnectConn(ctx)
conn := meta.(*conns.AWSClient).DirectConnectClient(ctx)

vifId := d.Get("virtual_interface_id").(string)
addrFamily := d.Get("address_family").(string)
asn := int64(d.Get("bgp_asn").(int))
asn := int32(d.Get("bgp_asn").(int))

bgpPeerRaw, state, err := bgpPeerStateRefresh(ctx, conn, vifId, addrFamily, asn)()
if err != nil {
return sdkdiag.AppendErrorf(diags, "reading Direct Connect BGP peer: %s", err)
}
if state == directconnect.BGPPeerStateDeleted {
if state == string(awstypes.BGPPeerStateDeleted) {
log.Printf("[WARN] Direct Connect BGP peer (%s) not found, removing from state", d.Id())
d.SetId("")
return diags
}

bgpPeer := bgpPeerRaw.(*directconnect.BGPPeer)
bgpPeer := bgpPeerRaw.(*awstypes.BGPPeer)
d.Set("amazon_address", bgpPeer.AmazonAddress)
d.Set("bgp_auth_key", bgpPeer.AuthKey)
d.Set("customer_address", bgpPeer.CustomerAddress)
Expand All @@ -168,15 +164,15 @@ func resourceBGPPeerRead(ctx context.Context, d *schema.ResourceData, meta inter

func resourceBGPPeerDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
var diags diag.Diagnostics
conn := meta.(*conns.AWSClient).DirectConnectConn(ctx)
conn := meta.(*conns.AWSClient).DirectConnectClient(ctx)

vifId := d.Get("virtual_interface_id").(string)
addrFamily := d.Get("address_family").(string)
asn := int64(d.Get("bgp_asn").(int))
asn := int32(d.Get("bgp_asn").(int))

log.Printf("[DEBUG] Deleting Direct Connect BGP peer: %s", d.Id())
_, err := conn.DeleteBGPPeerWithContext(ctx, &directconnect.DeleteBGPPeerInput{
Asn: aws.Int64(asn),
_, err := conn.DeleteBGPPeer(ctx, &directconnect.DeleteBGPPeerInput{
Asn: asn,
CustomerAddress: aws.String(d.Get("customer_address").(string)),
VirtualInterfaceId: aws.String(vifId),
})
Expand All @@ -189,15 +185,8 @@ func resourceBGPPeerDelete(ctx context.Context, d *schema.ResourceData, meta int
}

stateConf := &retry.StateChangeConf{
Pending: []string{
directconnect.BGPPeerStateAvailable,
directconnect.BGPPeerStateDeleting,
directconnect.BGPPeerStatePending,
directconnect.BGPPeerStateVerifying,
},
Target: []string{
directconnect.BGPPeerStateDeleted,
},
Pending: enum.Slice(awstypes.BGPPeerStateAvailable, awstypes.BGPPeerStateDeleting, awstypes.BGPPeerStatePending, awstypes.BGPPeerStateVerifying),
Target: enum.Slice(awstypes.BGPPeerStateDeleted),
Refresh: bgpPeerStateRefresh(ctx, conn, vifId, addrFamily, asn),
Timeout: d.Timeout(schema.TimeoutDelete),
Delay: 10 * time.Second,
Expand All @@ -211,22 +200,22 @@ func resourceBGPPeerDelete(ctx context.Context, d *schema.ResourceData, meta int
return diags
}

func bgpPeerStateRefresh(ctx context.Context, conn *directconnect.DirectConnect, vifId, addrFamily string, asn int64) retry.StateRefreshFunc {
func bgpPeerStateRefresh(ctx context.Context, conn *directconnect.Client, vifId, addrFamily string, asn int32) retry.StateRefreshFunc {
return func() (interface{}, string, error) {
vif, err := virtualInterfaceRead(ctx, vifId, conn)
if err != nil {
return nil, "", err
}
if vif == nil {
return "", directconnect.BGPPeerStateDeleted, nil
return "", string(awstypes.BGPPeerStateDeleted), nil
}

for _, bgpPeer := range vif.BgpPeers {
if aws.StringValue(bgpPeer.AddressFamily) == addrFamily && aws.Int64Value(bgpPeer.Asn) == asn {
return bgpPeer, aws.StringValue(bgpPeer.BgpPeerState), nil
if string(bgpPeer.AddressFamily) == addrFamily && bgpPeer.Asn == asn {
return bgpPeer, string(bgpPeer.BgpPeerState), nil
}
}

return "", directconnect.BGPPeerStateDeleted, nil
return "", string(awstypes.BGPPeerStateDeleted), nil
}
}
15 changes: 8 additions & 7 deletions internal/service/directconnect/bgp_peer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,9 @@ import (
"strconv"
"testing"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/directconnect"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/directconnect"
awstypes "github.com/aws/aws-sdk-go-v2/service/directconnect/types"
sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
Expand Down Expand Up @@ -48,7 +49,7 @@ func TestAccDirectConnectBGPPeer_basic(t *testing.T) {

func testAccCheckBGPPeerDestroy(ctx context.Context) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := acctest.Provider.Meta().(*conns.AWSClient).DirectConnectConn(ctx)
conn := acctest.Provider.Meta().(*conns.AWSClient).DirectConnectClient(ctx)

for _, rs := range s.RootModule().Resources {
if rs.Type != "aws_dx_bgp_peer" {
Expand All @@ -58,14 +59,14 @@ func testAccCheckBGPPeerDestroy(ctx context.Context) resource.TestCheckFunc {
VirtualInterfaceId: aws.String(rs.Primary.Attributes["virtual_interface_id"]),
}

resp, err := conn.DescribeVirtualInterfacesWithContext(ctx, input)
resp, err := conn.DescribeVirtualInterfaces(ctx, input)
if err != nil {
return err
}
for _, peer := range resp.VirtualInterfaces[0].BgpPeers {
if aws.StringValue(peer.AddressFamily) == rs.Primary.Attributes["address_family"] &&
strconv.Itoa(int(aws.Int64Value(peer.Asn))) == rs.Primary.Attributes["bgp_asn"] &&
aws.StringValue(peer.BgpPeerState) != directconnect.BGPPeerStateDeleted {
if string(peer.AddressFamily) == rs.Primary.Attributes["address_family"] &&
strconv.Itoa(int(peer.Asn)) == rs.Primary.Attributes["bgp_asn"] &&
peer.BgpPeerState != awstypes.BGPPeerStateDeleted {
return fmt.Errorf("[DESTROY ERROR] Dx BGP peer (%s) not deleted", rs.Primary.ID)
}
}
Expand Down
Loading

0 comments on commit cc940ef

Please sign in to comment.