diff --git a/cinder/opts.py b/cinder/opts.py index ad20f46e745..bcd0c18c2a2 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 58c08d7eafb..3761c7c3f3a 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 ea2f6f4782c..c60c39eebd3 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 00000000000..7d6bfb46f70 --- /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 9190effd82f..00000000000 --- 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 b9fd6b9804d..a64bf0ac0e5 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 00000000000..3a51871543f --- /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 3563646ad14..b505f3ca832 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