Skip to content

Commit

Permalink
Merge pull request #19307 from suzuki-shunsuke/feat/appconfig_environ…
Browse files Browse the repository at this point in the history
…ment-2

feat: add aws_appconfig_application and aws_appconfig_environment
  • Loading branch information
anGie44 committed Jul 12, 2021
2 parents 23ad09a + 05285f2 commit 24656c8
Show file tree
Hide file tree
Showing 16 changed files with 1,541 additions and 0 deletions.
7 changes: 7 additions & 0 deletions .changelog/19307.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:new-resource
aws_appconfig_application
```

```release-note:new-resource
aws_appconfig_environment
```
1 change: 1 addition & 0 deletions aws/internal/keyvaluetags/generators/listtags/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ var serviceNames = []string{
"acmpca",
"amplify",
"apigatewayv2",
"appconfig",
"appmesh",
"apprunner",
"appstream",
Expand Down
1 change: 1 addition & 0 deletions aws/internal/keyvaluetags/generators/servicetags/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ var mapServiceNames = []string{
"amplify",
"apigateway",
"apigatewayv2",
"appconfig",
"appstream",
"appsync",
"backup",
Expand Down
1 change: 1 addition & 0 deletions aws/internal/keyvaluetags/generators/updatetags/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ var serviceNames = []string{
"amplify",
"apigateway",
"apigatewayv2",
"appconfig",
"appmesh",
"apprunner",
"appstream",
Expand Down
18 changes: 18 additions & 0 deletions aws/internal/keyvaluetags/list_tags_gen.go

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

Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/aws/aws-sdk-go/service/amplify"
"github.com/aws/aws-sdk-go/service/apigateway"
"github.com/aws/aws-sdk-go/service/apigatewayv2"
"github.com/aws/aws-sdk-go/service/appconfig"
"github.com/aws/aws-sdk-go/service/appmesh"
"github.com/aws/aws-sdk-go/service/apprunner"
"github.com/aws/aws-sdk-go/service/appstream"
Expand Down Expand Up @@ -146,6 +147,8 @@ func ServiceClientType(serviceName string) string {
funcType = reflect.TypeOf(apigateway.New)
case "apigatewayv2":
funcType = reflect.TypeOf(apigatewayv2.New)
case "appconfig":
funcType = reflect.TypeOf(appconfig.New)
case "appmesh":
funcType = reflect.TypeOf(appmesh.New)
case "apprunner":
Expand Down
10 changes: 10 additions & 0 deletions aws/internal/keyvaluetags/service_tags_gen.go

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

37 changes: 37 additions & 0 deletions aws/internal/keyvaluetags/update_tags_gen.go

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

2 changes: 2 additions & 0 deletions aws/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,8 @@ func Provider() *schema.Provider {
"aws_appautoscaling_target": resourceAwsAppautoscalingTarget(),
"aws_appautoscaling_policy": resourceAwsAppautoscalingPolicy(),
"aws_appautoscaling_scheduled_action": resourceAwsAppautoscalingScheduledAction(),
"aws_appconfig_application": resourceAwsAppconfigApplication(),
"aws_appconfig_environment": resourceAwsAppconfigEnvironment(),
"aws_appmesh_gateway_route": resourceAwsAppmeshGatewayRoute(),
"aws_appmesh_mesh": resourceAwsAppmeshMesh(),
"aws_appmesh_route": resourceAwsAppmeshRoute(),
Expand Down
188 changes: 188 additions & 0 deletions aws/resource_aws_appconfig_application.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
package aws

import (
"fmt"
"log"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/arn"
"github.com/aws/aws-sdk-go/service/appconfig"
"github.com/hashicorp/aws-sdk-go-base/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/keyvaluetags"
)

func resourceAwsAppconfigApplication() *schema.Resource {
return &schema.Resource{
Create: resourceAwsAppconfigApplicationCreate,
Read: resourceAwsAppconfigApplicationRead,
Update: resourceAwsAppconfigApplicationUpdate,
Delete: resourceAwsAppconfigApplicationDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},

Schema: map[string]*schema.Schema{
"arn": {
Type: schema.TypeString,
Computed: true,
},
"description": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringLenBetween(0, 1024),
},
"name": {
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.StringLenBetween(1, 64),
},
"tags": tagsSchema(),
"tags_all": tagsSchemaComputed(),
},
CustomizeDiff: SetTagsDiff,
}
}

func resourceAwsAppconfigApplicationCreate(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).appconfigconn
defaultTagsConfig := meta.(*AWSClient).DefaultTagsConfig
tags := defaultTagsConfig.MergeTags(keyvaluetags.New(d.Get("tags").(map[string]interface{})))

applicationName := d.Get("name").(string)

input := &appconfig.CreateApplicationInput{
Name: aws.String(applicationName),
Tags: tags.IgnoreAws().AppconfigTags(),
}

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

app, err := conn.CreateApplication(input)

if err != nil {
return fmt.Errorf("error creating AppConfig Application (%s): %w", applicationName, err)
}

if app == nil {
return fmt.Errorf("error creating AppConfig Application (%s): empty response", applicationName)
}

d.SetId(aws.StringValue(app.Id))

return resourceAwsAppconfigApplicationRead(d, meta)
}

func resourceAwsAppconfigApplicationRead(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).appconfigconn
defaultTagsConfig := meta.(*AWSClient).DefaultTagsConfig
ignoreTagsConfig := meta.(*AWSClient).IgnoreTagsConfig

input := &appconfig.GetApplicationInput{
ApplicationId: aws.String(d.Id()),
}

output, err := conn.GetApplication(input)

if !d.IsNewResource() && tfawserr.ErrCodeEquals(err, appconfig.ErrCodeResourceNotFoundException) {
log.Printf("[WARN] Appconfig Application (%s) not found, removing from state", d.Id())
d.SetId("")
return nil
}

if err != nil {
return fmt.Errorf("error getting AppConfig Application (%s): %w", d.Id(), err)
}

if output == nil {
return fmt.Errorf("error getting AppConfig Application (%s): empty response", d.Id())
}

arn := arn.ARN{
AccountID: meta.(*AWSClient).accountid,
Partition: meta.(*AWSClient).partition,
Region: meta.(*AWSClient).region,
Resource: fmt.Sprintf("application/%s", aws.StringValue(output.Id)),
Service: "appconfig",
}.String()

d.Set("arn", arn)
d.Set("name", output.Name)
d.Set("description", output.Description)

tags, err := keyvaluetags.AppconfigListTags(conn, arn)

if err != nil {
return fmt.Errorf("error listing tags for AppConfig Application (%s): %w", d.Id(), err)
}

tags = tags.IgnoreAws().IgnoreConfig(ignoreTagsConfig)

//lintignore:AWSR002
if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil {
return fmt.Errorf("error setting tags: %w", err)
}

if err := d.Set("tags_all", tags.Map()); err != nil {
return fmt.Errorf("error setting tags_all: %w", err)
}

return nil
}

func resourceAwsAppconfigApplicationUpdate(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).appconfigconn

if d.HasChangesExcept("tags", "tags_all") {

updateInput := &appconfig.UpdateApplicationInput{
ApplicationId: aws.String(d.Id()),
}

if d.HasChange("description") {
updateInput.Description = aws.String(d.Get("description").(string))
}

if d.HasChange("name") {
updateInput.Name = aws.String(d.Get("name").(string))
}

_, err := conn.UpdateApplication(updateInput)

if err != nil {
return fmt.Errorf("error updating AppConfig Application(%s): %w", d.Id(), err)
}
}

if d.HasChange("tags_all") {
o, n := d.GetChange("tags_all")
if err := keyvaluetags.AppconfigUpdateTags(conn, d.Get("arn").(string), o, n); err != nil {
return fmt.Errorf("error updating AppConfig Application (%s) tags: %w", d.Get("arn").(string), err)
}
}

return resourceAwsAppconfigApplicationRead(d, meta)
}

func resourceAwsAppconfigApplicationDelete(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).appconfigconn

input := &appconfig.DeleteApplicationInput{
ApplicationId: aws.String(d.Id()),
}

_, err := conn.DeleteApplication(input)

if tfawserr.ErrCodeEquals(err, appconfig.ErrCodeResourceNotFoundException) {
return nil
}

if err != nil {
return fmt.Errorf("error deleting Appconfig Application (%s): %w", d.Id(), err)
}

return nil
}
Loading

0 comments on commit 24656c8

Please sign in to comment.