From 6995b9f9758f4b8526011954670da5602acb60cb Mon Sep 17 00:00:00 2001 From: Helen Walsh Date: Tue, 4 Jun 2019 17:21:57 +0100 Subject: [PATCH] Manila PowerMax - rebrand from VMAX to PowerMax Rebrand from VMAX to PowerMax includes change tags, directory structure, file names and documentation. Implements: blueprint powermax-rebrand-manila Change-Id: Ie9ba5939b223d7061a3b2707ee9ef899f1fe7f66 --- .../shared-file-systems/drivers.rst | 2 +- ...river.rst => dell-emc-powermax-driver.rst} | 88 ++++--- .../{manila-vmax.inc => manila-powermax.inc} | 10 +- manila/exception.py | 6 +- manila/opts.py | 4 +- manila/share/drivers/dell_emc/driver.py | 13 +- .../plugins/{vmax => powermax}/__init__.py | 0 .../plugins/{vmax => powermax}/connection.py | 80 +++---- .../{vmax => powermax}/object_manager.py | 219 +++++++++--------- .../drivers/dell_emc/common/enas/fakes.py | 7 +- .../drivers/dell_emc/common/enas/utils.py | 9 +- .../plugins/{vmax => powermax}/__init__.py | 0 .../{vmax => powermax}/test_connection.py | 2 +- .../{vmax => powermax}/test_object_manager.py | 90 +++---- ...ermax-rebrand-manila-a46a0c2ac0aa77ed.yaml | 20 ++ setup.cfg | 2 +- 16 files changed, 292 insertions(+), 260 deletions(-) rename doc/source/configuration/shared-file-systems/drivers/{dell-emc-vmax-driver.rst => dell-emc-powermax-driver.rst} (87%) rename doc/source/configuration/tables/{manila-vmax.inc => manila-powermax.inc} (77%) rename manila/share/drivers/dell_emc/plugins/{vmax => powermax}/__init__.py (100%) rename manila/share/drivers/dell_emc/plugins/{vmax => powermax}/connection.py (93%) rename manila/share/drivers/dell_emc/plugins/{vmax => powermax}/object_manager.py (91%) rename manila/tests/share/drivers/dell_emc/plugins/{vmax => powermax}/__init__.py (100%) rename manila/tests/share/drivers/dell_emc/plugins/{vmax => powermax}/test_connection.py (99%) rename manila/tests/share/drivers/dell_emc/plugins/{vmax => powermax}/test_object_manager.py (97%) create mode 100644 releasenotes/notes/powermax-rebrand-manila-a46a0c2ac0aa77ed.yaml diff --git a/doc/source/configuration/shared-file-systems/drivers.rst b/doc/source/configuration/shared-file-systems/drivers.rst index c576bd5687..8cd24c52f2 100644 --- a/doc/source/configuration/shared-file-systems/drivers.rst +++ b/doc/source/configuration/shared-file-systems/drivers.rst @@ -10,7 +10,7 @@ Share drivers drivers/generic-driver.rst drivers/cephfs-native-driver.rst - drivers/dell-emc-vmax-driver.rst + drivers/dell-emc-powermax-driver.rst drivers/dell-emc-unity-driver.rst drivers/dell-emc-vnx-driver.rst drivers/glusterfs-driver.rst diff --git a/doc/source/configuration/shared-file-systems/drivers/dell-emc-vmax-driver.rst b/doc/source/configuration/shared-file-systems/drivers/dell-emc-powermax-driver.rst similarity index 87% rename from doc/source/configuration/shared-file-systems/drivers/dell-emc-vmax-driver.rst rename to doc/source/configuration/shared-file-systems/drivers/dell-emc-powermax-driver.rst index 55f2dd39f8..f77d554deb 100644 --- a/doc/source/configuration/shared-file-systems/drivers/dell-emc-vmax-driver.rst +++ b/doc/source/configuration/shared-file-systems/drivers/dell-emc-powermax-driver.rst @@ -1,29 +1,29 @@ -==================== -Dell EMC VMAX driver -==================== +======================== +Dell EMC PowerMax Plugin +======================== The Dell EMC Shared File Systems service driver framework (EMCShareDriver) utilizes the Dell EMC storage products to provide the shared file systems to OpenStack. The Dell EMC driver is a plug-in based driver which is designed to use different plug-ins to manage different Dell EMC storage products. -The VMAX plug-in manages the VMAX to provide shared file systems. The EMC -driver framework with the VMAX plug-in is referred to as the VMAX driver -in this document. +The PowerMax plug-in manages the PowerMax to provide shared file systems. +The Dell EMC driver framework with the PowerMax plug-in is referred to as the +PowerMax driver in this document. -This driver performs the operations on VMAX eNAS by XMLAPI and the file -command line. Each back end manages one Data Mover of VMAX. Multiple +This driver performs the operations on PowerMax eNAS by XMLAPI and the file +command line. Each back end manages one Data Mover of PowerMax. Multiple Shared File Systems service back ends need to be configured to manage multiple Data Movers. Requirements ~~~~~~~~~~~~ -- VMAX eNAS OE for File version 8.1 or higher +- PowerMax eNAS OE for File version 8.1 or higher -- VMAX Unified or File only +- PowerMax Unified or File only -- The following licenses should be activated on VMAX for File: +- The following licenses should be activated on PowerMax for File: - CIFS @@ -60,17 +60,17 @@ The following operations are supported: - Create a share from a snapshot. While the generic driver creates shared file systems based on cinder -volumes attached to nova VMs, the VMAX driver performs similar operations +volumes attached to nova VMs, the PowerMax driver performs similar operations using the Data Movers on the array. -Pre-configurations on VMAX -~~~~~~~~~~~~~~~~~~~~~~~~~~ +Pre-configurations on PowerMax +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #. Configure a storage pool There is a one to one relationship between a storage pool in embedded NAS - to a storage group on the VMAX. The best way to provision - storage for file is from the Unisphere for VMAX UI rather than eNAS UI. + to a storage group on the PowerMax. The best way to provision + storage for file is from the Unisphere for PowerMax UI rather than eNAS UI. Go to :menuselection:`{array} > SYSTEM > FIle` and under :menuselection:`Actions` click :menuselection:`PROVISION STORAGE FOR FILE` @@ -109,7 +109,7 @@ Pre-configurations on VMAX #. Enable CIFS service on Data Mover. Ensure the CIFS service is enabled on the Data Mover which is going - to be managed by VMAX driver. + to be managed by PowerMax driver. To start the CIFS service, use the following command: @@ -136,7 +136,7 @@ Pre-configurations on VMAX #. NTP settings on Data Mover. - VMAX driver only supports CIFS share creation with share network + PowerMax driver only supports CIFS share creation with share network which has an Active Directory security-service associated. Creating CIFS share requires that the time on the Data Mover is in @@ -185,10 +185,10 @@ Pre-configurations on VMAX #. Configure User Mapping on the Data Mover. - Before creating CIFS share using VMAX driver, you must select a + Before creating CIFS share using PowerMax driver, you must select a method of mapping Windows SIDs to UIDs and GIDs. DELL EMC recommends using usermapper in single protocol (CIFS) environment which is - enabled on VMAX eNAS by default. + enabled on PowerMax eNAS by default. To check usermapper status, use the following command syntax: @@ -205,7 +205,7 @@ Pre-configurations on VMAX $ server_usermapper -enable # movername = name of the Data Mover - For a multiple protocol environment, refer to Configuring VMAX eNAS User + For a multiple protocol environment, refer to Configuring PowerMax eNAS User Mapping on `EMC support site `_ for additional information. @@ -257,42 +257,42 @@ Back-end configurations The following parameters need to be configured in the -``/etc/manila/manila.conf`` file for the VMAX driver: +``/etc/manila/manila.conf`` file for the PowerMax driver: .. code-block:: ini - emc_share_backend = vmax + emc_share_backend = powermax emc_nas_server = emc_nas_password = emc_nas_login = driver_handles_share_servers = True - vmax_server_container = - vmax_share_data_pools = + powermax_server_container = + powermax_share_data_pools = share_driver = manila.share.drivers.dell_emc.driver.EMCShareDriver - vmax_ethernet_ports = + powermax_ethernet_ports = emc_ssl_cert_verify = True emc_ssl_cert_path = - emc_share_backend = vmax share_backend_name = - `emc_share_backend` - The plug-in name. Set it to ``vmax`` for the VMAX driver. + The plug-in name. Set it to ``powermax`` for the PowerMax driver. + Other values are ``isilon``, ``vnx`` and ``unity``. - `emc_nas_server` - The control station IP address of the VMAX system to be managed. + The control station IP address of the PowerMax system to be managed. - `emc_nas_password` and `emc_nas_login` The fields that are used to provide credentials to the - VMAX system. Only local users of VMAX File is supported. + PowerMax system. Only local users of PowerMax File is supported. - `driver_handles_share_servers` - VMAX only supports True, where the share driver handles the provisioning + PowerMax only supports True, where the share driver handles the provisioning and management of the share servers. -- `vmax_server_container` +- `powermax_server_container` Name of the Data Mover to serve the share service. -- `vmax_share_data_pools` +- `powermax_share_data_pools` Comma separated list specifying the name of the pools to be used by this back end. Do not set this option if all storage pools on the system can be used. @@ -300,7 +300,7 @@ The following parameters need to be configured in the Examples: pool_1, pool_*, * -- `vmax_ethernet_ports (optional)` +- `powermax_ethernet_ports (optional)` Comma-separated list specifying the ports (devices) of Data Mover that can be used for share server interface. Do not set this option if all ports on the Data Mover can be used. @@ -316,10 +316,6 @@ The following parameters need to be configured in the the recommended configuration. See ``SSL Support`` section for more details. -- `emc_share_backend` - Set to ``vmax`` to enable vmax manila plugin . Other values are - ``isilon``, ``vnx`` and ``unity``. - - `share_backend_name` The backend name for a given driver implementation. @@ -451,18 +447,18 @@ To create a target share from a shapshot where create_share_from_snapshot_suppor IPv6 support ~~~~~~~~~~~~ -IPv6 support for VMAX Manila driver is introduced in Rocky release. The feature is -divided into two parts: +IPv6 support for PowerMax Manila driver was introduced in Rocky release. +The feature is divided into two parts: #. The driver is able to manage share or snapshot in the Neutron IPv6 network. -#. The driver is able to connect VMAX management interface using its IPv6 +#. The driver is able to connect PowerMax management interface using its IPv6 address. Pre-Configurations for IPv6 support ----------------------------------- The following parameters need to be configured in ``/etc/manila/manila.conf`` -for the VMAX driver: +for the PowerMax driver: .. code-block:: ini @@ -479,7 +475,7 @@ address in ``/etc/manila/manila.conf``: Restrictions ~~~~~~~~~~~~ -The VMAX driver has the following restrictions: +The PowerMax driver has the following restrictions: - Only ``driver_handles_share_servers`` equals True is supported. @@ -491,7 +487,7 @@ The VMAX driver has the following restrictions: - VLAN network is supported with limitations. The neutron subnets in different VLANs that are used to create share networks cannot have - overlapped address spaces. Otherwise, VMAX may have a problem to + overlapped address spaces. Otherwise, PowerMax may have a problem to communicate with the hosts in the VLANs. To create shares for different VLANs with same subnet address, use different Data Movers. @@ -540,7 +536,7 @@ Other Remarks listing of quotas and disk usage at the file system level (by the user, group, or tree), or at the quota-tree level (by the user or group). ``nas_quotas`` also turns quotas on and off, and clears quotas records - for a file system, quota tree, or a Data Mover. Refer to VMAX eNAS CLI + for a file system, quota tree, or a Data Mover. Refer to PowerMax eNAS CLI Reference guide on `EMC support site `_ for additional information. ``OpenStack manila quotas`` delimit the number of shares, snapshots etc. @@ -567,4 +563,4 @@ Driver options Configuration options specific to this driver: -.. include:: ../../tables/manila-vmax.inc +.. include:: ../../tables/manila-powermax.inc diff --git a/doc/source/configuration/tables/manila-vmax.inc b/doc/source/configuration/tables/manila-powermax.inc similarity index 77% rename from doc/source/configuration/tables/manila-vmax.inc rename to doc/source/configuration/tables/manila-powermax.inc index a4dd796fc4..6b7486a32e 100644 --- a/doc/source/configuration/tables/manila-vmax.inc +++ b/doc/source/configuration/tables/manila-powermax.inc @@ -8,9 +8,9 @@ autogenerate-config-doc tool from the openstack-doc-tools repository, or ask for help on the documentation mailing list, IRC channel or meeting. -.. _manila-vmax: +.. _manila-powermax: -.. list-table:: Description of Dell EMC VMAX share driver configuration options +.. list-table:: Description of Dell EMC PowerMax share driver configuration options :header-rows: 1 :class: config-ref-table @@ -18,9 +18,9 @@ - Description * - **[DEFAULT]** - - * - ``vmax_ethernet_ports`` = ``None`` + * - ``powermax_ethernet_ports`` = ``None`` - (List) Comma separated list of ports that can be used for share server interfaces. Members of the list can be Unix-style glob expressions. - * - ``vmax_server_container`` = ``None`` + * - ``powermax_server_container`` = ``None`` - (String) Data mover to host the NAS server. - * - ``vmax_share_data_pools`` = ``None`` + * - ``powermax_share_data_pools`` = ``None`` - (List) Comma separated list of pools that can be used to persist share data. diff --git a/manila/exception.py b/manila/exception.py index 11e8a9684a..f8d1d39ded 100644 --- a/manila/exception.py +++ b/manila/exception.py @@ -751,15 +751,15 @@ class VserverNotSpecified(NetAppException): message = _("Vserver not specified.") -class EMCVmaxXMLAPIError(Invalid): +class EMCPowerMaxXMLAPIError(Invalid): message = _("%(err)s") -class EMCVmaxLockRequiredException(ManilaException): +class EMCPowerMaxLockRequiredException(ManilaException): message = _("Unable to acquire lock(s).") -class EMCVmaxInvalidMoverID(ManilaException): +class EMCPowerMaxInvalidMoverID(ManilaException): message = _("Invalid mover or vdm %(id)s.") diff --git a/manila/opts.py b/manila/opts.py index af9fdff07f..ca3089bd87 100644 --- a/manila/opts.py +++ b/manila/opts.py @@ -58,7 +58,7 @@ import manila.share.drivers.container.driver import manila.share.drivers.container.storage_helper import manila.share.drivers.dell_emc.driver import manila.share.drivers.dell_emc.plugins.isilon.isilon -import manila.share.drivers.dell_emc.plugins.vmax.connection +import manila.share.drivers.dell_emc.plugins.powermax.connection import manila.share.drivers.generic import manila.share.drivers.glusterfs import manila.share.drivers.glusterfs.common @@ -141,7 +141,7 @@ _global_opt_lists = [ manila.share.drivers.container.driver.container_opts, manila.share.drivers.container.storage_helper.lv_opts, manila.share.drivers.dell_emc.driver.EMC_NAS_OPTS, - manila.share.drivers.dell_emc.plugins.vmax.connection.VMAX_OPTS, + manila.share.drivers.dell_emc.plugins.powermax.connection.POWERMAX_OPTS, manila.share.drivers.generic.share_opts, manila.share.drivers.glusterfs.common.glusterfs_common_opts, manila.share.drivers.glusterfs.GlusterfsManilaShare_opts, diff --git a/manila/share/drivers/dell_emc/driver.py b/manila/share/drivers/dell_emc/driver.py index ec3b6aa631..5867d0153f 100644 --- a/manila/share/drivers/dell_emc/driver.py +++ b/manila/share/drivers/dell_emc/driver.py @@ -1,4 +1,4 @@ -# Copyright (c) 2014 EMC Corporation. +# Copyright (c) 2019 EMC Corporation. # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -21,6 +21,7 @@ to specify, which backend plugins to use. """ from oslo_config import cfg +from oslo_log import log from manila.share import driver from manila.share.drivers.dell_emc import plugin_manager as manager @@ -40,7 +41,7 @@ EMC_NAS_OPTS = [ help='Use secure connection to server.'), cfg.StrOpt('emc_share_backend', ignore_case=True, - choices=['isilon', 'vnx', 'unity', 'vmax'], + choices=['isilon', 'vnx', 'unity', 'vmax', 'powermax'], help='Share backend.'), cfg.StrOpt('emc_nas_root_dir', help='The root directory where shares will be located.'), @@ -54,6 +55,8 @@ EMC_NAS_OPTS = [ 'CAs, which will be used to validate the backend.') ] +LOG = log.getLogger(__name__) + CONF = cfg.CONF CONF.register_opts(EMC_NAS_OPTS) @@ -72,6 +75,12 @@ class EMCShareDriver(driver.ShareDriver): self.backend_name = self.backend_name or 'EMC_NAS_Storage' self.plugin_manager = manager.EMCPluginManager( namespace='manila.share.drivers.dell_emc.plugins') + if self.backend_name == 'vmax': + LOG.warning("Configuration option 'emc_share_backend=vmax' will " + "remain a valid option until the V release of " + "OpenStack. After that, only " + "'emc_share_backend=powermax' will be excepted.") + self.backend_name = 'powermax' self.plugin = self.plugin_manager.load_plugin( self.backend_name, configuration=self.configuration) diff --git a/manila/share/drivers/dell_emc/plugins/vmax/__init__.py b/manila/share/drivers/dell_emc/plugins/powermax/__init__.py similarity index 100% rename from manila/share/drivers/dell_emc/plugins/vmax/__init__.py rename to manila/share/drivers/dell_emc/plugins/powermax/__init__.py diff --git a/manila/share/drivers/dell_emc/plugins/vmax/connection.py b/manila/share/drivers/dell_emc/plugins/powermax/connection.py similarity index 93% rename from manila/share/drivers/dell_emc/plugins/vmax/connection.py rename to manila/share/drivers/dell_emc/plugins/powermax/connection.py index 3c05c34c85..6ee8caf520 100644 --- a/manila/share/drivers/dell_emc/plugins/vmax/connection.py +++ b/manila/share/drivers/dell_emc/plugins/powermax/connection.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Dell Inc. or its subsidiaries. +# Copyright (c) 2019 Dell Inc. or its subsidiaries. # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -12,7 +12,7 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -"""VMAX backend for the EMC Manila driver.""" +"""PowerMax backend for the Dell EMC Manila driver.""" import copy import random @@ -29,7 +29,7 @@ from manila.i18n import _ from manila.share.drivers.dell_emc.common.enas import constants from manila.share.drivers.dell_emc.common.enas import utils as enas_utils from manila.share.drivers.dell_emc.plugins import base as driver -from manila.share.drivers.dell_emc.plugins.vmax import ( +from manila.share.drivers.dell_emc.plugins.powermax import ( object_manager as manager) from manila.share import utils as share_utils from manila import utils @@ -37,40 +37,42 @@ from manila import utils """Version history: 1.0.0 - Initial version 2.0.0 - Implement IPv6 support + 3.0.0 - Rebranding to PowerMax """ -VERSION = "2.0.0" +VERSION = "3.0.0" LOG = log.getLogger(__name__) -VMAX_OPTS = [ - cfg.StrOpt('vmax_server_container', - deprecated_name='emc_nas_server_container', +POWERMAX_OPTS = [ + cfg.StrOpt('powermax_server_container', + deprecated_name='vmax_server_container', help='Data mover to host the NAS server.'), - cfg.ListOpt('vmax_share_data_pools', - deprecated_name='emc_nas_pool_names', + cfg.ListOpt('powermax_share_data_pools', + deprecated_name='vmax_share_data_pools', help='Comma separated list of pools that can be used to ' 'persist share data.'), - cfg.ListOpt('vmax_ethernet_ports', - deprecated_name='emc_interface_ports', + cfg.ListOpt('powermax_ethernet_ports', + deprecated_name='vmax_ethernet_ports', help='Comma separated list of ports that can be used for ' 'share server interfaces. Members of the list ' 'can be Unix-style glob expressions.') ] CONF = cfg.CONF -CONF.register_opts(VMAX_OPTS) +CONF.register_opts(POWERMAX_OPTS) @enas_utils.decorate_all_methods(enas_utils.log_enter_exit, debug_only=True) -class VMAXStorageConnection(driver.StorageConnection): - """Implements vmax specific functionality for EMC Manila driver.""" +class PowerMaxStorageConnection(driver.StorageConnection): + """Implements powermax specific functionality for Dell EMC Manila driver. + """ @enas_utils.log_enter_exit def __init__(self, *args, **kwargs): - super(VMAXStorageConnection, self).__init__(*args, **kwargs) + super(PowerMaxStorageConnection, self).__init__(*args, **kwargs) if 'configuration' in kwargs: - kwargs['configuration'].append_config_values(VMAX_OPTS) + kwargs['configuration'].append_config_values(POWERMAX_OPTS) self.mover_name = None self.pools = None @@ -114,7 +116,7 @@ class VMAXStorageConnection(driver.StorageConnection): if status != constants.STATUS_OK: message = (_("CIFS server %s not found.") % server_name) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self._allocate_container(share_name, size, share_server, pool_name) @@ -138,7 +140,7 @@ class VMAXStorageConnection(driver.StorageConnection): if vdm is None: message = _("No share server found.") LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def _allocate_container(self, share_name, size, share_server, pool_name): """Allocate file system for share.""" @@ -178,7 +180,7 @@ class VMAXStorageConnection(driver.StorageConnection): "so the share is inaccessible.") % server['compName']) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) interface = enas_utils.export_unc_path(server['interfaces'][0]) @@ -254,7 +256,7 @@ class VMAXStorageConnection(driver.StorageConnection): if status != constants.STATUS_OK: message = (_("File System %s not found.") % share_name) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) pool_id = filesystem['pools_id'][0] @@ -309,7 +311,7 @@ class VMAXStorageConnection(driver.StorageConnection): try: # Delete mount point self._get_context('MountPoint').delete(path, vdm_name) - except exception.EMCVmaxXMLAPIError as e: + except exception.EMCPowerMaxXMLAPIError as e: LOG.exception("CIFS server %(name)s on mover %(mover_name)s " "not found due to error %(err)s. Skip the " "deletion.", @@ -319,7 +321,7 @@ class VMAXStorageConnection(driver.StorageConnection): try: # Delete file system self._get_context('FileSystem').delete(share_name) - except exception.EMCVmaxXMLAPIError as e: + except exception.EMCPowerMaxXMLAPIError as e: LOG.exception("File system %(share_name)s not found due to " "error %(err)s. Skip the deletion.", {'share_name': share_name, @@ -387,7 +389,7 @@ class VMAXStorageConnection(driver.StorageConnection): if status != constants.STATUS_OK: message = (_("CIFS server %s not found.") % server_name) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self._get_context('CIFSShare').allow_share_access( vdm_name, @@ -453,7 +455,7 @@ class VMAXStorageConnection(driver.StorageConnection): message = (_("CIFS server %(server_name)s has issue. " "Detail: %(status)s") % {'server_name': server_name, 'status': status}) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self._get_context('CIFSShare').clear_share_access( share_name=share_name, @@ -506,7 +508,7 @@ class VMAXStorageConnection(driver.StorageConnection): if status != constants.STATUS_OK: message = (_("CIFS server %s not found.") % server_name) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self._get_context('CIFSShare').deny_share_access( vdm_name, @@ -552,7 +554,7 @@ class VMAXStorageConnection(driver.StorageConnection): message = (_("Failed to get storage pool information. " "Reason: %s") % backend_pools) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) real_pools = set([item for item in backend_pools]) conf_pools = set([item.strip() for item in pools]) @@ -575,19 +577,19 @@ class VMAXStorageConnection(driver.StorageConnection): return matched_pools def connect(self, emc_share_driver, context): - """Connect to VMAX NAS server.""" + """Connect to PowerMax NAS server.""" config = emc_share_driver.configuration - config.append_config_values(VMAX_OPTS) - self.mover_name = config.vmax_server_container + config.append_config_values(POWERMAX_OPTS) + self.mover_name = config.safe_get('powermax_server_container') - self.pool_conf = config.safe_get('vmax_share_data_pools') + self.pool_conf = config.safe_get('powermax_share_data_pools') self.reserved_percentage = config.safe_get('reserved_share_percentage') if self.reserved_percentage is None: self.reserved_percentage = 0 self.manager = manager.StorageObjectManager(config) - self.port_conf = config.safe_get('vmax_ethernet_ports') + self.port_conf = config.safe_get('powermax_ethernet_ports') def get_managed_ports(self): # Get the real ports(devices) list from the backend storage @@ -603,7 +605,7 @@ class VMAXStorageConnection(driver.StorageConnection): if not matched_ports: msg = (_("None of the specified network ports exist. " - "Please check your configuration vmax_ethernet_ports " + "Please check your configuration powermax_ethernet_ports " "in manila.conf. The available ports on the Data Mover " "are %s.") % ",".join(real_ports)) @@ -643,7 +645,7 @@ class VMAXStorageConnection(driver.StorageConnection): if not stats_dict['pools']: message = _("Failed to update storage pool.") LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get_pool(self, share): """Get the pool name of the share.""" @@ -654,7 +656,7 @@ class VMAXStorageConnection(driver.StorageConnection): "Reason: %(err)s") % {'name': share_name, 'err': filesystem}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) pool_id = filesystem['pools_id'][0] @@ -664,7 +666,7 @@ class VMAXStorageConnection(driver.StorageConnection): message = (_("Failed to get storage pool information. " "Reason: %s") % backend_pools) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) for name, pool_info in backend_pools.items(): if pool_info['id'] == pool_id: @@ -674,7 +676,7 @@ class VMAXStorageConnection(driver.StorageConnection): message = (_("No matched pool name for share: %(share)s. " "Available pools: %(pools)s") % {'share': share_name, 'pools': available_pools}) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get_network_allocations_number(self): """Returns number of network allocations for creating VIFs.""" @@ -696,7 +698,7 @@ class VMAXStorageConnection(driver.StorageConnection): network_info['security_services']) if not is_valid: - raise exception.EMCVmaxXMLAPIError(err=active_directory) + raise exception.EMCPowerMaxXMLAPIError(err=active_directory) try: if not self._vdm_exist(vdm_name): @@ -778,7 +780,7 @@ class VMAXStorageConnection(driver.StorageConnection): message = (_("Could not get physical device port on mover %s.") % self.mover_name) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) return devices @@ -852,7 +854,7 @@ class VMAXStorageConnection(driver.StorageConnection): try: self._get_context('CIFSServer').modify( cifs_server_args) - except exception.EMCVmaxXMLAPIError as expt: + except exception.EMCPowerMaxXMLAPIError as expt: LOG.debug("Failed to modify CIFS server " "%(server)s. Reason: %(err)s.", {'server': server, 'err': expt}) diff --git a/manila/share/drivers/dell_emc/plugins/vmax/object_manager.py b/manila/share/drivers/dell_emc/plugins/powermax/object_manager.py similarity index 91% rename from manila/share/drivers/dell_emc/plugins/vmax/object_manager.py rename to manila/share/drivers/dell_emc/plugins/powermax/object_manager.py index ad0f6eb885..589358503f 100644 --- a/manila/share/drivers/dell_emc/plugins/vmax/object_manager.py +++ b/manila/share/drivers/dell_emc/plugins/powermax/object_manager.py @@ -27,15 +27,15 @@ from manila import exception from manila.i18n import _ from manila.share.drivers.dell_emc.common.enas import connector from manila.share.drivers.dell_emc.common.enas import constants -from manila.share.drivers.dell_emc.common.enas import utils as vmax_utils +from manila.share.drivers.dell_emc.common.enas import utils as powermax_utils from manila.share.drivers.dell_emc.common.enas import xml_api_parser as parser from manila import utils LOG = log.getLogger(__name__) -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class StorageObjectManager(object): def __init__(self, configuration): self.context = {} @@ -61,7 +61,7 @@ class StorageObjectManager(object): else: message = (_("Invalid storage object type %s.") % type) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) class StorageObject(object): @@ -74,7 +74,7 @@ class StorageObject(object): self.ssh_retry_patterns = [ ( constants.SSH_DEFAULT_RETRY_PATTERN, - exception.EMCVmaxLockRequiredException() + exception.EMCPowerMaxLockRequiredException() ), ] @@ -144,7 +144,7 @@ class StorageObject(object): ) ) - @utils.retry(exception.EMCVmaxLockRequiredException) + @utils.retry(exception.EMCPowerMaxLockRequiredException) def _send_request(self, req): req_xml = constants.XML_HEADER + ET.tostring(req).decode('utf-8') @@ -157,11 +157,11 @@ class StorageObject(object): if (response['maxSeverity'] != constants.STATUS_OK and self._response_validation(response, constants.MSG_CODE_RETRY)): - raise exception.EMCVmaxLockRequiredException + raise exception.EMCPowerMaxLockRequiredException return response - @utils.retry(exception.EMCVmaxLockRequiredException) + @utils.retry(exception.EMCPowerMaxLockRequiredException) def _execute_cmd(self, cmd, retry_patterns=None, check_exit_code=False): """Execute NAS command via SSH. @@ -211,14 +211,14 @@ class StorageObject(object): return self.manager.getStorageContext(type) -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class FileSystem(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(FileSystem, self).__init__(conn, elt_maker, xml_parser, manager) self.filesystem_map = {} - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def create(self, name, size, pool_name, mover_name, is_vdm=True): pool_id = self.get_context('StoragePool').get_id(pool_name) @@ -249,7 +249,7 @@ class FileSystem(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif self._response_validation( response, constants.MSG_FILESYSTEM_EXIST): LOG.warning("File system %s already exists. " @@ -260,7 +260,7 @@ class FileSystem(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get(self, name): if name not in self.filesystem_map: @@ -314,7 +314,7 @@ class FileSystem(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': out}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) enas_id = self.filesystem_map[name]['id'] @@ -329,7 +329,7 @@ class FileSystem(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self.filesystem_map.pop(name) @@ -340,7 +340,7 @@ class FileSystem(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': out}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) enas_id = out['id'] size = int(out['size']) @@ -350,7 +350,7 @@ class FileSystem(StorageObject): "%(size)d.") % {'name': name, 'new_size': new_size, 'size': size}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) elif new_size == size: return @@ -375,7 +375,7 @@ class FileSystem(StorageObject): 'new_size': new_size, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get_id(self, name): status, out = self.get(name) @@ -384,7 +384,7 @@ class FileSystem(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': out}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) return self.filesystem_map[name]['id'] @@ -480,8 +480,8 @@ class FileSystem(StorageObject): self._execute_cmd(rw_mount_cmd) -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class StoragePool(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(StoragePool, self).__init__(conn, elt_maker, xml_parser, manager) @@ -537,18 +537,18 @@ class StoragePool(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': out}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) return out['id'] -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class MountPoint(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(MountPoint, self).__init__(conn, elt_maker, xml_parser, manager) - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def create(self, mount_path, fs_name, mover_name, is_vdm=True): fs_id = self.get_context('FileSystem').get_id(fs_name) @@ -574,7 +574,7 @@ class MountPoint(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif self._is_mount_point_already_existent(response): LOG.warning("Mount Point %(mount)s already exists. " "Skip the creation.", {'mount': mount_path}) @@ -586,9 +586,9 @@ class MountPoint(StorageObject): 'fs_name': fs_name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def get(self, mover_name, is_vdm=True): mover_id = self._get_mover_id(mover_name, is_vdm) @@ -610,7 +610,7 @@ class MountPoint(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif constants.STATUS_OK != response['maxSeverity']: return response['maxSeverity'], response['objects'] @@ -619,7 +619,7 @@ class MountPoint(StorageObject): else: return constants.STATUS_OK, response['objects'] - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def delete(self, mount_path, mover_name, is_vdm=True): mover_id = self._get_mover_id(mover_name, is_vdm) @@ -640,7 +640,7 @@ class MountPoint(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif self._is_mount_point_nonexistent(response): LOG.warning('Mount point %(mount)s on mover %(mover_name)s ' 'not found.', @@ -654,7 +654,7 @@ class MountPoint(StorageObject): 'mover_name': mover_name, 'err': response}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def _is_mount_point_nonexistent(self, response): """Translate different status to ok/error status.""" @@ -683,8 +683,8 @@ class MountPoint(StorageObject): return False -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class Mover(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(Mover, self).__init__(conn, elt_maker, xml_parser, manager) @@ -787,7 +787,7 @@ class Mover(StorageObject): message = (_("Failed to get mover by name %(name)s.") % {'name': name}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) return mover_ref['id'] @@ -848,14 +848,14 @@ class Mover(StorageObject): return physical_network_devices -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class VDM(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(VDM, self).__init__(conn, elt_maker, xml_parser, manager) self.vdm_map = {} - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def create(self, name, mover_name): mover_id = self._get_mover_id(mover_name, False) @@ -872,7 +872,7 @@ class VDM(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif self._response_validation(response, constants.MSG_VDM_EXIST): LOG.warning("VDM %(name)s already exists. Skip the creation.", {'name': name}) @@ -883,7 +883,7 @@ class VDM(StorageObject): 'mover_name': mover_name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get(self, name): if name not in self.vdm_map: @@ -926,7 +926,7 @@ class VDM(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': out}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) vdm_id = self.vdm_map[name]['id'] @@ -941,7 +941,7 @@ class VDM(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self.vdm_map.pop(name) @@ -951,7 +951,7 @@ class VDM(StorageObject): message = (_("Failed to get VDM by name %(name)s.") % {'name': name}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) return vdm['id'] @@ -987,7 +987,7 @@ class VDM(StorageObject): "from mover %(mover_name)s.") % {'interface': if_name, 'mover_name': vdm_name}) LOG.exception(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get_interfaces(self, vdm_name): interfaces = { @@ -1023,8 +1023,8 @@ class VDM(StorageObject): return interfaces -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class Snapshot(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(Snapshot, self).__init__(conn, elt_maker, xml_parser, manager) @@ -1064,7 +1064,7 @@ class Snapshot(StorageObject): 'fs_name': fs_name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get(self, name): if name not in self.snap_map: @@ -1107,7 +1107,7 @@ class Snapshot(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': out}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) chpt_id = self.snap_map[name]['id'] @@ -1121,7 +1121,7 @@ class Snapshot(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self.snap_map.pop(name) @@ -1133,19 +1133,19 @@ class Snapshot(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': out}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) return self.snap_map[name]['id'] -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class MoverInterface(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(MoverInterface, self).__init__(conn, elt_maker, xml_parser, manager) - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def create(self, interface): # Maximum of 32 characters for mover interface name name = interface['name'] @@ -1182,7 +1182,7 @@ class MoverInterface(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif self._response_validation( response, constants.MSG_INTERFACE_NAME_EXIST): LOG.warning("Mover interface name %s already exists. " @@ -1194,23 +1194,23 @@ class MoverInterface(StorageObject): elif self._response_validation( response, constants.MSG_INTERFACE_INVALID_VLAN_ID): # When fail to create a mover interface with the specified - # vlan id, VMAX will leave an interface with vlan id 0 in the + # vlan id, PowerMax will leave an interface with vlan id 0 in the # backend. So we should explicitly remove the interface. try: self.delete(six.text_type(ip_addr), mover_name) - except exception.EMCVmaxXMLAPIError: + except exception.EMCPowerMaxXMLAPIError: pass message = (_("Invalid vlan id %s. Other interfaces on this " "subnet are in a different vlan.") % vlan_id) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) elif constants.STATUS_OK != response['maxSeverity']: message = (_("Failed to create mover interface %(interface)s. " "Reason: %(err)s.") % {'interface': interface, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get(self, name, mover_name): # Maximum of 32 characters for mover interface name @@ -1226,7 +1226,7 @@ class MoverInterface(StorageObject): return constants.STATUS_NOT_FOUND, None - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def delete(self, ip_addr, mover_name): mover_id = self._get_mover_id(mover_name, False) @@ -1246,7 +1246,7 @@ class MoverInterface(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif self._response_validation( response, constants.MSG_INTERFACE_NON_EXISTENT): LOG.warning("Mover interface %s not found. " @@ -1259,16 +1259,16 @@ class MoverInterface(StorageObject): 'mover': mover_name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class DNSDomain(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(DNSDomain, self).__init__(conn, elt_maker, xml_parser, manager) - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def create(self, mover_name, name, servers, protocol='udp'): mover_id = self._get_mover_id(mover_name, False) @@ -1290,15 +1290,15 @@ class DNSDomain(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif constants.STATUS_OK != response['maxSeverity']: message = (_("Failed to create DNS domain %(name)s. " "Reason: %(err)s.") % {'name': name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def delete(self, mover_name, name): mover_id = self._get_mover_id(mover_name, False) @@ -1317,21 +1317,21 @@ class DNSDomain(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif constants.STATUS_OK != response['maxSeverity']: LOG.warning("Failed to delete DNS domain %(name)s. " "Reason: %(err)s.", {'name': name, 'err': response['problems']}) -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class CIFSServer(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(CIFSServer, self).__init__(conn, elt_maker, xml_parser, manager) self.cifs_server_map = {} - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def create(self, server_args): compName = server_args['name'] # Maximum of 14 characters for netBIOS name @@ -1374,7 +1374,7 @@ class CIFSServer(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) if constants.STATUS_OK != response['maxSeverity']: status, out = self.get(compName, mover_name, is_vdm) if constants.STATUS_OK == status and out['domainJoined'] == 'true': @@ -1385,9 +1385,9 @@ class CIFSServer(StorageObject): {'name': name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def get_all(self, mover_name, is_vdm=True): mover_id = self._get_mover_id(mover_name, is_vdm) @@ -1408,7 +1408,7 @@ class CIFSServer(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif constants.STATUS_OK != response['maxSeverity']: return response['maxSeverity'], response['objects'] @@ -1439,7 +1439,7 @@ class CIFSServer(StorageObject): return constants.STATUS_NOT_FOUND, None - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def modify(self, server_args): """Make CIFS server join or un-join the domain. @@ -1450,7 +1450,7 @@ class CIFSServer(StorageObject): password: Password associated with the user name mover_name: mover or VDM name is_vdm: Boolean to indicate mover or VDM - :raises exception.EMCVmaxXMLAPIError: if modification fails. + :raises exception.EMCPowerMaxXMLAPIError: if modification fails. """ name = server_args['name'] join_domain = server_args['join_domain'] @@ -1487,7 +1487,7 @@ class CIFSServer(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif self._ignore_modification_error(response, join_domain): return elif constants.STATUS_OK != response['maxSeverity']: @@ -1496,7 +1496,7 @@ class CIFSServer(StorageObject): {'name': name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def _ignore_modification_error(self, response, join_domain): if self._response_validation(response, constants.MSG_JOIN_DOMAIN): @@ -1515,7 +1515,7 @@ class CIFSServer(StorageObject): "not found. Skip the deletion.", {'name': computer_name, 'mover_name': mover_name}) return - except exception.EMCVmaxXMLAPIError: + except exception.EMCPowerMaxXMLAPIError: LOG.warning("CIFS server %(name)s on mover %(mover_name)s " "not found. Skip the deletion.", {'name': computer_name, 'mover_name': mover_name}) @@ -1540,19 +1540,19 @@ class CIFSServer(StorageObject): "Reason: %(err)s.") % {'name': computer_name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self.cifs_server_map[mover_name].pop(computer_name) -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class CIFSShare(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(CIFSShare, self).__init__(conn, elt_maker, xml_parser, manager) self.cifs_share_map = {} - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def create(self, name, server_name, mover_name, is_vdm=True): mover_id = self._get_mover_id(mover_name, is_vdm) @@ -1579,13 +1579,13 @@ class CIFSShare(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif constants.STATUS_OK != response['maxSeverity']: message = (_("Failed to create file share %(name)s. " "Reason: %(err)s.") % {'name': name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get(self, name): if name not in self.cifs_share_map: @@ -1605,7 +1605,7 @@ class CIFSShare(StorageObject): return constants.STATUS_OK, self.cifs_share_map[name] - @utils.retry(exception.EMCVmaxInvalidMoverID) + @utils.retry(exception.EMCPowerMaxInvalidMoverID) def delete(self, name, mover_name, is_vdm=True): status, out = self.get(name) if constants.STATUS_NOT_FOUND == status: @@ -1617,7 +1617,7 @@ class CIFSShare(StorageObject): "Reason: %(err)s.") % {'name': name, 'err': out}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) mover_id = self._get_mover_id(mover_name, is_vdm) @@ -1642,13 +1642,13 @@ class CIFSShare(StorageObject): constants.MSG_INVALID_MOVER_ID) and not self.xml_retry): self.xml_retry = True - raise exception.EMCVmaxInvalidMoverID(id=mover_id) + raise exception.EMCPowerMaxInvalidMoverID(id=mover_id) elif constants.STATUS_OK != response['maxSeverity']: message = (_("Failed to delete file system %(name)s. " "Reason: %(err)s.") % {'name': name, 'err': response['problems']}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self.cifs_share_map.pop(name) @@ -1666,7 +1666,7 @@ class CIFSShare(StorageObject): '%(name)s.') % {'name': share_name}) LOG.exception(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def allow_share_access(self, mover_name, share_name, user_name, domain, access=constants.CIFS_ACL_FULLCONTROL): @@ -1694,7 +1694,7 @@ class CIFSShare(StorageObject): 'CIFS share %(name)s. Reason: %(err)s.') % {'access': access, 'name': share_name, 'err': expt}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def deny_share_access(self, mover_name, share_name, user_name, domain, access=constants.CIFS_ACL_FULLCONTROL): @@ -1728,7 +1728,7 @@ class CIFSShare(StorageObject): 'CIFS share %(name)s. Reason: %(err)s.') % {'access': access, 'name': share_name, 'err': expt}) LOG.exception(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def get_share_access(self, mover_name, share_name): get_str = 'sharesd %s dump' % share_name @@ -1742,7 +1742,7 @@ class CIFSShare(StorageObject): except processutils.ProcessExecutionError: msg = _('Failed to get access list of CIFS share %s.') % share_name LOG.exception(msg) - raise exception.EMCVmaxXMLAPIError(err=msg) + raise exception.EMCPowerMaxXMLAPIError(err=msg) ret = {} name_pattern = re.compile(r"Unix user '(.+?)'") @@ -1772,8 +1772,8 @@ class CIFSShare(StorageObject): return users_to_remove -@vmax_utils.decorate_all_methods(vmax_utils.log_enter_exit, - debug_only=True) +@powermax_utils.decorate_all_methods(powermax_utils.log_enter_exit, + debug_only=True) class NFSShare(StorageObject): def __init__(self, conn, elt_maker, xml_parser, manager): super(NFSShare, self).__init__(conn, elt_maker, xml_parser, manager) @@ -1794,7 +1794,7 @@ class NFSShare(StorageObject): '%(mover_name)s. Reason: %(err)s.') % {'name': name, 'mover_name': mover_name, 'err': expt}) LOG.exception(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) def delete(self, name, mover_name): path = '/' + name @@ -1819,7 +1819,7 @@ class NFSShare(StorageObject): '%(mover_name)s. Reason: %(err)s.') % {'name': name, 'mover_name': mover_name, 'err': expt}) LOG.exception(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self.nfs_share_map.pop(name) @@ -1861,7 +1861,7 @@ class NFSShare(StorageObject): 'mover_name': mover_name, 'err': expt}) LOG.exception(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) re_exports = '%s\s*:\s*\nexport\s*(.*)\n' % mover_name m = re.search(re_exports, out) @@ -1873,14 +1873,17 @@ class NFSShare(StorageObject): for field in fields: field = field.strip() if field.startswith('rw='): - nfs_share['RwHosts'] = vmax_utils.parse_ipaddr(field[3:]) + nfs_share['RwHosts'] = powermax_utils.parse_ipaddr( + field[3:]) elif field.startswith('access='): - nfs_share['AccessHosts'] = vmax_utils.parse_ipaddr( + nfs_share['AccessHosts'] = powermax_utils.parse_ipaddr( field[7:]) elif field.startswith('root='): - nfs_share['RootHosts'] = vmax_utils.parse_ipaddr(field[5:]) + nfs_share['RootHosts'] = powermax_utils.parse_ipaddr( + field[5:]) elif field.startswith('ro='): - nfs_share['RoHosts'] = vmax_utils.parse_ipaddr(field[3:]) + nfs_share['RoHosts'] = powermax_utils.parse_ipaddr( + field[3:]) self.nfs_share_map[name] = nfs_share else: @@ -1896,13 +1899,13 @@ class NFSShare(StorageObject): if constants.STATUS_NOT_FOUND == status: message = (_('NFS share %s not found.') % share_name) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) changed = False rwhosts = share['RwHosts'] rohosts = share['RoHosts'] - host_ip = vmax_utils.convert_ipv6_format_if_needed(host_ip) + host_ip = powermax_utils.convert_ipv6_format_if_needed(host_ip) if access_level == const.ACCESS_LEVEL_RW: if host_ip not in rwhosts: @@ -1956,7 +1959,7 @@ class NFSShare(StorageObject): 'Reason %(err)s.') % {'path': share_name, 'err': share}) LOG.error(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) changed = False rwhosts = set(share['RwHosts']) @@ -2008,7 +2011,7 @@ class NFSShare(StorageObject): message = (_('Query nfs share %(path)s failed. ' 'Reason %(err)s.') % {'path': share_name, 'err': status}) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) self._set_share_access('/' + share_name, mover_name, @@ -2056,4 +2059,4 @@ class NFSShare(StorageObject): 'mover_name': mover_name, 'err': expt}) LOG.exception(message) - raise exception.EMCVmaxXMLAPIError(err=message) + raise exception.EMCPowerMaxXMLAPIError(err=message) diff --git a/manila/tests/share/drivers/dell_emc/common/enas/fakes.py b/manila/tests/share/drivers/dell_emc/common/enas/fakes.py index a5ec9d5b5c..1095dce967 100644 --- a/manila/tests/share/drivers/dell_emc/common/enas/fakes.py +++ b/manila/tests/share/drivers/dell_emc/common/enas/fakes.py @@ -147,7 +147,7 @@ class FakeData(object): fake_error_msg = 'fake error message' emc_share_backend = 'vnx' - vmax_share_backend = 'vmax' + powermax_share_backend = 'powermax' emc_nas_server = '192.168.1.20' emc_nas_login = 'fakename' emc_nas_password = 'fakepassword' @@ -1564,8 +1564,9 @@ class FakeEMCShareDriver(object): self.configuration.append_config_values = mock.Mock(return_value=0) self.configuration.emc_share_backend = FakeData.emc_share_backend self.configuration.vnx_server_container = FakeData.mover_name - if enas_type == 'vmax': - self.configuration.emc_share_backend = FakeData.vmax_share_backend + if enas_type == 'powermax': + self.configuration.emc_share_backend = ( + FakeData.powermax_share_backend) self.configuration.vmax_server_container = FakeData.mover_name self.configuration.emc_nas_server = FakeData.emc_nas_server self.configuration.emc_nas_login = FakeData.emc_nas_login diff --git a/manila/tests/share/drivers/dell_emc/common/enas/utils.py b/manila/tests/share/drivers/dell_emc/common/enas/utils.py index 5881b23ff2..001fcee91d 100644 --- a/manila/tests/share/drivers/dell_emc/common/enas/utils.py +++ b/manila/tests/share/drivers/dell_emc/common/enas/utils.py @@ -167,7 +167,8 @@ def patch_get_managed_ports_vnx(*arg, **kwargs): mock.Mock(*arg, **kwargs)) -def patch_get_managed_ports_vmax(*arg, **kwargs): - return mock.patch('manila.share.drivers.dell_emc.plugins.vmax.connection.' - 'VMAXStorageConnection.get_managed_ports', - mock.Mock(*arg, **kwargs)) +def patch_get_managed_ports_powermax(*arg, **kwargs): + return mock.patch( + 'manila.share.drivers.dell_emc.plugins.powermax.connection.' + 'PowerMaxStorageConnection.get_managed_ports', + mock.Mock(*arg, **kwargs)) diff --git a/manila/tests/share/drivers/dell_emc/plugins/vmax/__init__.py b/manila/tests/share/drivers/dell_emc/plugins/powermax/__init__.py similarity index 100% rename from manila/tests/share/drivers/dell_emc/plugins/vmax/__init__.py rename to manila/tests/share/drivers/dell_emc/plugins/powermax/__init__.py diff --git a/manila/tests/share/drivers/dell_emc/plugins/vmax/test_connection.py b/manila/tests/share/drivers/dell_emc/plugins/powermax/test_connection.py similarity index 99% rename from manila/tests/share/drivers/dell_emc/plugins/vmax/test_connection.py rename to manila/tests/share/drivers/dell_emc/plugins/powermax/test_connection.py index ca2d703df5..abab23d787 100644 --- a/manila/tests/share/drivers/dell_emc/plugins/vmax/test_connection.py +++ b/manila/tests/share/drivers/dell_emc/plugins/powermax/test_connection.py @@ -1,4 +1,4 @@ -# Copyright (c) 2016 Dell Inc. or its subsidiaries. +# Copyright (c) 2019 Dell Inc. or its subsidiaries. # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may diff --git a/manila/tests/share/drivers/dell_emc/plugins/vmax/test_object_manager.py b/manila/tests/share/drivers/dell_emc/plugins/powermax/test_object_manager.py similarity index 97% rename from manila/tests/share/drivers/dell_emc/plugins/vmax/test_object_manager.py rename to manila/tests/share/drivers/dell_emc/plugins/powermax/test_object_manager.py index 2eaa7d1d1e..312feb1e88 100644 --- a/manila/tests/share/drivers/dell_emc/plugins/vmax/test_object_manager.py +++ b/manila/tests/share/drivers/dell_emc/plugins/powermax/test_object_manager.py @@ -26,7 +26,7 @@ from manila.common import constants as const from manila.share.drivers.dell_emc.common.enas import connector from manila.share.drivers.dell_emc.common.enas import constants from manila.share.drivers.dell_emc.common.enas import xml_api_parser as parser -from manila.share.drivers.dell_emc.plugins.vmax import ( +from manila.share.drivers.dell_emc.plugins.powermax import ( object_manager as manager) from manila import test from manila.tests.share.drivers.dell_emc.common.enas import fakes @@ -39,7 +39,7 @@ class StorageObjectManagerTestCase(test.TestCase): def setUp(self): super(StorageObjectManagerTestCase, self).setUp() - emd_share_driver = fakes.FakeEMCShareDriver('vmax') + emd_share_driver = fakes.FakeEMCShareDriver('powermax') self.manager = manager.StorageObjectManager( emd_share_driver.configuration) @@ -70,7 +70,7 @@ class StorageObjectManagerTestCase(test.TestCase): fake_type = 'fake_type' - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, self.manager.getStorageContext, fake_type) @@ -81,7 +81,7 @@ class StorageObjectTestCaseBase(test.TestCase): def setUp(self): super(StorageObjectTestCaseBase, self).setUp() - emd_share_driver = fakes.FakeEMCShareDriver('vmax') + emd_share_driver = fakes.FakeEMCShareDriver('powermax') self.manager = manager.StorageObjectManager( emd_share_driver.configuration) @@ -227,7 +227,7 @@ class FileSystemTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('FileSystem') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, name=self.fs.filesystem_name, size=self.fs.filesystem_size, @@ -287,7 +287,7 @@ class FileSystemTestCase(StorageObjectTestCaseBase): status, out = context.get(self.fs.filesystem_name) self.assertEqual(constants.STATUS_ERROR, status) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.get_id, self.fs.filesystem_name) @@ -363,7 +363,7 @@ class FileSystemTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('FileSystem') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, self.fs.filesystem_name) @@ -377,7 +377,7 @@ class FileSystemTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('FileSystem') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, self.fs.filesystem_name) @@ -414,7 +414,7 @@ class FileSystemTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('FileSystem') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.extend, name=self.fs.filesystem_name, pool_name=self.fs.pool_name, @@ -429,7 +429,7 @@ class FileSystemTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('FileSystem') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.extend, name=self.fs.filesystem_name, pool_name=self.pool.pool_name, @@ -459,7 +459,7 @@ class FileSystemTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('FileSystem') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.extend, name=self.fs.filesystem_name, pool_name=self.pool.pool_name, @@ -635,7 +635,7 @@ class MountPointTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('MountPoint') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, mount_path=self.mount.path, fs_name=self.fs.filesystem_name, @@ -731,7 +731,7 @@ class MountPointTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('MountPoint') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, mount_path=self.mount.path, mover_name=self.vdm.vdm_name, @@ -920,7 +920,7 @@ class VDMTestCase(StorageObjectTestCaseBase): context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) # Create VDM with invalid mover ID - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, name=self.vdm.vdm_name, mover_name=self.mover.mover_name) @@ -992,7 +992,7 @@ class VDMTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('VDM') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.get_id, self.vdm.vdm_name) @@ -1031,7 +1031,7 @@ class VDMTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('VDM') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, self.vdm.vdm_name) @@ -1045,7 +1045,7 @@ class VDMTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('VDM') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, self.vdm.vdm_name) @@ -1086,7 +1086,7 @@ class VDMTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('VDM') context.conn['SSH'].run_ssh = mock.Mock(side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.detach_nfs_interface, self.vdm.vdm_name, self.mover.interface_name2) @@ -1175,7 +1175,7 @@ class StoragePoolTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('StoragePool') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.get_id, self.pool.pool_name) @@ -1295,7 +1295,7 @@ class MoverTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('Mover') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.get, self.mover.mover_name) @@ -1407,7 +1407,7 @@ class SnapshotTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('Snapshot') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, name=self.snap.snapshot_name, fs_name=self.fs.filesystem_name, @@ -1487,7 +1487,7 @@ class SnapshotTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('Snapshot') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, self.snap.snapshot_name) @@ -1513,7 +1513,7 @@ class SnapshotTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('Snapshot') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, self.snap.snapshot_name) @@ -1541,7 +1541,7 @@ class SnapshotTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('Snapshot') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.get_id, self.snap.snapshot_name) @@ -1651,7 +1651,7 @@ class MoverInterfaceTestCase(StorageObjectTestCaseBase): 'net_mask': self.mover.net_mask, 'vlan_id': self.mover.vlan_id, } - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, interface) @@ -1707,7 +1707,7 @@ class MoverInterfaceTestCase(StorageObjectTestCaseBase): 'net_mask': self.mover.net_mask, 'vlan_id': self.mover.vlan_id, } - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, interface) @@ -1831,7 +1831,7 @@ class MoverInterfaceTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('MoverInterface') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, ip_addr=self.mover.ip_address1, mover_name=self.mover.mover_name) @@ -1896,7 +1896,7 @@ class DNSDomainTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('DNSDomain') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, mover_name=self.mover.mover_name, name=self.mover.domain_name, @@ -2075,7 +2075,7 @@ class CIFSServerTestCase(StorageObjectTestCaseBase): 'mover_name': self.vdm.vdm_name, 'is_vdm': True, } - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, cifs_server_args) @@ -2304,7 +2304,7 @@ class CIFSServerTestCase(StorageObjectTestCaseBase): 'password': self.cifs_server.domain_password, 'mover_name': self.vdm.vdm_name, } - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.modify, cifs_server_args) @@ -2377,7 +2377,7 @@ class CIFSServerTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('CIFSServer') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, computer_name=self.cifs_server.cifs_server_name, mover_name=self.mover.mover_name, @@ -2456,7 +2456,7 @@ class CIFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('CIFSShare') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, name=self.cifs_share.share_name, server_name=self.cifs_share.cifs_server_name[-14:], @@ -2506,7 +2506,7 @@ class CIFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('CIFSShare') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, name=self.cifs_share.share_name, mover_name=self.vdm.vdm_name, @@ -2557,7 +2557,7 @@ class CIFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('CIFSShare') context.conn['XML'].request = utils.EMCMock(side_effect=self.hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, name=self.cifs_share.share_name, mover_name=self.vdm.vdm_name, @@ -2600,7 +2600,7 @@ class CIFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('CIFSShare') context.conn['SSH'].run_ssh = mock.Mock(side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.disable_share_access, share_name=self.cifs_share.share_name, mover_name=self.vdm.vdm_name) @@ -2648,7 +2648,7 @@ class CIFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('CIFSShare') context.conn['SSH'].run_ssh = mock.Mock(side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.allow_share_access, mover_name=self.vdm.vdm_name, share_name=self.cifs_share.share_name, @@ -2725,7 +2725,7 @@ class CIFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('CIFSShare') context.conn['SSH'].run_ssh = mock.Mock(side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.deny_share_access, mover_name=self.vdm.vdm_name, share_name=self.cifs_share.share_name, @@ -2765,7 +2765,7 @@ class CIFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('CIFSShare') context.conn['SSH'].run_ssh = mock.Mock(side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.get_share_access, mover_name=self.vdm.vdm_name, share_name=self.cifs_share.share_name) @@ -2822,7 +2822,7 @@ class NFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('NFSShare') context.conn['SSH'].run_ssh = mock.Mock(side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.create, name=self.nfs_share.share_name, mover_name=self.vdm.vdm_name) @@ -2898,7 +2898,7 @@ class NFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('NFSShare') context.conn['SSH'].run_ssh = mock.Mock(side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.delete, name=self.nfs_share.share_name, mover_name=self.vdm.vdm_name) @@ -2956,7 +2956,7 @@ class NFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('NFSShare') context.conn['SSH'].run_ssh = mock.Mock(side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.get, name=self.nfs_share.share_name, mover_name=self.vdm.vdm_name) @@ -3031,7 +3031,7 @@ class NFSShareTestCase(StorageObjectTestCaseBase): context.conn['SSH'].run_ssh = utils.EMCNFSShareMock( side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.allow_share_access, share_name=self.nfs_share.share_name, host_ip=self.nfs_share.nfs_host_ip, @@ -3134,7 +3134,7 @@ class NFSShareTestCase(StorageObjectTestCaseBase): context.conn['SSH'].run_ssh = utils.EMCNFSShareMock( side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.deny_share_access, share_name=self.nfs_share.share_name, host_ip=self.nfs_share.nfs_host_ip, @@ -3157,7 +3157,7 @@ class NFSShareTestCase(StorageObjectTestCaseBase): context.conn['SSH'].run_ssh = utils.EMCNFSShareMock( side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.deny_share_access, share_name=self.nfs_share.share_name, host_ip=self.nfs_share.nfs_host_ip, @@ -3176,7 +3176,7 @@ class NFSShareTestCase(StorageObjectTestCaseBase): context = self.manager.getStorageContext('NFSShare') context.conn['SSH'].run_ssh = mock.Mock(side_effect=self.ssh_hook) - self.assertRaises(exception.EMCVmaxXMLAPIError, + self.assertRaises(exception.EMCPowerMaxXMLAPIError, context.clear_share_access, share_name=self.nfs_share.share_name, mover_name=self.vdm.vdm_name, diff --git a/releasenotes/notes/powermax-rebrand-manila-a46a0c2ac0aa77ed.yaml b/releasenotes/notes/powermax-rebrand-manila-a46a0c2ac0aa77ed.yaml new file mode 100644 index 0000000000..ba9c42c933 --- /dev/null +++ b/releasenotes/notes/powermax-rebrand-manila-a46a0c2ac0aa77ed.yaml @@ -0,0 +1,20 @@ +--- +features: + - | + Rebrand from VMAX to PowerMax includes changing of tag names, directory + structure, file names and documentation. +deprecations: + - | + The following have been deprecated but will remain until the V release + ``vmax_server_container`` is now ``powermax_server_container`` + ``vmax_share_data_pools`` is now ``powermax_share_data_pools`` + ``vmax_ethernet_ports`` is now ``powermax_ethernet_ports`` +upgrade: + - | + - ``emc_share_backend`` configuration option must be switched from ``vmax`` + to ``powermax`` if using a newly rebranded PowerMax storage backend. + - If using a PowerMax storage backend, deprecated options + ``emc_nas_server_container``, ``emc_nas_pool_names`` and + ``emc_interface_ports`` can no longer be used. They must be replaced by + ``powermax_server_container``, ``powermax_share_data_pools`` and + ``powermax_ethernet_ports`` respectively. diff --git a/setup.cfg b/setup.cfg index b71977fd73..02d778157f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -82,7 +82,7 @@ manila.share.drivers.dell_emc.plugins = vnx = manila.share.drivers.dell_emc.plugins.vnx.connection:VNXStorageConnection unity = manila.share.drivers.dell_emc.plugins.unity.connection:UnityStorageConnection isilon = manila.share.drivers.dell_emc.plugins.isilon.isilon:IsilonStorageConnection - vmax = manila.share.drivers.dell_emc.plugins.vmax.connection:VMAXStorageConnection + powermax = manila.share.drivers.dell_emc.plugins.powermax.connection:PowerMaxStorageConnection manila.tests.scheduler.fakes = FakeWeigher1 = manila.tests.scheduler.fakes:FakeWeigher1 FakeWeigher2 = manila.tests.scheduler.fakes:FakeWeigher2