From: Yuriy Nesenenko Date: Thu, 17 Dec 2015 09:51:24 +0000 (+0200) Subject: Check min config requirements for rbd driver X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=1a9d98bef3ccf7f5cba370b65a1d7156ccca740b;p=openstack-build%2Fcinder-build.git Check min config requirements for rbd driver The RBD driver should check that required configs are set on startup and fail to start if they are not. Co-Authored-By: Ivan Kolodyazhny Change-Id: I73c9b65f6351b46210de2da29fe73df00d839b52 Closes-Bug: 1276626 --- diff --git a/cinder/tests/unit/test_rbd.py b/cinder/tests/unit/test_rbd.py index a163dfb35..c8343ea15 100644 --- a/cinder/tests/unit/test_rbd.py +++ b/cinder/tests/unit/test_rbd.py @@ -15,7 +15,7 @@ # License for the specific language governing permissions and limitations # under the License. - +import ddt import math import os import tempfile @@ -121,6 +121,7 @@ CEPH_MON_DUMP = """dumped monmap epoch 1 """ +@ddt.ddt class RBDTestCase(test.TestCase): def setUp(self): @@ -153,6 +154,17 @@ class RBDTestCase(test.TestCase): self.snapshot = dict(volume_name=self.volume_name, name=self.snapshot_name) + @ddt.data({'cluster_name': None, 'pool_name': 'rbd'}, + {'cluster_name': 'volumes', 'pool_name': None}) + @ddt.unpack + def test_min_config(self, cluster_name, pool_name): + self.cfg.rbd_cluster_name = cluster_name + self.cfg.rbd_pool = pool_name + + with mock.patch('cinder.volume.drivers.rbd.rados'): + self.assertRaises(exception.InvalidConfigurationValue, + self.driver.check_for_setup_error) + @common_mocks def test_create_volume(self): client = self.mock_client.return_value diff --git a/cinder/volume/drivers/rbd.py b/cinder/volume/drivers/rbd.py index 6dc66aca0..d0d25219e 100644 --- a/cinder/volume/drivers/rbd.py +++ b/cinder/volume/drivers/rbd.py @@ -290,6 +290,11 @@ class RBDDriver(driver.TransferVD, driver.ExtendVD, msg = _('rados and rbd python libraries not found') raise exception.VolumeBackendAPIException(data=msg) + for attr in ['rbd_cluster_name', 'rbd_pool']: + val = getattr(self.configuration, attr) + if not val: + raise exception.InvalidConfigurationValue(option=attr, + value=val) # NOTE: Checking connection to ceph # RADOSClient __init__ method invokes _connect_to_rados # so no need to check for self.rados.Error here.