diff --git a/.changelog/21363.txt b/.changelog/21363.txt new file mode 100644 index 00000000000..7339a4bc6e8 --- /dev/null +++ b/.changelog/21363.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_cloudwatch_metric_alarm: Fix imported 'treat_missing_data' diff +``` diff --git a/internal/service/cloudwatch/enum.go b/internal/service/cloudwatch/enum.go new file mode 100644 index 00000000000..f017be18f25 --- /dev/null +++ b/internal/service/cloudwatch/enum.go @@ -0,0 +1,29 @@ +package cloudwatch + +const ( + lowSampleCountPercentilesEvaluate = "evaluate" + lowSampleCountPercentilesmissingDataIgnore = "ignore" +) + +func lowSampleCountPercentiles_Values() []string { + return []string{ + lowSampleCountPercentilesEvaluate, + lowSampleCountPercentilesmissingDataIgnore, + } +} + +const ( + missingDataBreaching = "breaching" + missingDataIgnore = "ignore" + missingDataMissing = "missing" + missingDataNotBreaching = "notBreaching" +) + +func missingData_Values() []string { + return []string{ + missingDataBreaching, + missingDataIgnore, + missingDataMissing, + missingDataNotBreaching, + } +} diff --git a/internal/service/cloudwatch/metric_alarm.go b/internal/service/cloudwatch/metric_alarm.go index db31375f6d3..f3fdd443bee 100644 --- a/internal/service/cloudwatch/metric_alarm.go +++ b/internal/service/cloudwatch/metric_alarm.go @@ -240,14 +240,14 @@ func ResourceMetricAlarm() *schema.Resource { "treat_missing_data": { Type: schema.TypeString, Optional: true, - Default: "missing", - ValidateFunc: validation.StringInSlice([]string{"breaching", "notBreaching", "ignore", "missing"}, true), + Default: missingDataMissing, + ValidateFunc: validation.StringInSlice(missingData_Values(), true), }, "evaluate_low_sample_count_percentiles": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validation.StringInSlice([]string{"evaluate", "ignore"}, true), + ValidateFunc: validation.StringInSlice(lowSampleCountPercentiles_Values(), true), }, "tags": tftags.TagsSchema(), @@ -357,7 +357,11 @@ func resourceMetricAlarmRead(d *schema.ResourceData, meta interface{}) error { d.Set("threshold_metric_id", resp.ThresholdMetricId) d.Set("unit", resp.Unit) d.Set("extended_statistic", resp.ExtendedStatistic) - d.Set("treat_missing_data", resp.TreatMissingData) + if resp.TreatMissingData != nil { + d.Set("treat_missing_data", resp.TreatMissingData) + } else { + d.Set("treat_missing_data", missingDataMissing) + } d.Set("evaluate_low_sample_count_percentiles", resp.EvaluateLowSampleCountPercentile) tags, err := ListTags(conn, arn) diff --git a/internal/service/cloudwatch/metric_alarm_test.go b/internal/service/cloudwatch/metric_alarm_test.go old mode 100644 new mode 100755 index acbdf1afa2e..b5894668a4b --- a/internal/service/cloudwatch/metric_alarm_test.go +++ b/internal/service/cloudwatch/metric_alarm_test.go @@ -205,6 +205,18 @@ func TestAccCloudWatchMetricAlarm_treatMissingData(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "treat_missing_data", "breaching"), ), }, + { + Config: testAccMetricAlarmTreatMissingDataConfigNoAttr(rName), + Check: resource.ComposeTestCheckFunc( + testAccCheckCloudWatchMetricAlarmExists(resourceName, &alarm), + resource.TestCheckResourceAttr(resourceName, "treat_missing_data", "missing"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -537,6 +549,27 @@ resource "aws_cloudwatch_metric_alarm" "test" { `, rName) } +func testAccMetricAlarmTreatMissingDataConfigNoAttr(rName string) string { + return fmt.Sprintf(` +resource "aws_cloudwatch_metric_alarm" "test" { + alarm_name = "%s" + comparison_operator = "GreaterThanOrEqualToThreshold" + evaluation_periods = "2" + metric_name = "CPUUtilization" + namespace = "AWS/EC2" + period = "120" + statistic = "Average" + threshold = "80" + alarm_description = "This metric monitors ec2 cpu utilization" + insufficient_data_actions = [] + + dimensions = { + InstanceId = "i-abc123" + } +} +`, rName) +} + func testAccMetricAlarmTreatEvaluateLowSampleCountPercentilesConfig(rName string) string { return fmt.Sprintf(` resource "aws_cloudwatch_metric_alarm" "test" {