Beispiel #1
0
def run_backup():
    """
    Main method that performs the backup.
    """
    commandArgs = getArgs()
    if commandArgs.version:
        print("caatinga version: " + __version__)
        exit(0)

    settings = fn.getSettingsInstance(commandArgs)
    lockFileName = settings.hostName + "-caatinga"
    SettingsValidator().validate(settings)
    bkHome = fn.getBackupHome(settings.backupLocation, settings.hostName)
    lockFile = backup.getLockFile("/tmp", lockFileName)
    outWriter = fn.getOutputWriter(commandArgs.verbose)
    previousBackup = os.path.realpath(fn.getLatestLink(bkHome))

    fn.runHooks(settings.preBackupHooksDir)
    checkForRegisterOption(settings, commandArgs, bkHome)
    insureBackupLocationIsRegistered(
        settings.backupLocation,
        settings.hostName)
    lock(lockFile)
    runNonBackupFunctions(bkHome, settings, commandArgs, outWriter, lockFile)
    executeBackup(bkHome, previousBackup, settings, outWriter, lockFile)
    runMaintenanceFunctions(bkHome, settings, outWriter)
    fn.runHooks(settings.postBackupHooksDir)
Beispiel #2
0
def listFiles(args, settings):
    """
    Main function for the list option.
    """
    wordArgs = fn.parseWordArgs(args)
    home = fn.getBackupHome(settings.backupLocation, settings.hostName)
    backups = fn.getBackupsForArgs(wordArgs, fn.getBackups(home))
    backupWd = fn.removeAltRoot(settings.root, os.getcwd())
    for id_ in backups.keys():
        items = fn.expandGlob(home, backups[id_], backupWd, wordArgs["glob"])
        for item in items:
            _outputItemInfo(id_, fn.getInfo(item))
Beispiel #3
0
def remove(args, settings):
    """
    Main function for the remove option.
    """
    wordArgs = fn.parseWordArgs(args)
    _validateArgs(wordArgs)
    home = fn.getBackupHome(settings.backupLocation, settings.hostName)
    backups = fn.getBackupsForArgs(wordArgs, fn.getBackups(home))
    backupWd = fn.removeAltRoot(settings.root, os.getcwd())
    for id_ in backups.keys():
        items = fn.expandGlob(home, backups[id_], backupWd, wordArgs["glob"])
        for item in items:
            _delete(item)
Beispiel #4
0
def restore(args, settings):
    """
    Main function for the restore option.
    """
    wordArgs = fn.parseWordArgs(args)
    _validateArgs(wordArgs)
    home = fn.getBackupHome(settings.backupLocation, settings.hostName)
    fn.insureBackupHomeExists(home)
    backup = fn.getBackupOrLatest(wordArgs, home)
    cwd = os.getcwd()
    backupWd = fn.removeAltRoot(settings.root, cwd)
    items = fn.expandGlob(home, backup, backupWd, wordArgs["glob"])
    _validateItems(items, wordArgs)
    for item in items:
        _restoreItem(item, cwd, wordArgs["as"])
Beispiel #5
0
def info(args, settings):
    """
    Main function for the info option.
    """
    backupHome = fn.getBackupHome(settings.backupLocation, settings.hostName)
    backupCount = len(fn.getBackups(backupHome))
    dtFormat = "%m/%d/%Y %H:%M:%S"
    lastBackupRan = fn.toDateTime(
        fn.getLatestBackup(backupHome)).strftime(dtFormat)
    driveUsagePercentage = fn.getDriveUsagePercentage(backupHome)
    fmt = "{0:<20} {1}"

    print(fmt.format("Backup location:", settings.backupLocation))
    print(fmt.format("Host Name:", settings.hostName))
    print(fmt.format("Number of Backups:", backupCount))
    print(fmt.format("Last Backup Ran:", lastBackupRan))
    print(fmt.format("Drive Capacity:", "{0}%".format(driveUsagePercentage)))
Beispiel #6
0
def diff(args, settings):
    """
    Main function for the diff option.
    """
    wordArgs = fn.parseWordArgs(args)
    _validateArgs(wordArgs)
    home = fn.getBackupHome(settings.backupLocation, settings.hostName)
    fn.insureBackupHomeExists(home)
    backup = fn.getBackupOrLatest(wordArgs, home)
    cwd = os.getcwd()
    backupWd = fn.removeAltRoot(settings.root, cwd)
    items = fn.expandGlob(home, backup, backupWd, wordArgs["glob"])
    _validateItems(items)
    localFile = _getLines(join(cwd, wordArgs["glob"]))
    backupFile = _getLines(items[0])
    diff = _getDiff()
    sys.stdout.writelines(diff(backupFile, localFile))
Beispiel #7
0
def changes(args, settings):
    """
    Main function for the changes option.
    """
    wordArgs = fn.parseWordArgs(args)
    _validateArgs(wordArgs)
    home = fn.getBackupHome(settings.backupLocation, settings.hostName)
    fn.insureBackupHomeExists(home)
    backup = fn.getBackupOrLatest(wordArgs, home)
    cwd = os.getcwd()
    backupWd = fn.removeAltRoot(settings.root, cwd)
    backedUpFiles = fn.expandGlob(home, backup, backupWd, "*")
    backupDir = join(home, backup) + backupWd
    allFiles = set(os.listdir(cwd)).union(map(basename, backedUpFiles))

    for item in allFiles:
        status = _getStatus(join(cwd, item), join(backupDir, item))
        if status:
            _outputItem(item, status)
 def test_getBackupHome(self):
     backupHome = fn.getBackupHome("/mnt/foo", "choco")
     self.assertEqual(
         backupHome,
         "/mnt/foo/Backups.backupdb/choco",
         "Incorrect backup home returned: {0}".format(backupHome))