Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cloudwatch_metric_alarm: fix idempotency for alarm without dimensions #1865

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
bugfixes:
- cloudwatch_metric_alarm - Fix idempotency when creating cloudwatch metric alarm without dimensions (https://github.com/ansible-collections/amazon.aws/pull/1865).
4 changes: 4 additions & 0 deletions plugins/modules/cloudwatch_metric_alarm.py
Original file line number Diff line number Diff line change
Expand Up @@ -467,6 +467,10 @@ def create_metric_alarm(connection, module, params):
if "TreatMissingData" not in alarm.keys():
alarm["TreatMissingData"] = "missing"

# Prevent alarm without dimensions to always return changed
if not alarm["Dimensions"]:
alarm.pop("Dimensions", None)

# Exclude certain props from change detection
for key in [
"ActionsEnabled",
Expand Down
51 changes: 51 additions & 0 deletions tests/integration/targets/cloudwatch_metric_alarm/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,57 @@
- ec2_instance_metric_mutually_exclusive.failed
- '"parameters are mutually exclusive" in ec2_instance_metric_mutually_exclusive.msg'

- name: create alarm without dimensions
cloudwatch_metric_alarm:
state: present
name: '{{ alarm_full_name }}'
metric: CPUUtilization
namespace: AWS/EC2
treat_missing_data: missing
statistic: Average
comparison: LessThanOrEqualToThreshold
threshold: 5.0
period: 300
evaluation_periods: 3
unit: Percent
description: This will alarm when an instance's cpu usage average is lower than
5% for 15 minutes
register: ec2_instance_metric_alarm_no_dimensions

- name: get info on alarm without dimensions
amazon.aws.cloudwatch_metric_alarm_info:
alarm_names:
- "{{ alarm_full_name }}"
register: alarm_info_metrics_alarm_no_dimensions

- name: verify that an alarm was created without dimensions
ansible.builtin.assert:
that:
- ec2_instance_metric_alarm_no_dimensions.changed
- alarm_info_metrics_alarm_no_dimensions.metric_alarms[0].dimensions | length == 0

- name: create alarm without dimensions (idempotent)
cloudwatch_metric_alarm:
state: present
name: '{{ alarm_full_name }}'
metric: CPUUtilization
namespace: AWS/EC2
treat_missing_data: missing
statistic: Average
comparison: LessThanOrEqualToThreshold
threshold: 5.0
period: 300
evaluation_periods: 3
unit: Percent
description: This will alarm when an instance's cpu usage average is lower than
5% for 15 minutes
register: ec2_instance_metric_alarm_no_dimensions_idempotent

- name: "Verify alarm without dimensions does not register as changed after update"
assert:
that:
- not ec2_instance_metric_alarm_no_dimensions_idempotent.changed

always:
- name: try to delete the alarm
amazon.aws.cloudwatch_metric_alarm:
Expand Down
Loading