Skip to content

New resource: aws_globalaccelerator_custom_routing_accelerator #28922

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

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
018c2a1
[WIP] feat(globalaccelerator): starting to create resources for custo…
YvanGuidoin Dec 10, 2021
c54d969
Basic testing
YvanGuidoin Dec 13, 2021
c13828c
Add datasource testing
YvanGuidoin Feb 4, 2022
b96a250
Add more tests
YvanGuidoin Feb 7, 2022
459d7c2
chore: refactor to latest SDK style
jlsalmon Jan 16, 2023
97f2418
Merge branch 'main' into HEAD
ewbankkit Mar 28, 2023
d4311ae
r/aws_globalaccelerator_accelerator: Move some functions around.
ewbankkit Mar 28, 2023
e8c8218
r/aws_globalaccelerator_listener: Move some functions around.
ewbankkit Mar 28, 2023
6eca2fd
r/aws_globalaccelerator_endpoint_group: Move some functions around.
ewbankkit Mar 28, 2023
4264233
r/aws_globalaccelerator_custom_routing_accelerator: Move some functio…
ewbankkit Mar 28, 2023
b814432
r/aws_globalaccelerator_custom_routing_endpoint_group: Move some func…
ewbankkit Mar 28, 2023
824a24b
r/aws_globalaccelerator_custom_routing_listener: Move some functions …
ewbankkit Mar 28, 2023
ffc9c35
r/aws_globalaccelerator_custom_routing_accelerator: Alphabetize attri…
ewbankkit Mar 28, 2023
f84b0e9
d/aws_globalaccelerator_custom_routing_accelerator: Alphabetize attri…
ewbankkit Mar 28, 2023
18605e4
r/aws_globalaccelerator_custom_routing_accelerator: Context.
ewbankkit Mar 28, 2023
3af849c
r/aws_globalaccelerator_custom_routing_listener: Context.
ewbankkit Mar 28, 2023
97dee7e
r/aws_globalaccelerator_custom_routing_endpoint_group: Alphabetize at…
ewbankkit Mar 28, 2023
b18e5c9
r/aws_globalaccelerator_custom_routing_endpoint_group: Context.
ewbankkit Mar 28, 2023
224a191
Add 'AWSClient.GlobalAcceleratorHostedZoneID()'.
ewbankkit Mar 29, 2023
f8238f2
r/aws_globalaccelerator_custom_routing_accelerator: Add 'ip_addresses…
ewbankkit Mar 29, 2023
e401a11
aws_globalaccelerator_accelerator: Add 'dual_stack_dns_name' attribute.
ewbankkit Mar 29, 2023
99c8ede
d/aws_globalaccelerator_custom_routing_accelerator: Add CHANGELOG entry.
ewbankkit Mar 29, 2023
466cfd3
Fix compilation error.
ewbankkit Mar 29, 2023
f7b886f
Fix 'AccessControlListNotSupported: The bucket does not allow ACLs' e…
ewbankkit Mar 29, 2023
787e72f
r/aws_globalaccelerator_custom_routing_accelerator: Additional accept…
ewbankkit Mar 29, 2023
45d0ad4
Add 'testAccCheckCustomRoutingEndpointGroupDestroy'.
ewbankkit Mar 29, 2023
7c8f165
Add 'testAccCheckCustomRoutingListenerExists' and 'testAccCheckCustom…
ewbankkit Mar 29, 2023
7ed48f2
r/aws_globalaccelerator_custom_routing_listener: Tidy up acceptance t…
ewbankkit Mar 29, 2023
12e9379
r/aws_globalaccelerator_custom_routing_accelerator: Add documentation.
ewbankkit Mar 29, 2023
d5313f9
d/aws_globalaccelerator_custom_routing_accelerator: Add documentation.
ewbankkit Mar 29, 2023
8da69c5
r/aws_globalaccelerator_custom_routing_listener: Add documentation.
ewbankkit Mar 29, 2023
eef3b42
r/aws_globalaccelerator_custom_routing_endpoint_group: Add documentat…
ewbankkit Mar 29, 2023
48aa92b
r/aws_globalaccelerator_custom_routing_endpoint_group: Tidy up accept…
ewbankkit Mar 29, 2023
b80414a
r/aws_globalaccelerator_custom_routing_endpoint_group: Add 'TestAccGl…
ewbankkit Mar 29, 2023
2e9259c
Fix terrafmt error.
ewbankkit Mar 29, 2023
ff5ae45
Fix golangci-lint 'contextcheck'.
ewbankkit Mar 29, 2023
5ad799b
Fix semgrep 'dgryski.semgrep-go.errnilcheck.err-nil-check'.
ewbankkit Mar 29, 2023
de4d2c8
Fix semgrep 'ci.semgrep.migrate.aws-api-context'.
ewbankkit Mar 29, 2023
dcaf607
Fix golangci-lint 'whitespace'.
ewbankkit Mar 29, 2023
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
23 changes: 23 additions & 0 deletions .changelog/28922.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
```release-note:new-resource
aws_globalaccelerator_custom_routing_accelerator
```

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

```release-note:new-resource
aws_globalaccelerator_custom_routing_listener
```

```release-note:new-resource
aws_globalaccelerator_custom_routing_endpoint_group
```

```release-note:enhancement
resource/aws_globalaccelerator_accelerator: Add `dual_stack_dns_name` attribute
```

```release-note:enhancement
data-source/aws_globalaccelerator_accelerator: Add `dual_stack_dns_name` attribute
```
8 changes: 7 additions & 1 deletion internal/conns/awsclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func (client *AWSClient) HTTPClient() *http.Client {
return client.httpClient
}

// CloudFrontDistributionHostedZoneIDForPartition returns for the Route 53 hosted zone ID
// CloudFrontDistributionHostedZoneID returns the Route 53 hosted zone ID
// for Amazon CloudFront distributions in the configured AWS partition.
func (client *AWSClient) CloudFrontDistributionHostedZoneID() string {
if client.Partition == endpoints.AwsCnPartitionID {
Expand Down Expand Up @@ -68,3 +68,9 @@ func (client *AWSClient) DefaultKMSKeyPolicy() string {
}
`, client.Partition, client.AccountID)
}

// GlobalAcceleratorHostedZoneID returns the Route 53 hosted zone ID
// for AWS Global Accelerator accelerators in the configured AWS partition.
func (client *AWSClient) GlobalAcceleratorHostedZoneID() string {
return "Z2BJ6XQ5FK7U4H" // See https://docs.aws.amazon.com/general/latest/gr/global_accelerator.html#global_accelerator_region
}
103 changes: 97 additions & 6 deletions internal/service/globalaccelerator/accelerator.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,6 @@ import (
"github.com/hashicorp/terraform-provider-aws/internal/verify"
)

// Global Route53 Zone ID for Global Accelerators, exported as a
// convenience attribute for Route53 aliases (see
// https://docs.aws.amazon.com/Route53/latest/APIReference/API_AliasTarget.html).
const route53ZoneID = "Z2BJ6XQ5FK7U4H"

// @SDKResource("aws_globalaccelerator_accelerator")
func ResourceAccelerator() *schema.Resource {
return &schema.Resource{
Expand Down Expand Up @@ -72,6 +67,10 @@ func ResourceAccelerator() *schema.Resource {
Type: schema.TypeString,
Computed: true,
},
"dual_stack_dns_name": {
Type: schema.TypeString,
Computed: true,
},
"enabled": {
Type: schema.TypeBool,
Optional: true,
Expand Down Expand Up @@ -197,8 +196,9 @@ func resourceAcceleratorRead(ctx context.Context, d *schema.ResourceData, meta i
}

d.Set("dns_name", accelerator.DnsName)
d.Set("dual_stack_dns_name", accelerator.DualStackDnsName)
d.Set("enabled", accelerator.Enabled)
d.Set("hosted_zone_id", route53ZoneID)
d.Set("hosted_zone_id", meta.(*conns.AWSClient).GlobalAcceleratorHostedZoneID())
d.Set("ip_address_type", accelerator.IpAddressType)
if err := d.Set("ip_sets", flattenIPSets(accelerator.IpSets)); err != nil {
return diag.Errorf("setting ip_sets: %s", err)
Expand Down Expand Up @@ -346,6 +346,97 @@ func resourceAcceleratorDelete(ctx context.Context, d *schema.ResourceData, meta
return nil
}

func FindAcceleratorByARN(ctx context.Context, conn *globalaccelerator.GlobalAccelerator, arn string) (*globalaccelerator.Accelerator, error) {
input := &globalaccelerator.DescribeAcceleratorInput{
AcceleratorArn: aws.String(arn),
}

return findAccelerator(ctx, conn, input)
}

func findAccelerator(ctx context.Context, conn *globalaccelerator.GlobalAccelerator, input *globalaccelerator.DescribeAcceleratorInput) (*globalaccelerator.Accelerator, error) {
output, err := conn.DescribeAcceleratorWithContext(ctx, input)

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

if err != nil {
return nil, err
}

if output == nil || output.Accelerator == nil {
return nil, tfresource.NewEmptyResultError(input)
}

return output.Accelerator, nil
}

func FindAcceleratorAttributesByARN(ctx context.Context, conn *globalaccelerator.GlobalAccelerator, arn string) (*globalaccelerator.AcceleratorAttributes, error) {
input := &globalaccelerator.DescribeAcceleratorAttributesInput{
AcceleratorArn: aws.String(arn),
}

return findAcceleratorAttributes(ctx, conn, input)
}

func findAcceleratorAttributes(ctx context.Context, conn *globalaccelerator.GlobalAccelerator, input *globalaccelerator.DescribeAcceleratorAttributesInput) (*globalaccelerator.AcceleratorAttributes, error) {
output, err := conn.DescribeAcceleratorAttributesWithContext(ctx, input)

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

if err != nil {
return nil, err
}

if output == nil || output.AcceleratorAttributes == nil {
return nil, tfresource.NewEmptyResultError(input)
}

return output.AcceleratorAttributes, nil
}

func statusAccelerator(ctx context.Context, conn *globalaccelerator.GlobalAccelerator, arn string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
accelerator, err := FindAcceleratorByARN(ctx, conn, arn)

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

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

return accelerator, aws.StringValue(accelerator.Status), nil
}
}

func waitAcceleratorDeployed(ctx context.Context, conn *globalaccelerator.GlobalAccelerator, arn string, timeout time.Duration) (*globalaccelerator.Accelerator, error) { //nolint:unparam
stateConf := &resource.StateChangeConf{
Pending: []string{globalaccelerator.AcceleratorStatusInProgress},
Target: []string{globalaccelerator.AcceleratorStatusDeployed},
Refresh: statusAccelerator(ctx, conn, arn),
Timeout: timeout,
}

outputRaw, err := stateConf.WaitForStateContext(ctx)

if output, ok := outputRaw.(*globalaccelerator.Accelerator); ok {
return output, err
}

return nil, err
}

func expandUpdateAcceleratorAttributesInput(tfMap map[string]interface{}) *globalaccelerator.UpdateAcceleratorAttributesInput {
if tfMap == nil {
return nil
Expand Down
27 changes: 16 additions & 11 deletions internal/service/globalaccelerator/accelerator_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ func (d *dataSourceAccelerator) Schema(ctx context.Context, req datasource.Schem
"dns_name": schema.StringAttribute{
Computed: true,
},
"dual_stack_dns_name": schema.StringAttribute{
Computed: true,
},
"enabled": schema.BoolAttribute{
Computed: true,
},
Expand Down Expand Up @@ -150,8 +153,9 @@ func (d *dataSourceAccelerator) Read(ctx context.Context, request datasource.Rea
data.ARN = fwtypes.ARNValue(v)
}
data.DnsName = flex.StringToFrameworkLegacy(ctx, accelerator.DnsName)
data.DualStackDNSName = flex.StringToFrameworkLegacy(ctx, accelerator.DualStackDnsName)
data.Enabled = flex.BoolToFrameworkLegacy(ctx, accelerator.Enabled)
data.HostedZoneID = types.StringValue(route53ZoneID)
data.HostedZoneID = types.StringValue(d.Meta().GlobalAcceleratorHostedZoneID())
data.ID = types.StringValue(acceleratorARN)
data.IpAddressType = flex.StringToFrameworkLegacy(ctx, accelerator.IpAddressType)
data.IpSets = d.flattenIPSetsFramework(ctx, accelerator.IpSets)
Expand Down Expand Up @@ -240,14 +244,15 @@ func (d *dataSourceAccelerator) flattenAcceleratorAttributesFramework(ctx contex
}

type dataSourceAcceleratorData struct {
ARN fwtypes.ARN `tfsdk:"arn"`
Attributes types.List `tfsdk:"attributes"`
DnsName types.String `tfsdk:"dns_name"`
Enabled types.Bool `tfsdk:"enabled"`
HostedZoneID types.String `tfsdk:"hosted_zone_id"`
ID types.String `tfsdk:"id"`
IpAddressType types.String `tfsdk:"ip_address_type"`
IpSets types.List `tfsdk:"ip_sets"`
Name types.String `tfsdk:"name"`
Tags types.Map `tfsdk:"tags"`
ARN fwtypes.ARN `tfsdk:"arn"`
Attributes types.List `tfsdk:"attributes"`
DnsName types.String `tfsdk:"dns_name"`
DualStackDNSName types.String `tfsdk:"dual_stack_dns_name"`
Enabled types.Bool `tfsdk:"enabled"`
HostedZoneID types.String `tfsdk:"hosted_zone_id"`
ID types.String `tfsdk:"id"`
IpAddressType types.String `tfsdk:"ip_address_type"`
IpSets types.List `tfsdk:"ip_sets"`
Name types.String `tfsdk:"name"`
Tags types.Map `tfsdk:"tags"`
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ func TestAccGlobalAcceleratorAcceleratorDataSource_basic(t *testing.T) {
resource.TestCheckResourceAttrPair(dataSource1Name, "attributes.0.flow_logs_s3_bucket", resourceName, "attributes.0.flow_logs_s3_bucket"),
resource.TestCheckResourceAttrPair(dataSource1Name, "attributes.0.flow_logs_s3_prefix", resourceName, "attributes.0.flow_logs_s3_prefix"),
resource.TestCheckResourceAttrPair(dataSource1Name, "dns_name", resourceName, "dns_name"),
resource.TestCheckResourceAttrPair(dataSource1Name, "dual_stack_dns_name", resourceName, "dual_stack_dns_name"),
resource.TestCheckResourceAttrPair(dataSource1Name, "enabled", resourceName, "enabled"),
resource.TestCheckResourceAttrPair(dataSource1Name, "hosted_zone_id", resourceName, "hosted_zone_id"),
resource.TestCheckResourceAttrPair(dataSource1Name, "ip_address_type", resourceName, "ip_address_type"),
Expand All @@ -46,6 +47,7 @@ func TestAccGlobalAcceleratorAcceleratorDataSource_basic(t *testing.T) {
resource.TestCheckResourceAttrPair(dataSource2Name, "attributes.0.flow_logs_s3_bucket", resourceName, "attributes.0.flow_logs_s3_bucket"),
resource.TestCheckResourceAttrPair(dataSource2Name, "attributes.0.flow_logs_s3_prefix", resourceName, "attributes.0.flow_logs_s3_prefix"),
resource.TestCheckResourceAttrPair(dataSource2Name, "dns_name", resourceName, "dns_name"),
resource.TestCheckResourceAttrPair(dataSource2Name, "dual_stack_dns_name", resourceName, "dual_stack_dns_name"),
resource.TestCheckResourceAttrPair(dataSource2Name, "enabled", resourceName, "enabled"),
resource.TestCheckResourceAttrPair(dataSource2Name, "hosted_zone_id", resourceName, "hosted_zone_id"),
resource.TestCheckResourceAttrPair(dataSource2Name, "ip_address_type", resourceName, "ip_address_type"),
Expand Down
10 changes: 4 additions & 6 deletions internal/service/globalaccelerator/accelerator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,14 @@ func TestAccGlobalAcceleratorAccelerator_basic(t *testing.T) {
Steps: []resource.TestStep{
{
Config: testAccAcceleratorConfig_basic(rName),
Check: resource.ComposeTestCheckFunc(
Check: resource.ComposeAggregateTestCheckFunc(
testAccCheckAcceleratorExists(ctx, resourceName),
resource.TestCheckResourceAttr(resourceName, "attributes.#", "1"),
resource.TestCheckResourceAttr(resourceName, "attributes.0.flow_logs_enabled", "false"),
resource.TestCheckResourceAttr(resourceName, "attributes.0.flow_logs_s3_bucket", ""),
resource.TestCheckResourceAttr(resourceName, "attributes.0.flow_logs_s3_prefix", ""),
resource.TestMatchResourceAttr(resourceName, "dns_name", dnsNameRegex),
resource.TestCheckResourceAttr(resourceName, "dual_stack_dns_name", ""),
resource.TestCheckResourceAttr(resourceName, "enabled", "true"),
resource.TestCheckResourceAttr(resourceName, "hosted_zone_id", "Z2BJ6XQ5FK7U4H"),
resource.TestCheckResourceAttr(resourceName, "ip_address_type", "IPV4"),
Expand All @@ -65,6 +66,7 @@ func TestAccGlobalAcceleratorAccelerator_ipAddressType_dualStack(t *testing.T) {
ctx := acctest.Context(t)
resourceName := "aws_globalaccelerator_accelerator.test"
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
dualStackDNSNameRegex := regexp.MustCompile(`^a[a-f0-9]{16}\.dualstack\.awsglobalaccelerator\.com$`)

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(ctx, t); testAccPreCheck(ctx, t) },
Expand All @@ -76,6 +78,7 @@ func TestAccGlobalAcceleratorAccelerator_ipAddressType_dualStack(t *testing.T) {
Config: testAccAcceleratorConfig_ipAddressTypeDualStack(rName),
Check: resource.ComposeTestCheckFunc(
testAccCheckAcceleratorExists(ctx, resourceName),
resource.TestMatchResourceAttr(resourceName, "dual_stack_dns_name", dualStackDNSNameRegex),
resource.TestCheckResourceAttr(resourceName, "enabled", "true"),
resource.TestCheckResourceAttr(resourceName, "ip_address_type", "DUAL_STACK"),
resource.TestCheckResourceAttr(resourceName, "ip_sets.#", "2"),
Expand Down Expand Up @@ -473,11 +476,6 @@ resource "aws_s3_bucket" "test" {
force_destroy = true
}

resource "aws_s3_bucket_acl" "test" {
bucket = aws_s3_bucket.test.id
acl = "private"
}

resource "aws_globalaccelerator_accelerator" "test" {
name = %[1]q
ip_address_type = "IPV4"
Expand Down
Loading