Esempio n. 1
0
    def test_basic_template(self):

        # Test setup
        template_path = '%s/templates/general/%s' % (utils.get_resources_dir(),
                                                     self.BASIC_TEMPLATE)
        template_definition = file_utils.load_yaml_file(template_path, True)

        template_data = get_template_data(template_definition)
        entities = template_data.entities
        relationships = template_data.relationships
        scenarios = template_data.scenarios
        definitions = template_definition[TFields.DEFINITIONS]

        # Assertions
        for definition in definitions[TFields.ENTITIES]:
            for key, value in definition['entity'].items():
                new_key = PropsConverter.PROPS_CONVERSION[key] \
                    if key in PropsConverter.PROPS_CONVERSION else key
                del definition['entity'][key]
                definition['entity'][new_key] = value
        self._validate_entities(entities, definitions[TFields.ENTITIES])

        relate_def = definitions[TFields.RELATIONSHIPS]
        self._validate_relationships(relationships, relate_def, entities)
        self._validate_scenarios(scenarios, entities)

        expected_entities = {
            'alarm': Vertex(
                vertex_id='alarm',
                properties={VProps.VITRAGE_CATEGORY: EntityCategory.ALARM,
                            VProps.VITRAGE_TYPE: NAGIOS_DATASOURCE,
                            VProps.NAME: 'host_problem'
                            }),
            'resource': Vertex(
                vertex_id='resource',
                properties={VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                            VProps.VITRAGE_TYPE: NOVA_HOST_DATASOURCE
                            })
        }

        expected_relationships = {
            'alarm_on_host': EdgeDescription(
                edge=Edge(source_id='alarm',
                          target_id='resource',
                          label=EdgeLabel.ON,
                          properties={EdgeProperties.RELATIONSHIP_TYPE:
                                      EdgeLabel.ON}),
                source=expected_entities['alarm'],
                target=expected_entities['resource']
            )
        }

        expected_scenario = Scenario(
            id='basic_template-scenario0',
            version=1,
            condition=[
                [ConditionVar(symbol_name='alarm_on_host',
                              positive=True)]],
            actions=[
                ActionSpecs(
                    id='basic_template-scenario0-action0',
                    type=ActionType.SET_STATE,
                    targets={'target': 'resource'},
                    properties={'state':
                                OperationalResourceState.SUBOPTIMAL})],
            # TODO(yujunz): verify the built subgraph is consistent with
            #               scenario definition. For now the observed value is
            #               assigned to make test passing
            subgraphs=template_data.scenarios[0].subgraphs,
            entities=expected_entities,
            relationships=expected_relationships
        )

        self._validate_strict_equal(template_data,
                                    expected_entities,
                                    expected_relationships,
                                    expected_scenario)
Esempio n. 2
0
 def test_scenario_3(self):
     observed_scenarios = self._load_scenarios('valid_actions.yaml')
     expected_scenario = Scenario(
         'valid actions-scenario3',
         '3',
         None,
         [
             ActionSpecs(
                 'valid actions-scenario3-action0',
                 'mark_down',
                 {'target': 'host'},
                 {}),
         ],
         [
             NXGraph(
                 vertices=[
                     Vertex('instance',
                            {
                                'vitrage_is_placeholder': False,
                                'vitrage_type': 'nova.instance',
                                'vitrage_is_deleted': False,
                            }),
                     Vertex('host',
                            {
                                'vitrage_is_placeholder': False,
                                'vitrage_type': 'nova.host',
                                'vitrage_is_deleted': False,
                            }),
                 ],
                 edges=[
                     Edge('host', 'instance', 'contains',
                          {
                              'vitrage_is_deleted': False,
                              'negative_condition': False
                          })
                 ]),
             NXGraph(
                 vertices=[
                     Vertex('host_ssh_alarm',
                            {
                                'rawtext': 'host ssh is down',
                                'vitrage_is_placeholder': False,
                                'vitrage_type': 'zabbix',
                                'vitrage_is_deleted': False,
                            }),
                     Vertex('host',
                            {
                                'vitrage_is_placeholder': False,
                                'vitrage_type': 'nova.host',
                                'vitrage_is_deleted': False,
                            }),
                 ],
                 edges=[
                     Edge('host_ssh_alarm', 'host', 'on',
                          {
                              'vitrage_is_deleted': True,
                              'negative_condition': True,
                          }),
                 ]),
         ],
         TemplateLoaderV3Test.expected_entities,
         TemplateLoaderV3Test.expected_relationships)
     self._assert_scenario_equal(
         expected_scenario,
         observed_scenarios[3])
Esempio n. 3
0
    def test_basic_template_with_include(self):

        # Test setup
        template_path = self.DEF_TEMPLATE_TESTS_DIR +\
            '/templates/%s' % self.BASIC_TEMPLATE_WITH_INCLUDE
        template_definition = file_utils.load_yaml_file(template_path, True)
        def_templates_path = self.DEF_TEMPLATE_TESTS_DIR + \
            '/definition_templates'
        def_demplates_list = file_utils.load_yaml_files(
            def_templates_path)
        def_templates_dict = utils.get_def_templates_dict_from_list(
            def_demplates_list)
        template_data = \
            TemplateLoader().load(template_definition, def_templates_dict)
        entities = template_data.entities
        relationships = template_data.relationships
        scenarios = template_data.scenarios
        definitions = template_definition[TFields.DEFINITIONS]
        def_template = file_utils.load_yaml_file(
            def_templates_path + '/basic_def_template.yaml')
        def_template_entities = \
            def_template[TFields.DEFINITIONS][TFields.ENTITIES]
        def_template_relationships = \
            def_template[TFields.DEFINITIONS][TFields.RELATIONSHIPS]
        definitions[TFields.ENTITIES] += def_template_entities
        definitions[TFields.RELATIONSHIPS] = def_template_relationships

        # Assertions
        for definition in definitions[TFields.ENTITIES]:
            for key, value in definition['entity'].items():
                new_key = TemplateLoader.PROPS_CONVERSION[key] if key in \
                    TemplateLoader.PROPS_CONVERSION else key
                del definition['entity'][key]
                definition['entity'][new_key] = value
        self._validate_entities(entities, definitions[TFields.ENTITIES])

        relate_def = def_template_relationships
        self._validate_relationships(relationships, relate_def, entities)
        self._validate_scenarios(scenarios, entities)

        expected_entities = {
            'alarm11': Vertex(
                vertex_id='alarm11',
                properties={VProps.VITRAGE_CATEGORY: EntityCategory.ALARM,
                            VProps.VITRAGE_TYPE: NAGIOS_DATASOURCE,
                            VProps.NAME: 'host_problem'
                            }),
            'resource11': Vertex(
                vertex_id='resource11',
                properties={VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                            VProps.VITRAGE_TYPE: NOVA_HOST_DATASOURCE
                            }),
            'alarm': Vertex(
                vertex_id='alarm',
                properties={VProps.VITRAGE_CATEGORY: EntityCategory.ALARM,
                            VProps.VITRAGE_TYPE: NAGIOS_DATASOURCE,
                            VProps.NAME: 'host_problem'
                            }),
            'resource': Vertex(
                vertex_id='resource',
                properties={VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                            VProps.VITRAGE_TYPE: NOVA_HOST_DATASOURCE
                            })
        }
        expected_relationships = {
            'alarm_on_host': EdgeDescription(
                edge=Edge(source_id='alarm',
                          target_id='resource',
                          label=EdgeLabel.ON,
                          properties={EdgeProperties.RELATIONSHIP_TYPE:
                                      EdgeLabel.ON}),
                source=expected_entities['alarm'],
                target=expected_entities['resource']
            ),
        }

        scenario_entities = {
            'alarm': Vertex(
                vertex_id='alarm',
                properties={VProps.VITRAGE_CATEGORY: EntityCategory.ALARM,
                            VProps.VITRAGE_TYPE: NAGIOS_DATASOURCE,
                            VProps.NAME: 'host_problem'
                            }),
            'resource': Vertex(
                vertex_id='resource',
                properties={VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                            VProps.VITRAGE_TYPE: NOVA_HOST_DATASOURCE
                            })
        }

        expected_scenario = Scenario(
            id='basic_template_with_include-scenario0',
            condition=[
                [ConditionVar(symbol_name='alarm_on_host',
                              positive=True)]],
            actions=[
                ActionSpecs(
                    id='basic_template_with_include-scenario0-action0',
                    type=ActionType.SET_STATE,
                    targets={'target': 'resource'},
                    properties={'state':
                                OperationalResourceState.SUBOPTIMAL})],
            subgraphs=template_data.scenarios[0].subgraphs,
            entities=scenario_entities,
            relationships=expected_relationships
        )

        self._validate_strict_equal(template_data,
                                    expected_entities,
                                    expected_relationships,
                                    expected_scenario)
Esempio n. 4
0
 def test_scenario_2(self):
     observed_scenarios = self._load_scenarios('valid_actions.yaml')
     expected_scenario = Scenario(
         'valid actions-scenario2',
         '3',
         None,
         [
             ActionSpecs(
                 'valid actions-scenario2-action0',
                 'raise_alarm',
                 {'target': 'instance'},
                 {
                     'severity': 'WARNING',
                     'alarm_name': 'instance is down',
                     'causing_alarm':
                         'get_attr(host_ssh_alarm, vitrage_id)',
                 }),
             ActionSpecs(
                 'valid actions-scenario2-action1',
                 'set_state',
                 {'target': 'instance'},
                 {'state': 'SUBOPTIMAL'}),
         ],
         [
             NXGraph(
                 vertices=[
                     Vertex('host_ssh_alarm',
                            {
                                'rawtext': 'host ssh is down',
                                'vitrage_is_placeholder': False,
                                'vitrage_type': 'zabbix',
                                'vitrage_is_deleted': False,
                            }),
                     Vertex('instance',
                            {
                                'vitrage_is_placeholder': False,
                                'vitrage_type': 'nova.instance',
                                'vitrage_is_deleted': False,
                            }),
                     Vertex('host',
                            {
                                'vitrage_is_placeholder': False,
                                'vitrage_type': 'nova.host',
                                'vitrage_is_deleted': False,
                            }),
                 ],
                 edges=[
                     Edge('host_ssh_alarm', 'host', 'on',
                          {
                              'vitrage_is_deleted': False,
                              'negative_condition': False
                          }),
                     Edge('host', 'instance', 'contains',
                          {
                              'vitrage_is_deleted': False,
                              'negative_condition': False
                          })
                 ])
         ],
         TemplateLoaderV3Test.expected_entities,
         TemplateLoaderV3Test.expected_relationships)
     self._assert_scenario_equal(
         expected_scenario,
         observed_scenarios[2])