diff --git a/cinder/opts.py b/cinder/opts.py index cc353441c2d..ec88c7e269b 100644 --- a/cinder/opts.py +++ b/cinder/opts.py @@ -74,6 +74,8 @@ from cinder.volume.drivers.datera import datera_iscsi as \ cinder_volume_drivers_datera_dateraiscsi from cinder.volume.drivers.dell import dell_storagecenter_common as \ cinder_volume_drivers_dell_dellstoragecentercommon +from cinder.volume.drivers.dell_emc import ps as \ + cinder_volume_drivers_dell_emc_ps from cinder.volume.drivers.dell_emc.scaleio import driver as \ cinder_volume_drivers_dell_emc_scaleio_driver from cinder.volume.drivers.dell_emc.unity import driver as \ @@ -90,7 +92,6 @@ from cinder.volume.drivers.dothill import dothill_common as \ cinder_volume_drivers_dothill_dothillcommon from cinder.volume.drivers import drbdmanagedrv as \ cinder_volume_drivers_drbdmanagedrv -from cinder.volume.drivers import eqlx as cinder_volume_drivers_eqlx from cinder.volume.drivers.falconstor import fss_common as \ cinder_volume_drivers_falconstor_fsscommon from cinder.volume.drivers.fujitsu import eternus_dx_common as \ @@ -275,6 +276,7 @@ def list_opts(): cinder_volume_drivers_datera_dateraiscsi.d_opts, cinder_volume_drivers_dell_dellstoragecentercommon. common_opts, + cinder_volume_drivers_dell_emc_ps.eqlx_opts, cinder_volume_drivers_dell_emc_scaleio_driver.scaleio_opts, cinder_volume_drivers_dell_emc_unity_driver.UNITY_OPTS, cinder_volume_drivers_dell_emc_vmax_common.emc_opts, @@ -284,7 +286,6 @@ def list_opts(): cinder_volume_drivers_dothill_dothillcommon.common_opts, cinder_volume_drivers_dothill_dothillcommon.iscsi_opts, cinder_volume_drivers_drbdmanagedrv.drbd_opts, - cinder_volume_drivers_eqlx.eqlx_opts, cinder_volume_drivers_falconstor_fsscommon.FSS_OPTS, cinder_volume_drivers_fujitsu_eternusdxcommon. FJ_ETERNUS_DX_OPT_opts, diff --git a/cinder/tests/unit/volume/drivers/test_eqlx.py b/cinder/tests/unit/volume/drivers/dell_emc/test_ps.py similarity index 98% rename from cinder/tests/unit/volume/drivers/test_eqlx.py rename to cinder/tests/unit/volume/drivers/dell_emc/test_ps.py index efdd513a4a3..fea5d28e76a 100644 --- a/cinder/tests/unit/volume/drivers/test_eqlx.py +++ b/cinder/tests/unit/volume/drivers/dell_emc/test_ps.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013 Dell Inc. +# Copyright (c) 2013-2017 Dell Inc, or its subsidiaries. # Copyright 2013 OpenStack Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -28,13 +28,13 @@ from cinder import ssh_utils from cinder import test from cinder import utils from cinder.volume import configuration as conf -from cinder.volume.drivers import eqlx +from cinder.volume.drivers.dell_emc import ps -class DellEQLSanISCSIDriverTestCase(test.TestCase): +class PSSeriesISCSIDriverTestCase(test.TestCase): def setUp(self): - super(DellEQLSanISCSIDriverTestCase, self).setUp() + super(PSSeriesISCSIDriverTestCase, self).setUp() self.configuration = mock.Mock(conf.Configuration) self.configuration.san_is_local = False self.configuration.san_ip = "10.0.0.1" @@ -61,7 +61,7 @@ class DellEQLSanISCSIDriverTestCase(test.TestCase): 'VolumeReserve: 80GB'] self.cmd = 'this is dummy command' self._context = context.get_admin_context() - self.driver = eqlx.DellEQLSanISCSIDriver( + self.driver = ps.PSSeriesISCSIDriver( configuration=self.configuration) self.volume_name = "fakevolume" self.volid = "fakeid" @@ -418,7 +418,7 @@ class DellEQLSanISCSIDriverTestCase(test.TestCase): self.assertEqual(thin_enabled, stats['thin_provisioning_support']) self.assertEqual(not thin_enabled, stats['thick_provisioning_support']) - self.assertEqual('Dell', stats['vendor_name']) + self.assertEqual('Dell EMC', stats['vendor_name']) self.assertTrue(stats['multiattach']) def test_get_space_in_gb(self): @@ -568,11 +568,11 @@ class DellEQLSanISCSIDriverTestCase(test.TestCase): @unittest.skip("Skip until bug #1578986 is fixed") def test_with_timeout(self): - @eqlx.with_timeout + @ps.with_timeout def no_timeout(cmd, *args, **kwargs): return 'no timeout' - @eqlx.with_timeout + @ps.with_timeout def w_timeout(cmd, *args, **kwargs): time.sleep(1) diff --git a/cinder/volume/drivers/eqlx.py b/cinder/volume/drivers/dell_emc/ps.py similarity index 96% rename from cinder/volume/drivers/eqlx.py rename to cinder/volume/drivers/dell_emc/ps.py index b9ccccd11aa..5c3a841c429 100644 --- a/cinder/volume/drivers/eqlx.py +++ b/cinder/volume/drivers/dell_emc/ps.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013 Dell Inc. +# Copyright (c) 2013-2017 Dell Inc, or its subsidiaries. # Copyright 2013 OpenStack Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -13,7 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. -"""Volume driver for Dell EqualLogic Storage.""" +"""Volume driver for Dell EMC PS Series Storage.""" import functools import math @@ -79,11 +79,11 @@ def with_timeout(f): @interface.volumedriver -class DellEQLSanISCSIDriver(san.SanISCSIDriver): - """Implements commands for Dell EqualLogic SAN ISCSI management. +class PSSeriesISCSIDriver(san.SanISCSIDriver): + """Implements commands for Dell EMC PS Series ISCSI management. To enable the driver add the following line to the cinder configuration: - volume_driver=cinder.volume.drivers.eqlx.DellEQLSanISCSIDriver + volume_driver=cinder.volume.drivers.dell_emc.ps.PSSeriesISCSIDriver Driver's prerequisites are: - a separate volume group set up and running on the SAN @@ -133,16 +133,17 @@ class DellEQLSanISCSIDriver(san.SanISCSIDriver): 1.3.0 - Added support for manage/unmanage volume 1.4.0 - Removed deprecated options eqlx_cli_timeout, eqlx_use_chap, eqlx_chap_login, and eqlx_chap_password. + 1.4.1 - Rebranded driver to Dell EMC. """ - VERSION = "1.4.0" + VERSION = "1.4.1" # ThirdPartySytems wiki page CI_WIKI_NAME = "Dell_Storage_CI" def __init__(self, *args, **kwargs): - super(DellEQLSanISCSIDriver, self).__init__(*args, **kwargs) + super(PSSeriesISCSIDriver, self).__init__(*args, **kwargs) self.configuration.append_config_values(eqlx_opts) self._group_ip = None self.sshpool = None @@ -155,9 +156,9 @@ class DellEQLSanISCSIDriver(san.SanISCSIDriver): if len(ret) == 0: # According to paramiko.channel.Channel documentation, which # says "If a string of length zero is returned, the channel - # stream has closed". So we can confirm that the EQL server + # stream has closed". So we can confirm that the PS server # has closed the connection. - msg = _("The EQL array has closed the connection.") + msg = _("The PS array has closed the connection.") LOG.error(msg) raise exception.VolumeBackendAPIException(data=msg) out += ret @@ -195,7 +196,7 @@ class DellEQLSanISCSIDriver(san.SanISCSIDriver): completed = True if any(ln.startswith(('% Error', 'Error:')) for ln in out): - desc = _("Error executing EQL command") + desc = _("Error executing PS command") cmdout = '\n'.join(out) LOG.error(_LE("%s"), cmdout) raise processutils.ProcessExecutionError( @@ -230,7 +231,7 @@ class DellEQLSanISCSIDriver(san.SanISCSIDriver): while attempts > 0: attempts -= 1 try: - LOG.info(_LI('EQL-driver: executing "%s".'), command) + LOG.info(_LI('PS-driver: executing "%s".'), command) return self._ssh_execute( ssh, command, timeout=self.configuration.ssh_conn_timeout) @@ -248,7 +249,7 @@ class DellEQLSanISCSIDriver(san.SanISCSIDriver): LOG.error(_LE('Error running SSH command: "%s".'), command) def check_for_setup_error(self): - super(DellEQLSanISCSIDriver, self).check_for_setup_error() + super(PSSeriesISCSIDriver, self).check_for_setup_error() def _eql_execute(self, *args, **kwargs): return self._run_ssh( @@ -289,7 +290,7 @@ class DellEQLSanISCSIDriver(san.SanISCSIDriver): if self.configuration: backend_name = self.configuration.safe_get('volume_backend_name') data["volume_backend_name"] = backend_name or 'eqlx' - data["vendor_name"] = 'Dell' + data["vendor_name"] = 'Dell EMC' data["driver_version"] = self.VERSION data["storage_protocol"] = 'iSCSI' @@ -396,11 +397,11 @@ class DellEQLSanISCSIDriver(san.SanISCSIDriver): out_tup = line.rstrip().partition(' ') self._group_ip = out_tup[-1] - LOG.info(_LI('EQL-driver: Setup is complete, group IP is "%s".'), + LOG.info(_LI('PS-driver: Setup is complete, group IP is "%s".'), self._group_ip) except Exception: with excutils.save_and_reraise_exception(): - LOG.error(_LE('Failed to setup the Dell EqualLogic driver.')) + LOG.error(_LE('Failed to setup the Dell EMC PS driver.')) def create_volume(self, volume): """Create a volume.""" diff --git a/cinder/volume/manager.py b/cinder/volume/manager.py index e10c248fea4..3c0f8ed2f22 100644 --- a/cinder/volume/manager.py +++ b/cinder/volume/manager.py @@ -169,6 +169,8 @@ MAPPING = { 'cinder.volume.drivers.dell_emc.vmax.iscsi.VMAXISCSIDriver', 'cinder.volume.drivers.emc.emc_vmax_fc.EMCVMAXFCDriver': 'cinder.volume.drivers.dell_emc.vmax.fc.VMAXFCDriver', + 'cinder.volume.drivers.eqlx.DellEQLSanISCSIDriver': + 'cinder.volume.drivers.dell_emc.ps.PSSeriesISCSIDriver', } diff --git a/releasenotes/notes/move-eqlx-driver-to-dell-emc-fe5d2b484c47b7a6.yaml b/releasenotes/notes/move-eqlx-driver-to-dell-emc-fe5d2b484c47b7a6.yaml new file mode 100644 index 00000000000..6d09839d997 --- /dev/null +++ b/releasenotes/notes/move-eqlx-driver-to-dell-emc-fe5d2b484c47b7a6.yaml @@ -0,0 +1,6 @@ +--- +upgrade: + - The EqualLogic driver is moved to the dell_emc directory and has been + rebranded to its current Dell EMC PS Series name. The volume_driver + entry in cinder.conf needs to be changed to + cinder.volume.drivers.dell_emc.ps.PSSeriesISCSIDriver.