proper rsync args when restoring
This commit is contained in:
parent
6753fd250f
commit
582d3bf230
|
@ -12,7 +12,8 @@ from threading import Thread
|
||||||
|
|
||||||
|
|
||||||
SSH_KEY_PATH = environ["DATADB_KEYPATH"] if "DATADB_KEYPATH" in environ else '/root/.ssh/datadb.key'
|
SSH_KEY_PATH = environ["DATADB_KEYPATH"] if "DATADB_KEYPATH" in environ else '/root/.ssh/datadb.key'
|
||||||
RSYNC_DEFAULT_ARGS = ['rsync', '-avzr', '--exclude=.datadb.lock', '--whole-file', '--one-file-system', '--delete']
|
RSYNC_DEFAULT_ARGS = ['rsync', '-avzr', '-e', 'ssh -o StrictHostKeyChecking=no',
|
||||||
|
'--exclude=.datadb.lock', '--whole-file', '--one-file-system', '--delete']
|
||||||
DATADB_HTTP_API = environ.get('DATADB_HTTP_API', 'http://datadb.services.davepedu.com:4875/cgi-bin/')
|
DATADB_HTTP_API = environ.get('DATADB_HTTP_API', 'http://datadb.services.davepedu.com:4875/cgi-bin/')
|
||||||
|
|
||||||
|
|
||||||
|
@ -67,12 +68,13 @@ def restore(profile, conf, force=False): # remote_uri, local_dir, identity='/ro
|
||||||
|
|
||||||
if dest.scheme == 'rsync':
|
if dest.scheme == 'rsync':
|
||||||
args = RSYNC_DEFAULT_ARGS[:]
|
args = RSYNC_DEFAULT_ARGS[:]
|
||||||
|
args += ['-e', 'ssh -i {} -p {}'.format(SSH_KEY_PATH, dest.port or 22)]
|
||||||
|
|
||||||
# Request backup server to prepare the backup, the returned dir is what we sync from
|
# Request backup server to prepare the backup, the returned dir is what we sync from
|
||||||
rsync_path = get(DATADB_HTTP_API + 'get_backup', params={'proto': 'rsync', 'name': profile}).text.rstrip()
|
rsync_path = get(DATADB_HTTP_API + 'get_backup', params={'proto': 'rsync', 'name': profile}).text.rstrip()
|
||||||
|
|
||||||
# Add rsync source path
|
# Add rsync source path
|
||||||
args.append('nexus@{}:{}'.format(dest.netloc, normpath(rsync_path) + '/'))
|
args.append('nexus@{}:{}'.format(dest.hostname, normpath(rsync_path) + '/'))
|
||||||
|
|
||||||
# Add local dir
|
# Add local dir
|
||||||
args.append(normpath(conf["dir"]) + '/')
|
args.append(normpath(conf["dir"]) + '/')
|
||||||
|
@ -85,7 +87,7 @@ def restore(profile, conf, force=False): # remote_uri, local_dir, identity='/ro
|
||||||
# download tarball
|
# download tarball
|
||||||
args_curl = ['curl', '-s', '-v', '-XGET', '{}get_backup?proto=archive&name={}'.format(DATADB_HTTP_API, profile)]
|
args_curl = ['curl', '-s', '-v', '-XGET', '{}get_backup?proto=archive&name={}'.format(DATADB_HTTP_API, profile)]
|
||||||
# unpack
|
# unpack
|
||||||
args_tar = ['tar', 'zxv', '-C', normpath(conf["dir"]) + '/']
|
args_tar = [get_tarcmd(), 'zxv', '-C', normpath(conf["dir"]) + '/']
|
||||||
|
|
||||||
print("Tar restore call: {} | {}".format(' '.join(args_curl), ' '.join(args_tar)))
|
print("Tar restore call: {} | {}".format(' '.join(args_curl), ' '.join(args_tar)))
|
||||||
|
|
||||||
|
@ -122,7 +124,7 @@ def backup(profile, conf, force=False):
|
||||||
|
|
||||||
if dest.scheme == 'rsync':
|
if dest.scheme == 'rsync':
|
||||||
args = RSYNC_DEFAULT_ARGS[:]
|
args = RSYNC_DEFAULT_ARGS[:]
|
||||||
args += ['-e', 'ssh -i {} -p {} -o StrictHostKeyChecking=no'.format(SSH_KEY_PATH, dest.port or 22)]
|
args += ['-e', 'ssh -i {} -p {}'.format(SSH_KEY_PATH, dest.port or 22)]
|
||||||
# args += ["--port", str(dest.port or 22)]
|
# args += ["--port", str(dest.port or 22)]
|
||||||
|
|
||||||
# Excluded paths
|
# Excluded paths
|
||||||
|
@ -163,13 +165,18 @@ def backup(profile, conf, force=False):
|
||||||
# CD to local source dir
|
# CD to local source dir
|
||||||
# tar+gz data and stream to backup server
|
# tar+gz data and stream to backup server
|
||||||
|
|
||||||
args_tar = ['ionice', '-c', '3',
|
args_tar = []
|
||||||
'nice', '-n', '19',
|
|
||||||
'tar', '--exclude=.datadb.lock',
|
if has_binary("ionice"):
|
||||||
'--warning=no-file-changed',
|
args_tar += ['ionice', '-c', '3']
|
||||||
'--warning=no-file-removed',
|
|
||||||
'--warning=no-file-ignored',
|
args_tar += ['nice', '-n', '19']
|
||||||
'--warning=no-file-shrank']
|
args_tar += [get_tarcmd(),
|
||||||
|
'--exclude=.datadb.lock',
|
||||||
|
'--warning=no-file-changed',
|
||||||
|
'--warning=no-file-removed',
|
||||||
|
'--warning=no-file-ignored',
|
||||||
|
'--warning=no-file-shrank']
|
||||||
|
|
||||||
# Use pigz if available (Parallel gzip - http://zlib.net/pigz/)
|
# Use pigz if available (Parallel gzip - http://zlib.net/pigz/)
|
||||||
if has_binary("pigz"):
|
if has_binary("pigz"):
|
||||||
|
@ -245,6 +252,10 @@ def shell_exec(cmd, workdir='/tmp/'):
|
||||||
subprocess.Popen(cmd, shell=True, cwd=workdir).wait()
|
subprocess.Popen(cmd, shell=True, cwd=workdir).wait()
|
||||||
|
|
||||||
|
|
||||||
|
def get_tarcmd():
|
||||||
|
return "gtar" if has_binary("gtar") else "tar"
|
||||||
|
|
||||||
|
|
||||||
def has_binary(name):
|
def has_binary(name):
|
||||||
"""
|
"""
|
||||||
Check if the passed command is available
|
Check if the passed command is available
|
||||||
|
|
Loading…
Reference in New Issue