Esempio n. 1
0
def load_config(configdb, args = None):
    args = argv[1:] if args is None else args
    set_debug_details(args.count('--debug')+args.count('-d'))

    default_config = config.DefaultValueLoader().load(configdb)
    _logger.info('default config:\n\t%s', config.pretty(default_config, '\n\t'))

    # parse cli options at first because we need the config file path in it
    cli_config = config.CommandLineArgumentsLoader().load(configdb, argv[1:])
    _logger.info('cli arg parsed:\n\t%s', config.pretty(cli_config, '\n\t'))
    run_config = config.merge_config(default_config, cli_config)

    if run_config.generate_config:
        generate_config_file(configdb, run_config)

    try:
        conf_config = config.from_file(configdb, run_config.config_file)
    except config.ConfigFileLoader.ConfigValueError as err:
        _logger.error(err)
        sysexit(1)

    _logger.info('config file parsed:\n\t%s', config.pretty(conf_config, '\n\t'))
    run_config = config.merge_config(run_config, conf_config)

    # override saved settings again with cli options again, because we want
    # command line options to take higher priority
    run_config = config.merge_config(run_config, cli_config)
    if run_config.setter_args:
        run_config.setter_args = ','.join(run_config.setter_args).split(',')
    else:
        run_config.setter_args = list()
    _logger.info('running config is:\n\t%s', config.pretty(run_config, '\n\t'))
    return run_config
Esempio n. 2
0
def load_config(configdb, args=None):
    args = argv[1:] if args is None else args
    set_debug_details(args.count('--debug') + args.count('-d'))

    default_config = config.DefaultValueLoader().load(configdb)
    _logger.debug('default config:\n\t%s',
                  config.pretty(default_config, '\n\t'))

    # parse cli options at first because we need the config file path in it
    cli_config = config.CommandLineArgumentsLoader().load(configdb, argv[1:])
    _logger.debug('cli arg parsed:\n\t%s', config.pretty(cli_config, '\n\t'))
    run_config = config.merge_config(default_config, cli_config)

    if run_config.generate_config:
        generate_config_file(configdb, run_config)

    config_file = run_config.config_file
    if not isfile(config_file):
        _logger.warning(
            "can't find config file %s, use default settings and cli settings",
            config_file)
    else:
        try:
            conf_config = config.from_file(configdb, run_config.config_file)
        except config.ConfigFileLoader.ConfigValueError as err:
            _logger.error(err)
            sysexit(1)

        _logger.debug('config file parsed:\n\t%s',
                      config.pretty(conf_config, '\n\t'))
        run_config = config.merge_config(run_config, conf_config)

    # override saved settings again with cli options again, because we want
    # command line options to take higher priority
    run_config = config.merge_config(run_config, cli_config)
    if run_config.setter_args:
        run_config.setter_args = ','.join(run_config.setter_args).split(',')
    else:
        run_config.setter_args = list()

    # backward compatibility modifications
    if run_config.size_mode == 'collect':
        _logger.warning(
            'size_mode=collect is obsolete, considering use collect=accompany instead'
        )
        run_config.size_mode = 'highest'
        if 'accompany' not in run_config.collect:
            run_config.collect.append('accompany')

    _logger.info('running config is:\n\t%s', config.pretty(run_config, '\n\t'))
    return run_config
Esempio n. 3
0
def load_config(configdb, args = None):
    args = argv[1:] if args is None else args
    set_debug_details(args.count('--debug')+args.count('-d'))

    default_config = config.DefaultValueLoader().load(configdb)
    _logger.debug('default config:\n\t%s', config.pretty(default_config, '\n\t'))

    # parse cli options at first because we need the config file path in it
    cli_config = config.CommandLineArgumentsLoader().load(configdb, argv[1:])
    _logger.debug('cli arg parsed:\n\t%s', config.pretty(cli_config, '\n\t'))
    run_config = config.merge_config(default_config, cli_config)

    if run_config.generate_config:
        generate_config_file(configdb, run_config)

    config_file = run_config.config_file
    if not isfile(config_file):
        _logger.warning("can't find config file %s, use default settings and cli settings",
                config_file)
    else:
        try:
            conf_config = config.from_file(configdb, run_config.config_file)
        except config.ConfigFileLoader.ConfigValueError as err:
            _logger.error(err)
            sysexit(1)

        _logger.debug('config file parsed:\n\t%s', config.pretty(conf_config, '\n\t'))
        run_config = config.merge_config(run_config, conf_config)

    # override saved settings again with cli options again, because we want
    # command line options to take higher priority
    run_config = config.merge_config(run_config, cli_config)
    if run_config.setter_args:
        run_config.setter_args = ','.join(run_config.setter_args).split(',')
    else:
        run_config.setter_args = list()

    # backward compatibility modifications
    if run_config.size_mode == 'collect':
        _logger.warning(
            'size_mode=collect is obsolete, considering use collect=accompany instead'
        )
        run_config.size_mode = 'highest'
        if 'accompany' not in run_config.collect:
            run_config.collect.append('accompany')

    _logger.info('running config is:\n\t%s', config.pretty(run_config, '\n\t'))
    return run_config
    def test_merge(self):
        ns1 = Namespace()
        ns2 = Namespace()
        ns1.param1 = 123
        ns2.param1 = 456
        ns1.parama = 'a'
        ns2.paramb = ('1', 2, 's')
        ans = config.merge_config(ns1, ns2)
        self.assertEqual(ns1.param1, 123)
        self.assertEqual(ns2.param1, 456)
        self.assertEqual(ans.param1, 456)

        self.assertEqual(ns1.parama, 'a')
        self.assertFalse(hasattr(ns2, 'parama'))
        self.assertEqual(ans.parama, 'a')

        self.assertFalse(hasattr(ns1, 'paramb'))
        self.assertEqual(ns2.paramb, ('1', 2, 's'))
        self.assertEqual(ans.paramb, ('1', 2, 's'))
Esempio n. 5
0
    def test_merge(self):
        ns1 = Namespace()
        ns2 = Namespace()
        ns1.param1 = 123
        ns2.param1 = 456
        ns1.parama = 'a'
        ns2.paramb = ('1', 2, 's')
        ans = config.merge_config(ns1, ns2)
        self.assertEqual(ns1.param1, 123)
        self.assertEqual(ns2.param1, 456)
        self.assertEqual(ans.param1, 456)

        self.assertEqual(ns1.parama, 'a')
        self.assertFalse(hasattr(ns2, 'parama'))
        self.assertEqual(ans.parama, 'a')

        self.assertFalse(hasattr(ns1, 'paramb'))
        self.assertEqual(ns2.paramb, ('1', 2, 's'))
        self.assertEqual(ans.paramb, ('1', 2, 's'))
Esempio n. 6
0
def compile_set(config_set, set_id=None):
    repo = "https://github.com/openwrt/openwrt.git"
    if config_set.get("repo"):
        repo = config_set["repo"]

    build_directory: str = args.build_directory
    if set_id is not None:
        build_directory = os.path.join(build_directory, str(set_id))

    repo_path: str = pull_repo(build_directory, repo, config_set["branch"],
                               config_set["extra_feeds"])

    task_list = []

    for template in config_set["templates"]:
        for device in config_set["devices"]:
            name, device_config = merge_config(template, device)
            logging.info("Creating build environment for {}.".format(name))
            build_path: str = os.path.join(build_directory, name)
            output_directory: str = None
            if set_id is None:
                output_directory = os.path.join(args.output_directory, name)
            else:
                output_directory = os.path.join(args.output_directory,
                                                str(set_id), name)
            shutil.copytree(repo_path, build_path)
            device_config.update({
                "build_dir": build_path,
                "out_dir": output_directory
            })
            logging.info("Scheduling {} for built.".format(name))
            task_list.append(device_config)

    logging.info("Starting compiling.")
    no_errors: bool = True
    with Pool() as p:
        for name, success in p.map(build_image, task_list):
            if success:
                logging.info("Successfully compiled image {}.".format(name))
            else:
                no_errors = False
                logging.info("Failed to compile image {}.".format(name))
    return no_errors