]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Zfssaiscsi driver should not use 'default' initiator group
authorAbhiram Moturi <abhiram.moturi@oracle.com>
Thu, 22 Oct 2015 17:28:26 +0000 (17:28 +0000)
committerabhiram moturi <abhiram.moturi@oracle.com>
Mon, 8 Feb 2016 21:01:42 +0000 (21:01 +0000)
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

cinder/tests/unit/test_zfssa.py
cinder/volume/drivers/zfssa/zfssaiscsi.py
cinder/volume/drivers/zfssa/zfssarest.py

index 4e35c2e531f6fedde50c2df50b88a281e1c0330a..353bb0c0611274dcbfddb288e777e99ee440aa10 100644 (file)
@@ -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
index 389182b0bd55651bcc02f960a3e3b5112f510383..1ec50007773c3fc74bf16d8cef25bbf7fb1a810c 100644 (file)
@@ -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
index 2d07f166d36ce0942310841ccf0d76a53e84018e..fcf1040c92d6ef455faae98f1eafd74322845227 100644 (file)
@@ -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):