コード例 #1
0
def reschedule(conf, lb_ref):
    filters, cost_functions = _process_config(conf)
    device_ref = db_api.device_get(conf, lb_ref['device_id'])
    try:
        _filter_devices(conf, lb_ref, [device_ref], filters)
    except exp.NoValidDevice:
        devices = db_api.device_get_all(conf)
        devices = [dev_ref for dev_ref in devices
                       if dev_ref['id'] != device_ref['id']]
        filtered = _filter_devices(conf, lb_ref, devices, filters)
        weighted = _weight_devices(conf, lb_ref, filtered, cost_functions)
        return weighted[0][1]
    else:
        return device_ref
コード例 #2
0
def get_device_driver(conf, device_id):
    try:
        return DEVICE_DRIVERS[device_id]
    except KeyError:
        conf.register_opt(drivers_opt)
        drivers = {}
        for driver_str in conf.device_drivers:
            driver_type, _sep, driver = driver_str.partition('=')
            drivers[driver_type.lower()] = utils.import_class(driver)

        device_ref = db_api.device_get(conf, device_id)
        try:
            cls = drivers[device_ref['type'].lower()]
        except KeyError:
            raise NotImplementedError("Driver not found for type %s" % \
                                        (device_ref['type'],))
        DEVICE_DRIVERS[device_id] = cls(conf, device_ref)
        return DEVICE_DRIVERS[device_id]