From e9d1bf8f6c89a7c06e5f8f80bf8a8ac5c781b172 Mon Sep 17 00:00:00 2001 From: Chris M Date: Sun, 18 Oct 2020 23:07:01 +0000 Subject: [PATCH] Add driver for Dell EMC PowerVault ME Series Change-Id: I0af2d5cfbbfdb384786ef0c17cf96ba8ca865ced Implements: blueprint dellemc-me-driver --- cinder/opts.py | 4 + .../drivers/dell_emc/powervault/__init__.py | 0 .../drivers/dell_emc/powervault/client.py | 24 +++ .../drivers/dell_emc/powervault/common.py | 68 +++++++ .../volume/drivers/dell_emc/powervault/fc.py | 48 +++++ .../drivers/dell_emc/powervault/iscsi.py | 51 ++++++ .../drivers/dell-emc-powervault-me.rst | 172 ++++++++++++++++++ doc/source/reference/support-matrix.ini | 14 ++ ...dell-emc-pvme-driver-9333594b2cc1e0b5.yaml | 4 + 9 files changed, 385 insertions(+) create mode 100644 cinder/volume/drivers/dell_emc/powervault/__init__.py create mode 100644 cinder/volume/drivers/dell_emc/powervault/client.py create mode 100644 cinder/volume/drivers/dell_emc/powervault/common.py create mode 100644 cinder/volume/drivers/dell_emc/powervault/fc.py create mode 100644 cinder/volume/drivers/dell_emc/powervault/iscsi.py create mode 100644 doc/source/configuration/block-storage/drivers/dell-emc-powervault-me.rst create mode 100644 releasenotes/notes/dell-emc-pvme-driver-9333594b2cc1e0b5.yaml diff --git a/cinder/opts.py b/cinder/opts.py index 05236b03c61..7bc3f2fd94e 100644 --- a/cinder/opts.py +++ b/cinder/opts.py @@ -77,6 +77,8 @@ from cinder.volume.drivers.dell_emc.powermax import common as \ cinder_volume_drivers_dell_emc_powermax_common from cinder.volume.drivers.dell_emc.powerstore import driver as \ cinder_volume_drivers_dell_emc_powerstore_driver +from cinder.volume.drivers.dell_emc.powervault import common as \ + cinder_volume_drivers_dell_emc_powervault_common from cinder.volume.drivers.dell_emc.sc import storagecenter_common as \ cinder_volume_drivers_dell_emc_sc_storagecentercommon from cinder.volume.drivers.dell_emc.unity import driver as \ @@ -305,6 +307,8 @@ def list_opts(): cinder_volume_drivers_dell_emc_powermax_common.powermax_opts, cinder_volume_drivers_dell_emc_powerstore_driver. POWERSTORE_OPTS, + cinder_volume_drivers_dell_emc_powervault_common.common_opts, + cinder_volume_drivers_dell_emc_powervault_common.iscsi_opts, cinder_volume_drivers_dell_emc_sc_storagecentercommon. common_opts, cinder_volume_drivers_dell_emc_unity_driver.UNITY_OPTS, diff --git a/cinder/volume/drivers/dell_emc/powervault/__init__.py b/cinder/volume/drivers/dell_emc/powervault/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cinder/volume/drivers/dell_emc/powervault/client.py b/cinder/volume/drivers/dell_emc/powervault/client.py new file mode 100644 index 00000000000..efa53af6252 --- /dev/null +++ b/cinder/volume/drivers/dell_emc/powervault/client.py @@ -0,0 +1,24 @@ +# Copyright 2014 Objectif Libre +# Copyright 2015 DotHill Systems +# Copyright 2016-2020 Seagate Technology or one of its affiliates +# +# 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. +# + +import cinder.volume.drivers.stx.client as client + + +class PVMEClient(client.STXClient): + def __init__(self, host, login, password, protocol, ssl_verify): + super(PVMEClient, self).__init__(host, login, password, protocol, + ssl_verify) diff --git a/cinder/volume/drivers/dell_emc/powervault/common.py b/cinder/volume/drivers/dell_emc/powervault/common.py new file mode 100644 index 00000000000..0b31015f64b --- /dev/null +++ b/cinder/volume/drivers/dell_emc/powervault/common.py @@ -0,0 +1,68 @@ +# Copyright 2014 Objectif Libre +# Copyright 2015 DotHill Systems +# Copyright 2016-2020 Seagate Technology or one of its affiliates +# +# 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. +# + +from oslo_config import cfg + +from cinder.volume import configuration +from cinder.volume import driver +import cinder.volume.drivers.dell_emc.powervault.client as pvme_client +import cinder.volume.drivers.stx.common as common + +common_opts = [ + cfg.StrOpt('pvme_pool_name', + default='A', + help="Pool or Vdisk name to use for volume creation."), +] + +iscsi_opts = [ + cfg.ListOpt('pvme_iscsi_ips', + default=[], + help="List of comma-separated target iSCSI IP addresses."), +] + +CONF = cfg.CONF +CONF.register_opts(common_opts, group=configuration.SHARED_CONF_GROUP) +CONF.register_opts(iscsi_opts, group=configuration.SHARED_CONF_GROUP) + + +class PVMECommon(common.STXCommon): + VERSION = "2.0" + + def __init__(self, config): + self.config = config + self.vendor_name = "PVME" + self.backend_name = self.config.pvme_pool_name + self.backend_type = 'virtual' + self.api_protocol = 'http' + if self.config.driver_use_ssl: + self.api_protocol = 'https' + ssl_verify = self.config.driver_ssl_cert_verify + if ssl_verify and self.config.driver_ssl_cert_path: + ssl_verify = self.config.driver_ssl_cert_path + + self.client = pvme_client.PVMEClient(self.config.san_ip, + self.config.san_login, + self.config.san_password, + self.api_protocol, + ssl_verify) + + @staticmethod + def get_driver_options(): + additional_opts = driver.BaseVD._get_oslo_driver_opts( + 'san_ip', 'san_login', 'san_password', 'driver_use_ssl', + 'driver_ssl_cert_verify', 'driver_ssl_cert_path') + return common_opts + additional_opts diff --git a/cinder/volume/drivers/dell_emc/powervault/fc.py b/cinder/volume/drivers/dell_emc/powervault/fc.py new file mode 100644 index 00000000000..f4d08452c3c --- /dev/null +++ b/cinder/volume/drivers/dell_emc/powervault/fc.py @@ -0,0 +1,48 @@ +# Copyright 2014 Objectif Libre +# Copyright 2015 Dot Hill Systems Corp. +# Copyright 2016-2020 Seagate Technology or one of its affiliates +# +# 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. +# + +from cinder import interface +import cinder.volume.drivers.dell_emc.powervault.common as pvme_common +import cinder.volume.drivers.stx.fc as fc + + +@interface.volumedriver +class PVMEFCDriver(fc.STXFCDriver): + """Cinder FC driver for Dell EMC PowerVault ME-Series arrays. + + .. code-block:: default + + Version history: + 1.0 - Inheriting from Seagate Cinder driver. + """ + + VERSION = "2.0" + + CI_WIKI_NAME = "PVME_CI" + + SUPPORTED = True + + def __init__(self, *args, **kwargs): + super(PVMEFCDriver, self).__init__(*args, **kwargs) + self.configuration.append_config_values(pvme_common.common_opts) + + @staticmethod + def get_driver_options(): + return pvme_common.PVMECommon.get_driver_options() + + def _init_common(self): + return pvme_common.PVMECommon(self.configuration) diff --git a/cinder/volume/drivers/dell_emc/powervault/iscsi.py b/cinder/volume/drivers/dell_emc/powervault/iscsi.py new file mode 100644 index 00000000000..d4a9a03ca38 --- /dev/null +++ b/cinder/volume/drivers/dell_emc/powervault/iscsi.py @@ -0,0 +1,51 @@ +# Copyright 2014 Objectif Libre +# Copyright 2015 Dot Hill Systems Corp. +# Copyright 2016-2020 Seagate Technology or one of its affiliates +# +# 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. +# + +from cinder import interface +import cinder.volume.drivers.dell_emc.powervault.common as pvme_common +import cinder.volume.drivers.stx.iscsi as iscsi + + +@interface.volumedriver +class PVMEISCSIDriver(iscsi.STXISCSIDriver): + """Cinder iSCSI driver for Dell EMC PowerVault ME-Series arrays. + + .. code-block:: default + + Version history: + 1.0 - Inheriting from Seagate Cinder driver. + """ + + VERSION = "2.0" + + CI_WIKI_NAME = "PVME_CI" + + SUPPORTED = True + + def __init__(self, *args, **kwargs): + super(PVMEISCSIDriver, self).__init__(*args, **kwargs) + self.configuration.append_config_values(pvme_common.common_opts) + self.configuration.append_config_values(pvme_common.iscsi_opts) + self.iscsi_ips = self.configuration.pvme_iscsi_ips + + @staticmethod + def get_driver_options(): + return (pvme_common.PVMECommon.get_driver_options() + + pvme_common.iscsi_opts) + + def _init_common(self): + return pvme_common.PVMECommon(self.configuration) diff --git a/doc/source/configuration/block-storage/drivers/dell-emc-powervault-me.rst b/doc/source/configuration/block-storage/drivers/dell-emc-powervault-me.rst new file mode 100644 index 00000000000..c3eadb96493 --- /dev/null +++ b/doc/source/configuration/block-storage/drivers/dell-emc-powervault-me.rst @@ -0,0 +1,172 @@ +============================================================== +Dell EMC PowerVault ME4 Series Fibre Channel and iSCSI drivers +============================================================== + +The ``PVMEFCDriver`` and ``PVMEISCSIDriver`` Cinder drivers allow the +Dell EMC PowerVault ME4 Series storage arrays to be used for Block +Storage in OpenStack deployments. + +System requirements +~~~~~~~~~~~~~~~~~~~ + +To use the PowerVault ME4 Series drivers, the following are required: + +- PowerVault ME4 Series storage array with: + + - iSCSI or FC host interfaces + - G28x firmware or later + +- Network connectivity between the OpenStack hosts and the array's + embedded management interface + +- The HTTPS protocol must be enabled on the array + +Supported operations +~~~~~~~~~~~~~~~~~~~~ + +- Create, delete, attach, and detach volumes. +- Create, list, and delete volume snapshots. +- Create a volume from a snapshot. +- Copy an image to a volume. +- Copy a volume to an image. +- Clone a volume. +- Extend a volume. +- Migrate a volume with back-end assistance. +- Retype a volume. +- Manage and unmanage a volume. + +Configuring the array +~~~~~~~~~~~~~~~~~~~~~ + +#. Verify that the array can be managed via an HTTPS connection. HTTP + can also be used if ``driver_use_ssl`` is set to False in the + ``cinder.conf`` file. + + Confirm that virtual pools A and B are already present on the + array. If they are missing, create them. + +#. Edit the ``cinder.conf`` file to define a storage back-end entry for each + storage pool on the array that will be managed by OpenStack. Each entry + consists of a unique section name, surrounded by square brackets, followed + by options specified in a ``key=value`` format. + + * The ``pvme_pool_name`` value specifies the name of the storage pool + or vdisk on the array. + + * The ``volume_backend_name`` option value can be a unique value, if you + wish to be able to assign volumes to a specific storage pool on the + array, or a name that is shared among multiple storage pools to let the + volume scheduler choose where new volumes are allocated. + +#. The following ``cinder.conf`` options generally have identical values + for each backend section on the array: + + * ``volume_driver`` specifies the Cinder driver name. + + * ``san_ip`` specifies the IP addresses or host names of the array's + management controllers. + + * ``san_login`` and ``san_password`` specify the username and password + of an array user account with ``manage`` privileges + + * ``driver_use_ssl`` must be set to True to enable use of the HTTPS + protocol. + + * ``pvme_iscsi_ips`` specifies the iSCSI IP addresses + for the array if using the iSCSI transport protocol + + In the examples below, two back ends are defined, one for pool A and one for + pool B, and a common ``volume_backend_name`` is used so that a single + volume type definition can be used to allocate volumes from both pools. + + **iSCSI example back-end entries** + + .. code-block:: ini + + [pool-a] + pvme_pool_name = A + volume_backend_name = pvme-array + volume_driver = cinder.volume.drivers.dell_emc.powervault.iscsi.PVMEISCSIDriver + san_ip = 10.1.2.3,10.1.2.4 + san_login = manage + san_password = !manage + pvme_iscsi_ips = 10.2.3.4,10.2.3.5 + driver_use_ssl = true + + [pool-b] + pvme_backend_name = B + volume_backend_name = pvme-array + volume_driver = cinder.volume.drivers.dell_emc.powervault.iscsi.PVMEISCSIDriver + san_ip = 10.1.2.3,10.1.2.4 + san_login = manage + san_password = !manage + pvme_iscsi_ips = 10.2.3.4,10.2.3.5 + driver_use_ssl = true + + **Fibre Channel example back-end entries** + + .. code-block:: ini + + [pool-a] + pvme_backend_name = A + volume_backend_name = pvme-array + volume_driver = cinder.volume.drivers.dell_emc.powervault.fc.PVMEFCDriver + san_ip = 10.1.2.3,10.1.2.4 + san_login = manage + san_password = !manage + driver_use_ssl = true + + [pool-b] + pvme_backend_name = B + volume_backend_name = pvme-array + volume_driver = cinder.volume.drivers.dell_emc.powervault.fc.PVMEFCDriver + san_ip = 10.1.2.3,10.1.2.4 + san_login = manage + san_password = !manage + driver_use_ssl = true + +#. If HTTPS is enabled, you can enable certificate verification with the option + ``driver_ssl_cert_verify = True``. You may also use the + ``driver_ssl_cert_path`` parameter to specify the path to a + CA\_BUNDLE file containing CAs other than those in the default list. + +#. Modify the ``[DEFAULT]`` section of the ``cinder.conf`` file to add an + ``enabled_backends`` parameter specifying the backend entries you added, + and a ``default_volume_type`` parameter specifying the name of a volume type + that you will create in the next step. + + **Example of [DEFAULT] section changes** + + .. code-block:: ini + + [DEFAULT] + enabled_backends = pool-a,pool-b + default_volume_type = pvme + + +#. Create a new volume type for each distinct ``volume_backend_name`` value + that you added in the ``cinder.conf`` file. The example below assumes that + the same ``volume_backend_name=pvme-array`` option was specified in all + of the entries, and specifies that the volume type ``pvme`` can be used + to allocate volumes from any of them. + + **Example of creating a volume type** + + .. code-block:: console + + $ openstack volume type create pvme + $ openstack volume type set --property volume_backend_name=pvme-array pvme + +#. After modifying the ``cinder.conf`` file, restart the ``cinder-volume`` + service. + +Driver-specific options +~~~~~~~~~~~~~~~~~~~~~~~ + +The following table contains the configuration options that are specific to +the PowerVault ME Series drivers. + +.. config-table:: + :config-target: PowerVault ME Series + + cinder.volume.drivers.dell_emc.powervault.common diff --git a/doc/source/reference/support-matrix.ini b/doc/source/reference/support-matrix.ini index 51bd98580da..360e07514d7 100644 --- a/doc/source/reference/support-matrix.ini +++ b/doc/source/reference/support-matrix.ini @@ -33,6 +33,9 @@ title=Dell EMC SC Series Storage Driver (iSCSI, FC) [driver.dell_emc_powerflex] title=Dell EMC PowerFlex (ScaleIO) Storage Driver (ScaleIO) +[driver.dell_emc_powervault] +title=Dell EMC PowerVault ME Series (iSCSI, FC) + [driver.dell_emc_unity] title=Dell EMC Unity Storage Driver (FC, iSCSI) @@ -205,6 +208,7 @@ notes=A vendor driver is considered supported if the vendor is driver.datera=complete driver.dell_emc_powermax=complete driver.dell_emc_powerstore=complete +driver.dell_emc_powervault=complete driver.dell_emc_sc=complete driver.dell_emc_unity=complete driver.dell_emc_vmax_af=complete @@ -270,6 +274,7 @@ notes=Cinder supports the ability to extend a volume that is attached to driver.datera=complete driver.dell_emc_powermax=complete driver.dell_emc_powerstore=complete +driver.dell_emc_powervault=complete driver.dell_emc_sc=complete driver.dell_emc_unity=complete driver.dell_emc_vmax_af=complete @@ -335,6 +340,7 @@ notes=This is the ability to directly attach a snapshot to an driver.datera=missing driver.dell_emc_powermax=missing driver.dell_emc_powerstore=missing +driver.dell_emc_powervault=missing driver.dell_emc_sc=missing driver.dell_emc_unity=complete driver.dell_emc_vmax_af=missing @@ -403,6 +409,7 @@ notes=Vendor drivers that support Quality of Service (QoS) at the driver.datera=complete driver.dell_emc_powermax=complete driver.dell_emc_powerstore=missing +driver.dell_emc_powervault=missing driver.dell_emc_sc=complete driver.dell_emc_unity=complete driver.dell_emc_vmax_af=complete @@ -470,6 +477,7 @@ notes=Vendor drivers that support volume replication can report this driver.datera=missing driver.dell_emc_powermax=complete driver.dell_emc_powerstore=missing +driver.dell_emc_powervault=missing driver.dell_emc_sc=complete driver.dell_emc_unity=complete driver.dell_emc_vmax_af=complete @@ -538,6 +546,7 @@ notes=Vendor drivers that support consistency groups are able to driver.datera=missing driver.dell_emc_powermax=complete driver.dell_emc_powerstore=missing +driver.dell_emc_powervault=missing driver.dell_emc_sc=complete driver.dell_emc_unity=complete driver.dell_emc_vmax_af=complete @@ -605,6 +614,7 @@ notes=If a volume driver supports thin provisioning it means that it driver.datera=missing driver.dell_emc_powermax=complete driver.dell_emc_powerstore=complete +driver.dell_emc_powervault=missing driver.dell_emc_sc=complete driver.dell_emc_unity=complete driver.dell_emc_vmax_af=complete @@ -673,6 +683,7 @@ notes=Storage assisted volume migration is like host assisted volume driver.datera=missing driver.dell_emc_powermax=complete driver.dell_emc_powerstore=missing +driver.dell_emc_powervault=missing driver.dell_emc_sc=missing driver.dell_emc_unity=complete driver.dell_emc_vmax_af=complete @@ -741,6 +752,7 @@ notes=Vendor drivers that report multi-attach support are able driver.datera=missing driver.dell_emc_powermax=complete driver.dell_emc_powerstore=complete +driver.dell_emc_powervault=complete driver.dell_emc_sc=complete driver.dell_emc_unity=complete driver.dell_emc_vmax_af=complete @@ -806,6 +818,7 @@ notes=Vendor drivers that implement the driver assisted function to revert a driver.datera=missing driver.dell_emc_powermax=complete driver.dell_emc_powerstore=complete +driver.dell_emc_powervault=missing driver.dell_emc_sc=missing driver.dell_emc_unity=complete driver.dell_emc_vmax_af=complete @@ -875,6 +888,7 @@ notes=Vendor drivers that support running in an active/active driver.datera=missing driver.dell_emc_powermax=missing driver.dell_emc_powerstore=missing +driver.dell_emc_powervault=missing driver.dell_emc_sc=missing driver.dell_emc_unity=missing driver.dell_emc_vmax_af=missing diff --git a/releasenotes/notes/dell-emc-pvme-driver-9333594b2cc1e0b5.yaml b/releasenotes/notes/dell-emc-pvme-driver-9333594b2cc1e0b5.yaml new file mode 100644 index 00000000000..b1380b6464a --- /dev/null +++ b/releasenotes/notes/dell-emc-pvme-driver-9333594b2cc1e0b5.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Dell EMC PowerVault ME Series storage arrays are now supported.