pvl/backup/rsync.py
author Tero Marttila <terom@paivola.fi>
Sun, 22 Apr 2012 13:45:44 +0300
changeset 49 0a329ac17083
parent 48 c8aea2558f16
child 50 d23cba8064fe
permissions -rw-r--r--
pvl.backup.rsync: also accept lvm:vg/lv
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
"""
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
    rsync handling.
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
    Apologies for the 'RSync' nomenclature
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
"""
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
from pvl.backup.lvm import LVM, LVMVolume, LVMSnapshot
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
from pvl.backup.mount import mount
12
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
     9
from pvl.backup import invoke
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
import os.path
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
import logging
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
log = logging.getLogger('pvl.backup.rsync')
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
12
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    17
# Path to rsync binary
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    18
RSYNC = '/usr/bin/rsync'
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    19
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    20
def rsync (source, dest, **opts) :
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    21
    """
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    22
        Run rsync.
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    23
    """
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    24
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    25
    invoke.command(RSYNC, source, dest, **opts)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
class RSyncCommandFormatError (Exception) :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
        Improper rsync command
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
    pass
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
12
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    34
class RSyncServer (object) :
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    35
    """
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    36
        rsync server-mode execution.
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    37
    """
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    39
    def _execute (self, options, srcdst, path) :
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
        """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
            Underlying rsync just reads from filesystem.
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    42
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    43
                options     - list of rsync options
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    44
                srcdst      - the (source, dest) pair with None placeholder, as returned by parse_command
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    45
                path        - the real path to replace None with
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
        """
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    47
    
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    48
        # one of this will be None
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    49
        src, dst = srcdst
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    50
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    51
        # replace None -> path
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    52
        src = src or path
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    53
        dst = dst or path
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    54
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    55
        log.debug("%r -> %r", src, dst)
12
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    56
        
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    57
        # invoke directly, no option-handling, nor stdin/out redirection
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    58
        invoke.invoke(RSYNC, options + [ src, dst ], data=False)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
12
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    60
class RSyncFSServer (RSyncServer) :
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
        Normal filesystem backup.
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
    def __init__ (self, path) :
12
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
    66
        RSyncServer.__init__(self)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
        self.path = path
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    70
    def execute (self, options, srcdst) :
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    71
        """
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    72
                options     - list of rsync options
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    73
                srcdst      - the (source, dest) pair with None placeholder, as returned by parse_command
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    74
        """
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    75
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
    76
        return self._execute(options, srcdst, self.path)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
44
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    78
    def __str__ (self) :
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    79
        return self.path
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    80
    
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    81
class RSyncRemoteServer (RSyncServer) :
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    82
    """
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    83
        Remote filesystem backup.
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    84
    """
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    85
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    86
    def __init__ (self, host, path) :
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    87
        """
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    88
            host        - remote SSH host
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    89
            path        - remote path
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    90
        """
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    91
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    92
        RSyncServer.__init__(self)
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    93
    
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    94
        # glue
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    95
        self.path = path + ':' + path
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    96
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    97
    def execute (self, options, srcdst) :
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    98
        """
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
    99
                options     - list of rsync options
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   100
                srcdst      - the (source, dest) pair with None placeholder, as returned by parse_command
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   101
        """
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   102
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   103
        return self._execute(options, srcdst, self.path)
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   104
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   105
    def __str__ (self) :
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   106
        return self.path
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   107
 
12
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   108
class RSyncLVMServer (RSyncServer) :
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
        Backup LVM LV by snapshotting + mounting it.
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
42
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   113
    def __init__ (self, volume, **opts) :
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   114
        """
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   115
            volume      - the LVMVolume to snapshot
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   116
            **opts      - options for LVM.snapshot
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   117
        """
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   118
12
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   119
        RSyncServer.__init__(self)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
        self.volume = volume
42
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   122
        self.snapshot_opts = opts
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
 
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   124
    def execute (self, options, srcdst) :
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
        """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
            Snapshot, mount, execute
42
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   127
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   128
                options     - list of rsync options
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   129
                srcdst      - the (source, dest) pair with None placeholder, as returned by parse_command
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
        """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
        
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
        # backup target from LVM command
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
        lvm = self.volume.lvm
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   134
        volume = self.volume
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
        # snapshot
34
8c23dc925ed7 rsync-wrapper: default to logging.INFO; cleanup pvl.backup.rsync info output
Tero Marttila <terom@paivola.fi>
parents: 33
diff changeset
   137
        log.info("Open snapshot: %s", volume)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
        # XXX: generate snapshot nametag to be unique?
42
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   140
        with lvm.snapshot(volume, tag='backup', **self.snapshot_opts) as snapshot:
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
            # mount
33
2de09042414f mount/rsync: use a tmpdir for mounting, not /mnt
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
   142
            log.info("Mounting snapshot: %s", snapshot)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
33
2de09042414f mount/rsync: use a tmpdir for mounting, not /mnt
Tero Marttila <terom@paivola.fi>
parents: 28
diff changeset
   144
            with mount(snapshot.dev_path, name_hint=('lvm_' + snapshot.name + '_'), readonly=True) as mountpoint:
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
                # rsync!
34
8c23dc925ed7 rsync-wrapper: default to logging.INFO; cleanup pvl.backup.rsync info output
Tero Marttila <terom@paivola.fi>
parents: 33
diff changeset
   146
                log.info("Running rsync: %s", mountpoint)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
9
c4c858043729 fix rsync args ordering + path trailing slash
Tero Marttila <terom@paivola.fi>
parents: 6
diff changeset
   148
                # with trailing slash
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   149
                return self._execute(options, srcdst, mountpoint.path + '/')
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   151
            # cleanup
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
        # cleanup
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
 
44
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   154
    def __str__ (self) :
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   155
        return 'lvm:{volume}'.format(volume=self.volume)
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   156
 
28
82bcde9e21c4 rsync: pass command as list, moving the shlex.split to main; support `rsync -e "rsync-wrapper -C --"` style execution with the rsync command given as arguments
Tero Marttila <terom@paivola.fi>
parents: 24
diff changeset
   157
def parse_command (command_parts, restrict_server=True, restrict_readonly=True) :
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   158
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   159
        Parse given rsync server command into bits. 
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   160
28
82bcde9e21c4 rsync: pass command as list, moving the shlex.split to main; support `rsync -e "rsync-wrapper -C --"` style execution with the rsync command given as arguments
Tero Marttila <terom@paivola.fi>
parents: 24
diff changeset
   161
            command_parts       - the command-list sent by rsync
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162
            restrict_server     - restrict to server-mode
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
            restrict_readonly   - restrict to read/send-mode
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
        
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   165
        In server mode, source will always be '.', and dest the source/dest.
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   166
        
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   167
        Returns:
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   168
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   169
            (cmd, options, path, (source, dest))
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   170
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   171
            path            -> the real source path
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   172
            (source, dest)  -> combination of None for path, and the real source/dest
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   173
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   174
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   175
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   176
    cmd = None
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   177
    options = []
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   178
    source = None
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   179
    dest = None
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   180
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   181
    # parse
28
82bcde9e21c4 rsync: pass command as list, moving the shlex.split to main; support `rsync -e "rsync-wrapper -C --"` style execution with the rsync command given as arguments
Tero Marttila <terom@paivola.fi>
parents: 24
diff changeset
   182
    for part in command_parts :
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   183
        if cmd is None :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   184
            cmd = part
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   185
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   186
        elif part.startswith('-') :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   187
            options.append(part)
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   188
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   189
        elif source is None :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   190
            source = part
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   191
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   192
        elif dest is None :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   193
            dest = part
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   194
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   195
    # options
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   196
    have_server = ('--server' in options)
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   197
    have_sender = ('--sender' in options)
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   198
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   199
    # verify
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   200
    if restrict_server and not have_server :
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   201
        raise RSyncCommandFormatError("Missing --server")
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   202
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   203
    if restrict_readonly and not have_sender :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   204
        raise RSyncCommandFormatError("Missing --sender for readonly")
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   205
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   206
    if not source :
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   207
        raise RSyncCommandFormatError("Missing source path")
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   208
        
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   209
    if not dest:
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   210
        raise RSyncCommandFormatError("Missing dest path")
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   211
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   212
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   213
    # parse real source
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   214
    if have_sender :
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   215
        # read; first arg will always be .
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   216
        if source != '.' :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   217
            raise RSyncCommandFormatError("Invalid dest for sender")
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   218
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   219
        path = dest
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   220
        dest = None
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   221
        
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   222
        log.debug("using server/sender source path: %s", path)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   223
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   224
    elif have_server :
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   225
        # write
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   226
        if source != '.' :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   227
            raise RSyncCommandFormatError("Invalid source for reciever")
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   228
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   229
        path = dest
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   230
        dest = None
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   231
        
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   232
        log.debug("using server dest path: %s", path)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   233
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   234
    else :
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   235
        # local src -> dst
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   236
        path = source
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   237
        source = None
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   238
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   239
        log.debug("using local src path: %s -> %s", path, dest)
6
302f45534b73 distutils
Tero Marttila <terom@paivola.fi>
parents: 5
diff changeset
   240
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   241
    # ok
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   242
    return cmd, options, path, (source, dest)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   243
      
42
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   244
def parse_source (path, restrict_path=False, lvm_opts={}) :
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   245
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   246
        Figure out source to rsync from, based on pseudo-path given in rsync command.
42
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   247
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   248
            lvm_opts        - dict of **opts for RSyncLVMServer
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   249
    """
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   250
        
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   251
    # normalize
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   252
    path = os.path.normpath(path)
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   253
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   254
    # verify path
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   255
    if restrict_path :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   256
        if not path.startswith(restrict_path) :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   257
            raise RSyncCommandFormatError("Restricted path ({restrict})".format(restrict=restrict_path))
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   258
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   259
    if path.startswith('/') :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   260
        # direct filesystem path
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   261
        # XXX: how to handle=
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   262
        log.info("filesystem: %s", path)
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   263
12
fbfdde7326f4 rsync-snapshot: manage --link-dest'd interval snapshots
Tero Marttila <terom@paivola.fi>
parents: 9
diff changeset
   264
        return RSyncFSServer(path)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   265
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   266
    elif path.startswith('lvm:') :
49
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   267
        _, lvm = path.split(':', 1)
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   268
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   269
        # LVM LV
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   270
        try :
49
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   271
            if ':' in lvm :
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   272
                vg, lv = lvm.split(':', 1)
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   273
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   274
                log.warn("old lvm: syntax: lvm:%s; use: lvm:%s/%s", path, vg, lv)
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   275
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   276
            elif '/' in lvm:
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   277
                vg, lv = lvm.split('/', 1)
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   278
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   279
            else :
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   280
                raise RSyncCommandFormatError("Invalid lvm pseudo-path: {lvm}: unrecognized vg/lv separator".format(lvm=lvm))
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   281
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   282
        except ValueError, e:
49
0a329ac17083 pvl.backup.rsync: also accept lvm:vg/lv
Tero Marttila <terom@paivola.fi>
parents: 48
diff changeset
   283
            raise RSyncCommandFormatError("Invalid lvm pseudo-path: {lvm}: {error}".format(lvm=lvm, error=e))
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   284
        
43
2911d4dd5a47 pvl.backup-rsync: implement local rsync command execution, rename from pvlbackup-rsync-wrapper
Tero Marttila <terom@paivola.fi>
parents: 42
diff changeset
   285
        # XXX: validate?
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   286
        log.info("LVM: %s/%s", vg, lv)
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   287
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   288
        # open
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   289
        lvm = LVM(vg)
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   290
        volume = lvm.volume(lv)
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   291
42
43e27a3e9efe pvlbackup-rsync-wrapper: add --snapshot-size / --snapshot-wait opts
Tero Marttila <terom@paivola.fi>
parents: 34
diff changeset
   292
        return RSyncLVMServer(volume, **lvm_opts)
44
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   293
48
c8aea2558f16 pvl.backup.rsync: be more lenient with remote path to accept 'host:lvm:...'
Tero Marttila <terom@paivola.fi>
parents: 44
diff changeset
   294
    elif ':' in path :
44
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   295
        host, path = path.split(':', 1)
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   296
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   297
        # remote host
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   298
        log.info("remote: %s:%s", host, path)
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   299
7069af6b7025 pvlbackup-rsync-snapshot: use pvl.backup.rsync.parse_source for sources, to support local LVM snapshots; also implement lvm-options section for target
Tero Marttila <terom@paivola.fi>
parents: 43
diff changeset
   300
        return RSyncRemoteServer(host, path)
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   301
       
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   302
    else :
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   303
        # invalid
48
c8aea2558f16 pvl.backup.rsync: be more lenient with remote path to accept 'host:lvm:...'
Tero Marttila <terom@paivola.fi>
parents: 44
diff changeset
   304
        raise RSyncCommandFormatError("Unrecognized backup path: {path}".format(path=path))
5
23371d26fdd0 split up into pvl.backup package
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   305