Implement extend volume functionality in Sheepdog
This implements the extend volume functionality for Sheepdog driver. Change-Id: Id7361e9571742bea210f13ced722829f489e7cb0 Implements: blueprint extend-sheepdog-volume
This commit is contained in:
parent
5be685218b
commit
0de59a856e
|
@ -23,6 +23,7 @@ import tempfile
|
||||||
from cinder import exception
|
from cinder import exception
|
||||||
from cinder.image import image_utils
|
from cinder.image import image_utils
|
||||||
from cinder import test
|
from cinder import test
|
||||||
|
from cinder import units
|
||||||
from cinder.volume.drivers.sheepdog import SheepdogDriver
|
from cinder.volume.drivers.sheepdog import SheepdogDriver
|
||||||
|
|
||||||
|
|
||||||
|
@ -125,3 +126,19 @@ class SheepdogTestCase(test.TestCase):
|
||||||
self.driver.copy_image_to_volume(None, {'name': 'test',
|
self.driver.copy_image_to_volume(None, {'name': 'test',
|
||||||
'size': 1},
|
'size': 1},
|
||||||
FakeImageService(), None)
|
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()
|
||||||
|
|
|
@ -27,6 +27,7 @@ from oslo.config import cfg
|
||||||
from cinder import exception
|
from cinder import exception
|
||||||
from cinder.image import image_utils
|
from cinder.image import image_utils
|
||||||
from cinder.openstack.common import log as logging
|
from cinder.openstack.common import log as logging
|
||||||
|
from cinder import units
|
||||||
from cinder.volume import driver
|
from cinder.volume import driver
|
||||||
|
|
||||||
|
|
||||||
|
@ -84,8 +85,10 @@ class SheepdogDriver(driver.VolumeDriver):
|
||||||
if tmp_dir and not os.path.exists(tmp_dir):
|
if tmp_dir and not os.path.exists(tmp_dir):
|
||||||
os.makedirs(tmp_dir)
|
os.makedirs(tmp_dir)
|
||||||
|
|
||||||
def _resize(self, volume):
|
def _resize(self, volume, size=None):
|
||||||
size = int(volume['size']) * (1024 ** 3)
|
if not size:
|
||||||
|
size = int(volume['size']) * units.GiB
|
||||||
|
|
||||||
self._try_execute('collie', 'vdi', 'resize',
|
self._try_execute('collie', 'vdi', 'resize',
|
||||||
volume['name'], size)
|
volume['name'], size)
|
||||||
|
|
||||||
|
@ -177,3 +180,19 @@ class SheepdogDriver(driver.VolumeDriver):
|
||||||
if refresh:
|
if refresh:
|
||||||
self._update_volume_stats()
|
self._update_volume_stats()
|
||||||
return self._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})
|
||||||
|
|
Loading…
Reference in New Issue