Add driver for Dell EMC PowerVault ME Series
Change-Id: I0af2d5cfbbfdb384786ef0c17cf96ba8ca865ced Implements: blueprint dellemc-me-driver
This commit is contained in:
parent
f19a92064a
commit
e9d1bf8f6c
@ -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,
|
||||
|
24
cinder/volume/drivers/dell_emc/powervault/client.py
Normal file
24
cinder/volume/drivers/dell_emc/powervault/client.py
Normal file
@ -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)
|
68
cinder/volume/drivers/dell_emc/powervault/common.py
Normal file
68
cinder/volume/drivers/dell_emc/powervault/common.py
Normal file
@ -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
|
48
cinder/volume/drivers/dell_emc/powervault/fc.py
Normal file
48
cinder/volume/drivers/dell_emc/powervault/fc.py
Normal file
@ -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)
|
51
cinder/volume/drivers/dell_emc/powervault/iscsi.py
Normal file
51
cinder/volume/drivers/dell_emc/powervault/iscsi.py
Normal file
@ -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)
|
@ -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
|
@ -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
|
||||
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Dell EMC PowerVault ME Series storage arrays are now supported.
|
Loading…
Reference in New Issue
Block a user