From 1a9d98bef3ccf7f5cba370b65a1d7156ccca740b Mon Sep 17 00:00:00 2001 From: Yuriy Nesenenko Date: Thu, 17 Dec 2015 11:51:24 +0200 Subject: [PATCH] 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 --- cinder/tests/unit/test_rbd.py | 14 +++++++++++++- cinder/volume/drivers/rbd.py | 5 +++++ 2 files changed, 18 insertions(+), 1 deletion(-) 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. -- 2.45.2