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

Data Source: EC2 Transit Gateway Route Table Associations #29642

3 changes: 3 additions & 0 deletions .changelog/29642.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:new-data-source
aws_ec2_transit_gateway_route_table_associations
```
4 changes: 4 additions & 0 deletions internal/service/ec2/service_package_gen.go

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

8 changes: 8 additions & 0 deletions internal/service/ec2/transitgateway_data_source_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,14 @@ func TestAccTransitGatewayDataSource_serial(t *testing.T) {
"Tags": testAccTransitGatewayRouteTablesDataSource_tags,
"Empty": testAccTransitGatewayRouteTablesDataSource_empty,
},
"RouteTableAssociations": {
"Filter": testAccTransitGatewayRouteTableAssociationsDataSource_filter,
"basic": testAccTransitGatewayRouteTableAssociationsDataSource_basic,
},
"RouteTablePropagations": {
"Filter": testAccTransitGatewayRouteTablePropagationsDataSource_filter,
"basic": testAccTransitGatewayRouteTablePropagationsDataSource_basic,
},
"VpcAttachment": {
"Filter": testAccTransitGatewayVPCAttachmentDataSource_Filter,
"ID": testAccTransitGatewayVPCAttachmentDataSource_ID,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package ec2

import (
"context"
"time"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"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/errs/sdkdiag"
)

// @SDKDataSource("aws_ec2_transit_gateway_route_table_associations")
func DataSourceTransitGatewayRouteTableAssociations() *schema.Resource {
return &schema.Resource{
ReadWithoutTimeout: dataSourceTransitGatewayRouteTableAssociationsRead,

Timeouts: &schema.ResourceTimeout{
Read: schema.DefaultTimeout(20 * time.Minute),
},

Schema: map[string]*schema.Schema{
"filter": DataSourceFiltersSchema(),
"ids": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
"transit_gateway_route_table_id": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.NoZeroValues,
},
},
}
}

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

input := &ec2.GetTransitGatewayRouteTableAssociationsInput{}

if v, ok := d.GetOk("transit_gateway_route_table_id"); ok {
input.TransitGatewayRouteTableId = aws.String(v.(string))
}

input.Filters = append(input.Filters, BuildFiltersDataSource(
d.Get("filter").(*schema.Set),
)...)

if len(input.Filters) == 0 {
input.Filters = nil
}

output, err := FindTransitGatewayRouteTableAssociations(ctx, conn, input)

if err != nil {
return sdkdiag.AppendErrorf(diags, "reading EC2 Transit Gateway Route Table Associations: %s", err)
}

var routeTableAssociationIDs []string

for _, v := range output {
routeTableAssociationIDs = append(routeTableAssociationIDs, aws.StringValue(v.TransitGatewayAttachmentId))
}

d.SetId(meta.(*conns.AWSClient).Region)
d.Set("ids", routeTableAssociationIDs)

return diags
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package ec2_test

import (
"fmt"
"testing"

"github.com/aws/aws-sdk-go/service/ec2"
sdkacctest "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-provider-aws/internal/acctest"
)

func testAccTransitGatewayRouteTableAssociationsDataSource_basic(t *testing.T) {
ctx := acctest.Context(t)
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
dataSourceName := "data.aws_ec2_transit_gateway_route_table_associations.test"

resource.Test(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(ctx, t); testAccPreCheckTransitGateway(ctx, t) },
ErrorCheck: acctest.ErrorCheck(t, ec2.EndpointsID),
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
Steps: []resource.TestStep{
{
Config: testAccTransitGatewayRouteTableAssociationsDataSourceConfig_basic(rName),
Check: resource.ComposeTestCheckFunc(
acctest.CheckResourceAttrGreaterThanValue(dataSourceName, "ids.#", "0"),
),
},
},
})
}

func testAccTransitGatewayRouteTableAssociationsDataSource_filter(t *testing.T) {
ctx := acctest.Context(t)
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
dataSourceName := "data.aws_ec2_transit_gateway_route_table_associations.test"

resource.Test(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(ctx, t); testAccPreCheckTransitGateway(ctx, t) },
ErrorCheck: acctest.ErrorCheck(t, ec2.EndpointsID),
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
Steps: []resource.TestStep{
{
Config: testAccTransitGatewayRouteTableAssociationsDataSourceConfig_filter(rName),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(dataSourceName, "ids.#", "1"),
),
},
},
})
}

func testAccTransitGatewayRouteTableAssociationsDataSourceConfig_basic(rName string) string {
return acctest.ConfigCompose(acctest.ConfigVPCWithSubnets(rName, 1), fmt.Sprintf(`
resource "aws_ec2_transit_gateway" "test" {
tags = {
Name = %[1]q
}
}

resource "aws_ec2_transit_gateway_vpc_attachment" "test" {
subnet_ids = aws_subnet.test[*].id
transit_gateway_id = aws_ec2_transit_gateway.test.id
vpc_id = aws_vpc.test.id

transit_gateway_default_route_table_association = false

tags = {
Name = %[1]q
}
}

resource "aws_ec2_transit_gateway_route_table" "test" {
transit_gateway_id = aws_ec2_transit_gateway.test.id

tags = {
Name = %[1]q
}
}

resource "aws_ec2_transit_gateway_route_table_association" "test" {
transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.test.id
transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.test.id
}

data "aws_ec2_transit_gateway_route_table_associations" "test" {
transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.test.id

depends_on = [aws_ec2_transit_gateway_route_table_association.test]
}
`, rName))
}

func testAccTransitGatewayRouteTableAssociationsDataSourceConfig_filter(rName string) string {
return acctest.ConfigCompose(acctest.ConfigVPCWithSubnets(rName, 1), fmt.Sprintf(`
resource "aws_ec2_transit_gateway" "test" {
tags = {
Name = %[1]q
}
}

resource "aws_ec2_transit_gateway_vpc_attachment" "test" {
subnet_ids = aws_subnet.test[*].id
transit_gateway_id = aws_ec2_transit_gateway.test.id
vpc_id = aws_vpc.test.id

transit_gateway_default_route_table_association = false

tags = {
Name = %[1]q
}
}

resource "aws_ec2_transit_gateway_route_table" "test" {
transit_gateway_id = aws_ec2_transit_gateway.test.id

tags = {
Name = %[1]q
}
}

resource "aws_ec2_transit_gateway_route_table_association" "test" {
transit_gateway_attachment_id = aws_ec2_transit_gateway_vpc_attachment.test.id
transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.test.id
}

data "aws_ec2_transit_gateway_route_table_associations" "test" {
transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.test.id

filter {
name = "transit-gateway-attachment-id"
values = [aws_ec2_transit_gateway_vpc_attachment.test.id]
}

depends_on = [aws_ec2_transit_gateway_route_table_association.test]
}
`, rName))
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/hashicorp/terraform-provider-aws/internal/acctest"
)

func TestAccTransitGatewayRouteTablePropagationsDataSource_basic(t *testing.T) {
func testAccTransitGatewayRouteTablePropagationsDataSource_basic(t *testing.T) {
ctx := acctest.Context(t)
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
dataSourceName := "data.aws_ec2_transit_gateway_route_table_propagations.test"
Expand All @@ -30,7 +30,7 @@ func TestAccTransitGatewayRouteTablePropagationsDataSource_basic(t *testing.T) {
})
}

func TestAccTransitGatewayRouteTablePropagationsDataSource_filter(t *testing.T) {
func testAccTransitGatewayRouteTablePropagationsDataSource_filter(t *testing.T) {
ctx := acctest.Context(t)
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
dataSourceName := "data.aws_ec2_transit_gateway_route_table_propagations.test"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
subcategory: "Transit Gateway"
layout: "aws"
page_title: "AWS: aws_ec2_transitgateway_route_table_associations"
description: |-
Provides information for multiple EC2 Transit Gateway Route Table Associations
---

# Data Source: aws_ec2_transitgateway_route_table_associations

Provides information for multiple EC2 Transit Gateway Route Table Associations, such as their identifiers.

## Example Usage

### By Transit Gateway Identifier

```terraform
data "aws_ec2_transit_gateway_route_table_associations" "example" {
transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.example.id
}
```

## Argument Reference

The following arguments are required:

* `transit_gateway_route_table_id` - (Required) Identifier of EC2 Transit Gateway Route Table.

The following arguments are optional:

* `filter` - (Optional) Custom filter block as described below.

More complex filters can be expressed using one or more `filter` sub-blocks,
which take the following arguments:

* `name` - (Required) Name of the field to filter by, as defined by
[the underlying AWS API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetTransitGatewayRouteTableAssociations.html).

* `values` - (Required) Set of values that are accepted for the given field.
A Transit Gateway Route Table will be selected if any one of the given values matches.

## Attributes Reference

In addition to all arguments above, the following attributes are exported:

* `id` - AWS Region.
* `ids` - Set of Transit Gateway Route Table Association identifiers.