diff --git a/monasca_api/common/repositories/model/sub_alarm_definition.py b/monasca_api/common/repositories/model/sub_alarm_definition.py index e5c517e..5b0170d 100644 --- a/monasca_api/common/repositories/model/sub_alarm_definition.py +++ b/monasca_api/common/repositories/model/sub_alarm_definition.py @@ -49,9 +49,8 @@ class SubAlarmDefinition(object): self.deterministic = str(row['is_deterministic']) == '1' if sub_expr: - # id is not used for compare or hash. - self.id = '' # Must be injected. + self.id = '' self.alarm_definition_id = '' self.metric_name = sub_expr.metric_name self.dimensions_str = sub_expr.dimensions_str diff --git a/monasca_api/common/repositories/sqla/alarm_definitions_repository.py b/monasca_api/common/repositories/sqla/alarm_definitions_repository.py index 8296301..a0edafe 100644 --- a/monasca_api/common/repositories/sqla/alarm_definitions_repository.py +++ b/monasca_api/common/repositories/sqla/alarm_definitions_repository.py @@ -683,6 +683,7 @@ class AlarmDefinitionsRepository(sql_repository.SQLRepository, for sub_expr in sub_expr_list: sad = sub_alarm_definition.SubAlarmDefinition( sub_expr=sub_expr) + # Note: the .id yet needs to be set (see below) # Inject the alarm definition id. sad.alarm_definition_id = alarm_definition_id.decode('utf8') new_sub_alarm_defs_set.add(sad) @@ -710,6 +711,8 @@ class AlarmDefinitionsRepository(sql_repository.SQLRepository, changed_sub_alarm_defs_by_id[ old_or_changed.id] = ( new_or_changed) + # inject the missing ID (taken from the old), otherwise updates will not work + new_or_changed.id = old_or_changed.id old_or_changed_sub_alarm_defs_set = ( old_or_changed_sub_alarm_defs_set - old_or_changed_sub_alarm_defs_set_to_remove diff --git a/monasca_api/tests/test_alarms.py b/monasca_api/tests/test_alarms.py index 5eb1225..41c3c4c 100644 --- a/monasca_api/tests/test_alarms.py +++ b/monasca_api/tests/test_alarms.py @@ -500,7 +500,7 @@ class TestAlarmDefinition(AlarmTestBase): sub_expression = {'11111': {u'expression': expr, u'function': 'max', u'metricDefinition': { - u'dimensions': {u'uname': 'host'}, + u'dimensions': {'hostname': 'host'}, u'name': 'test.metric'}, u'operator': 'gte', u'period': 60, diff --git a/monasca_api/v2/reference/alarm_definitions.py b/monasca_api/v2/reference/alarm_definitions.py index 7e68b77..d851d5d 100644 --- a/monasca_api/v2/reference/alarm_definitions.py +++ b/monasca_api/v2/reference/alarm_definitions.py @@ -458,16 +458,13 @@ class AlarmDefinitions(alarm_definitions_api_v2.AlarmDefinitionsV2API, sub_alarm_def_update_dict = {} for id, sub_alarm_def in sub_alarm_def_dict.items(): - dimensions = {} - for name, value in sub_alarm_def.dimensions.items(): - dimensions[u'uname'] = value sub_alarm_def_update_dict[sub_alarm_def.id] = {} sub_alarm_def_update_dict[sub_alarm_def.id][u'function'] = ( sub_alarm_def.function) sub_alarm_def_update_dict[sub_alarm_def.id][ u'metricDefinition'] = ( {u'name': sub_alarm_def.metric_name, - u'dimensions': dimensions}) + u'dimensions': sub_alarm_def.dimensions.copy()}) sub_alarm_def_update_dict[sub_alarm_def.id][u'operator'] = ( sub_alarm_def.operator) sub_alarm_def_update_dict[sub_alarm_def.id][u'threshold'] = (