From: Navneet Singh Date: Sun, 20 Oct 2013 13:00:36 +0000 (+0530) Subject: Brick connector fix for NFS drivers X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=b6b9df2940ac07f715f759f4c315b2cf088c2320;p=openstack-build%2Fcinder-build.git 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 --- 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):