def test_action_add_causal_relationship(self): try: # Do self._trigger_do_action(TRIGGER_ALARM_2) alarms = TempestClients.vitrage().alarm.list( vitrage_id=self.orig_host.get(VProps.VITRAGE_ID), all_tenants=True) self.assertEqual(True, len(alarms) >= 2, 'alarms %s' % str(alarms)) deduced = g_utils.first_match(alarms, **DEDUCED_PROPS) trigger = g_utils.first_match(alarms, **TRIGGER_ALARM_2_PROPS) # Get Rca for the deduced rca = TempestClients.vitrage().rca.get(deduced[VProps.VITRAGE_ID], all_tenants=True) self._check_rca(rca, [deduced, trigger], DEDUCED_PROPS) # Get Rca for the trigger rca = TempestClients.vitrage().rca.get(trigger[VProps.VITRAGE_ID], all_tenants=True) self._check_rca(rca, [deduced, trigger], TRIGGER_ALARM_2_PROPS) except Exception as e: self._handle_exception(e) raise finally: self._trigger_undo_action(TRIGGER_ALARM_2)
def generate_fake_host_alarm(hostname, event_type, enabled=True): details = { 'hostname': hostname, 'source': 'fake_tempest_monitor', 'cause': 'another alarm', 'severity': 'critical', 'status': DOWN if enabled else UP, 'monitor_id': 'fake tempest monitor id', 'monitor_event_id': '111', } event_time = datetime.now() event_time_iso = event_time.isoformat() TempestClients.vitrage().event.post(event_time_iso, event_type, details)
def test_validate_notifier(self): """validate_notifier test There tests validates work of aodh alarm notifier - all created vitrage alarms appears in ceilometer alarms-list. IMPORTANT: enable notifiers=aodh in vitrage.conf file """ try: nova_utils.create_instances(num_instances=2, set_public_network=True) self._create_alarm( resource_id=self._get_hostname(), alarm_name=RCA_ALARM_NAME) vitrage_alarms = TempestClients.vitrage().alarm.list( vitrage_id='all', all_tenants=True) aodh_alarms = TempestClients.aodh().alarm.list() self._validate_notifier(alarms=aodh_alarms, vitrage_alarms=vitrage_alarms) except Exception as e: self._handle_exception(e) raise finally: self._clean_all()
def _validate_deduce_alarms(self, alarms, instances): """Validate alarm existence """ self.assertNotEqual(len(alarms), 0, 'The alarms list is empty') LOG.info("The alarms list is : " + str(json.dumps(alarms))) # Find the vitrage_id of the deduced alarms using their original id. vitrage_resources = TempestClients.vitrage().resource.list( all_tenants=False) vitrage_instance_0_id = g_utils.first_match(vitrage_resources, id=instances[0].id) vitrage_instance_1_id = g_utils.first_match(vitrage_resources, id=instances[1].id) # Find the deduced alarms based on their properties deduce_alarms_1 = g_utils.all_matches( alarms, vitrage_type=VITRAGE_DATASOURCE, name=VITRAGE_ALARM_NAME, vitrage_resource_type=NOVA_INSTANCE_DATASOURCE, vitrage_resource_id=vitrage_instance_0_id[VProps.VITRAGE_ID]) deduce_alarms_2 = g_utils.all_matches( alarms, vitrage_type=VITRAGE_DATASOURCE, name=VITRAGE_ALARM_NAME, vitrage_resource_type=NOVA_INSTANCE_DATASOURCE, vitrage_resource_id=vitrage_instance_1_id[VProps.VITRAGE_ID]) self.assertEqual(3, len(alarms), "Expected 3 alarms - 1 on host and " "2 deduced") self.assertEqual(1, len(deduce_alarms_1), "Deduced alarm not found") self.assertEqual(1, len(deduce_alarms_2), "Deduced alarm not found")
def _check_deduced(self, deduced_count, deduced_props, resource_id): alarms = TempestClients.vitrage().alarm.list(vitrage_id=resource_id, all_tenants=True) deduces = g_utils.all_matches(alarms, **deduced_props) self.assertEqual( deduced_count, len(deduces), 'Expected %s deduces\n - \n%s\n - \n%s' % (str(deduced_count), str(alarms), str(deduces)))
def setUpClass(cls): super(BaseVitrageTempest, cls).setUpClass() cls.conf = service.prepare_service([]) TempestClients.class_init(cls.conf) cls.vitrage_client = TempestClients.vitrage() cls.num_default_networks = \ len(TempestClients.neutron().list_networks()['networks']) cls.num_default_ports = 0 cls.num_default_entities = 3 cls.num_default_edges = 2
def test_compare_cli_vs_api_alarms(self): """Wrapper that returns a test graph.""" try: instances = nova_utils.create_instances(num_instances=1, set_public_network=True) self.assertNotEqual(len(instances), 0, 'The instances list is empty') aodh_utils.create_aodh_alarm(resource_id=instances[0].id, name='tempest_aodh_test') api_alarms = TempestClients.vitrage().alarm.list(vitrage_id='all', all_tenants=True) cli_alarms = utils.run_vitrage_command('vitrage alarm list', self.conf) self._compare_alarms_lists(api_alarms, cli_alarms, AODH_DATASOURCE, instances[0].id) except Exception as e: self._handle_exception(e) raise finally: aodh_utils.delete_all_aodh_alarms() nova_utils.delete_all_instances()
def _check_num_vitrage_alarms(self, num_alarms): vitrage_alarms = TempestClients.vitrage().alarm.list(vitrage_id='all', all_tenants=True) if len(vitrage_alarms) == num_alarms: return True return False
def _print_entity_graph(self): api_graph = TempestClients.vitrage().topology.get(all_tenants=True) graph = self._create_graph_from_graph_dictionary(api_graph) LOG.info('Entity Graph: \n%s', graph.json_output_graph())
def test_overlapping_action_add_causal_relationship(self): try: # ---- Do first & second ---- self._trigger_do_action(TRIGGER_ALARM_1) self._trigger_do_action(TRIGGER_ALARM_2) alarms = TempestClients.vitrage().alarm.list( vitrage_id=self.orig_host.get(VProps.VITRAGE_ID), all_tenants=True) deduced = g_utils.first_match(alarms, **DEDUCED_PROPS) trigger1 = g_utils.first_match(alarms, **TRIGGER_ALARM_1_PROPS) trigger2 = g_utils.first_match(alarms, **TRIGGER_ALARM_2_PROPS) # Get Rca for the deduced rca = TempestClients.vitrage().rca.get(deduced[VProps.VITRAGE_ID], all_tenants=True) self._check_rca(rca, [deduced, trigger1, trigger2], DEDUCED_PROPS) # Get Rca for trigger 1 rca = TempestClients.vitrage().rca.get(trigger1[VProps.VITRAGE_ID], all_tenants=True) self._check_rca(rca, [deduced, trigger1], TRIGGER_ALARM_1_PROPS) # Get Rca for trigger 2 rca = TempestClients.vitrage().rca.get(trigger2[VProps.VITRAGE_ID], all_tenants=True) self._check_rca(rca, [deduced, trigger2], TRIGGER_ALARM_2_PROPS) # ---- Undo - first ---- self._trigger_undo_action(TRIGGER_ALARM_1) alarms = TempestClients.vitrage().alarm.list( vitrage_id=self.orig_host.get(VProps.VITRAGE_ID), all_tenants=True) deduced = g_utils.first_match(alarms, **DEDUCED_PROPS) trigger2 = g_utils.first_match(alarms, **TRIGGER_ALARM_2_PROPS) # Get Rca for the deduced rca = TempestClients.vitrage().rca.get(deduced[VProps.VITRAGE_ID], all_tenants=True) self._check_rca(rca, [deduced, trigger2], DEDUCED_PROPS) # Get Rca for trigger 2 rca = TempestClients.vitrage().rca.get(trigger2[VProps.VITRAGE_ID], all_tenants=True) self._check_rca(rca, [deduced, trigger2], TRIGGER_ALARM_2_PROPS) # ---- Undo - second ---- self._trigger_undo_action(TRIGGER_ALARM_2) alarms = TempestClients.vitrage().alarm.list( vitrage_id=self.orig_host.get(VProps.VITRAGE_ID), all_tenants=True) self.assertEqual( 0, len(g_utils.all_matches(alarms, **TRIGGER_ALARM_1_PROPS)), 'trigger alarm 1 should have been removed') self.assertEqual( 0, len(g_utils.all_matches(alarms, **TRIGGER_ALARM_2_PROPS)), 'trigger alarm 2 should have been removed') self.assertEqual(0, len(g_utils.all_matches(alarms, **DEDUCED_PROPS)), 'deduced alarm should have been removed') except Exception as e: self._handle_exception(e) raise finally: self._trigger_undo_action(TRIGGER_ALARM_1) self._trigger_undo_action(TRIGGER_ALARM_2)
def get_first_instance(**kwargs): instances = TempestClients.vitrage().resource.list( NOVA_INSTANCE_DATASOURCE, all_tenants=True) return g_utils.first_match(instances, **kwargs)
def get_first_host(**kwargs): hosts = TempestClients.vitrage().resource.list(NOVA_HOST_DATASOURCE, all_tenants=True) return g_utils.first_match(hosts, **kwargs)