Пример #1
0
 def test_invalid_content_type(self):
     packs_base_path = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'resources/packs/')
     loader = ContentPackLoader()
     try:
         loader.get_content(base_dir=packs_base_path, content_type='stuff')
         self.fail('Asking for invalid content should have thrown.')
     except:
         pass
Пример #2
0
 def test_invalid_content_type(self):
     packs_base_path = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'resources/packs/')
     loader = ContentPackLoader()
     try:
         loader.get_content(base_dir=packs_base_path, content_type='stuff')
         self.fail('Asking for invalid content should have thrown.')
     except:
         pass
Пример #3
0
def _get_user_sensors():
    sensors_dict = defaultdict(list)
    pack_loader = ContentPackLoader()
    sensor_loader = SensorLoader()
    packs = pack_loader.get_content(base_dir=cfg.CONF.content.packs_base_path,
                                    content_type='sensors')
    for pack, sensor_dir in six.iteritems(packs):
        try:
            LOG.info('Loading sensors from pack: %s, dir: %s', pack, sensor_dir)
            if _is_requirements_ok(sensor_dir):
                base_dir = os.path.realpath(sensor_dir)
                pack_sensors = sensor_loader.get_sensors(base_dir=base_dir)

                # Include content pack name on the sensor class
                # TODO: This is nasty
                pack_sensors_augmented = defaultdict(list)
                for filename, sensors in pack_sensors.iteritems():
                    for sensor in sensors:
                        sensor.pack = pack
                        pack_sensors_augmented[filename].append(sensor)

                sensors_dict.update(pack_sensors_augmented)
            else:
                LOG.warning('Not registering sensors in sensor_dir: %s.', sensor_dir)
        except:
            LOG.exception('Failed loading sensors from dir: %s' % sensor_dir)
    return sensors_dict
Пример #4
0
 def test_get_sensors(self):
     packs_base_path = os.path.join(RESOURCES_DIR, "packs/")
     loader = ContentPackLoader()
     pack_sensors = loader.get_content(
         base_dirs=[packs_base_path], content_type="sensors"
     )
     self.assertIsNotNone(pack_sensors.get("pack1", None))
Пример #5
0
def _get_user_sensors():
    sensors_dict = defaultdict(list)
    pack_loader = ContentPackLoader()
    sensor_loader = SensorLoader()
    packs = pack_loader.get_content(base_dir=cfg.CONF.content.packs_base_path,
                                    content_type='sensors')
    for pack, sensor_dir in six.iteritems(packs):
        try:
            LOG.info('Loading sensors from pack: %s, dir: %s', pack,
                     sensor_dir)
            if _is_requirements_ok(sensor_dir):
                base_dir = os.path.realpath(sensor_dir)
                pack_sensors = sensor_loader.get_sensors(base_dir=base_dir)

                # Include content pack name on the sensor class
                # TODO: This is nasty
                pack_sensors_augmented = defaultdict(list)
                for filename, sensors in pack_sensors.iteritems():
                    for sensor in sensors:
                        sensor.pack = pack
                        pack_sensors_augmented[filename].append(sensor)

                sensors_dict.update(pack_sensors_augmented)
            else:
                LOG.warning('Not registering sensors in sensor_dir: %s.',
                            sensor_dir)
        except:
            LOG.exception('Failed loading sensors from dir: %s' % sensor_dir)
    return sensors_dict
Пример #6
0
def _get_api_models_from_disk(artifact_type, pack_dir=None):
    loader = ContentPackLoader()
    artifacts = None

    if pack_dir:
        artifacts_dir = loader.get_content_from_pack(pack_dir, artifact_type)
        pack_name = os.path.basename(os.path.normpath(pack_dir))
        artifacts = {pack_name: artifacts_dir}
    else:
        packs_dirs = content_utils.get_packs_base_paths()
        artifacts = loader.get_content(packs_dirs, artifact_type)

    artifacts_dict = {}
    for pack_name, pack_path in artifacts.items():
        artifacts_paths = registrar.get_resources_from_pack(pack_path)
        for artifact_path in artifacts_paths:
            artifact = meta_loader.load(artifact_path)
            if artifact_type == "sensors":
                sensors_dir = os.path.dirname(artifact_path)
                sensor_file_path = os.path.join(sensors_dir, artifact["entry_point"])
                artifact["artifact_uri"] = "file://" + sensor_file_path
            name = artifact.get("name", None) or artifact.get("class_name", None)
            if not artifact.get("pack", None):
                artifact["pack"] = pack_name
            ref = ResourceReference.to_string_reference(name=name, pack=pack_name)
            API_MODEL = API_MODELS_ARTIFACT_TYPES[artifact_type]
            # Following conversions are required because we add some fields with
            # default values in db model. If we don't do these conversions,
            # we'll see a unnecessary diff for those fields.
            artifact_api = API_MODEL(**artifact)
            artifact_db = API_MODEL.to_model(artifact_api)
            artifact_api = API_MODEL.from_model(artifact_db)
            artifacts_dict[ref] = artifact_api

    return artifacts_dict
Пример #7
0
 def test_get_sensors(self):
     packs_base_path = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'resources/packs/')
     loader = ContentPackLoader()
     pack_sensors = loader.get_content(base_dir=packs_base_path,
                                       content_type='sensors')
     self.assertTrue(pack_sensors.get('pack1', None) is not None)
Пример #8
0
 def register_actions_from_packs(self, base_dir):
     pack_loader = ContentPackLoader()
     dirs = pack_loader.get_content(base_dir=base_dir,
                                    content_type='actions')
     for pack, actions_dir in six.iteritems(dirs):
         try:
             actions = self._get_actions_from_pack(actions_dir)
             self._register_actions_from_pack(pack, actions)
         except:
             LOG.exception('Failed registering all actions from pack: %s', actions_dir)
Пример #9
0
 def register_actions_from_packs(self, base_dir):
     pack_loader = ContentPackLoader()
     dirs = pack_loader.get_content(base_dir=base_dir,
                                    content_type='actions')
     for pack, actions_dir in six.iteritems(dirs):
         try:
             actions = self._get_actions_from_pack(actions_dir)
             self._register_actions_from_pack(pack, actions)
         except:
             LOG.exception('Failed registering all actions from pack: %s',
                           actions_dir)
Пример #10
0
 def register_rules_from_packs(self, base_dir):
     pack_loader = ContentPackLoader()
     dirs = pack_loader.get_content(base_dir=base_dir, content_type='rules')
     for pack, rules_dir in six.iteritems(dirs):
         try:
             LOG.info('Registering rules from pack: %s', pack)
             rules = self._get_rules_from_pack(rules_dir)
             self._register_rules_from_pack(pack, rules)
         except:
             LOG.exception('Failed registering all rules from pack: %s',
                           rules_dir)
Пример #11
0
 def register_rules_from_packs(self, base_dir):
     pack_loader = ContentPackLoader()
     dirs = pack_loader.get_content(base_dir=base_dir,
                                    content_type='rules')
     for pack, rules_dir in six.iteritems(dirs):
         try:
             LOG.info('Registering rules from pack: %s', pack)
             rules = self._get_rules_from_pack(rules_dir)
             self._register_rules_from_pack(pack, rules)
         except:
             LOG.exception('Failed registering all rules from pack: %s', rules_dir)
Пример #12
0
    def register_sensors_from_packs(self, base_dir):
        pack_loader = ContentPackLoader()
        dirs = pack_loader.get_content(base_dir=base_dir, content_type='sensors')

        # Add system sensors to the core pack
        dirs['core'] = {}
        dirs['core'] = SYSTEM_SENSORS_PATH

        for pack, sensors_dir in six.iteritems(dirs):
            try:
                LOG.info('Registering sensors from pack: %s', pack)
                sensors = self._get_sensors_from_pack(sensors_dir)
                self._register_sensors_from_pack(pack=pack, sensors=sensors)
            except Exception as e:
                LOG.exception('Failed registering all sensors from pack "%s": %s', sensors_dir,
                              str(e))
Пример #13
0
    def test_get_content_multiple_directories(self):
        packs_base_path_1 = os.path.join(RESOURCES_DIR, 'packs/')
        packs_base_path_2 = os.path.join(RESOURCES_DIR, 'packs2/')
        base_dirs = [packs_base_path_1, packs_base_path_2]

        LOG.warning = Mock()

        loader = ContentPackLoader()
        sensors = loader.get_content(base_dirs=base_dirs, content_type='sensors')
        self.assertTrue('pack1' in sensors)  # from packs/
        self.assertTrue('pack3' in sensors)  # from packs2/

        # Assert that a warning is emitted when a duplicated pack is found
        expected_msg = ('Pack "pack1" already found in '
                        '"%s/packs/", ignoring content from '
                        '"%s/packs2/"' % (RESOURCES_DIR, RESOURCES_DIR))
        LOG.warning.assert_called_once_with(expected_msg)
Пример #14
0
    def test_get_content_multiple_directories(self):
        packs_base_path_1 = os.path.join(RESOURCES_DIR, 'packs/')
        packs_base_path_2 = os.path.join(RESOURCES_DIR, 'packs2/')
        base_dirs = [packs_base_path_1, packs_base_path_2]

        LOG.warning = Mock()

        loader = ContentPackLoader()
        sensors = loader.get_content(base_dirs=base_dirs, content_type='sensors')
        self.assertTrue('pack1' in sensors)  # from packs/
        self.assertTrue('pack3' in sensors)  # from packs2/

        # Assert that a warning is emitted when a duplicated pack is found
        expected_msg = ('Pack "pack1" already found in '
                        '"%s/packs/", ignoring content from '
                        '"%s/packs2/"' % (RESOURCES_DIR, RESOURCES_DIR))
        LOG.warning.assert_called_once_with(expected_msg)
Пример #15
0
def _get_api_models_from_disk(artifact_type, pack_dir=None):
    loader = ContentPackLoader()
    artifacts = None

    if pack_dir:
        artifacts_dir = loader.get_content_from_pack(pack_dir, artifact_type)
        pack_name = os.path.basename(os.path.normpath(pack_dir))
        artifacts = {pack_name: artifacts_dir}
    else:
        packs_dirs = content_utils.get_packs_base_paths()
        artifacts = loader.get_content(packs_dirs, artifact_type)

    artifacts_dict = {}
    for pack_name, pack_path in artifacts.items():
        artifacts_paths = registrar.get_resources_from_pack(pack_path)
        for artifact_path in artifacts_paths:
            artifact = meta_loader.load(artifact_path)
            if artifact_type == 'sensors':
                sensors_dir = os.path.dirname(artifact_path)
                sensor_file_path = os.path.join(sensors_dir,
                                                artifact['entry_point'])
                artifact['artifact_uri'] = 'file://' + sensor_file_path
            name = artifact.get('name', None) or artifact.get(
                'class_name', None)
            if not artifact.get('pack', None):
                artifact['pack'] = pack_name
            ref = ResourceReference.to_string_reference(name=name,
                                                        pack=pack_name)
            API_MODEL = API_MODELS_ARTIFACT_TYPES[artifact_type]
            # Following conversions are required because we add some fields with
            # default values in db model. If we don't do these conversions,
            # we'll see a unnecessary diff for those fields.
            artifact_api = API_MODEL(**artifact)
            artifact_db = API_MODEL.to_model(artifact_api)
            artifact_api = API_MODEL.from_model(artifact_db)
            artifacts_dict[ref] = artifact_api

    return artifacts_dict
Пример #16
0
 def test_get_sensors(self):
     packs_base_path = os.path.join(RESOURCES_DIR, 'packs/')
     loader = ContentPackLoader()
     pack_sensors = loader.get_content(base_dirs=[packs_base_path], content_type='sensors')
     self.assertTrue(pack_sensors.get('pack1', None) is not None)
Пример #17
0
 def test_get_sensors(self):
     packs_base_path = os.path.join(
         os.path.dirname(os.path.realpath(__file__)), 'resources/packs/')
     loader = ContentPackLoader()
     pack_sensors = loader.get_content(base_dir=packs_base_path, content_type='sensors')
     self.assertTrue(pack_sensors.get('pack1', None) is not None)
Пример #18
0
 def test_get_sensors(self):
     packs_base_path = os.path.join(RESOURCES_DIR, 'packs/')
     loader = ContentPackLoader()
     pack_sensors = loader.get_content(base_dirs=[packs_base_path], content_type='sensors')
     self.assertTrue(pack_sensors.get('pack1', None) is not None)