mount/rsync: use a tmpdir for mounting, not /mnt
authorTero Marttila <terom@paivola.fi>
Fri, 02 Mar 2012 16:15:47 +0200
changeset 33 2de09042414f
parent 32 9d623185d3d7
child 34 8c23dc925ed7
mount/rsync: use a tmpdir for mounting, not /mnt
pvl/backup/mount.py
pvl/backup/rsync.py
--- a/pvl/backup/mount.py	Fri Mar 02 16:15:32 2012 +0200
+++ b/pvl/backup/mount.py	Fri Mar 02 16:15:47 2012 +0200
@@ -5,8 +5,9 @@
 from pvl.backup.invoke import command
 
 import contextlib
-import os.path
+import os, os.path
 import logging
+import tempfile
 
 log = logging.getLogger('pvl.backup.mount')
 
@@ -89,27 +90,46 @@
         return self.mnt
 
 @contextlib.contextmanager
-def mount (dev, mnt, **kwargs) :
+def mount (dev, mnt=None, name_hint='tmp', **kwargs) :
     """
         Use a temporary mount:
 
-        with mount('/dev/...', '/mnt', readonly=True) as mount:
+        with mount('/dev/...', readonly=True) as mount:
             ...
+
+        Mounts at the given mountpoint path, or a tempdir
     """
 
-    mount = Mount(dev, mnt, **kwargs)
+    if mnt is None :
+        mnt = tmpdir = tempfile.mkdtemp(suffix='.mnt', prefix=name_hint)
 
-    # open
-    log.debug("open: %s", mount)
-    mount.open()
+        log.debug("using tmp mnt: %s", tmpdir)
 
+    else :
+        tmpdir = None
+        
+    log.debug("mount: %s -> %s", dev, mnt)
+
+    # with tempdir
     try :
-        log.debug("got: %s", mount)
-        yield mount
+        mount = Mount(dev, mnt, **kwargs)
+
+        # open
+        log.debug("open: %s", mount)
+        mount.open()
+
+        try :
+            log.debug("got: %s", mount)
+            yield mount
+
+        finally:
+            # cleanup
+            log.debug("cleanup: %s", mount)
+            mount.close()
 
     finally:
-        # cleanup
-        log.debug("cleanup: %s", mount)
-        mount.close()
+        if tmpdir :
+            # cleanup
+            log.debug("cleanup tmp mnt: %s", tmpdir)
+            os.rmdir(tmpdir)
 
-
--- a/pvl/backup/rsync.py	Fri Mar 02 16:15:32 2012 +0200
+++ b/pvl/backup/rsync.py	Fri Mar 02 16:15:47 2012 +0200
@@ -76,9 +76,6 @@
         lvm = self.volume.lvm
         volume = self.volume
 
-        # XXX: generate
-        path = '/mnt'
-
         # snapshot
         log.info("Open snapshot...")
 
@@ -87,9 +84,9 @@
             log.info("Snapshot opened: %s", snapshot.lvm_path)
 
             # mount
-            log.info("Mounting snapshot: %s -> %s", snapshot, path)
+            log.info("Mounting snapshot: %s", snapshot)
 
-            with mount(snapshot.dev_path, path, readonly=True) as mountpoint:
+            with mount(snapshot.dev_path, name_hint=('lvm_' + snapshot.name + '_'), readonly=True) as mountpoint:
                 log.info("Mounted snapshot: %s", mountpoint)
                 
                 # rsync!