Skip to content

Commit

Permalink
r/aws_amplify_backend_environment: First compiling version.
Browse files Browse the repository at this point in the history
  • Loading branch information
ewbankkit committed May 21, 2021
1 parent d7cc6d9 commit 0bc8527
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 129 deletions.
29 changes: 29 additions & 0 deletions aws/internal/service/amplify/finder/finder.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,32 @@ func AppByID(conn *amplify.Amplify, id string) (*amplify.App, error) {

return output.App, nil
}

func BackendEnvironmentByAppIDAndEnvironmentName(conn *amplify.Amplify, appID, environmentName string) (*amplify.BackendEnvironment, error) {
input := &amplify.GetBackendEnvironmentInput{
AppId: aws.String(appID),
EnvironmentName: aws.String(environmentName),
}

output, err := conn.GetBackendEnvironment(input)

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

if err != nil {
return nil, err
}

if output == nil || output.BackendEnvironment == nil {
return nil, &resource.NotFoundError{
Message: "Empty result",
LastRequest: input,
}
}

return output.BackendEnvironment, nil
}
25 changes: 25 additions & 0 deletions aws/internal/service/amplify/id.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package amplify

import (
"fmt"
"strings"
)

const backendEnvironmentResourceIDSeparator = "/"

func BackendEnvironmentCreateResourceID(appID, environmentName string) string {
parts := []string{appID, environmentName}
id := strings.Join(parts, backendEnvironmentResourceIDSeparator)

return id
}

func BackendEnvironmentParseResourceID(id string) (string, string, error) {
parts := strings.Split(id, backendEnvironmentResourceIDSeparator)

if len(parts) == 2 && parts[0] != "" && parts[1] != "" {
return parts[0], parts[1], nil
}

return "", "", fmt.Errorf("unexpected format for ID (%[1]s), expected APPID%[2]sENVIRONMENTNAME", id, backendEnvironmentResourceIDSeparator)
}
143 changes: 74 additions & 69 deletions aws/resource_aws_amplify_backend_environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ package aws
import (
"fmt"
"log"
"regexp"
"strings"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/amplify"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
"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"
tfamplify "github.com/terraform-providers/terraform-provider-aws/aws/internal/service/amplify"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/amplify/finder"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/tfresource"
)

func resourceAwsAmplifyBackendEnvironment() *schema.Resource {
Expand All @@ -23,122 +24,126 @@ func resourceAwsAmplifyBackendEnvironment() *schema.Resource {
},

Schema: map[string]*schema.Schema{
"arn": {
Type: schema.TypeString,
Computed: true,
},
"app_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"deployment_artifacts": {

"arn": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
ValidateFunc: validation.All(
validation.StringLenBetween(1, 100),
validation.StringMatch(regexp.MustCompile(`^[a-zA-Z0-9-]+$`), "should not contain special characters"),
),
},

"deployment_artifacts": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
ValidateFunc: validation.StringLenBetween(1, 1000),
},

"environment_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.All(
validation.StringLenBetween(2, 10),
validation.StringMatch(regexp.MustCompile(`^[a-z]+$`), "should only contain lowercase alphabets"),
),
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.StringLenBetween(1, 255),
},

"stack_name": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
ValidateFunc: validation.All(
validation.StringLenBetween(1, 100),
validation.StringMatch(regexp.MustCompile(`^[a-zA-Z0-9-]+$`), "should not contain special characters"),
),
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
ValidateFunc: validation.StringLenBetween(1, 255),
},
},
}
}

func resourceAwsAmplifyBackendEnvironmentCreate(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).amplifyconn
log.Print("[DEBUG] Creating Amplify BackendEnvironment")

params := &amplify.CreateBackendEnvironmentInput{
AppId: aws.String(d.Get("app_id").(string)),
EnvironmentName: aws.String(d.Get("environment_name").(string)),
appID := d.Get("app_id").(string)
environmentName := d.Get("environment_name").(string)
id := tfamplify.BackendEnvironmentCreateResourceID(appID, environmentName)

input := &amplify.CreateBackendEnvironmentInput{
AppId: aws.String(appID),
EnvironmentName: aws.String(environmentName),
}

if v, ok := d.GetOk("deployment_artifacts"); ok {
params.DeploymentArtifacts = aws.String(v.(string))
input.DeploymentArtifacts = aws.String(v.(string))
}

if v, ok := d.GetOk("stack_name"); ok {
params.StackName = aws.String(v.(string))
input.StackName = aws.String(v.(string))
}

resp, err := conn.CreateBackendEnvironment(params)
log.Printf("[DEBUG] Creating Amplify Backend Environment: %s", input)
_, err := conn.CreateBackendEnvironment(input)

if err != nil {
return fmt.Errorf("Error creating Amplify BackendEnvironment: %s", err)
return fmt.Errorf("error creating Amplify Backend Environment (%s): %w", id, err)
}

arn := *resp.BackendEnvironment.BackendEnvironmentArn
d.SetId(arn[strings.Index(arn, ":apps/")+len(":apps/"):])
d.SetId(id)

return resourceAwsAmplifyBackendEnvironmentRead(d, meta)
}

func resourceAwsAmplifyBackendEnvironmentRead(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).amplifyconn
log.Printf("[DEBUG] Reading Amplify BackendEnvironment: %s", d.Id())

s := strings.Split(d.Id(), "/")
app_id := s[0]
environment_name := s[2]
appID, environmentName, err := tfamplify.BackendEnvironmentParseResourceID(d.Id())

if err != nil {
return fmt.Errorf("error parsing Amplify Backend Environment ID: %w", err)
}

backendEnvironment, err := finder.BackendEnvironmentByAppIDAndEnvironmentName(conn, appID, environmentName)

if !d.IsNewResource() && tfresource.NotFound(err) {
log.Printf("[WARN] Amplify Backend Environment (%s) not found, removing from state", d.Id())
d.SetId("")
return nil
}

resp, err := conn.GetBackendEnvironment(&amplify.GetBackendEnvironmentInput{
AppId: aws.String(app_id),
EnvironmentName: aws.String(environment_name),
})
if err != nil {
if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == amplify.ErrCodeNotFoundException {
log.Printf("[WARN] Amplify BackendEnvironment (%s) not found, removing from state", d.Id())
d.SetId("")
return nil
}
return err
return fmt.Errorf("error reading Amplify Backend Environment (%s): %w", d.Id(), err)
}

d.Set("app_id", app_id)
d.Set("arn", resp.BackendEnvironment.BackendEnvironmentArn)
d.Set("deployment_artifacts", resp.BackendEnvironment.DeploymentArtifacts)
d.Set("environment_name", resp.BackendEnvironment.EnvironmentName)
d.Set("stack_name", resp.BackendEnvironment.StackName)
d.Set("app_id", appID)
d.Set("arn", backendEnvironment.BackendEnvironmentArn)
d.Set("deployment_artifacts", backendEnvironment.DeploymentArtifacts)
d.Set("environment_name", backendEnvironment.EnvironmentName)
d.Set("stack_name", backendEnvironment.StackName)

return nil
}

func resourceAwsAmplifyBackendEnvironmentDelete(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).amplifyconn
log.Printf("[DEBUG] Deleting Amplify BackendEnvironment: %s", d.Id())

s := strings.Split(d.Id(), "/")
app_id := s[0]
environment_name := s[2]
appID, environmentName, err := tfamplify.BackendEnvironmentParseResourceID(d.Id())

if err != nil {
return fmt.Errorf("error parsing Amplify Backend Environment ID: %w", err)
}

log.Printf("[DEBUG] Deleting Amplify Backend Environment: %s", d.Id())
_, err = conn.DeleteBackendEnvironment(&amplify.DeleteBackendEnvironmentInput{
AppId: aws.String(appID),
EnvironmentName: aws.String(environmentName),
})

params := &amplify.DeleteBackendEnvironmentInput{
AppId: aws.String(app_id),
EnvironmentName: aws.String(environment_name),
if tfawserr.ErrCodeEquals(err, amplify.ErrCodeNotFoundException) {
return nil
}

_, err := conn.DeleteBackendEnvironment(params)
if err != nil {
return fmt.Errorf("Error deleting Amplify BackendEnvironment: %s", err)
return fmt.Errorf("error deleting Amplify Backend Environment (%s): %w", d.Id(), err)
}

return nil
Expand Down
Loading

0 comments on commit 0bc8527

Please sign in to comment.