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)
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()
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)))
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)
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()