From afee0051d706cd5f361e0f3c361db81dfc3f1eb8 Mon Sep 17 00:00:00 2001 From: Maxime Bury Date: Thu, 18 Feb 2016 16:27:38 -0800 Subject: [PATCH] Sort subnets to avoid spurious diffs --- ...ource_aws_elastic_beanstalk_environment.go | 60 ++++++++----------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/builtin/providers/aws/resource_aws_elastic_beanstalk_environment.go b/builtin/providers/aws/resource_aws_elastic_beanstalk_environment.go index a22b9fa841f6..8cffcb84ddb8 100644 --- a/builtin/providers/aws/resource_aws_elastic_beanstalk_environment.go +++ b/builtin/providers/aws/resource_aws_elastic_beanstalk_environment.go @@ -322,7 +322,14 @@ func fetchAwsElasticBeanstalkEnvironmentSettings(d *schema.ResourceData, meta in } if optionSetting.Value != nil { - m["value"] = *optionSetting.Value + switch *optionSetting.OptionName { + case "SecurityGroups": + m["value"] = dropGeneratedSecurityGroup(*optionSetting.Value, meta) + case "Subnets", "ELBSubnets": + m["value"] = sortValues(*optionSetting.Value) + default: + m["value"] = *optionSetting.Value + } } settings.Add(m) @@ -339,8 +346,6 @@ func resourceAwsElasticBeanstalkEnvironmentSettingsRead(d *schema.ResourceData, return err } - dropGeneratedSecurityGroup(allSettings, meta) - settings := d.Get("setting").(*schema.Set) log.Printf("[DEBUG] Elastic Beanstalk allSettings: %s", allSettings.GoString()) @@ -483,44 +488,29 @@ func extractOptionSettings(s *schema.Set) []*elasticbeanstalk.ConfigurationOptio return settings } -func dropGeneratedSecurityGroup(settings *schema.Set, meta interface{}) { +func dropGeneratedSecurityGroup(settingValue string, meta interface{}) string { conn := meta.(*AWSClient).ec2conn - for _, s := range settings.List() { - setting := s.(map[string]interface{}) - - if setting["name"].(string) != "SecurityGroups" { - continue - } - - log.Printf("[DEBUG] Elastic Beanstalk setting: %v", setting) - settingValue, isString := setting["value"].(string) - if !isString { - continue - } - - groups := strings.Split(settingValue, ",") + groups := strings.Split(settingValue, ",") - resp, err := conn.DescribeSecurityGroups(&ec2.DescribeSecurityGroupsInput{ - GroupIds: aws.StringSlice(groups), - }) + resp, err := conn.DescribeSecurityGroups(&ec2.DescribeSecurityGroupsInput{ + GroupIds: aws.StringSlice(groups), + }) - if err != nil { - log.Printf("[DEBUG] Elastic Beanstalk error describing SecurityGroups: %v", err) - continue - } + if err != nil { + log.Printf("[DEBUG] Elastic Beanstalk error describing SecurityGroups: %v", err) + return settingValue + } - var legitGroups []string - for _, group := range resp.SecurityGroups { - log.Printf("[DEBUG] Elastic Beanstalk SecurityGroup: %v", *group.GroupName) - if !strings.HasPrefix(*group.GroupName, "awseb") { - legitGroups = append(legitGroups, *group.GroupId) - } + var legitGroups []string + for _, group := range resp.SecurityGroups { + log.Printf("[DEBUG] Elastic Beanstalk SecurityGroup: %v", *group.GroupName) + if !strings.HasPrefix(*group.GroupName, "awseb") { + legitGroups = append(legitGroups, *group.GroupId) } + } - settings.Remove(s) + sort.Strings(legitGroups) - setting["value"] = strings.Join(legitGroups, ",") - settings.Add(setting) - } + return strings.Join(legitGroups, ",") }