// PutScalingPolicy seems to require all params to be resent, so create and update can share this common function func getAwsAutoscalingPutScalingPolicyInput(d *schema.ResourceData) autoscaling.PutScalingPolicyInput { var params = autoscaling.PutScalingPolicyInput{ AutoScalingGroupName: aws.String(d.Get("autoscaling_group_name").(string)), PolicyName: aws.String(d.Get("name").(string)), } if v, ok := d.GetOk("adjustment_type"); ok { params.AdjustmentType = aws.String(v.(string)) } if v, ok := d.GetOk("cooldown"); ok { params.Cooldown = aws.Int64(int64(v.(int))) } if v, ok := d.GetOk("scaling_adjustment"); ok { params.ScalingAdjustment = aws.Int64(int64(v.(int))) } if v, ok := d.GetOk("min_adjustment_step"); ok { params.MinAdjustmentStep = aws.Int64(int64(v.(int))) } return params }
// PutScalingPolicy can safely resend all parameters without destroying the // resource, so create and update can share this common function. It will error // if certain mutually exclusive values are set. func getAwsAutoscalingPutScalingPolicyInput(d *schema.ResourceData) (autoscaling.PutScalingPolicyInput, error) { var params = autoscaling.PutScalingPolicyInput{ AutoScalingGroupName: aws.String(d.Get("autoscaling_group_name").(string)), PolicyName: aws.String(d.Get("name").(string)), } if v, ok := d.GetOk("adjustment_type"); ok { params.AdjustmentType = aws.String(v.(string)) } if v, ok := d.GetOk("cooldown"); ok { params.Cooldown = aws.Int64(int64(v.(int))) } if v, ok := d.GetOk("estimated_instance_warmup"); ok { params.EstimatedInstanceWarmup = aws.Int64(int64(v.(int))) } if v, ok := d.GetOk("metric_aggregation_type"); ok { params.MetricAggregationType = aws.String(v.(string)) } if v, ok := d.GetOk("policy_type"); ok { params.PolicyType = aws.String(v.(string)) } if v, ok := d.GetOk("scaling_adjustment"); ok { params.ScalingAdjustment = aws.Int64(int64(v.(int))) } if v, ok := d.GetOk("step_adjustment"); ok { steps, err := expandStepAdjustments(v.(*schema.Set).List()) if err != nil { return params, fmt.Errorf("metric_interval_lower_bound and metric_interval_upper_bound must be strings!") } params.StepAdjustments = steps } if v, ok := d.GetOk("min_adjustment_magnitude"); ok { // params.MinAdjustmentMagnitude = aws.Int64(int64(d.Get("min_adjustment_magnitude").(int))) params.MinAdjustmentMagnitude = aws.Int64(int64(v.(int))) } else if v, ok := d.GetOk("min_adjustment_step"); ok { // params.MinAdjustmentStep = aws.Int64(int64(d.Get("min_adjustment_step").(int))) params.MinAdjustmentStep = aws.Int64(int64(v.(int))) } // Validate our final input to confirm it won't error when sent to AWS. // First, SimpleScaling policy types... if *params.PolicyType == "SimpleScaling" && params.StepAdjustments != nil { return params, fmt.Errorf("SimpleScaling policy types cannot use step_adjustments!") } if *params.PolicyType == "SimpleScaling" && params.MetricAggregationType != nil { return params, fmt.Errorf("SimpleScaling policy types cannot use metric_aggregation_type!") } if *params.PolicyType == "SimpleScaling" && params.EstimatedInstanceWarmup != nil { return params, fmt.Errorf("SimpleScaling policy types cannot use estimated_instance_warmup!") } // Second, StepScaling policy types... if *params.PolicyType == "StepScaling" && params.ScalingAdjustment != nil { return params, fmt.Errorf("StepScaling policy types cannot use scaling_adjustment!") } if *params.PolicyType == "StepScaling" && params.Cooldown != nil { return params, fmt.Errorf("StepScaling policy types cannot use cooldown!") } return params, nil }