Beispiel #1
0
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()
Beispiel #2
0
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)