Merge "Add support for volume types with Generic driver"
This commit is contained in:
commit
3907766910
@ -74,6 +74,10 @@ share_opts = [
|
|||||||
default='ext4',
|
default='ext4',
|
||||||
choices=['ext4', 'ext3'],
|
choices=['ext4', 'ext3'],
|
||||||
help='Filesystem type of the share volume.'),
|
help='Filesystem type of the share volume.'),
|
||||||
|
cfg.StrOpt('cinder_volume_type',
|
||||||
|
default=None,
|
||||||
|
help='Name or id of cinder volume type which will be used '
|
||||||
|
'for all volumes created by driver.'),
|
||||||
]
|
]
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
@ -395,11 +399,13 @@ class GenericShareDriver(driver.ExecuteMixin, driver.ShareDriver):
|
|||||||
if snapshot:
|
if snapshot:
|
||||||
volume_snapshot = self._get_volume_snapshot(context,
|
volume_snapshot = self._get_volume_snapshot(context,
|
||||||
snapshot['id'])
|
snapshot['id'])
|
||||||
|
|
||||||
volume = self.volume_api.create(
|
volume = self.volume_api.create(
|
||||||
context,
|
context,
|
||||||
share['size'],
|
share['size'],
|
||||||
self.configuration.volume_name_template % share['id'], '',
|
self.configuration.volume_name_template % share['id'], '',
|
||||||
snapshot=volume_snapshot)
|
snapshot=volume_snapshot,
|
||||||
|
volume_type=self.configuration.cinder_volume_type)
|
||||||
|
|
||||||
t = time.time()
|
t = time.time()
|
||||||
while time.time() - t < self.configuration.max_time_to_create_volume:
|
while time.time() - t < self.configuration.max_time_to_create_volume:
|
||||||
|
@ -558,6 +558,7 @@ class GenericShareDriverTestCase(test.TestCase):
|
|||||||
|
|
||||||
def test_allocate_container(self):
|
def test_allocate_container(self):
|
||||||
fake_vol = fake_volume.FakeVolume()
|
fake_vol = fake_volume.FakeVolume()
|
||||||
|
self.fake_conf.cinder_volume_type = 'fake_volume_type'
|
||||||
self.stubs.Set(self._driver.volume_api, 'create',
|
self.stubs.Set(self._driver.volume_api, 'create',
|
||||||
mock.Mock(return_value=fake_vol))
|
mock.Mock(return_value=fake_vol))
|
||||||
|
|
||||||
@ -568,7 +569,8 @@ class GenericShareDriverTestCase(test.TestCase):
|
|||||||
self.share['size'],
|
self.share['size'],
|
||||||
CONF.volume_name_template % self.share['id'],
|
CONF.volume_name_template % self.share['id'],
|
||||||
'',
|
'',
|
||||||
snapshot=None)
|
snapshot=None,
|
||||||
|
volume_type='fake_volume_type')
|
||||||
|
|
||||||
def test_allocate_container_with_snaphot(self):
|
def test_allocate_container_with_snaphot(self):
|
||||||
fake_vol = fake_volume.FakeVolume()
|
fake_vol = fake_volume.FakeVolume()
|
||||||
@ -587,7 +589,8 @@ class GenericShareDriverTestCase(test.TestCase):
|
|||||||
self.share['size'],
|
self.share['size'],
|
||||||
CONF.volume_name_template % self.share['id'],
|
CONF.volume_name_template % self.share['id'],
|
||||||
'',
|
'',
|
||||||
snapshot=fake_vol_snap)
|
snapshot=fake_vol_snap,
|
||||||
|
volume_type=None)
|
||||||
|
|
||||||
def test_allocate_container_error(self):
|
def test_allocate_container_error(self):
|
||||||
fake_vol = fake_volume.FakeVolume(status='error')
|
fake_vol = fake_volume.FakeVolume(status='error')
|
||||||
|
@ -74,6 +74,16 @@ class CinderApiTestCase(test.TestCase):
|
|||||||
self.assertRaises(exception.InvalidInput,
|
self.assertRaises(exception.InvalidInput,
|
||||||
self.api.create, self.ctx, 1, '', '')
|
self.api.create, self.ctx, 1, '', '')
|
||||||
|
|
||||||
|
def test_create_not_found_error(self):
|
||||||
|
cinder.cinderclient.side_effect = cinder_exception.NotFound(404)
|
||||||
|
self.assertRaises(exception.NotFound,
|
||||||
|
self.api.create, self.ctx, 1, '', '')
|
||||||
|
|
||||||
|
def test_create_failed_exception(self):
|
||||||
|
cinder.cinderclient.side_effect = Exception("error msg")
|
||||||
|
self.assertRaises(exception.ManilaException,
|
||||||
|
self.api.create, self.ctx, 1, '', '')
|
||||||
|
|
||||||
def test_get_all(self):
|
def test_get_all(self):
|
||||||
cinder._untranslate_volume_summary_view.return_value = ['id1', 'id2']
|
cinder._untranslate_volume_summary_view.return_value = ['id1', 'id2']
|
||||||
self.assertEqual([{'id': 'id1'}, {'id': 'id2'}],
|
self.assertEqual([{'id': 'id1'}, {'id': 'id2'}],
|
||||||
|
@ -303,6 +303,13 @@ class API(base.Base):
|
|||||||
return _untranslate_volume_summary_view(context, item)
|
return _untranslate_volume_summary_view(context, item)
|
||||||
except cinder_exception.BadRequest as e:
|
except cinder_exception.BadRequest as e:
|
||||||
raise exception.InvalidInput(reason=e.message)
|
raise exception.InvalidInput(reason=e.message)
|
||||||
|
except cinder_exception.NotFound:
|
||||||
|
raise exception.NotFound(
|
||||||
|
_("Error in creating cinder "
|
||||||
|
"volume. Cinder volume type %s not exist. Check parameter "
|
||||||
|
"cinder_volume_type in configuration file.") % volume_type)
|
||||||
|
except Exception as e:
|
||||||
|
raise exception.ManilaException(e.message)
|
||||||
|
|
||||||
@translate_volume_exception
|
@translate_volume_exception
|
||||||
def delete(self, context, volume_id):
|
def delete(self, context, volume_id):
|
||||||
|
Loading…
Reference in New Issue
Block a user