Merge pull request #9029 from hashicorp/b-cloudwatch-dimensions-read

provider/aws: Fix reading dimensions on cloudwatch alarms
This commit is contained in:
Paul Stack 2016-09-26 09:29:27 +01:00 committed by GitHub
commit 01cef1a63c
2 changed files with 44 additions and 11 deletions

View File

@ -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 {
@ -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
}

View File

@ -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]
@ -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"
}
}
`)