from cinder import exception
from cinder.image import image_utils
from cinder import test
+from cinder import units
from cinder.volume.drivers.sheepdog import SheepdogDriver
self.driver.copy_image_to_volume(None, {'name': 'test',
'size': 1},
FakeImageService(), None)
+
+ 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()
from cinder import exception
from cinder.image import image_utils
from cinder.openstack.common import log as logging
+from cinder import units
from cinder.volume import driver
if tmp_dir and not os.path.exists(tmp_dir):
os.makedirs(tmp_dir)
- def _resize(self, volume):
- size = int(volume['size']) * (1024 ** 3)
+ def _resize(self, volume, size=None):
+ if not size:
+ size = int(volume['size']) * units.GiB
+
self._try_execute('collie', 'vdi', 'resize',
volume['name'], size)
if refresh:
self._update_volume_stats()
return self._stats
+
+ 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})