From 997c619b7517c0aeab8fd01d8ec6daa23aa35747 Mon Sep 17 00:00:00 2001 From: Mandell Degerness Date: Mon, 10 Jun 2013 22:02:28 +0000 Subject: [PATCH] Flatten Volume from Snapshot Implements: blueprint flatten-volume-from-snapshot Change-Id: I77b0a9bf8cfbe4881a75909d2749d0c3f17561c9 --- cinder/volume/drivers/rbd.py | 12 ++++++++++++ etc/cinder/cinder.conf.sample | 2 ++ 2 files changed, 14 insertions(+) diff --git a/cinder/volume/drivers/rbd.py b/cinder/volume/drivers/rbd.py index 024ea4cd7..3ee97b30e 100644 --- a/cinder/volume/drivers/rbd.py +++ b/cinder/volume/drivers/rbd.py @@ -52,6 +52,10 @@ rbd_opts = [ cfg.StrOpt('rbd_ceph_conf', default='', # default determined by librados help='path to the ceph configuration file to use'), + cfg.BoolOpt('rbd_flatten_volume_from_snapshot', + default=False, + help='flatten volumes created from snapshots to remove ' + 'dependency'), cfg.StrOpt('rbd_secret_uuid', default=None, help='the libvirt uuid of the secret for the rbd_user' @@ -254,6 +258,12 @@ class RBDDriver(driver.VolumeDriver): old_format=old_format, features=features) + def _flatten(self, pool, volume_name): + LOG.debug(_('flattening %(pool)s/%(img)s') % + dict(pool=pool, img=volume_name)) + with RBDVolumeProxy(self, volume_name, pool) as vol: + vol.flatten() + def _clone(self, volume, src_pool, src_image, src_snap): LOG.debug(_('cloning %(pool)s/%(img)s@%(snap)s to %(dst)s') % dict(pool=src_pool, img=src_image, snap=src_snap, @@ -276,6 +286,8 @@ class RBDDriver(driver.VolumeDriver): """Creates a volume from a snapshot.""" self._clone(volume, self.configuration.rbd_pool, snapshot['volume_name'], snapshot['name']) + if self.configuration.rbd_flatten_volume_from_snapshot: + self._flatten(self.configuration.rbd_pool, volume['name']) if int(volume['size']): self._resize(volume) diff --git a/etc/cinder/cinder.conf.sample b/etc/cinder/cinder.conf.sample index 18d5b1e6c..871818ca3 100644 --- a/etc/cinder/cinder.conf.sample +++ b/etc/cinder/cinder.conf.sample @@ -1083,6 +1083,8 @@ # does not write them directly to the volume (string value) #volume_tmp_dir= +# Flatten images created from snapshots (to remove dependency) +#rbd_flatten_volume_from_snapshot=False # # Options defined in cinder.volume.drivers.san.hp.hp_3par_common -- 2.45.2