From: Abhiram Moturi Date: Thu, 22 Oct 2015 17:28:26 +0000 (+0000) Subject: Zfssaiscsi driver should not use 'default' initiator group X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=c035c41142625a2a25add7b0580d038a0ee562b7;p=openstack-build%2Fcinder-build.git Zfssaiscsi driver should not use 'default' initiator group The zfssaiscsi driver falls back to using the 'default' initiator group when it fails to find a valid initiator group configured. This causes all LUNs attached to instances on that server to be presented to every server using the target group. This fix makes the driver use the 'default' group only if configured in the cinder.conf file. It also throws an error when initiator group is given without any initiators. DocImpact Change-Id: I417688cf632baa727e5aa339c8d362761a38dcc8 Closes-Bug: #1508548 --- diff --git a/cinder/tests/unit/test_zfssa.py b/cinder/tests/unit/test_zfssa.py index 4e35c2e53..353bb0c06 100644 --- a/cinder/tests/unit/test_zfssa.py +++ b/cinder/tests/unit/test_zfssa.py @@ -459,6 +459,15 @@ class TestZFSSAISCSIDriver(test.TestCase): self.test_vol['name'], '') + def test_volume_attach_detach_negative(self): + self.drv.zfssa.get_initiator_initiatorgroup.return_value = [] + + connector = dict(initiator='iqn.1-0.org.deb:01:d7') + self.assertRaises(exception.VolumeBackendAPIException, + self.drv.initialize_connection, + self.test_vol, + connector) + def test_get_volume_stats(self): self.drv.zfssa.get_project_stats.return_value = 2 * units.Gi,\ 3 * units.Gi diff --git a/cinder/volume/drivers/zfssa/zfssaiscsi.py b/cinder/volume/drivers/zfssa/zfssaiscsi.py index 389182b0b..1ec500077 100644 --- a/cinder/volume/drivers/zfssa/zfssaiscsi.py +++ b/cinder/volume/drivers/zfssa/zfssaiscsi.py @@ -177,6 +177,15 @@ class ZFSSAISCSIDriver(driver.ISCSIDriver): else: LOG.warning(_LW('zfssa_initiator_config not found. ' 'Using deprecated configuration options.')) + if (not lcfg.zfssa_initiator and + (not lcfg.zfssa_initiator_group and + lcfg.zfssa_initiator_group != 'default')): + LOG.error(_LE('zfssa_initiator cannot be empty when ' + 'creating a zfssa_initiator_group.')) + raise exception.InvalidConfigurationValue( + value='', + option='zfssa_initiator') + if (lcfg.zfssa_initiator != '' and (lcfg.zfssa_initiator_group == '' or lcfg.zfssa_initiator_group == 'default')): @@ -191,6 +200,7 @@ class ZFSSAISCSIDriver(driver.ISCSIDriver): lcfg.zfssa_initiator_group != '' and lcfg.zfssa_initiator_group != 'default'): for initiator in lcfg.zfssa_initiator.split(','): + initiator = initiator.strip() self.zfssa.create_initiator( initiator, lcfg.zfssa_initiator_group + '-' + initiator, chapuser=lcfg.zfssa_initiator_user, @@ -685,6 +695,15 @@ class ZFSSAISCSIDriver(driver.ISCSIDriver): lcfg = self.configuration init_groups = self.zfssa.get_initiator_initiatorgroup( connector['initiator']) + if not init_groups: + if lcfg.zfssa_initiator_group == 'default': + init_groups.append('default') + else: + exception_msg = (_('Failed to find iSCSI initiator group ' + 'containing %(initiator)s.') + % {'initiator': connector['initiator']}) + LOG.error(exception_msg) + raise exception.VolumeBackendAPIException(data=exception_msg) if ((lcfg.zfssa_enable_local_cache is True) and (volume['name'].startswith('os-cache-vol-'))): project = lcfg.zfssa_cache_project diff --git a/cinder/volume/drivers/zfssa/zfssarest.py b/cinder/volume/drivers/zfssa/zfssarest.py index 2d07f166d..fcf1040c9 100644 --- a/cinder/volume/drivers/zfssa/zfssarest.py +++ b/cinder/volume/drivers/zfssa/zfssarest.py @@ -953,10 +953,6 @@ class ZFSSAApi(object): for initiator_group in val['groups']: if initiator in initiator_group['initiators']: groups.append(initiator_group["name"]) - if len(groups) == 0: - LOG.debug("Initiator group not found. Attaching volume to " - "default initiator group.") - groups.append('default') return groups def create_schema(self, schema):