def transfer(self, files, dest_dir):
md5 = {}
def md5sum(file):
return run("md5sum %s | awk '{print $1}'" % file)
def wget_files(filenames, dest_dir):
mk_remote_dir(dest_dir)
with cd(dest_dir):
for each_filename in filenames:
#?????????????????ip?????????????????????md5??????????md5?????????????????????????wget -O?????!!)????????????????
file_exits = file_exists_check(each_filename)
if file_exits:
if md5[each_filename] == md5sum(each_filename):
break
run('''{0} -O {1} --header="Host:{2}" http://{3}/{1}'''.format(WGET, each_filename, self.server_name, self.source_ext_ip))
@hosts(self.source_ip)
def _transfer(files, dest_dir):
filenames = retrieve_file_names(files)
root_dir = '/app/opbak/download_{}_{}'.format(TIMESTAMP, self.server_name)
with setting_trans_env(self.server_name):
for each_file in files:
filename = os.path.basename(each_file)
md5[filename] = md5sum(each_file)
with cd(root_dir):
run('ln -sf {} {}'.format(each_file, filename))
execute(wget_files, filenames, dest_dir, hosts=[self.target_ip])
@hosts(self.source_ip)
def _copy(files, dest_dir):
for each_file in files:
run('{} {} {}/'.format(RSYNC, each_file, dest_dir))
def _execute_transfer():
if self.source_ip == self.target_ip:
execute(_copy, files, dest_dir)
else:
execute(_transfer, files, dest_dir)
if self._debug:
_execute_transfer()
else:
with settings(hide('everything')):
_execute_transfer()
#End class Uploader
########################################################################
评论列表
文章目录