From c0b47565a4be0b8d469e0602a470659b66a969bb Mon Sep 17 00:00:00 2001 From: liusheng Date: Thu, 2 Jun 2016 11:16:31 +0800 Subject: [PATCH] Support get/set alarm state interfaces Change-Id: Iaa317aeabcf18ff09c52215892643da25135bbcd --- aodhclient/shell.py | 2 + aodhclient/tests/functional/test_alarm.py | 21 ++++++ aodhclient/v2/alarm.py | 21 ++++++ aodhclient/v2/alarm_cli.py | 64 +++++++++++++++++++ ...set-state-interfaces-67419b925ffd6877.yaml | 3 + setup.cfg | 2 + 6 files changed, 113 insertions(+) create mode 100644 releasenotes/notes/support-get-set-state-interfaces-67419b925ffd6877.yaml diff --git a/aodhclient/shell.py b/aodhclient/shell.py index 261d97f..776706a 100644 --- a/aodhclient/shell.py +++ b/aodhclient/shell.py @@ -40,6 +40,8 @@ class AodhCommandManager(commandmanager.CommandManager): "alarm list": alarm_cli.CliAlarmList, "alarm show": alarm_cli.CliAlarmShow, "alarm update": alarm_cli.CliAlarmUpdate, + "alarm state get": alarm_cli.CliAlarmStateGet, + "alarm state set": alarm_cli.CliAlarmStateSet, "alarm-history show": alarm_history_cli.CliAlarmHistoryShow, "alarm-history search": alarm_history_cli.CliAlarmHistorySearch, "capabilities list": capabilities_cli.CliCapabilitiesList, diff --git a/aodhclient/tests/functional/test_alarm.py b/aodhclient/tests/functional/test_alarm.py index 1f9194e..265a0f5 100644 --- a/aodhclient/tests/functional/test_alarm.py +++ b/aodhclient/tests/functional/test_alarm.py @@ -437,6 +437,27 @@ class AodhClientTest(base.ClientTestBase): params = 'create --type event --name alarm-no-query' self._test_alarm_create_show_query(params, {'query': ''}) + def test_set_get_alarm_state(self): + result = self.aodh( + 'alarm', + params=("create --type threshold --name alarm_state_test " + "-m meter_name --threshold 5")) + alarm = self.details_multiple(result)[0] + alarm_id = alarm['alarm_id'] + result = self.aodh( + 'alarm', params="show %s" % alarm_id) + alarm_show = self.details_multiple(result)[0] + self.assertEqual('insufficient data', alarm_show['state']) + result = self.aodh('alarm', params="state get %s" % alarm_id) + state_get = self.details_multiple(result)[0] + self.assertEqual('insufficient data', state_get['state']) + self.aodh('alarm', + params="state set --state ok %s" % alarm_id) + result = self.aodh('alarm', params="state get %s" % alarm_id) + state_get = self.details_multiple(result)[0] + self.assertEqual('ok', state_get['state']) + self.aodh('alarm', params='delete %s' % alarm_id) + class AodhClientGnocchiRulesTest(base.ClientTestBase): diff --git a/aodhclient/v2/alarm.py b/aodhclient/v2/alarm.py index d00a269..6e1f5df 100644 --- a/aodhclient/v2/alarm.py +++ b/aodhclient/v2/alarm.py @@ -128,3 +128,24 @@ class AlarmManager(base.Manager): :type alarm_id: str """ self._delete(self.url + '/' + alarm_id) + + def get_state(self, alarm_id): + """Get the state of an alarm + + :param alarm_id: ID of the alarm + :type alarm_id: str + """ + return self._get(self.url + '/' + alarm_id + '/state').json() + + def set_state(self, alarm_id, state): + """Set the state of an alarm + + :param alarm_id: ID of the alarm + :type alarm_id: str + :param state: the state to be updated to the alarm + :type state: str + """ + return self._put(self.url + '/' + alarm_id + '/state', + headers={'Content-Type': "application/json"}, + data='"%s"' % state + ).json() diff --git a/aodhclient/v2/alarm_cli.py b/aodhclient/v2/alarm_cli.py index 7a63bb6..d571aec 100644 --- a/aodhclient/v2/alarm_cli.py +++ b/aodhclient/v2/alarm_cli.py @@ -476,3 +476,67 @@ class CliAlarmDelete(command.Command): _id = _find_alarm_id_by_name(c, parsed_args.id) c.alarm.delete(_id) + + +class CliAlarmStateGet(show.ShowOne): + """Delete an alarm""" + + def get_parser(self, prog_name): + return _add_name_to_parser( + _add_id_to_parser( + super(CliAlarmStateGet, self).get_parser(prog_name))) + + def take_action(self, parsed_args): + _check_name_and_id(parsed_args, 'get state of') + c = utils.get_client(self) + + if parsed_args.name: + _id = _find_alarm_id_by_name(c, parsed_args.name) + elif uuidutils.is_uuid_like(parsed_args.id): + try: + state = c.alarm.get_state(parsed_args.id) + except exceptions.NotFound: + # Maybe it was not an ID after all + _id = _find_alarm_id_by_name(c, parsed_args.id) + else: + return self.dict2columns({'state': state}) + else: + _id = _find_alarm_id_by_name(c, parsed_args.id) + + state = c.alarm.get_state(_id) + return self.dict2columns({'state': state}) + + +class CliAlarmStateSet(show.ShowOne): + """Delete an alarm""" + + def get_parser(self, prog_name): + parser = _add_name_to_parser( + _add_id_to_parser( + super(CliAlarmStateSet, self).get_parser(prog_name))) + parser.add_argument('--state', metavar='', + required=True, + choices=ALARM_STATES, + help='State of the alarm, one of: ' + + str(ALARM_STATES)) + return parser + + def take_action(self, parsed_args): + _check_name_and_id(parsed_args, 'set state of') + c = utils.get_client(self) + + if parsed_args.name: + _id = _find_alarm_id_by_name(c, parsed_args.name) + elif uuidutils.is_uuid_like(parsed_args.id): + try: + state = c.alarm.set_state(parsed_args.id, parsed_args.state) + except exceptions.NotFound: + # Maybe it was not an ID after all + _id = _find_alarm_id_by_name(c, parsed_args.id) + else: + return self.dict2columns({'state': state}) + else: + _id = _find_alarm_id_by_name(c, parsed_args.id) + + state = c.alarm.set_state(_id, parsed_args.state) + return self.dict2columns({'state': state}) diff --git a/releasenotes/notes/support-get-set-state-interfaces-67419b925ffd6877.yaml b/releasenotes/notes/support-get-set-state-interfaces-67419b925ffd6877.yaml new file mode 100644 index 0000000..586be60 --- /dev/null +++ b/releasenotes/notes/support-get-set-state-interfaces-67419b925ffd6877.yaml @@ -0,0 +1,3 @@ +--- +features: + - Add support of get/set alarm state interfaces. diff --git a/setup.cfg b/setup.cfg index 18b3bc4..ec08320 100644 --- a/setup.cfg +++ b/setup.cfg @@ -38,6 +38,8 @@ openstack.alarming.v2 = alarm show = aodhclient.v2.alarm_cli:CliAlarmShow alarm delete = aodhclient.v2.alarm_cli:CliAlarmDelete alarm update = aodhclient.v2.alarm_cli:CliAlarmUpdate + alarm state get = aodhclient.v2.alarm_cli:CliAlarmStateGet + alarm state set = aodhclient.v2.alarm_cli:CliAlarmStateSet alarm-history search = aodhclient.v2.alarm_history_cli:CliAlarmHistorySearch alarm-history show = aodhclient.v2.alarm_history_cli:CliAlarmHistoryShow alarming capabilities list = aodhclient.v2.capabilities_cli:CliCapabilitiesList