From bca603a11ac43ce23c65e8b49ae80146dfb68740 Mon Sep 17 00:00:00 2001 From: Ilia Lazebnik Date: Fri, 24 Apr 2020 17:11:13 +0300 Subject: [PATCH] resource/aws_placement_group: Support tag-on-create (#12963) Output from acceptance testing in AWS Commercial: ``` --- PASS: TestAccAWSPlacementGroup_disappears (6.54s) --- PASS: TestAccAWSPlacementGroup_basic (8.61s) --- PASS: TestAccAWSPlacementGroup_tags (18.91s) ``` Output from acceptance testing in AWS GovCloud (US): ``` --- PASS: TestAccAWSPlacementGroup_disappears (2.83s) --- PASS: TestAccAWSPlacementGroup_basic (3.44s) --- PASS: TestAccAWSPlacementGroup_tags (7.03s) ``` --- aws/resource_aws_placement_group.go | 29 ++++++------------------ aws/resource_aws_placement_group_test.go | 5 ++-- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/aws/resource_aws_placement_group.go b/aws/resource_aws_placement_group.go index cd09d12a4e2d..a5600d41f645 100644 --- a/aws/resource_aws_placement_group.go +++ b/aws/resource_aws_placement_group.go @@ -6,7 +6,6 @@ import ( "time" "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/service/ec2" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" @@ -54,8 +53,9 @@ func resourceAwsPlacementGroupCreate(d *schema.ResourceData, meta interface{}) e name := d.Get("name").(string) input := ec2.CreatePlacementGroupInput{ - GroupName: aws.String(name), - Strategy: aws.String(d.Get("strategy").(string)), + GroupName: aws.String(name), + Strategy: aws.String(d.Get("strategy").(string)), + TagSpecifications: ec2TagSpecificationsFromMap(d.Get("tags").(map[string]interface{}), ec2.ResourceTypePlacementGroup), } log.Printf("[DEBUG] Creating EC2 Placement group: %s", input) _, err := conn.CreatePlacementGroup(&input) @@ -100,20 +100,6 @@ func resourceAwsPlacementGroupCreate(d *schema.ResourceData, meta interface{}) e d.SetId(name) - if v := d.Get("tags").(map[string]interface{}); len(v) > 0 { - input := ec2.DescribePlacementGroupsInput{ - GroupNames: []*string{aws.String(d.Id())}, - } - out, err := conn.DescribePlacementGroups(&input) - if err != nil { - return err - } - pg := out.PlacementGroups[0] - if err := keyvaluetags.Ec2CreateTags(conn, aws.StringValue(pg.GroupId), v); err != nil { - return fmt.Errorf("error adding tags: %s", err) - } - } - return resourceAwsPlacementGroupRead(d, meta) } @@ -183,11 +169,10 @@ func resourceAwsPlacementGroupDelete(d *schema.ResourceData, meta interface{}) e }) if err != nil { - awsErr := err.(awserr.Error) - if awsErr.Code() == "InvalidPlacementGroup.Unknown" { - return out, "deleted", nil + if isAWSErr(err, "InvalidPlacementGroup.Unknown", "") { + return out, ec2.PlacementGroupStateDeleted, nil } - return out, "", awsErr + return out, "", err } if len(out.PlacementGroups) == 0 { @@ -195,7 +180,7 @@ func resourceAwsPlacementGroupDelete(d *schema.ResourceData, meta interface{}) e } pg := out.PlacementGroups[0] - if *pg.State == "available" { + if *pg.State == ec2.PlacementGroupStateAvailable { log.Printf("[DEBUG] Accepted status when deleting EC2 Placement group: %q %v", d.Id(), *pg.State) } diff --git a/aws/resource_aws_placement_group_test.go b/aws/resource_aws_placement_group_test.go index 2d4be811cb7b..7a1815bb0c15 100644 --- a/aws/resource_aws_placement_group_test.go +++ b/aws/resource_aws_placement_group_test.go @@ -4,12 +4,11 @@ import ( "fmt" "testing" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" "github.com/hashicorp/terraform-plugin-sdk/helper/acctest" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/terraform" - - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/ec2" ) func TestAccAWSPlacementGroup_basic(t *testing.T) {