From d2163d9b41d2f7ac3eedc9bdd8570c3997a77581 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 6 Nov 2019 15:43:25 -0500 Subject: [PATCH] r/aws_ec2_fleet: Refactor tagging logic to keyvaluetags package. (#10761) Output from acceptance testing: ``` --- SKIP: TestAccAWSEc2Fleet_LaunchTemplateConfig_Override_MaxPrice (0.00s) --- PASS: TestAccAWSEc2Fleet_disappears (42.43s) --- PASS: TestAccAWSEc2Fleet_basic (42.61s) --- PASS: TestAccAWSEc2Fleet_TargetCapacitySpecification_DefaultTargetCapacityType (65.16s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_Override_Priority (68.59s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_LaunchTemplateSpecification_Version (68.95s) --- PASS: TestAccAWSEc2Fleet_SpotOptions_InstanceInterruptionBehavior (69.67s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_Override_WeightedCapacity (69.58s) --- PASS: TestAccAWSEc2Fleet_SpotOptions_InstancePoolsToUseCount (69.90s) --- PASS: TestAccAWSEc2Fleet_SpotOptions_AllocationStrategy (71.31s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_Override_AvailabilityZone (71.36s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_Override_Priority_Multiple (71.31s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_Override_InstanceType (71.44s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_Override_WeightedCapacity_Multiple (71.70s) --- PASS: TestAccAWSEc2Fleet_ReplaceUnhealthyInstances (71.92s) --- PASS: TestAccAWSEc2Fleet_OnDemandOptions_AllocationStrategy (72.08s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_LaunchTemplateSpecification_LaunchTemplateId (72.12s) --- PASS: TestAccAWSEc2Fleet_TargetCapacitySpecification_DefaultTargetCapacityType_OnDemand (30.06s) --- PASS: TestAccAWSEc2Fleet_TargetCapacitySpecification_DefaultTargetCapacityType_Spot (30.11s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_Override_SubnetId (72.82s) --- PASS: TestAccAWSEc2Fleet_LaunchTemplateConfig_LaunchTemplateSpecification_LaunchTemplateName (73.05s) --- PASS: TestAccAWSEc2Fleet_ExcessCapacityTerminationPolicy (95.00s) --- PASS: TestAccAWSEc2Fleet_Type (26.85s) --- PASS: TestAccAWSEc2Fleet_Tags (97.60s) --- PASS: TestAccAWSEc2Fleet_TerminateInstancesWithExpiration (48.92s) --- PASS: TestAccAWSEc2Fleet_TargetCapacitySpecification_TotalTargetCapacity (457.29s) ``` --- aws/resource_aws_ec2_fleet.go | 33 +++++++++++------------------- aws/resource_aws_ec2_fleet_test.go | 1 - 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/aws/resource_aws_ec2_fleet.go b/aws/resource_aws_ec2_fleet.go index 953444c76c01..5eaf702df93b 100644 --- a/aws/resource_aws_ec2_fleet.go +++ b/aws/resource_aws_ec2_fleet.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/helper/validation" + "github.com/terraform-providers/terraform-provider-aws/aws/internal/keyvaluetags" ) func resourceAwsEc2Fleet() *schema.Resource { @@ -192,12 +193,7 @@ func resourceAwsEc2Fleet() *schema.Resource { }, }, }, - "tags": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - }, + "tags": tagsSchema(), "target_capacity_specification": { Type: schema.TypeList, Required: true, @@ -312,7 +308,7 @@ func resourceAwsEc2FleetCreate(d *schema.ResourceData, meta interface{}) error { SpotOptions: expandEc2SpotOptionsRequest(d.Get("spot_options").([]interface{})), TargetCapacitySpecification: expandEc2TargetCapacitySpecificationRequest(d.Get("target_capacity_specification").([]interface{})), TerminateInstancesWithExpiration: aws.Bool(d.Get("terminate_instances_with_expiration").(bool)), - TagSpecifications: expandEc2TagSpecifications(d.Get("tags").(map[string]interface{})), + TagSpecifications: ec2TagSpecificationsFromMap(d.Get("tags").(map[string]interface{}), ec2.ResourceTypeFleet), Type: aws.String(d.Get("type").(string)), } @@ -435,7 +431,7 @@ func resourceAwsEc2FleetRead(d *schema.ResourceData, meta interface{}) error { d.Set("terminate_instances_with_expiration", fleet.TerminateInstancesWithExpiration) d.Set("type", fleet.Type) - if err := d.Set("tags", tagsToMap(fleet.Tags)); err != nil { + if err := d.Set("tags", keyvaluetags.Ec2KeyValueTags(fleet.Tags).IgnoreAws().Map()); err != nil { return fmt.Errorf("error setting tags: %s", err) } @@ -475,6 +471,14 @@ func resourceAwsEc2FleetUpdate(d *schema.ResourceData, meta interface{}) error { return fmt.Errorf("error waiting for EC2 Fleet (%s) modification: %s", d.Id(), err) } + if d.HasChange("tags") { + o, n := d.GetChange("tags") + + if err := keyvaluetags.Ec2UpdateTags(conn, d.Id(), o, n); err != nil { + return fmt.Errorf("error updating tags: %s", err) + } + } + return resourceAwsEc2FleetRead(d, meta) } @@ -693,19 +697,6 @@ func expandEc2SpotOptionsRequest(l []interface{}) *ec2.SpotOptionsRequest { return spotOptionsRequest } -func expandEc2TagSpecifications(m map[string]interface{}) []*ec2.TagSpecification { - if len(m) == 0 { - return nil - } - - return []*ec2.TagSpecification{ - { - ResourceType: aws.String("fleet"), - Tags: tagsFromMap(m), - }, - } -} - func expandEc2TargetCapacitySpecificationRequest(l []interface{}) *ec2.TargetCapacitySpecificationRequest { if len(l) == 0 || l[0] == nil { return nil diff --git a/aws/resource_aws_ec2_fleet_test.go b/aws/resource_aws_ec2_fleet_test.go index 3e7d797bbe81..b3a44fb3d5db 100644 --- a/aws/resource_aws_ec2_fleet_test.go +++ b/aws/resource_aws_ec2_fleet_test.go @@ -783,7 +783,6 @@ func TestAccAWSEc2Fleet_Tags(t *testing.T) { Config: testAccAWSEc2FleetConfig_Tags(rName, "key1", "value1updated"), Check: resource.ComposeTestCheckFunc( testAccCheckAWSEc2FleetExists(resourceName, &fleet2), - testAccCheckAWSEc2FleetRecreated(&fleet1, &fleet2), resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1updated"), ),