class StoragedAgent(Agent): def __init__(self, config="%s%s" % (__sysconfdir__, '/rozofs/storage.conf'), daemon='storaged'): Agent.__init__(self, STORAGED_MANAGER) self._daemon_manager = DaemonManager(daemon, ["-c", config], 5) self._reader = ConfigurationReader(config, StoragedConfigurationParser()) self._writer = ConfigurationWriter(config, StoragedConfigurationParser()) def get_service_config(self): configuration = StoragedConfig() return self._reader.read(configuration) def set_service_config(self, configuration): for r in [s.root for s in configuration.storages.values()]: if not os.path.isabs(r): raise Exception('%s: not absolute.' % r) if not os.path.exists(r): os.makedirs(r) if not os.path.isdir(r): raise Exception('%s: not a directory.' % r) self._writer.write(configuration) self._daemon_manager.restart() def get_service_status(self): return self._daemon_manager.status() def set_service_status(self, status): current_status = self._daemon_manager.status() if status == ServiceStatus.STARTED and not current_status: self._daemon_manager.start() if status == ServiceStatus.STOPPED and current_status: self._daemon_manager.stop()
class StoragedAgent(Agent): def __init__(self, config="%s%s" % (__sysconfdir__, '/rozofs/storage.conf'), daemon='storaged'): Agent.__init__(self, STORAGED_MANAGER) self._daemon_manager = DaemonManager(daemon, ["-c", config], 5) self._reader = ConfigurationReader(config, StoragedConfigurationParser()) self._writer = ConfigurationWriter(config, StoragedConfigurationParser()) self._rebuilder = "storage_rebuild" def get_service_config(self): configuration = StoragedConfig() return self._reader.read(configuration) def set_service_config(self, configuration): for s in configuration.storages.values(): if not os.path.isabs(s.root): raise Exception('%s: not absolute.' % s.root) if not os.path.exists(s.root): os.makedirs(s.root) if not os.path.isdir(s.root): raise Exception('%s: not a directory.' % s.root) for dev in range(0, s.device_t): dev_path="%s/%s" % (s.root, str(dev)) if not os.path.isabs(dev_path): raise Exception('%s: not absolute.' % dev_path) if not os.path.exists(dev_path): os.makedirs(dev_path) if not os.path.isdir(dev_path): raise Exception('%s: not a directory.' % dev_path) self._writer.write(configuration) self._daemon_manager.restart() def get_service_status(self): return self._daemon_manager.status() def set_service_status(self, status): current_status = self._daemon_manager.status() changes = None if status == ServiceStatus.STARTED: changes = self._daemon_manager.start() if status == ServiceStatus.STOPPED: changes = self._daemon_manager.stop() return changes def start_rebuild(self, exports_list, cid=None, sid=None, device=None): if cid is not None and sid is not None: if device is not None: cmds = self._rebuilder + ' -s ' + str(cid) + '/' + str(sid) + ' -d ' + str(device) + " -r " + "/".join(exports_list) else: cmds = self._rebuilder + ' -s ' + str(cid) + '/' + str(sid) + " -r " + "/".join(exports_list) else: cmds = self._rebuilder + " -r " + "/".join(exports_list) p = subprocess.Popen(cmds, shell=True, stdin=None, stdout=None, stderr=None, close_fds=True)