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

Adding aws_transit_gateway_connect and peers #22181

Merged
merged 45 commits into from
Mar 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
49feafd
Adding aws_transit_gateway_connect and peers
steweg Dec 2, 2021
428ae41
Merge branch 'main' into HEAD
ewbankkit Feb 24, 2022
e337af9
One CHANGELOG entry per change.
ewbankkit Feb 24, 2022
a31c6e0
Add 'FindTransitGatewayConnects' et al.
ewbankkit Feb 24, 2022
b94ab96
'FindTransitGatewayConnectByAttachmentID' -> 'FindTransitGatewayConne…
ewbankkit Feb 25, 2022
8e7295d
Add 'verify.IsIPv4CIDRBlockOrIPv6CIDRBlock'.
ewbankkit Feb 25, 2022
60d4db6
Replace 'validateIPv4OrIPv6' with 'verify.IsIPv4CIDRBlockOrIPv6CIDRBl…
ewbankkit Feb 25, 2022
f390142
r/aws_ec2_transit_gateway: 'cidr_blocks' -> 'transit_gateway_cidr_blo…
ewbankkit Feb 25, 2022
f284bae
d/aws_ec2_transit_gateway: 'cidr_blocks' -> 'transit_gateway_cidr_blo…
ewbankkit Feb 25, 2022
1bfe738
r/aws_ec2_transit_gateway_connect: Add 'protocol' argument.
ewbankkit Feb 28, 2022
dd1998b
d/aws_ec2_transit_gateway_connect: Add 'protocol' attribute.
ewbankkit Feb 28, 2022
59cde26
r/aws_ec2_transit_gateway: 'transit_gateway_cidr_blocks' is TypeSet.
ewbankkit Feb 28, 2022
48f0388
r/aws_ec2_transit_gateway: Simplify resource update.
ewbankkit Feb 28, 2022
068e8e2
Tidy up most Transit Gateway sweepers.
ewbankkit Feb 28, 2022
f320f13
'WaitForTransitGatewayDeletion' -> 'waitForTransitGatewayDeletion'.
ewbankkit Feb 28, 2022
db24b7b
r/aws_ec2_transit_gateway: Add custom 'timeouts' block.
ewbankkit Feb 28, 2022
9f91515
r/aws_ec2_transit_gateway: Add and use 'WaitTransitGatewayUpdated'.
ewbankkit Feb 28, 2022
1a2d6c0
Test Transit Gateway transit_gateway_cidr_blocks values.
ewbankkit Feb 28, 2022
5e6da9f
Add and use 'WaitTransitGatewayConnectCreated' and 'WaitTransitGatewa…
ewbankkit Feb 28, 2022
8e3b0b2
r/aws_ec2_transit_gateway_connect: Terraform Plugin SDK V2 'WithoutTi…
ewbankkit Feb 28, 2022
dd014c9
r/aws_ec2_transit_gateway_connect: Use 'acctest.CheckResourceDisappea…
ewbankkit Feb 28, 2022
bf2a514
r/aws_ec2_transit_gateway_connect: Set Name tags in acceptance tests.
ewbankkit Feb 28, 2022
704b2fa
r/aws_ec2_transit_gateway_connect: Use 'FindTransitGatewayConnectByID'.
ewbankkit Feb 28, 2022
69a9e4a
r/aws_ec2_transit_gateway_connect: Use 'WithContext' version of Creat…
ewbankkit Feb 28, 2022
39d2b2e
r/aws_ec2_transit_gateway_connect: 'DescribeTransitGatewayConnect' no…
ewbankkit Feb 28, 2022
c6f0e21
r/aws_ec2_transit_gateway_connect: Use 'FindTransitGatewayAttachmentB…
ewbankkit Feb 28, 2022
fbc3b3b
r/aws_ec2_transit_gateway: Tidy up resource Create and Delete.
ewbankkit Feb 28, 2022
d2966fd
Merge branch 'main' into tmp-pr22181
ewbankkit Mar 1, 2022
d5a7be6
Fix typo.
ewbankkit Mar 1, 2022
9a49f5f
'transitGatewayRefreshFunc' is unused.
ewbankkit Mar 1, 2022
c4ac52a
Use 'FindTransitGatewayByID' and 'FindTransitGatewayAttachmentByID'.
ewbankkit Mar 1, 2022
cf030ea
Acceptance test output:
ewbankkit Mar 1, 2022
2f31910
d/aws_ec2_transit_gateway_connect: 'id' -> 'transit_gateway_connect_id'.
ewbankkit Mar 1, 2022
2d20d2a
Add 'FindTransitGatewayConnectPeers' et al.
ewbankkit Mar 1, 2022
258c6f1
r/aws_ec2_transit_gateway_connect_peer: Add custom timeouts.
ewbankkit Mar 1, 2022
17ff7ad
r/aws_ec2_transit_gateway_connect_peer: Simplify attribute validation.
ewbankkit Mar 1, 2022
cd127ed
r/aws_ec2_transit_gateway_connect_peer: Switch to Terraform Plugin SD…
ewbankkit Mar 1, 2022
7ea40f4
r/aws_ec2_transit_gateway_connect_peer: Use 'WithContext' version of …
ewbankkit Mar 1, 2022
32d7eb7
r/aws_ec2_transit_gateway_connect_peer: Use 'FindTransitGatewayConnec…
ewbankkit Mar 1, 2022
b121502
r/aws_ec2_transit_gateway_connect_peer: Tidy up acceptance tests.
ewbankkit Mar 1, 2022
8e75d29
Acceptance test output:
ewbankkit Mar 1, 2022
4cc50ef
d/aws_ec2_transit_gateway_connect_peer: 'id' -> 'transit_gateway_conn…
ewbankkit Mar 1, 2022
fca0e37
r/aws_ec2_transit_gateway_connect_peer: Handle 'bgp_asn' as a string …
ewbankkit Mar 1, 2022
0dc868c
Tweak CHANGELOG entries.
ewbankkit Mar 1, 2022
76ea75e
Fix MD032/blanks-around-lists error.
ewbankkit Mar 1, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .changelog/22181.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
```release-note:new-resource
aws_ec2_transit_gateway_connect
```

```release-note:new-resource
aws_ec2_transit_gateway_connect_peer
```

```release-note:new-data-source
aws_ec2_transit_gateway_connect
```

```release-note:new-data-source
aws_ec2_transit_gateway_connect_peer
```

```release-note:enhancement
resource/aws_ec2_transit_gateway: Add `transit_gateway_cidr_blocks` argument
```

```release-note:enhancement
data-source/aws_ec2_transit_gateway: Add `transit_gateway_cidr_blocks` attribute
```

```release-note:enhancement
resource/aws_ec2_transit_gateway: Add [custom `timeouts`](https://www.terraform.io/docs/language/resources/syntax.html#operation-timeouts) block
```
4 changes: 4 additions & 0 deletions internal/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,8 @@ func Provider() *schema.Provider {
"aws_ec2_managed_prefix_list": ec2.DataSourceManagedPrefixList(),
"aws_ec2_spot_price": ec2.DataSourceSpotPrice(),
"aws_ec2_transit_gateway": ec2.DataSourceTransitGateway(),
"aws_ec2_transit_gateway_connect": ec2.DataSourceTransitGatewayConnect(),
"aws_ec2_transit_gateway_connect_peer": ec2.DataSourceTransitGatewayConnectPeer(),
"aws_ec2_transit_gateway_dx_gateway_attachment": ec2.DataSourceTransitGatewayDxGatewayAttachment(),
"aws_ec2_transit_gateway_multicast_domain": ec2.DataSourceTransitGatewayMulticastDomain(),
"aws_ec2_transit_gateway_peering_attachment": ec2.DataSourceTransitGatewayPeeringAttachment(),
Expand Down Expand Up @@ -1205,6 +1207,8 @@ func Provider() *schema.Provider {
"aws_ec2_traffic_mirror_session": ec2.ResourceTrafficMirrorSession(),
"aws_ec2_traffic_mirror_target": ec2.ResourceTrafficMirrorTarget(),
"aws_ec2_transit_gateway": ec2.ResourceTransitGateway(),
"aws_ec2_transit_gateway_connect": ec2.ResourceTransitGatewayConnect(),
"aws_ec2_transit_gateway_connect_peer": ec2.ResourceTransitGatewayConnectPeer(),
"aws_ec2_transit_gateway_multicast_domain": ec2.ResourceTransitGatewayMulticastDomain(),
"aws_ec2_transit_gateway_multicast_domain_association": ec2.ResourceTransitGatewayMulticastDomainAssociation(),
"aws_ec2_transit_gateway_multicast_group_member": ec2.ResourceTransitGatewayMulticastGroupMember(),
Expand Down
1 change: 1 addition & 0 deletions internal/service/ec2/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ const (
ErrCodeInvalidSubnetIDNotFound = "InvalidSubnetID.NotFound"
ErrCodeInvalidSubnetIdNotFound = "InvalidSubnetId.NotFound"
ErrCodeInvalidTransitGatewayAttachmentIDNotFound = "InvalidTransitGatewayAttachmentID.NotFound"
ErrCodeInvalidTransitGatewayConnectPeerIDNotFound = "InvalidTransitGatewayConnectPeerID.NotFound"
ErrCodeInvalidTransitGatewayIDNotFound = "InvalidTransitGatewayID.NotFound"
ErrCodeInvalidTransitGatewayMulticastDomainIdNotFound = "InvalidTransitGatewayMulticastDomainId.NotFound"
ErrCodeInvalidVolumeNotFound = "InvalidVolume.NotFound"
Expand Down
159 changes: 157 additions & 2 deletions internal/service/ec2/find.go
Original file line number Diff line number Diff line change
Expand Up @@ -2130,7 +2130,7 @@ func FindTransitGateway(conn *ec2.EC2, input *ec2.DescribeTransitGatewaysInput)
return nil, err
}

if len(output) == 0 || output[0] == nil {
if len(output) == 0 || output[0] == nil || output[0].Options == nil {
return nil, tfresource.NewEmptyResultError(input)
}

Expand Down Expand Up @@ -2270,6 +2270,161 @@ func FindTransitGatewayAttachmentByID(conn *ec2.EC2, id string) (*ec2.TransitGat
return output, nil
}

func FindTransitGatewayConnect(conn *ec2.EC2, input *ec2.DescribeTransitGatewayConnectsInput) (*ec2.TransitGatewayConnect, error) {
output, err := FindTransitGatewayConnects(conn, input)

if err != nil {
return nil, err
}

if len(output) == 0 || output[0] == nil || output[0].Options == nil {
return nil, tfresource.NewEmptyResultError(input)
}

if count := len(output); count > 1 {
return nil, tfresource.NewTooManyResultsError(count, input)
}

return output[0], nil
}

func FindTransitGatewayConnects(conn *ec2.EC2, input *ec2.DescribeTransitGatewayConnectsInput) ([]*ec2.TransitGatewayConnect, error) {
var output []*ec2.TransitGatewayConnect

err := conn.DescribeTransitGatewayConnectsPages(input, func(page *ec2.DescribeTransitGatewayConnectsOutput, lastPage bool) bool {
if page == nil {
return !lastPage
}

for _, v := range page.TransitGatewayConnects {
if v != nil {
output = append(output, v)
}
}

return !lastPage
})

if tfawserr.ErrCodeEquals(err, ErrCodeInvalidTransitGatewayAttachmentIDNotFound) {
return nil, &resource.NotFoundError{
LastError: err,
LastRequest: input,
}
}

if err != nil {
return nil, err
}

return output, nil
}

func FindTransitGatewayConnectByID(conn *ec2.EC2, id string) (*ec2.TransitGatewayConnect, error) {
input := &ec2.DescribeTransitGatewayConnectsInput{
TransitGatewayAttachmentIds: aws.StringSlice([]string{id}),
}

output, err := FindTransitGatewayConnect(conn, input)

if err != nil {
return nil, err
}

if state := aws.StringValue(output.State); state == ec2.TransitGatewayAttachmentStateDeleted {
return nil, &resource.NotFoundError{
Message: state,
LastRequest: input,
}
}

// Eventual consistency check.
if aws.StringValue(output.TransitGatewayAttachmentId) != id {
return nil, &resource.NotFoundError{
LastRequest: input,
}
}

return output, nil
}

func FindTransitGatewayConnectPeer(conn *ec2.EC2, input *ec2.DescribeTransitGatewayConnectPeersInput) (*ec2.TransitGatewayConnectPeer, error) {
output, err := FindTransitGatewayConnectPeers(conn, input)

if err != nil {
return nil, err
}

if len(output) == 0 || output[0] == nil || output[0].ConnectPeerConfiguration == nil ||
len(output[0].ConnectPeerConfiguration.BgpConfigurations) == 0 || output[0].ConnectPeerConfiguration.BgpConfigurations[0] == nil {
return nil, tfresource.NewEmptyResultError(input)
}

if count := len(output); count > 1 {
return nil, tfresource.NewTooManyResultsError(count, input)
}

return output[0], nil
}

func FindTransitGatewayConnectPeers(conn *ec2.EC2, input *ec2.DescribeTransitGatewayConnectPeersInput) ([]*ec2.TransitGatewayConnectPeer, error) {
var output []*ec2.TransitGatewayConnectPeer

err := conn.DescribeTransitGatewayConnectPeersPages(input, func(page *ec2.DescribeTransitGatewayConnectPeersOutput, lastPage bool) bool {
if page == nil {
return !lastPage
}

for _, v := range page.TransitGatewayConnectPeers {
if v != nil {
output = append(output, v)
}
}

return !lastPage
})

if tfawserr.ErrCodeEquals(err, ErrCodeInvalidTransitGatewayConnectPeerIDNotFound) {
return nil, &resource.NotFoundError{
LastError: err,
LastRequest: input,
}
}

if err != nil {
return nil, err
}

return output, nil
}

func FindTransitGatewayConnectPeerByID(conn *ec2.EC2, id string) (*ec2.TransitGatewayConnectPeer, error) {
input := &ec2.DescribeTransitGatewayConnectPeersInput{
TransitGatewayConnectPeerIds: aws.StringSlice([]string{id}),
}

output, err := FindTransitGatewayConnectPeer(conn, input)

if err != nil {
return nil, err
}

if state := aws.StringValue(output.State); state == ec2.TransitGatewayConnectPeerStateDeleted {
return nil, &resource.NotFoundError{
Message: state,
LastRequest: input,
}
}

// Eventual consistency check.
if aws.StringValue(output.TransitGatewayConnectPeerId) != id {
return nil, &resource.NotFoundError{
LastRequest: input,
}
}

return output, nil
}

func FindTransitGatewayMulticastDomain(conn *ec2.EC2, input *ec2.DescribeTransitGatewayMulticastDomainsInput) (*ec2.TransitGatewayMulticastDomain, error) {
output, err := FindTransitGatewayMulticastDomains(conn, input)

Expand Down Expand Up @@ -2732,7 +2887,7 @@ func FindTransitGatewayVPCAttachment(conn *ec2.EC2, input *ec2.DescribeTransitGa
return nil, err
}

if len(output) == 0 || output[0] == nil {
if len(output) == 0 || output[0] == nil || output[0].Options == nil {
return nil, tfresource.NewEmptyResultError(input)
}

Expand Down
32 changes: 32 additions & 0 deletions internal/service/ec2/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,38 @@ func StatusTransitGatewayState(conn *ec2.EC2, id string) resource.StateRefreshFu
}
}

func StatusTransitGatewayConnectState(conn *ec2.EC2, id string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
output, err := FindTransitGatewayConnectByID(conn, id)

if tfresource.NotFound(err) {
return nil, "", nil
}

if err != nil {
return nil, "", err
}

return output, aws.StringValue(output.State), nil
}
}

func StatusTransitGatewayConnectPeerState(conn *ec2.EC2, id string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
output, err := FindTransitGatewayConnectPeerByID(conn, id)

if tfresource.NotFound(err) {
return nil, "", nil
}

if err != nil {
return nil, "", err
}

return output, aws.StringValue(output.State), nil
}
}

func StatusTransitGatewayMulticastDomainState(conn *ec2.EC2, id string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
output, err := FindTransitGatewayMulticastDomainByID(conn, id)
Expand Down
Loading