From b2a1b91071adcf9095c5ad5184ea20994b931abe Mon Sep 17 00:00:00 2001 From: Takeshi Nishikawa Date: Thu, 24 Dec 2015 21:50:03 +0900 Subject: [PATCH] Rebrand HP XP driver to now be HPE This patch refactors the HP XP driver to be HPE XP. This is being done because the company responsible for this driver is now Hewlett Packard Enterprise (HPE). The driver is now located in the cinder/volume/drivers/hpe folder. DocImpact Implements: blueprint rebrand-hp-xp-driver Change-Id: Ia16d39b9fec299662c97c236215a4e1aec44171a --- cinder/opts.py | 10 +- .../{test_hp_xp_fc.py => test_hpe_xp_fc.py} | 47 ++++--- .../{san/hp/hp_xp_fc.py => hpe/hpe_xp_fc.py} | 26 ++-- cinder/volume/drivers/hpe/hpe_xp_opts.py | 116 ++++++++++++++++++ cinder/volume/drivers/san/hp/hp_xp_opts.py | 98 --------------- cinder/volume/manager.py | 2 + ...rebrand-hp-xp-driver-55a716d8f6d40d60.yaml | 3 + tests-py3.txt | 2 +- 8 files changed, 163 insertions(+), 141 deletions(-) rename cinder/tests/unit/{test_hp_xp_fc.py => test_hpe_xp_fc.py} (96%) rename cinder/volume/drivers/{san/hp/hp_xp_fc.py => hpe/hpe_xp_fc.py} (87%) create mode 100644 cinder/volume/drivers/hpe/hpe_xp_opts.py delete mode 100644 cinder/volume/drivers/san/hp/hp_xp_opts.py create mode 100644 releasenotes/notes/rebrand-hp-xp-driver-55a716d8f6d40d60.yaml diff --git a/cinder/opts.py b/cinder/opts.py index ad20f46e7..bcd0c18c2 100644 --- a/cinder/opts.py +++ b/cinder/opts.py @@ -100,6 +100,8 @@ from cinder.volume.drivers.hpe import hpe_3par_common as \ cinder_volume_drivers_hpe_hpe3parcommon from cinder.volume.drivers.hpe import hpe_lefthand_iscsi as \ cinder_volume_drivers_hpe_hpelefthandiscsi +from cinder.volume.drivers.hpe import hpe_xp_opts as \ + cinder_volume_drivers_hpe_hpexpopts from cinder.volume.drivers.huawei import huawei_driver as \ cinder_volume_drivers_huawei_huaweidriver from cinder.volume.drivers.ibm import flashsystem_common as \ @@ -136,8 +138,6 @@ from cinder.volume.drivers import pure as cinder_volume_drivers_pure from cinder.volume.drivers import quobyte as cinder_volume_drivers_quobyte from cinder.volume.drivers import rbd as cinder_volume_drivers_rbd from cinder.volume.drivers import remotefs as cinder_volume_drivers_remotefs -from cinder.volume.drivers.san.hp import hp_xp_opts as \ - cinder_volume_drivers_san_hp_hpxpopts from cinder.volume.drivers.san.hp import hpmsa_common as \ cinder_volume_drivers_san_hp_hpmsacommon from cinder.volume.drivers.san import san as cinder_volume_drivers_san_san @@ -214,9 +214,6 @@ def list_opts(): storwize_svc_iscsi_opts, cinder_backup_drivers_glusterfs.glusterfsbackup_service_opts, cinder_backup_drivers_tsm.tsm_opts, - cinder_volume_drivers_san_hp_hpxpopts.FC_VOLUME_OPTS, - cinder_volume_drivers_san_hp_hpxpopts.COMMON_VOLUME_OPTS, - cinder_volume_drivers_san_hp_hpxpopts.HORCM_VOLUME_OPTS, cinder_test.test_opts, cinder_volume_drivers_ibm_gpfs.gpfs_opts, cinder_volume_drivers_violin_v7000common.violin_opts, @@ -309,6 +306,9 @@ def list_opts(): cinder_compute_nova.nova_opts, cinder_volume_drivers_ibm_flashsystemfc.flashsystem_fc_opts, cinder_volume_drivers_prophetstor_options.DPL_OPTS, + cinder_volume_drivers_hpe_hpexpopts.FC_VOLUME_OPTS, + cinder_volume_drivers_hpe_hpexpopts.COMMON_VOLUME_OPTS, + cinder_volume_drivers_hpe_hpexpopts.HORCM_VOLUME_OPTS, cinder_volume_drivers_hitachi_hbsdiscsi.volume_opts, cinder_volume_manager.volume_manager_opts, cinder_volume_drivers_nexenta_nexentaedge_iscsi. diff --git a/cinder/tests/unit/test_hp_xp_fc.py b/cinder/tests/unit/test_hpe_xp_fc.py similarity index 96% rename from cinder/tests/unit/test_hp_xp_fc.py rename to cinder/tests/unit/test_hpe_xp_fc.py index 58c08d7ea..3761c7c3f 100644 --- a/cinder/tests/unit/test_hp_xp_fc.py +++ b/cinder/tests/unit/test_hpe_xp_fc.py @@ -21,8 +21,8 @@ from cinder.tests.unit import fake_snapshot from cinder.tests.unit import fake_volume from cinder.volume import configuration as conf from cinder.volume import driver -from cinder.volume.drivers.san.hp import hp_xp_fc -from cinder.volume.drivers.san.hp import hp_xp_opts +from cinder.volume.drivers.hpe import hpe_xp_fc +from cinder.volume.drivers.hpe import hpe_xp_opts from oslo_config import cfg from oslo_utils import importutils @@ -35,8 +35,8 @@ EXISTING_POOL_REF = { } -class HPXPFakeCommon(object): - """Fake HPXP Common.""" +class HPEXPFakeCommon(object): + """Fake HPEXP Common.""" def __init__(self, conf, storage_protocol, **kwargs): self.conf = conf @@ -50,8 +50,8 @@ class HPXPFakeCommon(object): 'hba_id': 'wwpns', 'hba_id_type': 'World Wide Name', 'msg_id': {'target': 308}, - 'volume_backend_name': 'HPXPFC', - 'volume_opts': hp_xp_opts.FC_VOLUME_OPTS, + 'volume_backend_name': 'HPEXPFC', + 'volume_opts': hpe_xp_opts.FC_VOLUME_OPTS, 'volume_type': 'fibre_channel', } @@ -123,10 +123,10 @@ class HPXPFakeCommon(object): if refresh: d = {} d['volume_backend_name'] = self.driver_info['volume_backend_name'] - d['vendor_name'] = 'Hewlett-Packard' - d['driver_version'] = '1.3.0-0_2015.1' + d['vendor_name'] = 'Hewlett Packard Enterprise' + d['driver_version'] = '1.1.0' d['storage_protocol'] = self.storage_info['protocol'] - pool_info = POOL_INFO.get(self.conf.hpxp_pool) + pool_info = POOL_INFO.get(self.conf.hpexp_pool) if pool_info is None: return self._stats d['total_capacity_gb'] = pool_info['total_gb'] @@ -231,7 +231,7 @@ class HPXPFakeCommon(object): del self.volumes[volume['provider_location']] def get_pool_id(self): - pool = self.conf.hpxp_pool + pool = self.conf.hpexp_pool if pool.isdigit(): return int(pool) return None @@ -242,7 +242,7 @@ class HPXPFakeCommon(object): if self.storage_info['pool_id'] is None: raise exception.VolumeBackendAPIException( data='A pool could not be found. (pool: %(pool)s)' % - {'pool': self.conf.hpxp_pool}) + {'pool': self.conf.hpexp_pool}) def initialize_connection(self, volume, connector): ldev = volume.get('provider_location') @@ -306,8 +306,8 @@ class HPXPFakeCommon(object): pass -class HPXPFCDriverTest(test.TestCase): - """Test HPXPFCDriver.""" +class HPEXPFCDriverTest(test.TestCase): + """Test HPEXPFCDriver.""" _VOLUME = {'size': 128, 'name': 'test1', @@ -341,22 +341,22 @@ class HPXPFCDriverTest(test.TestCase): _TOO_BIG_VOLUME_SIZE = 100000 def __init__(self, *args, **kwargs): - super(HPXPFCDriverTest, self).__init__(*args, **kwargs) + super(HPEXPFCDriverTest, self).__init__(*args, **kwargs) def setUp(self): self._setup_config() self._setup_driver() - super(HPXPFCDriverTest, self).setUp() + super(HPEXPFCDriverTest, self).setUp() def _setup_config(self): self.configuration = mock.Mock(conf.Configuration) - self.configuration.hpxp_storage_id = "00000" - self.configuration.hpxp_pool = "30" + self.configuration.hpexp_storage_id = "00000" + self.configuration.hpexp_pool = "30" @mock.patch.object(importutils, 'import_object', return_value=None) def _setup_driver(self, arg1): - self.driver = hp_xp_fc.HPXPFCDriver(configuration=self.configuration) - self.driver.common = HPXPFakeCommon(self.configuration, 'FC') + self.driver = hpe_xp_fc.HPEXPFCDriver(configuration=self.configuration) + self.driver.common = HPEXPFakeCommon(self.configuration, 'FC') self.driver.do_setup(None) # API test cases @@ -495,9 +495,8 @@ class HPXPFCDriverTest(test.TestCase): self.assertTrue(has_volume) def test_create_volume_from_snapshot_error_on_non_existing_snapshot(self): - """Test create_volume_from_snapshot. + """Test create_volume_from_snapshot is error on non existing snapshot. - Test create_volume_from_snapshot is error on non existing snapshot. """ volume2 = fake_volume.fake_db_volume(**self._VOLUME2) snapshot = fake_snapshot.fake_db_snapshot(**self._TEST_SNAPSHOT) @@ -561,11 +560,11 @@ class HPXPFCDriverTest(test.TestCase): def test_get_volume_stats(self): """Test get_volume_stats.""" rc = self.driver.get_volume_stats(True) - self.assertEqual("Hewlett-Packard", rc['vendor_name']) + self.assertEqual("Hewlett Packard Enterprise", rc['vendor_name']) def test_get_volume_stats_error_on_non_existing_pool_id(self): """Test get_volume_stats is error on non existing pool id.""" - self.configuration.hpxp_pool = 29 + self.configuration.hpexp_pool = 29 rc = self.driver.get_volume_stats(True) self.assertEqual({}, rc) @@ -829,7 +828,7 @@ class HPXPFCDriverTest(test.TestCase): def test_do_setup_error_on_invalid_pool_id(self): """Test do_setup is error on invalid pool id.""" - self.configuration.hpxp_pool = 'invalid' + self.configuration.hpexp_pool = 'invalid' self.assertRaises(exception.VolumeBackendAPIException, self.driver.do_setup, None) diff --git a/cinder/volume/drivers/san/hp/hp_xp_fc.py b/cinder/volume/drivers/hpe/hpe_xp_fc.py similarity index 87% rename from cinder/volume/drivers/san/hp/hp_xp_fc.py rename to cinder/volume/drivers/hpe/hpe_xp_fc.py index ea2f6f478..c60c39eeb 100644 --- a/cinder/volume/drivers/san/hp/hp_xp_fc.py +++ b/cinder/volume/drivers/hpe/hpe_xp_fc.py @@ -1,4 +1,4 @@ -# Copyright (C) 2014, 2015, Hitachi, Ltd. +# Copyright (C) 2014-2015, Hitachi, Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain @@ -12,26 +12,26 @@ # License for the specific language governing permissions and limitations # under the License. """ -Fibre channel Cinder volume driver for Hewlett-Packard storage. +Fibre channel Cinder volume driver for Hewlett Packard Enterprise storage. """ from oslo_utils import importutils from cinder.volume import driver -from cinder.volume.drivers.san.hp import hp_xp_opts as opts +from cinder.volume.drivers.hpe import hpe_xp_opts as opts from cinder.zonemanager import utils as fczm_utils -_DRIVER_DIR = 'cinder.volume.drivers.san.hp' -_DRIVER_CLASS = 'hp_xp_horcm_fc.HPXPHORCMFC' +_DRIVER_DIR = 'cinder.volume.drivers.hpe' +_DRIVER_CLASS = 'hpe_xp_horcm_fc.HPEXPHORCMFC' -class HPXPFCDriver(driver.FibreChannelDriver): - """OpenStack Fibre Channel driver to enable HP XP storage.""" +class HPEXPFCDriver(driver.FibreChannelDriver): + """OpenStack Fibre Channel driver to enable HPE XP storage.""" def __init__(self, *args, **kwargs): """Initialize the driver.""" - super(HPXPFCDriver, self).__init__(*args, **kwargs) + super(HPEXPFCDriver, self).__init__(*args, **kwargs) self.configuration.append_config_values(opts.FC_VOLUME_OPTS) self.configuration.append_config_values(opts.COMMON_VOLUME_OPTS) @@ -80,7 +80,7 @@ class HPXPFCDriver(driver.FibreChannelDriver): Call copy_volume_data() of super class and carry out original postprocessing. """ - super(HPXPFCDriver, self).copy_volume_data( + super(HPEXPFCDriver, self).copy_volume_data( context, src_vol, dest_vol, remote) self.common.copy_volume_data(context, src_vol, dest_vol, remote) @@ -90,7 +90,7 @@ class HPXPFCDriver(driver.FibreChannelDriver): Call copy_image_to_volume() of super class and carry out original postprocessing. """ - super(HPXPFCDriver, self).copy_image_to_volume( + super(HPEXPFCDriver, self).copy_image_to_volume( context, volume, image_service, image_id) self.common.copy_image_to_volume( context, volume, image_service, image_id) @@ -101,7 +101,7 @@ class HPXPFCDriver(driver.FibreChannelDriver): Call restore_backup() of super class and carry out original postprocessing. """ - super(HPXPFCDriver, self).restore_backup( + super(HPEXPFCDriver, self).restore_backup( context, backup, volume, backup_service) self.common.restore_backup(context, backup, volume, backup_service) @@ -110,7 +110,7 @@ class HPXPFCDriver(driver.FibreChannelDriver): self.common.extend_volume(volume, new_size) def manage_existing(self, volume, existing_ref): - """Manage an existing HP XP storage volume. + """Manage an existing HPE XP storage volume. existing_ref is a dictionary of the form: @@ -128,7 +128,7 @@ class HPXPFCDriver(driver.FibreChannelDriver): self.common.unmanage(volume) def do_setup(self, context): - """Setup and verify HP XP storage connection.""" + """Setup and verify HPE XP storage connection.""" self.common.do_setup(context) def ensure_export(self, context, volume): diff --git a/cinder/volume/drivers/hpe/hpe_xp_opts.py b/cinder/volume/drivers/hpe/hpe_xp_opts.py new file mode 100644 index 000000000..7d6bfb46f --- /dev/null +++ b/cinder/volume/drivers/hpe/hpe_xp_opts.py @@ -0,0 +1,116 @@ +# Copyright (C) 2015, Hitachi, Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +"""HPE XP driver options.""" + +from oslo_config import cfg + +FC_VOLUME_OPTS = [ + cfg.BoolOpt( + 'hpexp_zoning_request', + default=False, + help='Request for FC Zone creating host group', + deprecated_name='hpxp_zoning_request'), +] + +COMMON_VOLUME_OPTS = [ + cfg.StrOpt( + 'hpexp_storage_cli', + help='Type of storage command line interface', + deprecated_name='hpxp_storage_cli'), + cfg.StrOpt( + 'hpexp_storage_id', + help='ID of storage system', + deprecated_name='hpxp_storage_id'), + cfg.StrOpt( + 'hpexp_pool', + help='Pool of storage system', + deprecated_name='hpxp_pool'), + cfg.StrOpt( + 'hpexp_thin_pool', + help='Thin pool of storage system', + deprecated_name='hpxp_thin_pool'), + cfg.StrOpt( + 'hpexp_ldev_range', + help='Logical device range of storage system', + deprecated_name='hpxp_ldev_range'), + cfg.StrOpt( + 'hpexp_default_copy_method', + default='FULL', + help='Default copy method of storage system. ' + 'There are two valid values: "FULL" specifies that a full copy; ' + '"THIN" specifies that a thin copy. Default value is "FULL"', + deprecated_name='hpxp_default_copy_method'), + cfg.IntOpt( + 'hpexp_copy_speed', + default=3, + help='Copy speed of storage system', + deprecated_name='hpxp_copy_speed'), + cfg.IntOpt( + 'hpexp_copy_check_interval', + default=3, + help='Interval to check copy', + deprecated_name='hpxp_copy_check_interval'), + cfg.IntOpt( + 'hpexp_async_copy_check_interval', + default=10, + help='Interval to check copy asynchronously', + deprecated_name='hpxp_async_copy_check_interval'), + cfg.ListOpt( + 'hpexp_target_ports', + help='Target port names for host group or iSCSI target', + deprecated_name='hpxp_target_ports'), + cfg.ListOpt( + 'hpexp_compute_target_ports', + help=( + 'Target port names of compute node ' + 'for host group or iSCSI target'), + deprecated_name='hpxp_compute_target_ports'), + cfg.BoolOpt( + 'hpexp_group_request', + default=False, + help='Request for creating host group or iSCSI target', + deprecated_name='hpxp_group_request'), +] + +HORCM_VOLUME_OPTS = [ + cfg.ListOpt( + 'hpexp_horcm_numbers', + default=["200", "201"], + help='Instance numbers for HORCM', + deprecated_name='hpxp_horcm_numbers'), + cfg.StrOpt( + 'hpexp_horcm_user', + help='Username of storage system for HORCM', + deprecated_name='hpxp_horcm_user'), + cfg.BoolOpt( + 'hpexp_horcm_add_conf', + default=True, + help='Add to HORCM configuration', + deprecated_name='hpxp_horcm_add_conf'), + cfg.StrOpt( + 'hpexp_horcm_resource_name', + default='meta_resource', + help='Resource group name of storage system for HORCM', + deprecated_name='hpxp_horcm_resource_name'), + cfg.BoolOpt( + 'hpexp_horcm_name_only_discovery', + default=False, + help='Only discover a specific name of host group or iSCSI target', + deprecated_name='hpxp_horcm_name_only_discovery'), +] + +CONF = cfg.CONF +CONF.register_opts(FC_VOLUME_OPTS) +CONF.register_opts(COMMON_VOLUME_OPTS) +CONF.register_opts(HORCM_VOLUME_OPTS) diff --git a/cinder/volume/drivers/san/hp/hp_xp_opts.py b/cinder/volume/drivers/san/hp/hp_xp_opts.py deleted file mode 100644 index 9190effd8..000000000 --- a/cinder/volume/drivers/san/hp/hp_xp_opts.py +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright (C) 2015, Hitachi, Ltd. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -"""HP XP driver options.""" - -from oslo_config import cfg - -FC_VOLUME_OPTS = [ - cfg.BoolOpt( - 'hpxp_zoning_request', - default=False, - help='Request for FC Zone creating host group'), -] - -COMMON_VOLUME_OPTS = [ - cfg.StrOpt( - 'hpxp_storage_cli', - help='Type of storage command line interface'), - cfg.StrOpt( - 'hpxp_storage_id', - help='ID of storage system'), - cfg.StrOpt( - 'hpxp_pool', - help='Pool of storage system'), - cfg.StrOpt( - 'hpxp_thin_pool', - help='Thin pool of storage system'), - cfg.StrOpt( - 'hpxp_ldev_range', - help='Logical device range of storage system'), - cfg.StrOpt( - 'hpxp_default_copy_method', - default='FULL', - help='Default copy method of storage system. ' - 'There are two valid values: "FULL" specifies that a full copy; ' - '"THIN" specifies that a thin copy. Default value is "FULL"'), - cfg.IntOpt( - 'hpxp_copy_speed', - default=3, - help='Copy speed of storage system'), - cfg.IntOpt( - 'hpxp_copy_check_interval', - default=3, - help='Interval to check copy'), - cfg.IntOpt( - 'hpxp_async_copy_check_interval', - default=10, - help='Interval to check copy asynchronously'), - cfg.ListOpt( - 'hpxp_target_ports', - help='Target port names for host group or iSCSI target'), - cfg.ListOpt( - 'hpxp_compute_target_ports', - help=( - 'Target port names of compute node ' - 'for host group or iSCSI target')), - cfg.BoolOpt( - 'hpxp_group_request', - default=False, - help='Request for creating host group or iSCSI target'), -] - -HORCM_VOLUME_OPTS = [ - cfg.ListOpt( - 'hpxp_horcm_numbers', - default=["200", "201"], - help='Instance numbers for HORCM'), - cfg.StrOpt( - 'hpxp_horcm_user', - help='Username of storage system for HORCM'), - cfg.BoolOpt( - 'hpxp_horcm_add_conf', - default=True, - help='Add to HORCM configuration'), - cfg.StrOpt( - 'hpxp_horcm_resource_name', - default='meta_resource', - help='Resource group name of storage system for HORCM'), - cfg.BoolOpt( - 'hpxp_horcm_name_only_discovery', - default=False, - help='Only discover a specific name of host group or iSCSI target'), -] - -CONF = cfg.CONF -CONF.register_opts(FC_VOLUME_OPTS) -CONF.register_opts(COMMON_VOLUME_OPTS) -CONF.register_opts(HORCM_VOLUME_OPTS) diff --git a/cinder/volume/manager.py b/cinder/volume/manager.py index b9fd6b980..a64bf0ac0 100644 --- a/cinder/volume/manager.py +++ b/cinder/volume/manager.py @@ -129,6 +129,8 @@ MAPPING = { 'cinder.volume.drivers.hpe.hpe_3par_iscsi.HPE3PARISCSIDriver', 'cinder.volume.drivers.san.hp.hp_lefthand_iscsi.HPLeftHandISCSIDriver': 'cinder.volume.drivers.hpe.hpe_lefthand_iscsi.HPELeftHandISCSIDriver', + 'cinder.volume.drivers.san.hp.hp_xp_fc.HPXPFCDriver': + 'cinder.volume.drivers.hpe.hpe_xp_fc.HPEXPFCDriver', } diff --git a/releasenotes/notes/rebrand-hp-xp-driver-55a716d8f6d40d60.yaml b/releasenotes/notes/rebrand-hp-xp-driver-55a716d8f6d40d60.yaml new file mode 100644 index 000000000..3a5187154 --- /dev/null +++ b/releasenotes/notes/rebrand-hp-xp-driver-55a716d8f6d40d60.yaml @@ -0,0 +1,3 @@ +--- +upgrade: + - HP drivers have been rebranded to HPE. Existing configurations will continue to work with the legacy name, but will need to be updated by the next release. diff --git a/tests-py3.txt b/tests-py3.txt index 3563646ad..b505f3ca8 100644 --- a/tests-py3.txt +++ b/tests-py3.txt @@ -90,7 +90,7 @@ cinder.tests.unit.test_hitachi_hnas_backend cinder.tests.unit.test_hitachi_hnas_iscsi cinder.tests.unit.test_hitachi_hnas_nfs cinder.tests.unit.test_hpe3par -cinder.tests.unit.test_hp_xp_fc +cinder.tests.unit.test_hpe_xp_fc cinder.tests.unit.test_hpelefthand cinder.tests.unit.test_huawei_drivers cinder.tests.unit.test_huawei_drivers_compatibility -- 2.45.2