class Transfer(Rsync, SFtp, Copy):
    def __init__(self, method):
        self.methodDict = ["rsync", "copy", "sftp"]
        self.setServerFlag = 0
        self.method = method
        if self.method not in self.methodDict:
            raise TransferError(method + " type of transfer is not " + "implemented")

    def setServerParams(self, server, uname, passwd):
        if self.method == "rsync":
            self.rsyncObj = Rsync(server, uname, passwd)
        elif self.method == "sftp":
            self.sftpObj = SFtp(server, uname, passwd)

    def copy(self, src, dest, toServer=None):
        self.copyObj = Copy()
        if self.method == "rsync":
            if not toServer == None:
                self.rsyncObj.run(src, dest, toServer)
            else:
                raise TransferError("Did not specify transfer " + "direction")
            return
        if os.path.isdir(src):
            if self.method == "sftp":
                raise TransferError("Cannot transfer directories " + "using sftp")
            else:
                self.copyObj.copytree(src, dest)
        else:
            if self.method == "sftp":
                if os.path.isdir(dest):
                    raise TransferError("Cannot transfer to dir " + "using sftp")
                self.sftpObj.copy_file(src, dest)
            else:
                self.copyObj.copy(src, dest)
Пример #2
0
def run(argv):
    parser = argparse.ArgumentParser(
            description='Add a more elaborate description here, later.'
    )

    parser.add_argument('-v', '--verbose', action='store_true',
                        help='throw a racket about what we are doing')
    parser.add_argument('-V', '--version', action='version',
                        version='%(prog)s 0.1-alpha')
    args = parser.parse_args(argv)

    conf = Config()

    if args.verbose:
        conf.verbose = True

    utils = Utils()

    if not utils.exists_rsync():
        print "Could not find rsync -- is it installed?"
        sys.exit(1)

    if not utils.check_version((3,0,9)):
        print "Installed rsync is too old. Please upgrade!"
        sys.exit(1)


    for server in conf.servers:
        rsync = Rsync(server, conf)
        rsync.run()
Пример #3
0
def pull_report(report_source):
    l.debug("Pulling remote report '%s'" % report_source)
    tmpdir = tempfile.mkdtemp(prefix="b1000-remote-report-")

    try:
        rsync = Rsync("remote_report", report_source, tmpdir, "")
        rsync.run()

        reports = os.listdir(tmpdir)

        report = ConfigParser.RawConfigParser()
        report.readfp(open(tmpdir + "/" + reports[0]))
    except Exception, e:
        raise NoReportException("Could not read report file '%s'. Exception: %s" % (report_source, str(e)))
Пример #4
0
    def __notify_remote(self, status):
        l.debug("Sending notification '%s' to remote '%s'" % (status, self.report_source))

        tmpdir = tempfile.mkdtemp(prefix="b1000-remote-notify-")
        status_file = tmpdir + "/" + self.remote_report_file + "." + platform.node() + "." + status

        # prepare message file
        open(status_file, "w").close()

        # rsync messge file
        try:
            rsync = Rsync("remote_notify", status_file, self.report_source, "")
            rsync.run()
        except:
            raise
        finally:
            shutil.rmtree(tmpdir, ignore_errors=True)
Пример #5
0
class DestRsync(Dest):

    params_required = ['type', 'path']
    params_allowed = ['verbosity', 'exclude']

    # --------------------------------------------------------------------
    def __init__(self, job, cfg, name, bg):
        l.debug("Adding rsync destination '%s' (background: %s) to job '%s'" % (name, str(bg), job.real_name))

        Dest.__init__(self, job, cfg, name, bg)

        self.exclude = cfg.get_def(self.sname, "exclude", "")
        self.verbosity = int(cfg.get_def(self.sname, "verbosity", "1"))

        self.path = self.__prepare_path()

        self.retries = int(cfg.get_def("global", "copy_retries", '3'))
        self.retry_sleep = int(cfg.get_def("global", "copy_retries", '60'))

    # --------------------------------------------------------------------
    def __prepare_path(self):
        path = self.cfg.get(self.sname, "path")

        if not path.endswith("/"):
            path += "/"

        path += self.job.get_job_path()

        return path

    # --------------------------------------------------------------------
    def copy(self):
        excludes = self.job.exclude + " " + self.exclude
        l.debug("Copying '%s' to '%s' on destination '%s' excluding: '%s'" % (self.job.include, self.path, self.name, excludes))
        self.rsync = Rsync(self.name, self.job.include, self.path, excludes)
        self.rsync.set_verbosity(self.verbosity)
        self.retries -= 1
        self.rsync.run()