summaryrefslogtreecommitdiffstats
path: root/ci/mongodb_backup.py
diff options
context:
space:
mode:
authorSerenaFeng <feng.xiaowei@zte.com.cn>2018-01-31 10:22:06 +0800
committerSerenaFeng <feng.xiaowei@zte.com.cn>2018-01-31 10:22:06 +0800
commit9790347c6b91e692f79bf2c5d735ffff6c6f74ae (patch)
tree4d3ef4d3b5f871e02e157fc18a0cfafe44fbbefc /ci/mongodb_backup.py
parent98fde9b5bd0eaf5bf5acb76dc530925a3cc19881 (diff)
bugfix: database backup failed due to no mongodb_backup.py
Change-Id: Ic8fddd17f53d4b21c074094360231c0d6de48b6c Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
Diffstat (limited to 'ci/mongodb_backup.py')
-rw-r--r--ci/mongodb_backup.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/ci/mongodb_backup.py b/ci/mongodb_backup.py
new file mode 100644
index 0000000..263232a
--- /dev/null
+++ b/ci/mongodb_backup.py
@@ -0,0 +1,82 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corporation
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import argparse
+import os
+import subprocess
+import urlparse
+
+import datetime
+
+
+def get_abspath(path):
+ assert os.path.isdir(path), 'Path %s can\'t be found.' % path
+ return os.path.abspath(path)
+
+
+def parse_mongodb_url(url):
+ url = urlparse.urlparse(url)
+ assert url.scheme == 'mongodb', 'URL must be a MongoDB URL'
+ return url
+
+
+def url_parse(url):
+ url = parse_mongodb_url(url)
+ return url.username, url.password, url.hostname, url.port
+
+
+def execute(cmd, args):
+ execute_output = subprocess.check_output(cmd)
+ print(execute_output)
+
+
+def do_backup(args):
+ db = args.db
+ out = get_abspath(args.output_dir)
+ now = datetime.datetime.now()
+ out = os.path.join(out, '%s__%s' % (db, now.strftime('%Y_%m_%d_%H%M%S')))
+ cmd = ['mongodump', '-o', '%s' % out]
+ if db:
+ cmd.extend(['--db', '%s' % db])
+
+ (username, password, hostname, port) = url_parse(args.url)
+ cmd.extend(['--host', '%s' % hostname, '--port', '%s' % port])
+
+ if username:
+ cmd.extend(['-u', '%s' % username])
+ if password:
+ cmd.extend(['-p', '%s' % password])
+ print('execute: %s' % cmd)
+ execute(cmd, args)
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description='Backup MongoDBs')
+
+ parser.add_argument('-u', '--url',
+ type=str,
+ required=False,
+ default='mongodb://127.0.0.1:27017/',
+ help='Mongo DB URL for Backups')
+ parser.add_argument('-o', '--output_dir',
+ type=str,
+ required=False,
+ default='./',
+ help='Output directory for the backup.')
+
+ parser.add_argument('-d', '--db',
+ type=str,
+ required=False,
+ default='test_results_collection',
+ help='database for the backup.')
+
+ args = parser.parse_args()
+ try:
+ do_backup(args)
+ except AssertionError as msg:
+ print(msg)