def _dump_db_mongo(state): invocation = ["mongodump", "-h", state.model.host, "-o", os.path.join(state.model.dir_temp, state.model.atype)] if state.model.user and state.model.password: invocation.append("-u") invocation.append(state.model.user) invocation.append("-p") invocation.appned(state.model.password) res, err, msg = cmdutil.call_cmd(invocation) if err: return 1, "Error during Mongo DB dump: {}".format(msg) else: return 0, None
def _archive_dirs(state): name = '-'.join(state.model.description.lower().split()) if len(name) > 100: name = name[:99] state.archive_filename = "{}_{}.tar.gz".format( name, state.model.date_str) state.archive_filepath = os.path.join( state.model.dir_temp, state.archive_filename ) # Read TAR help on -C option: # http://www.gnu.org/software/tar/manual/html_section/one.html#SEC117 invocation = ['tar', '-czvf', state.archive_filepath] # Append each dir for d in state.model.dirs: parent, folder = fsutil.path_to_body_tail(d) # If either is empty then we don't support this one if not parent or not folder: _D.WARNING( __name__, "Directory path cannot be split for archiving, skipping it", 'dir', d, 'parent', parent, 'folder', folder ) continue invocation.append('-C') invocation.append(parent) invocation.append(folder) res, err, msg = cmdutil.call_cmd(invocation) if err: return 1, "Error archiving dirs: {}".format(msg) else: return 0, None pass
def _dump_db_mysql(state): warn = "MySQL dump not fully tested. Currently backs up all DBs" state.add_msg_warning(warn) _D.WARNING(__name__, warn) state.dump_filepath_mysql = os.path.join(state.model.dir_temp, "{}.sql".format(state.model.atype)) invocation = ["mysqldump"] if state.model.user and state.model.password: invocation.append('-u"{}"'.format(state.model.user)) invocation.append('-p"{}"'.format(state.model.password)) invocation.append("--all-databases") invocation.append("-r") invocation.append(state.dump_filepath_mysql) res, err, msg = cmdutil.call_cmd(invocation) if err: return 1, "Error during MySQL DB dump: {}".format(msg) else: return 0, None
def exec_command(invocation): # Access app context to check for dry run parameter dry_run, err, msg = context.get_param('-dry') if err: _D.ERROR( __name__, "Error obtaining context parameter", 'key', '-dry', 'msg', msg ) return "Error", 1, "Error obtaining context parameter '{}': {}".format('-dry', msg) # Do dry run, and return if dry_run: _D.WARNING( __name__, "gsutil DRY RUN", 'cmd', invocation ) return "Dry run", 0, None # Get optional gsutil path from app model filepath, err, msg = context.get_param('gsutil') if err: _D.ERROR( __name__, "Error obtaining context parameter", 'key', 'gsutil', 'msg', msg ) return "Error", 1, "Error obtaining context parameter '{}': {}".format('-dry', msg) # Use filepath if provided if filepath: invocation[0] = os.path.join(filepath, invocation[0]) # Call subprocess return cmdutil.call_cmd(invocation)
def _archive_dump(state): state.archive_filename = "{}_{}.tar.gz".format(state.model.atype, state.model.date_str) state.archive_filepath = os.path.join(state.model.dir_temp, state.archive_filename) # Read TAR help on -C option: # http://www.gnu.org/software/tar/manual/html_section/one.html#SEC117 if state.model.atype == "db_mongo": invocation = ["tar", "-czvf", state.archive_filepath, "-C", state.model.dir_temp, state.model.atype] elif state.model.atype == "db_mysql": invocation = [ "tar", "-czvf", state.archive_filepath, "-C", state.model.dir_temp, os.path.basename(state.dump_filepath_mysql), ] res, err, msg = cmdutil.call_cmd(invocation) if err: return 1, "Error archiving DB dump: {}".format(msg) else: return 0, None