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

New resource for Route53 Traffic Policy and Traffic Policy Instance, datasource for Route53 Traffic Policy #23602

Merged
merged 42 commits into from
Mar 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
935a604
resource/aws_route53_traffic_policy: new resource
Jul 20, 2020
d43efaa
resource/aws_route53_traffic_policy: new resource
Jul 23, 2020
be4171f
Add read at the end of update func
Jul 27, 2020
c79230c
Add import testing
Jul 27, 2020
11a3018
Switch to terraform-plugin-sdk v2
Aug 21, 2020
a6293a2
resource/aws_route53_traffic_policy_instance: new resource
Jul 27, 2020
db95826
feat: added resource for route53 traffic policy
coderGo93 Mar 9, 2022
274ff1c
docs: added resource for route53 traffic policy
coderGo93 Mar 9, 2022
617a177
refactor: refactorized in update traffice policy resource
coderGo93 Mar 9, 2022
70ac896
feat: added datasource for traffic policy
coderGo93 Mar 9, 2022
625732c
docs: added datasource for traffic policy
coderGo93 Mar 9, 2022
d5f4a84
feat: added resource for traffic policy instance
coderGo93 Mar 9, 2022
e56ab1e
docs: added resource for traffic policy instance
coderGo93 Mar 9, 2022
65282a4
fixes typo
coderGo93 Mar 10, 2022
437414a
added changelog
coderGo93 Mar 10, 2022
e5a6741
refactor: changed datasource to traffic policy document
coderGo93 Mar 10, 2022
5f3659c
Revert "resource/aws_route53_traffic_policy_instance: new resource"
ewbankkit Mar 21, 2022
25f54c2
Revert "Switch to terraform-plugin-sdk v2"
ewbankkit Mar 21, 2022
db9e305
Revert "Add import testing"
ewbankkit Mar 21, 2022
296d99a
Revert "Add read at the end of update func"
ewbankkit Mar 21, 2022
7126973
Revert "resource/aws_route53_traffic_policy: new resource"
ewbankkit Mar 21, 2022
cd22436
Revert "resource/aws_route53_traffic_policy: new resource"
ewbankkit Mar 21, 2022
77cfb6a
Merge commit '5f3659ce3969639c36ef120f9af77c4a65d96d20' into HEAD
ewbankkit Mar 21, 2022
5584175
Merge commit '77cfb6a3c4a466f7700302f181a592e4a8b068d6' into HEAD
ewbankkit Mar 21, 2022
79764cf
Data source in alphabetical order.
ewbankkit Mar 21, 2022
44f4c83
Generate list paginators.
ewbankkit Mar 21, 2022
741cadf
r/aws_route53_traffic_policy: Tidy up 'FindTrafficPolicyByID'.
ewbankkit Mar 21, 2022
f12239e
r/aws_route53_traffic_policy: Tidy up resource Create.
ewbankkit Mar 22, 2022
8a1d808
Add optional output file argument to lister generator.
ewbankkit Mar 22, 2022
f79eae8
Seperate list generator output files.
ewbankkit Mar 22, 2022
9e5ae52
r/aws_route53_traffic_policy: Tidy up resource Delete.
ewbankkit Mar 22, 2022
0597814
r/aws_route53_traffic_policy: Add Sweeper.
ewbankkit Mar 22, 2022
79d1213
Add 'Route53' to acceptance test function names.
ewbankkit Mar 22, 2022
8f25300
r/aws_route53_traffic_policy_instance: Remove 'state' attribute.
ewbankkit Mar 22, 2022
ed2d010
Add 'Route53' to acceptance test function names.
ewbankkit Mar 22, 2022
bb0bc4c
r/aws_route53_traffic_policy_instance: Tidy up 'FindTrafficPolicyInst…
ewbankkit Mar 22, 2022
c1ee0e6
r/aws_route53_traffic_policy_instance: Remove 'message' attribute.
ewbankkit Mar 22, 2022
3422839
r/aws_route53_traffic_policy_instance: Acceptance tests passing.
ewbankkit Mar 22, 2022
efeb888
r/aws_route53_traffic_policy_instance: Add Sweeper.
ewbankkit Mar 22, 2022
9e3bcf6
d/aws_route53_traffic_policy_document: Tweak acceptance test function…
ewbankkit Mar 22, 2022
5cf1edb
Fix golangci-lint error "'listTrafficPolicyInstancesPages' is unused …
ewbankkit Mar 22, 2022
4f3dd99
Route 53 Traffic Policies not available in AWS GovCloud.
ewbankkit Mar 22, 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
11 changes: 11 additions & 0 deletions .changelog/23602.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
```release-note:new-resource
aws_route53_traffic_policy
```

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

```release-note:new-resource
aws_route53_traffic_policy_instance
```
3 changes: 2 additions & 1 deletion internal/generate/listpages/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ For example, the EC2 API defines both [`DescribeInstancesPages`](https://docs.aw
The `listpages` executable is called as follows:

```console
$ go run main.go -ListOps <function-name>[,<function-name>]
$ go run main.go -ListOps <function-name>[,<function-name>] [<generated-lister-file>]
```

* `<function-name>`: Name of a function to wrap
* `<generated-lister-file>`: Name of the generated lister source file, defaults to `list_pages_gen.go`

Optional Flags:

Expand Down
9 changes: 7 additions & 2 deletions internal/generate/listpages/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
)

const (
filename = "list_pages_gen.go"
defaultFilename = "list_pages_gen.go"
)

var (
Expand All @@ -31,7 +31,7 @@ var (

func usage() {
fmt.Fprintf(os.Stderr, "Usage:\n")
fmt.Fprintf(os.Stderr, "\tmain.go [flags]\n\n")
fmt.Fprintf(os.Stderr, "\tmain.go [flags] [<generated-lister-file>]\n\n")
fmt.Fprintf(os.Stderr, "Flags:\n")
flag.PrintDefaults()
}
Expand All @@ -49,6 +49,11 @@ func main() {
flag.Usage = usage
flag.Parse()

filename := defaultFilename
if args := flag.Args(); len(args) > 0 {
filename = args[0]
}

wd, err := os.Getwd()

if err != nil {
Expand Down
7 changes: 5 additions & 2 deletions internal/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -754,8 +754,9 @@ func Provider() *schema.Provider {

"aws_resourcegroupstaggingapi_resources": resourcegroupstaggingapi.DataSourceResources(),

"aws_route53_delegation_set": route53.DataSourceDelegationSet(),
"aws_route53_zone": route53.DataSourceZone(),
"aws_route53_delegation_set": route53.DataSourceDelegationSet(),
"aws_route53_traffic_policy_document": route53.DataSourceTrafficPolicyDocument(),
"aws_route53_zone": route53.DataSourceZone(),

"aws_route53_resolver_endpoint": route53resolver.DataSourceEndpoint(),
"aws_route53_resolver_rule": route53resolver.DataSourceRule(),
Expand Down Expand Up @@ -1669,6 +1670,8 @@ func Provider() *schema.Provider {
"aws_route53_key_signing_key": route53.ResourceKeySigningKey(),
"aws_route53_query_log": route53.ResourceQueryLog(),
"aws_route53_record": route53.ResourceRecord(),
"aws_route53_traffic_policy": route53.ResourceTrafficPolicy(),
"aws_route53_traffic_policy_instance": route53.ResourceTrafficPolicyInstance(),
"aws_route53_vpc_association_authorization": route53.ResourceVPCAssociationAuthorization(),
"aws_route53_zone": route53.ResourceZone(),
"aws_route53_zone_association": route53.ResourceZoneAssociation(),
Expand Down
6 changes: 6 additions & 0 deletions internal/service/route53/enum.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,10 @@ const (
ServeSignatureInternalFailure = "INTERNAL_FAILURE"
ServeSignatureNotSigning = "NOT_SIGNING"
ServeSignatureSigning = "SIGNING"

TrafficPolicyInstanceStateApplied = "Applied"
TrafficPolicyInstanceStateCreating = "Creating"
TrafficPolicyInstanceStateDeleting = "Deleting"
TrafficPolicyInstanceStateFailed = "Failed"
TrafficPolicyInstanceStateUpdating = "Updating"
)
78 changes: 78 additions & 0 deletions internal/service/route53/find.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package route53

import (
"context"
"fmt"

"github.com/aws/aws-sdk-go/aws"
Expand Down Expand Up @@ -85,3 +86,80 @@ func FindKeySigningKeyByResourceID(conn *route53.Route53, resourceID string) (*r

return FindKeySigningKey(conn, hostedZoneID, name)
}

func FindTrafficPolicyByID(ctx context.Context, conn *route53.Route53, id string) (*route53.TrafficPolicy, error) {
var latestVersion int64

err := listTrafficPoliciesPagesWithContext(ctx, conn, &route53.ListTrafficPoliciesInput{}, func(page *route53.ListTrafficPoliciesOutput, lastPage bool) bool {
if page == nil {
return !lastPage
}

for _, v := range page.TrafficPolicySummaries {
if aws.StringValue(v.Id) == id {
latestVersion = aws.Int64Value(v.LatestVersion)

return false
}
}

return !lastPage
})

if err != nil {
return nil, err
}

if latestVersion == 0 {
return nil, tfresource.NewEmptyResultError(id)
}

input := &route53.GetTrafficPolicyInput{
Id: aws.String(id),
Version: aws.Int64(latestVersion),
}

output, err := conn.GetTrafficPolicyWithContext(ctx, input)

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

if err != nil {
return nil, err
}

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

return output.TrafficPolicy, nil
}

func FindTrafficPolicyInstanceByID(ctx context.Context, conn *route53.Route53, id string) (*route53.TrafficPolicyInstance, error) {
input := &route53.GetTrafficPolicyInstanceInput{
Id: aws.String(id),
}

output, err := conn.GetTrafficPolicyInstanceWithContext(ctx, input)

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

if err != nil {
return nil, err
}

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

return output.TrafficPolicyInstance, nil
}
2 changes: 2 additions & 0 deletions internal/service/route53/generate.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:generate go run ../../generate/listpages/main.go -ListOps=ListTrafficPolicies -Paginator=TrafficPolicyIdMarker list_traffic_policies_pages_gen.go
//go:generate go run ../../generate/listpages/main.go -ListOps=ListTrafficPolicyVersions -Paginator=TrafficPolicyVersionMarker list_traffic_policy_versions_pages_gen.go
//go:generate go run ../../generate/tags/main.go -ListTags -ListTagsInIDElem=ResourceId -ListTagsOutTagsElem=ResourceTagSet.Tags -ServiceTagsSlice -TagOp=ChangeTagsForResource -TagInIDElem=ResourceId -TagInTagsElem=AddTags -TagResTypeElem=ResourceType -UntagOp=ChangeTagsForResource -UntagInTagsElem=RemoveTagKeys -UpdateTags
// ONLY generate directives and package declaration! Do not add anything else to this file.

Expand Down
36 changes: 36 additions & 0 deletions internal/service/route53/list_pages.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//go:build !generate
// +build !generate

package route53

import (
"context"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/route53"
)

// Custom Route 53 service lister functions using the same format as generated code.

func listTrafficPolicyInstancesPages(conn *route53.Route53, input *route53.ListTrafficPolicyInstancesInput, fn func(*route53.ListTrafficPolicyInstancesOutput, bool) bool) error { //nolint:deadcode // This function is called from a sweeper.
return listTrafficPolicyInstancesPagesWithContext(context.Background(), conn, input, fn)
}

func listTrafficPolicyInstancesPagesWithContext(ctx context.Context, conn *route53.Route53, input *route53.ListTrafficPolicyInstancesInput, fn func(*route53.ListTrafficPolicyInstancesOutput, bool) bool) error {
for {
output, err := conn.ListTrafficPolicyInstancesWithContext(ctx, input)
if err != nil {
return err
}

lastPage := !aws.BoolValue(output.IsTruncated)
if !fn(output, lastPage) || lastPage {
break
}

input.HostedZoneIdMarker = output.HostedZoneIdMarker
input.TrafficPolicyInstanceNameMarker = output.TrafficPolicyInstanceNameMarker
input.TrafficPolicyInstanceTypeMarker = output.TrafficPolicyInstanceTypeMarker
}
return nil
}
31 changes: 31 additions & 0 deletions internal/service/route53/list_traffic_policies_pages_gen.go

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

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

19 changes: 19 additions & 0 deletions internal/service/route53/status.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package route53

import (
"context"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/route53"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
)

func statusChangeInfo(conn *route53.Route53, changeID string) resource.StateRefreshFunc {
Expand Down Expand Up @@ -57,3 +60,19 @@ func statusKeySigningKey(conn *route53.Route53, hostedZoneID string, name string
return keySigningKey, aws.StringValue(keySigningKey.Status), nil
}
}

func statusTrafficPolicyInstanceState(ctx context.Context, conn *route53.Route53, id string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
output, err := FindTrafficPolicyInstanceByID(ctx, conn, id)

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

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

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