func resourceAwsCodeDeployDeploymentGroupUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).codedeployconn input := codedeploy.UpdateDeploymentGroupInput{ ApplicationName: aws.String(d.Get("app_name").(string)), CurrentDeploymentGroupName: aws.String(d.Get("deployment_group_name").(string)), } if d.HasChange("autoscaling_groups") { _, n := d.GetChange("autoscaling_groups") input.AutoScalingGroups = expandStringList(n.(*schema.Set).List()) } if d.HasChange("deployment_config_name") { _, n := d.GetChange("deployment_config_name") input.DeploymentConfigName = aws.String(n.(string)) } if d.HasChange("deployment_group_name") { _, n := d.GetChange("deployment_group_name") input.NewDeploymentGroupName = aws.String(n.(string)) } // TagFilters aren't like tags. They don't append. They simply replace. if d.HasChange("on_premises_instance_tag_filter") { _, n := d.GetChange("on_premises_instance_tag_filter") onPremFilters := buildOnPremTagFilters(n.(*schema.Set).List()) input.OnPremisesInstanceTagFilters = onPremFilters } if d.HasChange("ec2_tag_filter") { _, n := d.GetChange("ec2_tag_filter") ec2Filters := buildEC2TagFilters(n.(*schema.Set).List()) input.Ec2TagFilters = ec2Filters } if d.HasChange("trigger_configuration") { _, n := d.GetChange("trigger_configuration") triggerConfigs := buildTriggerConfigs(n.(*schema.Set).List()) input.TriggerConfigurations = triggerConfigs } log.Printf("[DEBUG] Updating CodeDeploy DeploymentGroup %s", d.Id()) _, err := conn.UpdateDeploymentGroup(&input) if err != nil { return err } return resourceAwsCodeDeployDeploymentGroupRead(d, meta) }
func resourceAwsCodeDeployDeploymentGroupUpdate(d *schema.ResourceData, meta interface{}) error { conn := meta.(*AWSClient).codedeployconn input := codedeploy.UpdateDeploymentGroupInput{ ApplicationName: aws.String(d.Get("app_name").(string)), CurrentDeploymentGroupName: aws.String(d.Get("deployment_group_name").(string)), } if d.HasChange("autoscaling_groups") { _, n := d.GetChange("autoscaling_groups") input.AutoScalingGroups = expandStringList(n.(*schema.Set).List()) } if d.HasChange("deployment_config_name") { _, n := d.GetChange("deployment_config_name") input.DeploymentConfigName = aws.String(n.(string)) } if d.HasChange("deployment_group_name") { _, n := d.GetChange("deployment_group_name") input.NewDeploymentGroupName = aws.String(n.(string)) } // TagFilters aren't like tags. They don't append. They simply replace. if d.HasChange("on_premises_instance_tag_filter") { _, n := d.GetChange("on_premises_instance_tag_filter") onPremFilters := buildOnPremTagFilters(n.(*schema.Set).List()) input.OnPremisesInstanceTagFilters = onPremFilters } if d.HasChange("ec2_tag_filter") { _, n := d.GetChange("ec2_tag_filter") ec2Filters := buildEC2TagFilters(n.(*schema.Set).List()) input.Ec2TagFilters = ec2Filters } if d.HasChange("trigger_configuration") { _, n := d.GetChange("trigger_configuration") triggerConfigs := buildTriggerConfigs(n.(*schema.Set).List()) input.TriggerConfigurations = triggerConfigs } log.Printf("[DEBUG] Updating CodeDeploy DeploymentGroup %s", d.Id()) // Retry to handle IAM role eventual consistency. err := resource.Retry(5*time.Minute, func() *resource.RetryError { _, err := conn.UpdateDeploymentGroup(&input) if err != nil { retry := false codedeployErr, ok := err.(awserr.Error) if !ok { return resource.NonRetryableError(err) } if codedeployErr.Code() == "InvalidRoleException" { retry = true } if codedeployErr.Code() == "InvalidTriggerConfigException" { r := regexp.MustCompile("^Topic ARN .+ is not valid$") if r.MatchString(codedeployErr.Message()) { retry = true } } if retry { log.Printf("[DEBUG] Retrying Code Deployment Group Update: %q", codedeployErr.Message()) return resource.RetryableError(err) } return resource.NonRetryableError(err) } return nil }) if err != nil { return err } return resourceAwsCodeDeployDeploymentGroupRead(d, meta) }