Example #1
0
def find_policy(target_name, policy_name):

    policy = None

    paths = MICROPROBE_RC["architecture_paths"] \
        + MICROPROBE_RC["default_paths"]

    policyfiles = findfiles(paths, "policies/.*.py$", full=True)

    for policyfile in policyfiles:

        name = (os.path.basename(policyfile).replace(".py", ""))
        module = load_source("%s_test" % name, policyfile)
        pdef = dict(inspect.getmembers(module))

        if len(
            [elem for elem in pdef if elem in _POLICY_ATTRIBUTES]
        ) != len(_POLICY_ATTRIBUTES):
            continue

        if (target_name not in pdef['SUPPORTED_TARGETS'] and
                "all" not in pdef['SUPPORTED_TARGETS']):
            continue

        if pdef['NAME'] != policy_name:
            continue

        if policy is not None:
            raise MicroprobePolicyError(
                "Multiple policies found for '%s' in target '%s'" %
                (policy_name, target_name)
            )

        # Reload source for good policy with correct module
        # name
        module = load_source("%s" % name, policyfile)
        pdef = dict(inspect.getmembers(module))
        policy = Policy(
            pdef['NAME'], pdef['DESCRIPTION'], pdef['policy'],
            pdef['SUPPORTED_TARGETS'], pdef
        )

    if policy is None:
        raise MicroprobePolicyError(
            "No policies found for '%s' in target '%s'" %
            (policy_name, target_name)
        )

    return policy
Example #2
0
def _import_default_wrappers():
    modules = []
    LOG.debug('Wrapper paths: %s', MICROPROBE_RC['wrapper_paths'])
    for path in MICROPROBE_RC['wrapper_paths']:
        for module in findfiles([path], r"wrappers/.+\.py$", full=True):
            module = os.path.realpath(module)
            if module not in modules:
                modules.append(module)

    lmodules = -1
    while lmodules != len(modules):
        lmodules = len(modules)
        for module_file in modules[:]:

            name = (os.path.basename(module_file).replace(".py", ""))

            if name == "__init__":
                continue

            if name in microprobe.code.wrapper.__dict__:
                raise MicroprobeError(
                    "Wrapper module name '%s' in '%s' already loaded. " %
                    (name, module_file)
                )

            try:
                module = load_source(name, module_file)
            except MicroprobeValueError:
                continue

            microprobe.code.wrapper.__dict__[name] = module
            modules.remove(module_file)

            current_wrappers = \
                [elem.__name__ for elem in
                 get_all_subclasses(microprobe.code.wrapper.Wrapper)
                 ]

            if len(current_wrappers) != len(set(current_wrappers)):
                for elem in set(current_wrappers):
                    current_wrappers.remove(elem)
                overwrapper = list(set(current_wrappers))[0]
                raise MicroprobeError(
                    "Module name '%s' in '%s' overrides an existing wrapper "
                    "with name '%s'" % (name, module_file, overwrapper)
                )