def load(cls, context, watch_name=None, watch=None): """Load the watchrule object. Loading object either by name or via an existing DB object. """ if watch is None: try: watch = watch_rule_objects.WatchRule.get_by_name( context, watch_name) except Exception as ex: LOG.warn( _LW('WatchRule.load (%(watch_name)s) db error ' '%(ex)s'), { 'watch_name': watch_name, 'ex': ex }) if watch is None: raise exception.WatchRuleNotFound(watch_name=watch_name) else: return cls(context=context, watch_name=watch.name, rule=watch.rule, stack_id=watch.stack_id, state=watch.state, wid=watch.id, watch_data=watch.watch_data, last_evaluated=watch.last_evaluated)
def load(cls, context, watch_name=None, watch=None): ''' Load the watchrule object, either by name or via an existing DB object ''' if watch is None: try: watch = db_api.watch_rule_get_by_name(context, watch_name) except Exception as ex: logger.warn( _('WatchRule.load (%(watch_name)s) db error ' '%(ex)s') % { 'watch_name': watch_name, 'ex': str(ex) }) if watch is None: raise exception.WatchRuleNotFound(watch_name=watch_name) else: return cls(context=context, watch_name=watch.name, rule=watch.rule, stack_id=watch.stack_id, state=watch.state, wid=watch.id, watch_data=watch.watch_data, last_evaluated=watch.last_evaluated)
def test_resource_delete_notfound(self): # if a resource is not found, handle_delete() should not raise # an exception. s = self.parse_stack() self.assertIsNone(scheduler.TaskRunner(s['test_me'].create)()) res_name = self.stack['test_me'].physical_resource_name() self.wr = watchrule.WatchRule.load(self.ctx, watch_name=res_name) with patch.object(watchrule.WatchRule, 'destroy') as bad_destroy: watch_exc = exception.WatchRuleNotFound(watch_name='test') bad_destroy.side_effect = watch_exc self.assertIsNone(scheduler.TaskRunner(s['test_me'].delete)())
def test_delete_no_watchrule(self): t = template_format.parse(alarm_template) self.stack = self.create_stack(template=json.dumps(t)) rsrc = self.stack['MEMAlarmHigh'] wr = mock.MagicMock() self.patchobject(watchrule.WatchRule, 'load', side_effect=[exception.WatchRuleNotFound( watch_name='test')]) wr.destroy.return_value = None self.patchobject(ceilometer.CeilometerClientPlugin, 'client', return_value=self.fa) self.patchobject(self.fa.alarms, 'delete') rsrc.resource_id = '12345' self.assertEqual('12345', rsrc.handle_delete()) self.assertEqual(0, wr.destroy.call_count) # check that super method has been called and execute deleting self.assertEqual(1, self.fa.alarms.delete.call_count)
def create_watch_data(self, cnxt, watch_name, stats_data): ''' This could be used by CloudWatch and WaitConditions and treat HA service events like any other CloudWatch. ''' def get_matching_watches(): if watch_name: yield watchrule.WatchRule.load(cnxt, watch_name) else: for wr in db_api.watch_rule_get_all(cnxt): if watchrule.rule_can_use_sample(wr, stats_data): yield watchrule.WatchRule.load(cnxt, watch=wr) rule_run = False for rule in get_matching_watches(): rule.create_watch_data(stats_data) rule_run = True if not rule_run: if watch_name is None: watch_name = 'Unknown' raise exception.WatchRuleNotFound(watch_name=watch_name) return stats_data