from cinder import test
from cinder.tests.image import fake as fake_image
from cinder.tests.test_volume import DriverTestCase
+from cinder import units
from cinder.volume import configuration as conf
import cinder.volume.drivers.rbd as driver
self.driver._clone(volume, src_pool, src_image, src_snap)
+ def test_extend_volume(self):
+ fake_name = u'volume-00000001'
+ fake_size = '20'
+ fake_vol = {'project_id': 'testprjid', 'name': fake_name,
+ 'size': fake_size,
+ 'id': 'a720b3c0-d1f0-11e1-9b23-0800200c9a66'}
+
+ self.mox.StubOutWithMock(self.driver, '_resize')
+ size = int(fake_size) * units.GiB
+ self.driver._resize(fake_vol, size=size)
+
+ self.mox.ReplayAll()
+ self.driver.extend_volume(fake_vol, fake_size)
+
+ self.mox.VerifyAll()
+
def test_rbd_volume_proxy_init(self):
name = u'volume-00000001'
snap = u'snapshot-name'
from cinder import exception
from cinder.image import image_utils
+from cinder import units
from cinder import utils
from cinder.openstack.common import fileutils
str(volume['name']),
features=self.rbd.RBD_FEATURE_LAYERING)
- def _resize(self, volume):
- size = int(volume['size']) * 1024 ** 3
+ def _resize(self, volume, **kwargs):
+ size = kwargs.get('size', None)
+ if not size:
+ size = int(volume['size']) * units.GiB
+
with RBDVolumeProxy(self, volume['name']) as vol:
vol.resize(size)
backup_service.restore(backup, volume['id'], rbd_fd)
LOG.debug("volume restore complete.")
+
+ def extend_volume(self, volume, new_size):
+ """Extend an Existing Volume."""
+ old_size = volume['size']
+
+ try:
+ size = int(new_size) * units.GiB
+ self._resize(volume, size=size)
+ except Exception:
+ msg = _('Failed to Extend Volume '
+ '%(volname)s') % {'volname': volume['name']}
+ LOG.error(msg)
+ raise exception.VolumeBackendAPIException(data=msg)
+
+ LOG.debug(_("Extend volume from %(old_size) to %(new_size)"),
+ {'old_size': old_size, 'new_size': new_size})