From b6b9df2940ac07f715f759f4c315b2cf088c2320 Mon Sep 17 00:00:00 2001 From: Navneet Singh Date: Sun, 20 Oct 2013 18:30:36 +0530 Subject: [PATCH] Brick connector fix for NFS drivers This change fixes the error that comes while getting brick connector and attaching volumes in case of NFS drivers in cinder. The attribute for mount point base was not passed to attach_volume method as the connector initialization logic is common for all types of protocols. It is fixed by populating the required parameter in the RemoteFsConnector for NFS drivers. Change-Id: I8601326b318f6f8c53a03610f1b4f2bfd14070ff Closes-Bug: #1238085 --- cinder/brick/initiator/connector.py | 12 +++++++++++- cinder/tests/test_coraid.py | 2 +- cinder/volume/driver.py | 1 + cinder/volume/drivers/nfs.py | 8 ++++---- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/cinder/brick/initiator/connector.py b/cinder/brick/initiator/connector.py index 0778f946b..d61b71880 100644 --- a/cinder/brick/initiator/connector.py +++ b/cinder/brick/initiator/connector.py @@ -797,6 +797,15 @@ class RemoteFsConnector(InitiatorConnector): execute=putils.execute, device_scan_attempts=DEVICE_SCAN_ATTEMPTS_DEFAULT, *args, **kwargs): + if mount_type.lower() == 'nfs': + if driver: + kwargs = kwargs or {} + kwargs['nfs_mount_point_base'] =\ + kwargs.get('nfs_mount_point_base') or\ + getattr(driver, 'base', None) + else: + LOG.warn(_("NFS volume driver is absent." + " RemoteFsClient may not initialize properly.")) self._remotefsclient = remotefs.RemoteFsClient(mount_type, root_helper, execute=execute, *args, **kwargs) @@ -822,7 +831,8 @@ class RemoteFsConnector(InitiatorConnector): """ mnt_flags = [] - if 'options' in connection_properties: + if ('options' in connection_properties and + connection_properties['options']): mnt_flags = connection_properties['options'].split() nfs_share = connection_properties['export'] diff --git a/cinder/tests/test_coraid.py b/cinder/tests/test_coraid.py index 277ba6ef7..67394995c 100644 --- a/cinder/tests/test_coraid.py +++ b/cinder/tests/test_coraid.py @@ -785,7 +785,7 @@ class CoraidDriverImageTestCases(CoraidDriverTestCase): aoe_initiator = self.mox.CreateMockAnything() - utils.brick_get_connector('aoe', + utils.brick_get_connector('aoe', driver=mox.IgnoreArg(), device_scan_attempts=3, use_multipath=False).\ AndReturn(aoe_initiator) diff --git a/cinder/volume/driver.py b/cinder/volume/driver.py index 226fbef20..baba887f0 100644 --- a/cinder/volume/driver.py +++ b/cinder/volume/driver.py @@ -371,6 +371,7 @@ class VolumeDriver(object): device_scan_attempts = self.configuration.num_volume_device_scan_tries protocol = conn['driver_volume_type'] connector = utils.brick_get_connector(protocol, + driver=self, use_multipath=use_multipath, device_scan_attempts= device_scan_attempts) diff --git a/cinder/volume/drivers/nfs.py b/cinder/volume/drivers/nfs.py index 277b173a6..bf56a19b2 100644 --- a/cinder/volume/drivers/nfs.py +++ b/cinder/volume/drivers/nfs.py @@ -373,15 +373,15 @@ class NfsDriver(RemoteFsDriver): super(NfsDriver, self).__init__(*args, **kwargs) self.configuration.append_config_values(volume_opts) root_helper = utils.get_root_helper() - base = getattr(self.configuration, - 'nfs_mount_point_base', - CONF.nfs_mount_point_base) + self.base = getattr(self.configuration, + 'nfs_mount_point_base', + CONF.nfs_mount_point_base) opts = getattr(self.configuration, 'nfs_mount_options', CONF.nfs_mount_options) self._remotefsclient = remotefs.RemoteFsClient( 'nfs', root_helper, execute=execute, - nfs_mount_point_base=base, + nfs_mount_point_base=self.base, nfs_mount_options=opts) def set_execute(self, execute): -- 2.45.2