Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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)
Exemple #5
0
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