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
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]