Пример #1
0
def manual_backup():
    backend = Backend()
    # keyfile is in vault
    directories_to_backup = action_get('directory-list')
    timestamp = "{:%Y-%m-%d-%H-%M-%S}".format(datetime.datetime.now())
    try:
        log("Running a manual backup on {}".format(directories_to_backup),
            level=DEBUG)
        for directory in directories_to_backup:
            check_output(
                ["/snap/bin/preserve",
                 "--configdir",
                 os.path.join(os.path.expanduser("~"), ".config"),
                 "--loglevel", "error",
                 "create",
                 "{name}-{timestamp}".format(name=directory,
                                             timestamp=timestamp),
                 str(directory),
                 "--backend", backend.get_backend(),
                 "--vault"
                 ])
    except OSError as err:
        log("Create backup failed with error: {}".format(err.message),
            level=ERROR)
        action_fail("List backup failed with error: {}".format(err.message))
Пример #2
0
def list_backups():
    backend = Backend()
    try:
        log("Listing backups", level=DEBUG)
        preserve_list = check_output(
            ["/snap/bin/preserve",
             "--configdir",
             os.path.join(os.path.expanduser("~"), ".config"),
             "--loglevel", "error",
             "list",
             "--vault",
             "--backend", backend.get_backend(),
             "--json"])
        try:
            backup_list = json.loads(preserve_list)
            action_set({"message": backup_list})
        except ValueError as verr:
            log("Unable to load preserve output as json. Error {}".format(
                verr), level=ERROR)
            action_fail(
                "Json loading of preserve output failed: {}".format(verr))

    except OSError as err:
        log("List backup failed with error: {}".format(err.message),
            level=ERROR)
        action_fail("List backup failed with error: {}".format(err.message))
Пример #3
0
def setup_cron_job(cron_spec, directories_list):
    cron_path = os.path.join(os.sep,
                             "etc",
                             "cron.d",
                             "backup")
    context = {'directories': directories_list}
    backend = Backend()

    # Overwrite the file if needed
    try:
        context['cron_spec'] = cron_spec
        context['backend'] = backend.get_backend()
        context['configdir'] = CONFIG_DIR
        # Add --vault flag if vault is related
        if relation_ids('vault'):
            context['vault'] = True
        else:
            context['vault'] = False

        render('backup_cron',
               cron_path,
               context,
               perms=0o644)
    except IOError as err:
        log("Error creating cron file: {}".format(err.message),
            level='error')
Пример #4
0
def restore_backup():
    backend = Backend()
    backup_name = action_get("backup-name")
    restore_path = action_get("restore-path")

    if not os.path.exists(restore_path):
        log("Creating restore path: {}".format(restore_path))
        os.mkdir(restore_path)
    try:
        log("Restoring backup {} to {}".format(backup_name, restore_path),
            level=DEBUG)
        check_output(
            ["/snap/bin/preserve",
             "--configdir",
             os.path.join(os.path.expanduser("~"), ".config"),
             "--loglevel", "error",
             "restore",
             "--backend", backend.get_backend(),
             "--vault",
             backup_name, restore_path])

    except OSError as err:
        log("Restore backup failed with error: {}".format(err.message),
            level=ERROR)
        action_fail("Restore backup failed with error: {}".format(err.message))