Skip to content

Commit

Permalink
provider/aws: Fix reading dimensions on cloudwatch alarms
Browse files Browse the repository at this point in the history
They're structs that need to be unrolled and d.Set was silently failing
on them before. This enhances the basic test to cover the change.
  • Loading branch information
phinze committed Sep 23, 2016
1 parent bba511e commit 2449b45
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 11 deletions.
12 changes: 11 additions & 1 deletion builtin/providers/aws/resource_aws_cloudwatch_metric_alarm.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,9 @@ func resourceAwsCloudWatchMetricAlarmRead(d *schema.ResourceData, meta interface
d.Set("alarm_description", a.AlarmDescription)
d.Set("alarm_name", a.AlarmName)
d.Set("comparison_operator", a.ComparisonOperator)
d.Set("dimensions", a.Dimensions)
if err := d.Set("dimensions", flattenDimensions(a.Dimensions)); err != nil {
return err
}
d.Set("evaluation_periods", a.EvaluationPeriods)

if err := d.Set("insufficient_data_actions", _strArrPtrToList(a.InsufficientDataActions)); err != nil {
Expand Down Expand Up @@ -282,3 +284,11 @@ func _strArrPtrToList(strArrPtr []*string) []string {
}
return result
}

func flattenDimensions(dims []*cloudwatch.Dimension) map[string]interface{} {
flatDims := make(map[string]interface{})
for _, d := range dims {
flatDims[*d.Name] = *d.Value
}
return flatDims
}
43 changes: 33 additions & 10 deletions builtin/providers/aws/resource_aws_cloudwatch_metric_alarm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,32 @@ func TestAccAWSCloudWatchMetricAlarm_basic(t *testing.T) {
testAccCheckCloudWatchMetricAlarmExists("aws_cloudwatch_metric_alarm.foobar", &alarm),
resource.TestCheckResourceAttr("aws_cloudwatch_metric_alarm.foobar", "metric_name", "CPUUtilization"),
resource.TestCheckResourceAttr("aws_cloudwatch_metric_alarm.foobar", "statistic", "Average"),
testAccCheckCloudWatchMetricAlarmDimension(
"aws_cloudwatch_metric_alarm.foobar", "InstanceId", "i-abc123"),
),
},
},
})
}

func testAccCheckCloudWatchMetricAlarmDimension(n, k, v string) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
if !ok {
return fmt.Errorf("Not found: %s", n)
}
key := fmt.Sprintf("dimensions.%s", k)
val, ok := rs.Primary.Attributes[key]
if !ok {
return fmt.Errorf("Could not find dimension: %s", k)
}
if val != v {
return fmt.Errorf("Expected dimension %s => %s; got: %s", k, v, val)
}
return nil
}
}

func testAccCheckCloudWatchMetricAlarmExists(n string, alarm *cloudwatch.MetricAlarm) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
Expand Down Expand Up @@ -81,15 +101,18 @@ func testAccCheckAWSCloudWatchMetricAlarmDestroy(s *terraform.State) error {

var testAccAWSCloudWatchMetricAlarmConfig = fmt.Sprintf(`
resource "aws_cloudwatch_metric_alarm" "foobar" {
alarm_name = "terraform-test-foobar5"
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "2"
metric_name = "CPUUtilization"
namespace = "AWS/EC2"
period = "120"
statistic = "Average"
threshold = "80"
alarm_description = "This metric monitor ec2 cpu utilization"
insufficient_data_actions = []
alarm_name = "terraform-test-foobar5"
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"
}
}
`)

0 comments on commit 2449b45

Please sign in to comment.