Merge "Unity/VNX Driver: Rename driver options"
This commit is contained in:
@@ -21,13 +21,10 @@ to specify, which backend plugins to use.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
from oslo_config import cfg
|
from oslo_config import cfg
|
||||||
from oslo_log import log
|
|
||||||
|
|
||||||
from manila.share import driver
|
from manila.share import driver
|
||||||
from manila.share.drivers.dell_emc import plugin_manager as manager
|
from manila.share.drivers.dell_emc import plugin_manager as manager
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
|
||||||
|
|
||||||
EMC_NAS_OPTS = [
|
EMC_NAS_OPTS = [
|
||||||
cfg.StrOpt('emc_nas_login',
|
cfg.StrOpt('emc_nas_login',
|
||||||
help='User name for the EMC server.'),
|
help='User name for the EMC server.'),
|
||||||
@@ -45,19 +42,8 @@ EMC_NAS_OPTS = [
|
|||||||
ignore_case=True,
|
ignore_case=True,
|
||||||
choices=['isilon', 'vnx', 'unity'],
|
choices=['isilon', 'vnx', 'unity'],
|
||||||
help='Share backend.'),
|
help='Share backend.'),
|
||||||
cfg.StrOpt('emc_nas_server_container',
|
|
||||||
help='Container of share servers.'),
|
|
||||||
cfg.ListOpt('emc_nas_pool_names',
|
|
||||||
deprecated_name='emc_nas_pool_name',
|
|
||||||
help='EMC pool names.'),
|
|
||||||
cfg.StrOpt('emc_nas_root_dir',
|
cfg.StrOpt('emc_nas_root_dir',
|
||||||
help='The root directory where shares will be located.'),
|
help='The root directory where shares will be located.')
|
||||||
cfg.StrOpt('emc_nas_server_pool',
|
|
||||||
help='Pool to persist the meta-data of NAS server.'),
|
|
||||||
cfg.ListOpt('emc_interface_ports',
|
|
||||||
help='Comma separated list specifying the ports that can be '
|
|
||||||
'used for share server interfaces. Members of the list '
|
|
||||||
'can be Unix-style glob expressions.'),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
@@ -78,7 +64,9 @@ class EMCShareDriver(driver.ShareDriver):
|
|||||||
self.backend_name = self.backend_name or 'EMC_NAS_Storage'
|
self.backend_name = self.backend_name or 'EMC_NAS_Storage'
|
||||||
self.plugin_manager = manager.EMCPluginManager(
|
self.plugin_manager = manager.EMCPluginManager(
|
||||||
namespace='manila.share.drivers.dell_emc.plugins')
|
namespace='manila.share.drivers.dell_emc.plugins')
|
||||||
self.plugin = self.plugin_manager.load_plugin(self.backend_name, LOG)
|
self.plugin = self.plugin_manager.load_plugin(
|
||||||
|
self.backend_name,
|
||||||
|
configuration=self.configuration)
|
||||||
super(EMCShareDriver, self).__init__(
|
super(EMCShareDriver, self).__init__(
|
||||||
self.plugin.driver_handles_share_servers, *args, **kwargs)
|
self.plugin.driver_handles_share_servers, *args, **kwargs)
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ class EMCPluginManager(object):
|
|||||||
|
|
||||||
self.extension_manager = extension.ExtensionManager(namespace)
|
self.extension_manager = extension.ExtensionManager(namespace)
|
||||||
|
|
||||||
def load_plugin(self, name, logger=None):
|
def load_plugin(self, name, *args, **kwargs):
|
||||||
for ext in self.extension_manager.extensions:
|
for ext in self.extension_manager.extensions:
|
||||||
if ext.name == name:
|
if ext.name == name:
|
||||||
storage_conn = ext.plugin(logger)
|
storage_conn = ext.plugin(*args, **kwargs)
|
||||||
return storage_conn
|
return storage_conn
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|||||||
@@ -23,8 +23,7 @@ import six
|
|||||||
class StorageConnection(object):
|
class StorageConnection(object):
|
||||||
"""Subclasses should implement storage backend specific functionality."""
|
"""Subclasses should implement storage backend specific functionality."""
|
||||||
|
|
||||||
def __init__(self, logger):
|
def __init__(self, *args, **kwargs):
|
||||||
self.logger = logger
|
|
||||||
# NOTE(vponomaryov): redefine 'driver_handles_share_servers' within
|
# NOTE(vponomaryov): redefine 'driver_handles_share_servers' within
|
||||||
# plugin.
|
# plugin.
|
||||||
self.driver_handles_share_servers = None
|
self.driver_handles_share_servers = None
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
"""Unity backend for the EMC Manila driver."""
|
"""Unity backend for the EMC Manila driver."""
|
||||||
|
|
||||||
|
from oslo_config import cfg
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
from oslo_utils import excutils
|
from oslo_utils import excutils
|
||||||
from oslo_utils import importutils
|
from oslo_utils import importutils
|
||||||
@@ -38,6 +39,27 @@ VERSION = "1.0.0"
|
|||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
SUPPORTED_NETWORK_TYPES = (None, 'flat', 'vlan')
|
SUPPORTED_NETWORK_TYPES = (None, 'flat', 'vlan')
|
||||||
|
|
||||||
|
UNITY_OPTS = [
|
||||||
|
cfg.StrOpt('unity_server_meta_pool',
|
||||||
|
deprecated_name='emc_nas_server_pool',
|
||||||
|
help='Pool to persist the meta-data of NAS server.'),
|
||||||
|
cfg.StrOpt('unity_server_container',
|
||||||
|
deprecated_name='emc_nas_server_container',
|
||||||
|
help='Storage processor to host the NAS server.'),
|
||||||
|
cfg.ListOpt('unity_share_data_pools',
|
||||||
|
deprecated_name='emc_nas_pool_names',
|
||||||
|
help='Comma separated list of pools that can be used to '
|
||||||
|
'persist share data.'),
|
||||||
|
cfg.ListOpt('unity_ethernet_ports',
|
||||||
|
deprecated_name='emc_interface_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(UNITY_OPTS)
|
||||||
|
|
||||||
|
|
||||||
@emc_utils.decorate_all_methods(emc_utils.log_enter_exit,
|
@emc_utils.decorate_all_methods(emc_utils.log_enter_exit,
|
||||||
debug_only=True)
|
debug_only=True)
|
||||||
@@ -49,6 +71,9 @@ class UnityStorageConnection(driver.StorageConnection):
|
|||||||
@emc_utils.log_enter_exit
|
@emc_utils.log_enter_exit
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(UnityStorageConnection, self).__init__(*args, **kwargs)
|
super(UnityStorageConnection, self).__init__(*args, **kwargs)
|
||||||
|
if 'configuration' in kwargs:
|
||||||
|
kwargs['configuration'].append_config_values(UNITY_OPTS)
|
||||||
|
|
||||||
self.client = None
|
self.client = None
|
||||||
self.pool_set = None
|
self.pool_set = None
|
||||||
self.port_set = None
|
self.port_set = None
|
||||||
@@ -66,11 +91,10 @@ class UnityStorageConnection(driver.StorageConnection):
|
|||||||
storage_ip = config.emc_nas_server
|
storage_ip = config.emc_nas_server
|
||||||
username = config.emc_nas_login
|
username = config.emc_nas_login
|
||||||
password = config.emc_nas_password
|
password = config.emc_nas_password
|
||||||
sp_name = config.emc_nas_server_container
|
sp_name = config.unity_server_container
|
||||||
self.client = client.UnityClient(storage_ip, username, password)
|
self.client = client.UnityClient(storage_ip, username, password)
|
||||||
|
|
||||||
pool_conf = config.safe_get(
|
pool_conf = config.safe_get('unity_share_data_pools')
|
||||||
'emc_nas_pool_names')
|
|
||||||
self.pool_set = self._get_managed_pools(pool_conf)
|
self.pool_set = self._get_managed_pools(pool_conf)
|
||||||
|
|
||||||
self.reserved_percentage = config.safe_get(
|
self.reserved_percentage = config.safe_get(
|
||||||
@@ -83,12 +107,11 @@ class UnityStorageConnection(driver.StorageConnection):
|
|||||||
|
|
||||||
self._config_sp(sp_name)
|
self._config_sp(sp_name)
|
||||||
|
|
||||||
port_conf = config.safe_get(
|
port_conf = config.safe_get('unity_ethernet_ports')
|
||||||
'emc_interface_ports')
|
|
||||||
self.port_set = self._get_managed_ports(
|
self.port_set = self._get_managed_ports(
|
||||||
port_conf, self.storage_processor)
|
port_conf, self.storage_processor)
|
||||||
|
|
||||||
pool_name = config.emc_nas_server_pool
|
pool_name = config.unity_server_meta_pool
|
||||||
self._config_pool(pool_name)
|
self._config_pool(pool_name)
|
||||||
|
|
||||||
def check_for_setup_error(self):
|
def check_for_setup_error(self):
|
||||||
@@ -489,7 +512,7 @@ class UnityStorageConnection(driver.StorageConnection):
|
|||||||
if not matched_ports:
|
if not matched_ports:
|
||||||
msg = (_("All the specified storage ports to be managed "
|
msg = (_("All the specified storage ports to be managed "
|
||||||
"do not exist. Please check your configuration "
|
"do not exist. Please check your configuration "
|
||||||
"emc_interface_ports in manila.conf. "
|
"unity_ethernet_ports in manila.conf. "
|
||||||
"The available ports in the backend are %s") %
|
"The available ports in the backend are %s") %
|
||||||
",".join(real_ports))
|
",".join(real_ports))
|
||||||
raise exception.BadConfigurationException(reason=msg)
|
raise exception.BadConfigurationException(reason=msg)
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
import copy
|
import copy
|
||||||
import random
|
import random
|
||||||
|
|
||||||
|
from oslo_config import cfg
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
from oslo_utils import excutils
|
from oslo_utils import excutils
|
||||||
from oslo_utils import units
|
from oslo_utils import units
|
||||||
@@ -35,6 +36,24 @@ VERSION = "2.0.0"
|
|||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
VNX_OPTS = [
|
||||||
|
cfg.StrOpt('vnx_server_container',
|
||||||
|
deprecated_name='emc_nas_server_container',
|
||||||
|
help='Data mover to host the NAS server.'),
|
||||||
|
cfg.ListOpt('vnx_share_data_pools',
|
||||||
|
deprecated_name='emc_nas_pool_names',
|
||||||
|
help='Comma separated list of pools that can be used to '
|
||||||
|
'persist share data.'),
|
||||||
|
cfg.ListOpt('vnx_ethernet_ports',
|
||||||
|
deprecated_name='emc_interface_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(VNX_OPTS)
|
||||||
|
|
||||||
|
|
||||||
@vnx_utils.decorate_all_methods(vnx_utils.log_enter_exit,
|
@vnx_utils.decorate_all_methods(vnx_utils.log_enter_exit,
|
||||||
debug_only=True)
|
debug_only=True)
|
||||||
@@ -44,6 +63,9 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
@vnx_utils.log_enter_exit
|
@vnx_utils.log_enter_exit
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(VNXStorageConnection, self).__init__(*args, **kwargs)
|
super(VNXStorageConnection, self).__init__(*args, **kwargs)
|
||||||
|
if 'configuration' in kwargs:
|
||||||
|
kwargs['configuration'].append_config_values(VNX_OPTS)
|
||||||
|
|
||||||
self.mover_name = None
|
self.mover_name = None
|
||||||
self.pools = None
|
self.pools = None
|
||||||
self.manager = None
|
self.manager = None
|
||||||
@@ -518,7 +540,7 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
if not matched_pools:
|
if not matched_pools:
|
||||||
msg = (_("None of the specified storage pools to be managed "
|
msg = (_("None of the specified storage pools to be managed "
|
||||||
"exist. Please check your configuration "
|
"exist. Please check your configuration "
|
||||||
"emc_nas_pool_names in manila.conf. "
|
"vnx_share_data_pools in manila.conf. "
|
||||||
"The available pools in the backend are %s.") %
|
"The available pools in the backend are %s.") %
|
||||||
",".join(real_pools))
|
",".join(real_pools))
|
||||||
raise exception.InvalidParameterValue(err=msg)
|
raise exception.InvalidParameterValue(err=msg)
|
||||||
@@ -532,22 +554,18 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
|
|
||||||
def connect(self, emc_share_driver, context):
|
def connect(self, emc_share_driver, context):
|
||||||
"""Connect to VNX NAS server."""
|
"""Connect to VNX NAS server."""
|
||||||
self.mover_name = (
|
config = emc_share_driver.configuration
|
||||||
emc_share_driver.configuration.emc_nas_server_container)
|
config.append_config_values(VNX_OPTS)
|
||||||
|
self.mover_name = config.vnx_server_container
|
||||||
|
|
||||||
self.pool_conf = emc_share_driver.configuration.safe_get(
|
self.pool_conf = config.safe_get('vnx_share_data_pools')
|
||||||
'emc_nas_pool_names')
|
|
||||||
|
|
||||||
self.reserved_percentage = emc_share_driver.configuration.safe_get(
|
self.reserved_percentage = config.safe_get('reserved_share_percentage')
|
||||||
'reserved_share_percentage')
|
|
||||||
if self.reserved_percentage is None:
|
if self.reserved_percentage is None:
|
||||||
self.reserved_percentage = 0
|
self.reserved_percentage = 0
|
||||||
|
|
||||||
configuration = emc_share_driver.configuration
|
self.manager = manager.StorageObjectManager(config)
|
||||||
|
self.port_conf = config.safe_get('vnx_ethernet_ports')
|
||||||
self.manager = manager.StorageObjectManager(configuration)
|
|
||||||
self.port_conf = emc_share_driver.configuration.safe_get(
|
|
||||||
'emc_interface_ports')
|
|
||||||
|
|
||||||
def get_managed_ports(self):
|
def get_managed_ports(self):
|
||||||
# Get the real ports(devices) list from the backend storage
|
# Get the real ports(devices) list from the backend storage
|
||||||
@@ -563,7 +581,7 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
|
|
||||||
if not matched_ports:
|
if not matched_ports:
|
||||||
msg = (_("None of the specified network ports exist. "
|
msg = (_("None of the specified network ports exist. "
|
||||||
"Please check your configuration emc_interface_ports "
|
"Please check your configuration vnx_ethernet_ports "
|
||||||
"in manila.conf. The available ports on the Data Mover "
|
"in manila.conf. The available ports on the Data Mover "
|
||||||
"are %s.") %
|
"are %s.") %
|
||||||
",".join(real_ports))
|
",".join(real_ports))
|
||||||
|
|||||||
@@ -87,12 +87,13 @@ class FakeEMCShareDriver(object):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.configuration = conf.Configuration(None)
|
self.configuration = conf.Configuration(None)
|
||||||
self.configuration.emc_share_backend = 'unity'
|
self.configuration.emc_share_backend = 'unity'
|
||||||
self.configuration.emc_nas_server_container = 'SPA'
|
self.configuration.unity_server_container = 'SPA'
|
||||||
self.configuration.emc_nas_server = '192.168.1.1'
|
self.configuration.emc_nas_server = '192.168.1.1'
|
||||||
self.configuration.emc_nas_login = 'fake_user'
|
self.configuration.emc_nas_login = 'fake_user'
|
||||||
self.configuration.emc_nas_password = 'fake_password'
|
self.configuration.emc_nas_password = 'fake_password'
|
||||||
self.configuration.share_backend_name = 'EMC_NAS_Storage'
|
self.configuration.share_backend_name = 'EMC_NAS_Storage'
|
||||||
self.configuration.emc_nas_server_pool = 'nas_server_pool'
|
self.configuration.vnx_server_meta_pool = 'nas_server_pool'
|
||||||
|
self.configuration.unity_server_meta_pool = 'nas_server_pool'
|
||||||
self.configuration.local_conf.max_over_subscription_ratio = 20
|
self.configuration.local_conf.max_over_subscription_ratio = 20
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1462,7 +1462,7 @@ class FakeEMCShareDriver(object):
|
|||||||
self.configuration = conf.Configuration(None)
|
self.configuration = conf.Configuration(None)
|
||||||
self.configuration.append_config_values = mock.Mock(return_value=0)
|
self.configuration.append_config_values = mock.Mock(return_value=0)
|
||||||
self.configuration.emc_share_backend = FakeData.emc_share_backend
|
self.configuration.emc_share_backend = FakeData.emc_share_backend
|
||||||
self.configuration.emc_nas_server_container = FakeData.mover_name
|
self.configuration.vnx_server_container = FakeData.mover_name
|
||||||
self.configuration.emc_nas_server = FakeData.emc_nas_server
|
self.configuration.emc_nas_server = FakeData.emc_nas_server
|
||||||
self.configuration.emc_nas_login = FakeData.emc_nas_login
|
self.configuration.emc_nas_login = FakeData.emc_nas_login
|
||||||
self.configuration.emc_nas_password = FakeData.emc_nas_password
|
self.configuration.emc_nas_password = FakeData.emc_nas_password
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ from manila import test
|
|||||||
|
|
||||||
|
|
||||||
class FakeConnection(base.StorageConnection):
|
class FakeConnection(base.StorageConnection):
|
||||||
def __init__(self, logger):
|
def __init__(self, *args, **kwargs):
|
||||||
self.logger = logger
|
pass
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def driver_handles_share_servers(self):
|
def driver_handles_share_servers(self):
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- For Dell EMC Unity Manila driver, replaced
|
||||||
|
emc_nas_pool_names with unity_share_data_pools,
|
||||||
|
emc_nas_server_pool with unity_server_meta_pool,
|
||||||
|
emc_interface_ports with unity_ethernet_ports,
|
||||||
|
emc_nas_server_container with unity_server_container.
|
||||||
|
- For Dell EMC VNX Manila driver, replaced
|
||||||
|
emc_nas_pool_names with vnx_share_data_pools,
|
||||||
|
emc_interface_ports with vnx_ethernet_ports,
|
||||||
|
emc_nas_server_container with vnx_server_container.
|
||||||
|
deprecations:
|
||||||
|
- For Dell EMC Unity Manila driver, options emc_nas_pool_names,
|
||||||
|
emc_nas_server_pool, emc_interface_ports, emc_nas_server_container are
|
||||||
|
deprecated.
|
||||||
|
- For Dell EMC VNX Manila driver, options emc_nas_pool_names,
|
||||||
|
emc_interface_ports, emc_nas_server_container are deprecated.
|
||||||
Reference in New Issue
Block a user