Merge "EMC: Remove unnecessary parameter emc_share_driver"
This commit is contained in:
commit
17e568e8b2
@ -81,8 +81,7 @@ class EMCShareDriver(driver.ShareDriver):
|
|||||||
|
|
||||||
def create_share(self, context, share, share_server=None):
|
def create_share(self, context, share, share_server=None):
|
||||||
"""Is called to create share."""
|
"""Is called to create share."""
|
||||||
location = self.plugin.create_share(self, context, share,
|
location = self.plugin.create_share(context, share, share_server)
|
||||||
share_server)
|
|
||||||
|
|
||||||
return location
|
return location
|
||||||
|
|
||||||
@ -90,37 +89,33 @@ class EMCShareDriver(driver.ShareDriver):
|
|||||||
share_server=None):
|
share_server=None):
|
||||||
"""Is called to create share from snapshot."""
|
"""Is called to create share from snapshot."""
|
||||||
location = self.plugin.create_share_from_snapshot(
|
location = self.plugin.create_share_from_snapshot(
|
||||||
self, context, share, snapshot, share_server)
|
context, share, snapshot, share_server)
|
||||||
|
|
||||||
return location
|
return location
|
||||||
|
|
||||||
def create_snapshot(self, context, snapshot, share_server=None):
|
def create_snapshot(self, context, snapshot, share_server=None):
|
||||||
"""Is called to create snapshot."""
|
"""Is called to create snapshot."""
|
||||||
self.plugin.create_snapshot(self, context, snapshot,
|
self.plugin.create_snapshot(context, snapshot, share_server)
|
||||||
share_server)
|
|
||||||
|
|
||||||
def delete_share(self, context, share, share_server=None):
|
def delete_share(self, context, share, share_server=None):
|
||||||
"""Is called to remove share."""
|
"""Is called to remove share."""
|
||||||
self.plugin.delete_share(self, context, share, share_server)
|
self.plugin.delete_share(context, share, share_server)
|
||||||
|
|
||||||
def delete_snapshot(self, context, snapshot, share_server=None):
|
def delete_snapshot(self, context, snapshot, share_server=None):
|
||||||
"""Is called to remove snapshot."""
|
"""Is called to remove snapshot."""
|
||||||
self.plugin.delete_snapshot(self, context, snapshot,
|
self.plugin.delete_snapshot(context, snapshot, share_server)
|
||||||
share_server)
|
|
||||||
|
|
||||||
def ensure_share(self, context, share, share_server=None):
|
def ensure_share(self, context, share, share_server=None):
|
||||||
"""Invoked to sure that share is exported."""
|
"""Invoked to sure that share is exported."""
|
||||||
self.plugin.ensure_share(self, context, share, share_server)
|
self.plugin.ensure_share(context, share, share_server)
|
||||||
|
|
||||||
def allow_access(self, context, share, access, share_server=None):
|
def allow_access(self, context, share, access, share_server=None):
|
||||||
"""Allow access to the share."""
|
"""Allow access to the share."""
|
||||||
self.plugin.allow_access(self, context, share, access,
|
self.plugin.allow_access(context, share, access, share_server)
|
||||||
share_server)
|
|
||||||
|
|
||||||
def deny_access(self, context, share, access, share_server=None):
|
def deny_access(self, context, share, access, share_server=None):
|
||||||
"""Deny access to the share."""
|
"""Deny access to the share."""
|
||||||
self.plugin.deny_access(self, context, share, access,
|
self.plugin.deny_access(context, share, access, share_server)
|
||||||
share_server)
|
|
||||||
|
|
||||||
def check_for_setup_error(self):
|
def check_for_setup_error(self):
|
||||||
"""Check for setup error."""
|
"""Check for setup error."""
|
||||||
@ -144,14 +139,12 @@ class EMCShareDriver(driver.ShareDriver):
|
|||||||
|
|
||||||
def get_network_allocations_number(self):
|
def get_network_allocations_number(self):
|
||||||
"""Returns number of network allocations for creating VIFs."""
|
"""Returns number of network allocations for creating VIFs."""
|
||||||
return self.plugin.get_network_allocations_number(self)
|
return self.plugin.get_network_allocations_number()
|
||||||
|
|
||||||
def _setup_server(self, network_info, metadata=None):
|
def _setup_server(self, network_info, metadata=None):
|
||||||
"""Set up and configures share server with given network parameters."""
|
"""Set up and configures share server with given network parameters."""
|
||||||
return self.plugin.setup_server(self, network_info, metadata)
|
return self.plugin.setup_server(network_info, metadata)
|
||||||
|
|
||||||
def _teardown_server(self, server_details, security_services=None):
|
def _teardown_server(self, server_details, security_services=None):
|
||||||
"""Teardown share server."""
|
"""Teardown share server."""
|
||||||
return self.plugin.teardown_server(self,
|
return self.plugin.teardown_server(server_details, security_services)
|
||||||
server_details,
|
|
||||||
security_services)
|
|
||||||
|
@ -30,38 +30,34 @@ class StorageConnection(object):
|
|||||||
self.driver_handles_share_servers = None
|
self.driver_handles_share_servers = None
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def create_share(self, emc_share_driver, context, share, share_server):
|
def create_share(self, context, share, share_server):
|
||||||
"""Is called to create share."""
|
"""Is called to create share."""
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def create_snapshot(self, emc_share_driver, context,
|
def create_snapshot(self, context, snapshot, share_server):
|
||||||
snapshot, share_server):
|
|
||||||
"""Is called to create snapshot."""
|
"""Is called to create snapshot."""
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def delete_share(self, emc_share_driver, context, share, share_server):
|
def delete_share(self, context, share, share_server):
|
||||||
"""Is called to remove share."""
|
"""Is called to remove share."""
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def delete_snapshot(self, emc_share_driver, context,
|
def delete_snapshot(self, context, snapshot, share_server):
|
||||||
snapshot, share_server):
|
|
||||||
"""Is called to remove snapshot."""
|
"""Is called to remove snapshot."""
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def ensure_share(self, emc_share_driver, context, share, share_server):
|
def ensure_share(self, context, share, share_server):
|
||||||
"""Invoked to ensure that share is exported."""
|
"""Invoked to ensure that share is exported."""
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def allow_access(self, emc_share_driver, context, share,
|
def allow_access(self, context, share, access, share_server):
|
||||||
access, share_server):
|
|
||||||
"""Allow access to the share."""
|
"""Allow access to the share."""
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
def deny_access(self, emc_share_driver, context, share,
|
def deny_access(self, context, share, access, share_server):
|
||||||
access, share_server):
|
|
||||||
"""Deny access to the share."""
|
"""Deny access to the share."""
|
||||||
|
|
||||||
def raise_connect_error(self, emc_share_driver):
|
def raise_connect_error(self):
|
||||||
"""Check for setup error."""
|
"""Check for setup error."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ class IsilonStorageConnection(base.StorageConnection):
|
|||||||
"""Return path to a container."""
|
"""Return path to a container."""
|
||||||
return os.path.join(self._root_dir, share['name'])
|
return os.path.join(self._root_dir, share['name'])
|
||||||
|
|
||||||
def create_share(self, emc_share_driver, context, share, share_server):
|
def create_share(self, context, share, share_server):
|
||||||
"""Is called to create share."""
|
"""Is called to create share."""
|
||||||
if share['share_proto'] == 'NFS':
|
if share['share_proto'] == 'NFS':
|
||||||
location = self._create_nfs_share(share)
|
location = self._create_nfs_share(share)
|
||||||
@ -71,13 +71,12 @@ class IsilonStorageConnection(base.StorageConnection):
|
|||||||
raise exception.InvalidShare(message=message)
|
raise exception.InvalidShare(message=message)
|
||||||
return location
|
return location
|
||||||
|
|
||||||
def create_share_from_snapshot(self, emc_share_driver, context, share,
|
def create_share_from_snapshot(self, context, share, snapshot,
|
||||||
snapshot, share_server):
|
share_server):
|
||||||
"""Creates a share from the snapshot."""
|
"""Creates a share from the snapshot."""
|
||||||
|
|
||||||
# Create share at new location
|
# Create share at new location
|
||||||
location = self.create_share(
|
location = self.create_share(context, share, share_server)
|
||||||
emc_share_driver, context, share, share_server)
|
|
||||||
|
|
||||||
# Clone snapshot to new location
|
# Clone snapshot to new location
|
||||||
fq_target_dir = self._get_container_path(share)
|
fq_target_dir = self._get_container_path(share)
|
||||||
@ -110,13 +109,12 @@ class IsilonStorageConnection(base.StorageConnection):
|
|||||||
share_path = '\\\\{0}\\{1}'.format(self._server, share['name'])
|
share_path = '\\\\{0}\\{1}'.format(self._server, share['name'])
|
||||||
return share_path
|
return share_path
|
||||||
|
|
||||||
def create_snapshot(self, emc_share_driver, context,
|
def create_snapshot(self, context, snapshot, share_server):
|
||||||
snapshot, share_server):
|
|
||||||
"""Is called to create snapshot."""
|
"""Is called to create snapshot."""
|
||||||
snapshot_path = os.path.join(self._root_dir, snapshot['share_name'])
|
snapshot_path = os.path.join(self._root_dir, snapshot['share_name'])
|
||||||
self._isilon_api.create_snapshot(snapshot['name'], snapshot_path)
|
self._isilon_api.create_snapshot(snapshot['name'], snapshot_path)
|
||||||
|
|
||||||
def delete_share(self, emc_share_driver, context, share, share_server):
|
def delete_share(self, context, share, share_server):
|
||||||
"""Is called to remove share."""
|
"""Is called to remove share."""
|
||||||
if share['share_proto'] == 'NFS':
|
if share['share_proto'] == 'NFS':
|
||||||
self._delete_nfs_share(share)
|
self._delete_nfs_share(share)
|
||||||
@ -159,16 +157,14 @@ class IsilonStorageConnection(base.StorageConnection):
|
|||||||
LOG.error(message)
|
LOG.error(message)
|
||||||
raise exception.ShareBackendException(message=message)
|
raise exception.ShareBackendException(message=message)
|
||||||
|
|
||||||
def delete_snapshot(self, emc_share_driver, context,
|
def delete_snapshot(self, context, snapshot, share_server):
|
||||||
snapshot, share_server):
|
|
||||||
"""Is called to remove snapshot."""
|
"""Is called to remove snapshot."""
|
||||||
self._isilon_api.delete_snapshot(snapshot['name'])
|
self._isilon_api.delete_snapshot(snapshot['name'])
|
||||||
|
|
||||||
def ensure_share(self, emc_share_driver, context, share, share_server):
|
def ensure_share(self, context, share, share_server):
|
||||||
"""Invoked to ensure that share is exported."""
|
"""Invoked to ensure that share is exported."""
|
||||||
|
|
||||||
def allow_access(self, emc_share_driver, context, share,
|
def allow_access(self, context, share, access, share_server):
|
||||||
access, share_server):
|
|
||||||
"""Allow access to the share."""
|
"""Allow access to the share."""
|
||||||
|
|
||||||
# TODO(sedwards): Look into supporting ro/rw access to shares
|
# TODO(sedwards): Look into supporting ro/rw access to shares
|
||||||
@ -225,8 +221,7 @@ class IsilonStorageConnection(base.StorageConnection):
|
|||||||
r = self._isilon_api.request('PUT', url, data=data)
|
r = self._isilon_api.request('PUT', url, data=data)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
|
|
||||||
def deny_access(self, emc_share_driver, context, share,
|
def deny_access(self, context, share, access, share_server):
|
||||||
access, share_server):
|
|
||||||
"""Deny access to the share."""
|
"""Deny access to the share."""
|
||||||
|
|
||||||
if access['access_type'] != 'ip':
|
if access['access_type'] != 'ip':
|
||||||
@ -322,7 +317,6 @@ class IsilonStorageConnection(base.StorageConnection):
|
|||||||
"""Set up and configures share server with given network parameters."""
|
"""Set up and configures share server with given network parameters."""
|
||||||
# TODO(Shaun Edwards): Look into supporting share servers
|
# TODO(Shaun Edwards): Look into supporting share servers
|
||||||
|
|
||||||
def teardown_server(self, server_details,
|
def teardown_server(self, server_details, security_services=None):
|
||||||
security_services=None):
|
|
||||||
"""Teardown share server."""
|
"""Teardown share server."""
|
||||||
# TODO(Shaun Edwards): Look into supporting share servers
|
# TODO(Shaun Edwards): Look into supporting share servers
|
||||||
|
@ -50,8 +50,7 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
self._filesystems = {}
|
self._filesystems = {}
|
||||||
self.driver_handles_share_servers = True
|
self.driver_handles_share_servers = True
|
||||||
|
|
||||||
def create_share(self, emc_share_driver, context, share,
|
def create_share(self, context, share, share_server=None):
|
||||||
share_server=None):
|
|
||||||
"""Is called to create share."""
|
"""Is called to create share."""
|
||||||
share_name = share['name']
|
share_name = share['name']
|
||||||
size = share['size'] * units.Ki
|
size = share['size'] * units.Ki
|
||||||
@ -150,8 +149,8 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
% {'nfs_if': share_server['backend_details']['nfs_if'],
|
% {'nfs_if': share_server['backend_details']['nfs_if'],
|
||||||
'share_name': share_name})
|
'share_name': share_name})
|
||||||
|
|
||||||
def create_share_from_snapshot(self, emc_share_driver, context,
|
def create_share_from_snapshot(self, context, share, snapshot,
|
||||||
share, snapshot, share_server=None):
|
share_server=None):
|
||||||
"""Is called to create share from snapshot."""
|
"""Is called to create share from snapshot."""
|
||||||
share_name = share['name']
|
share_name = share['name']
|
||||||
vdm_ref = self.share_server_validation(share_server)
|
vdm_ref = self.share_server_validation(share_server)
|
||||||
@ -171,8 +170,7 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
|
|
||||||
return location
|
return location
|
||||||
|
|
||||||
def create_snapshot(self, emc_share_driver, context, snapshot,
|
def create_snapshot(self, context, snapshot, share_server=None):
|
||||||
share_server=None):
|
|
||||||
"""Create snapshot from share."""
|
"""Create snapshot from share."""
|
||||||
|
|
||||||
ckpt_name = snapshot['name']
|
ckpt_name = snapshot['name']
|
||||||
@ -189,8 +187,7 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
LOG.error(message)
|
LOG.error(message)
|
||||||
raise exception.EMCVnxXMLAPIError(err=message)
|
raise exception.EMCVnxXMLAPIError(err=message)
|
||||||
|
|
||||||
def delete_share(self, emc_share_driver, context, share,
|
def delete_share(self, context, share, share_server=None):
|
||||||
share_server=None):
|
|
||||||
"""Is called to remove share."""
|
"""Is called to remove share."""
|
||||||
if share_server is None:
|
if share_server is None:
|
||||||
LOG.warn(_LW("Driver does not support share deletion without "
|
LOG.warn(_LW("Driver does not support share deletion without "
|
||||||
@ -314,8 +311,7 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
LOG.error(message)
|
LOG.error(message)
|
||||||
raise exception.EMCVnxXMLAPIError(err=message)
|
raise exception.EMCVnxXMLAPIError(err=message)
|
||||||
|
|
||||||
def delete_snapshot(self, emc_share_driver, context, snapshot,
|
def delete_snapshot(self, context, snapshot, share_server=None):
|
||||||
share_server=None):
|
|
||||||
"""Remove share's snapshot."""
|
"""Remove share's snapshot."""
|
||||||
|
|
||||||
ckpt_name = snapshot['name']
|
ckpt_name = snapshot['name']
|
||||||
@ -337,14 +333,11 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
LOG.error(message)
|
LOG.error(message)
|
||||||
raise exception.EMCVnxXMLAPIError(err=message)
|
raise exception.EMCVnxXMLAPIError(err=message)
|
||||||
|
|
||||||
def ensure_share(self, emc_share_driver,
|
def ensure_share(self, context, share, share_server=None):
|
||||||
context, share,
|
|
||||||
share_server=None):
|
|
||||||
"""Invoked to ensure that share is exported."""
|
"""Invoked to ensure that share is exported."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def allow_access(self, emc_share_driver, context, share, access,
|
def allow_access(self, context, share, access, share_server=None):
|
||||||
share_server=None):
|
|
||||||
"""Allow access to the share."""
|
"""Allow access to the share."""
|
||||||
access_level = access['access_level']
|
access_level = access['access_level']
|
||||||
if access_level not in const.ACCESS_LEVELS:
|
if access_level not in const.ACCESS_LEVELS:
|
||||||
@ -407,8 +400,7 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
LOG.error(message)
|
LOG.error(message)
|
||||||
raise exception.EMCVnxXMLAPIError(err=message)
|
raise exception.EMCVnxXMLAPIError(err=message)
|
||||||
|
|
||||||
def deny_access(self, emc_share_driver, context, share, access,
|
def deny_access(self, context, share, access, share_server=None):
|
||||||
share_server=None):
|
|
||||||
"""Deny access to the share."""
|
"""Deny access to the share."""
|
||||||
if share['share_proto'] == 'NFS':
|
if share['share_proto'] == 'NFS':
|
||||||
self._nfs_deny_access(share, access, share_server)
|
self._nfs_deny_access(share, access, share_server)
|
||||||
@ -468,7 +460,7 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
LOG.error(message)
|
LOG.error(message)
|
||||||
raise exception.EMCVnxXMLAPIError(err=message)
|
raise exception.EMCVnxXMLAPIError(err=message)
|
||||||
|
|
||||||
def check_for_setup_error(self, emc_share_driver):
|
def check_for_setup_error(self):
|
||||||
"""Check for setup error."""
|
"""Check for setup error."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -500,11 +492,11 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
stats_dict['free_capacity_gb'] = (
|
stats_dict['free_capacity_gb'] = (
|
||||||
int(pool['total_size']) - int(pool['used_size']))
|
int(pool['total_size']) - int(pool['used_size']))
|
||||||
|
|
||||||
def get_network_allocations_number(self, emc_share_driver):
|
def get_network_allocations_number(self):
|
||||||
"""Returns number of network allocations for creating VIFs."""
|
"""Returns number of network allocations for creating VIFs."""
|
||||||
return constants.IP_ALLOCATIONS
|
return constants.IP_ALLOCATIONS
|
||||||
|
|
||||||
def setup_server(self, emc_share_driver, network_info, metadata=None):
|
def setup_server(self, network_info, metadata=None):
|
||||||
"""Set up and configures share server with given network parameters."""
|
"""Set up and configures share server with given network parameters."""
|
||||||
# Only support single security service with type 'active_directory'
|
# Only support single security service with type 'active_directory'
|
||||||
interface_info = []
|
interface_info = []
|
||||||
@ -675,8 +667,7 @@ class VNXStorageConnection(driver.StorageConnection):
|
|||||||
self._NASCmd_helper.enable_nfs_service(vdmRef['name'],
|
self._NASCmd_helper.enable_nfs_service(vdmRef['name'],
|
||||||
interface['name'])
|
interface['name'])
|
||||||
|
|
||||||
def teardown_server(self, emc_share_driver, server_details,
|
def teardown_server(self, server_details, security_services=None):
|
||||||
security_services=None):
|
|
||||||
"""Teardown share server."""
|
"""Teardown share server."""
|
||||||
if not server_details:
|
if not server_details:
|
||||||
LOG.debug('Server details are empty.')
|
LOG.debug('Server details are empty.')
|
||||||
|
@ -79,8 +79,7 @@ class IsilonTest(test.TestCase):
|
|||||||
self.assertFalse(self._mock_isilon_api.request.called)
|
self.assertFalse(self._mock_isilon_api.request.called)
|
||||||
|
|
||||||
# call method under test
|
# call method under test
|
||||||
self.storage_connection.allow_access(self.mock_emc_driver,
|
self.storage_connection.allow_access(self.mock_context, share, access,
|
||||||
self.mock_context, share, access,
|
|
||||||
share_server)
|
share_server)
|
||||||
|
|
||||||
# verify expected REST API call is executed
|
# verify expected REST API call is executed
|
||||||
@ -105,8 +104,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
# call method under test
|
# call method under test
|
||||||
self.assertFalse(self._mock_isilon_api.request.called)
|
self.assertFalse(self._mock_isilon_api.request.called)
|
||||||
self.storage_connection.deny_access(self.mock_emc_driver,
|
self.storage_connection.deny_access(self.mock_context, share, access,
|
||||||
self.mock_context, share, access,
|
|
||||||
share_server)
|
share_server)
|
||||||
|
|
||||||
# verify that a call is made to remove an existing IP from the list
|
# verify that a call is made to remove an existing IP from the list
|
||||||
@ -134,8 +132,7 @@ class IsilonTest(test.TestCase):
|
|||||||
# call method under test
|
# call method under test
|
||||||
access = {'access_type': 'ip', 'access_to': ip_addr}
|
access = {'access_type': 'ip', 'access_to': ip_addr}
|
||||||
share_server = None
|
share_server = None
|
||||||
self.storage_connection.deny_access(self.mock_emc_driver,
|
self.storage_connection.deny_access(self.mock_context, share, access,
|
||||||
self.mock_context, share, access,
|
|
||||||
share_server)
|
share_server)
|
||||||
|
|
||||||
# verify API call is made to remove IP is removed from whitelist
|
# verify API call is made to remove IP is removed from whitelist
|
||||||
@ -151,7 +148,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
# This operation should return silently
|
# This operation should return silently
|
||||||
self.storage_connection.deny_access(
|
self.storage_connection.deny_access(
|
||||||
self.mock_emc_driver, self.mock_context, share, access, None)
|
self.mock_context, share, access, None)
|
||||||
|
|
||||||
def test_deny_access_invalid_share_protocol(self):
|
def test_deny_access_invalid_share_protocol(self):
|
||||||
share = {'name': self.SHARE_NAME, 'share_proto': 'FOO'}
|
share = {'name': self.SHARE_NAME, 'share_proto': 'FOO'}
|
||||||
@ -159,7 +156,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
# This operation should return silently
|
# This operation should return silently
|
||||||
self.storage_connection.deny_access(
|
self.storage_connection.deny_access(
|
||||||
self.mock_emc_driver, self.mock_context, share, access, None)
|
self.mock_context, share, access, None)
|
||||||
|
|
||||||
def test_deny_access_nfs_export_does_not_exist(self):
|
def test_deny_access_nfs_export_does_not_exist(self):
|
||||||
share = {'name': self.SHARE_NAME, 'share_proto': 'NFS'}
|
share = {'name': self.SHARE_NAME, 'share_proto': 'NFS'}
|
||||||
@ -169,7 +166,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.ShareBackendException,
|
exception.ShareBackendException,
|
||||||
self.storage_connection.deny_access, self.mock_emc_driver,
|
self.storage_connection.deny_access,
|
||||||
self.mock_context, share, access, None
|
self.mock_context, share, access, None
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -180,7 +177,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.ShareBackendException,
|
exception.ShareBackendException,
|
||||||
self.storage_connection.deny_access, self.mock_emc_driver,
|
self.storage_connection.deny_access,
|
||||||
self.mock_context, share, access, None)
|
self.mock_context, share, access, None)
|
||||||
|
|
||||||
def test_allow_access_multiple_ip_nfs(self):
|
def test_allow_access_multiple_ip_nfs(self):
|
||||||
@ -204,8 +201,7 @@ class IsilonTest(test.TestCase):
|
|||||||
share = {'name': self.SHARE_NAME, 'share_proto': 'NFS'}
|
share = {'name': self.SHARE_NAME, 'share_proto': 'NFS'}
|
||||||
access = {'access_type': 'ip', 'access_to': new_allowed_ip}
|
access = {'access_type': 'ip', 'access_to': new_allowed_ip}
|
||||||
share_server = None
|
share_server = None
|
||||||
self.storage_connection.allow_access(self.mock_emc_driver,
|
self.storage_connection.allow_access(self.mock_context, share,
|
||||||
self.mock_context, share,
|
|
||||||
access,
|
access,
|
||||||
share_server)
|
share_server)
|
||||||
|
|
||||||
@ -244,8 +240,7 @@ class IsilonTest(test.TestCase):
|
|||||||
share = {'name': share_name, 'share_proto': 'CIFS'}
|
share = {'name': share_name, 'share_proto': 'CIFS'}
|
||||||
access = {'access_type': 'ip', 'access_to': new_allowed_ip}
|
access = {'access_type': 'ip', 'access_to': new_allowed_ip}
|
||||||
share_server = None
|
share_server = None
|
||||||
self.storage_connection.allow_access(self.mock_emc_driver,
|
self.storage_connection.allow_access(self.mock_context, share,
|
||||||
self.mock_context, share,
|
|
||||||
access,
|
access,
|
||||||
share_server)
|
share_server)
|
||||||
|
|
||||||
@ -276,8 +271,7 @@ class IsilonTest(test.TestCase):
|
|||||||
self.assertFalse(self._mock_isilon_api.request.called)
|
self.assertFalse(self._mock_isilon_api.request.called)
|
||||||
|
|
||||||
# call method under test
|
# call method under test
|
||||||
self.storage_connection.allow_access(self.mock_emc_driver,
|
self.storage_connection.allow_access(self.mock_context, share, access,
|
||||||
self.mock_context, share, access,
|
|
||||||
share_server)
|
share_server)
|
||||||
|
|
||||||
# verify access rule is applied
|
# verify access rule is applied
|
||||||
@ -297,7 +291,7 @@ class IsilonTest(test.TestCase):
|
|||||||
# verify method under test throws the expected exception
|
# verify method under test throws the expected exception
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.ShareBackendException,
|
exception.ShareBackendException,
|
||||||
self.storage_connection.allow_access, self.mock_emc_driver,
|
self.storage_connection.allow_access,
|
||||||
self.mock_context, share, access, None)
|
self.mock_context, share, access, None)
|
||||||
|
|
||||||
def test_allow_access_invalid_share_protocol(self):
|
def test_allow_access_invalid_share_protocol(self):
|
||||||
@ -310,7 +304,7 @@ class IsilonTest(test.TestCase):
|
|||||||
# verify method under test throws the expected exception
|
# verify method under test throws the expected exception
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.InvalidShare, self.storage_connection.allow_access,
|
exception.InvalidShare, self.storage_connection.allow_access,
|
||||||
self.mock_emc_driver, self.mock_context, share, access, None)
|
self.mock_context, share, access, None)
|
||||||
|
|
||||||
def test_create_share_nfs(self):
|
def test_create_share_nfs(self):
|
||||||
share_path = self.SHARE_DIR
|
share_path = self.SHARE_DIR
|
||||||
@ -319,8 +313,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
# create the share
|
# create the share
|
||||||
share = {"name": self.SHARE_NAME, "share_proto": 'NFS'}
|
share = {"name": self.SHARE_NAME, "share_proto": 'NFS'}
|
||||||
location = self.storage_connection.create_share(self.mock_emc_driver,
|
location = self.storage_connection.create_share(self.mock_context,
|
||||||
self.mock_context,
|
|
||||||
share, None)
|
share, None)
|
||||||
|
|
||||||
# verify location and API call made
|
# verify location and API call made
|
||||||
@ -335,8 +328,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
# create the share
|
# create the share
|
||||||
share = {"name": self.SHARE_NAME, "share_proto": 'CIFS'}
|
share = {"name": self.SHARE_NAME, "share_proto": 'CIFS'}
|
||||||
location = self.storage_connection.create_share(self.mock_emc_driver,
|
location = self.storage_connection.create_share(self.mock_context,
|
||||||
self.mock_context,
|
|
||||||
share, None)
|
share, None)
|
||||||
|
|
||||||
expected_location = '\\\\{0}\\{1}'.format(
|
expected_location = '\\\\{0}\\{1}'.format(
|
||||||
@ -352,7 +344,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.InvalidShare, self.storage_connection.create_share,
|
exception.InvalidShare, self.storage_connection.create_share,
|
||||||
self.mock_emc_driver, self.mock_context, share, share_server=None)
|
self.mock_context, share, share_server=None)
|
||||||
|
|
||||||
def test_create_share_nfs_backend_failure(self):
|
def test_create_share_nfs_backend_failure(self):
|
||||||
share = {"name": self.SHARE_NAME, "share_proto": 'NFS'}
|
share = {"name": self.SHARE_NAME, "share_proto": 'NFS'}
|
||||||
@ -360,7 +352,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.ShareBackendException,
|
exception.ShareBackendException,
|
||||||
self.storage_connection.create_share, self.mock_emc_driver,
|
self.storage_connection.create_share,
|
||||||
self.mock_context, share, share_server=None)
|
self.mock_context, share, share_server=None)
|
||||||
|
|
||||||
def test_create_snapshot(self):
|
def test_create_snapshot(self):
|
||||||
@ -369,8 +361,7 @@ class IsilonTest(test.TestCase):
|
|||||||
snapshot_name = "snapshot01"
|
snapshot_name = "snapshot01"
|
||||||
snapshot_path = '/ifs/home/admin'
|
snapshot_path = '/ifs/home/admin'
|
||||||
snapshot = {'name': snapshot_name, 'share_name': snapshot_path}
|
snapshot = {'name': snapshot_name, 'share_name': snapshot_path}
|
||||||
self.storage_connection.create_snapshot(self.mock_emc_driver,
|
self.storage_connection.create_snapshot(self.mock_context, snapshot,
|
||||||
self.mock_context, snapshot,
|
|
||||||
None)
|
None)
|
||||||
|
|
||||||
# verify the create snapshot API call is executed
|
# verify the create snapshot API call is executed
|
||||||
@ -389,10 +380,7 @@ class IsilonTest(test.TestCase):
|
|||||||
snapshot = {'name': snapshot_name, 'share_name': snapshot_path}
|
snapshot = {'name': snapshot_name, 'share_name': snapshot_path}
|
||||||
share = {"name": self.SHARE_NAME, "share_proto": 'NFS'}
|
share = {"name": self.SHARE_NAME, "share_proto": 'NFS'}
|
||||||
location = self.storage_connection.create_share_from_snapshot(
|
location = self.storage_connection.create_share_from_snapshot(
|
||||||
self.mock_emc_driver,
|
self.mock_context, share, snapshot, None)
|
||||||
self.mock_context,
|
|
||||||
share, snapshot,
|
|
||||||
None)
|
|
||||||
|
|
||||||
# verify NFS export created at expected location
|
# verify NFS export created at expected location
|
||||||
self._mock_isilon_api.create_nfs_export.assert_called_with(
|
self._mock_isilon_api.create_nfs_export.assert_called_with(
|
||||||
@ -418,8 +406,7 @@ class IsilonTest(test.TestCase):
|
|||||||
snapshot = {'name': snapshot_name, 'share_name': snapshot_path}
|
snapshot = {'name': snapshot_name, 'share_name': snapshot_path}
|
||||||
share = {"name": new_share_name, "share_proto": 'CIFS'}
|
share = {"name": new_share_name, "share_proto": 'CIFS'}
|
||||||
location = self.storage_connection.create_share_from_snapshot(
|
location = self.storage_connection.create_share_from_snapshot(
|
||||||
self.mock_emc_driver, self.mock_context, share, snapshot,
|
self.mock_context, share, snapshot, None)
|
||||||
None)
|
|
||||||
|
|
||||||
# verify call made to create new CIFS share
|
# verify call made to create new CIFS share
|
||||||
self._mock_isilon_api.create_smb_share.assert_called_once_with(
|
self._mock_isilon_api.create_smb_share.assert_called_once_with(
|
||||||
@ -437,8 +424,7 @@ class IsilonTest(test.TestCase):
|
|||||||
self.assertFalse(self._mock_isilon_api.delete_nfs_share.called)
|
self.assertFalse(self._mock_isilon_api.delete_nfs_share.called)
|
||||||
|
|
||||||
# delete the share
|
# delete the share
|
||||||
self.storage_connection.delete_share(self.mock_emc_driver,
|
self.storage_connection.delete_share(self.mock_context, share, None)
|
||||||
self.mock_context, share, None)
|
|
||||||
|
|
||||||
# verify share delete
|
# verify share delete
|
||||||
self._mock_isilon_api.delete_nfs_share.assert_called_with(
|
self._mock_isilon_api.delete_nfs_share.assert_called_with(
|
||||||
@ -449,8 +435,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
# delete the share
|
# delete the share
|
||||||
share = {"name": self.SHARE_NAME, "share_proto": 'CIFS'}
|
share = {"name": self.SHARE_NAME, "share_proto": 'CIFS'}
|
||||||
self.storage_connection.delete_share(self.mock_emc_driver,
|
self.storage_connection.delete_share(self.mock_context, share, None)
|
||||||
self.mock_context, share, None)
|
|
||||||
|
|
||||||
# verify share deleted
|
# verify share deleted
|
||||||
self._mock_isilon_api.delete_smb_share.assert_called_with(
|
self._mock_isilon_api.delete_smb_share.assert_called_with(
|
||||||
@ -460,7 +445,7 @@ class IsilonTest(test.TestCase):
|
|||||||
share = {"name": self.SHARE_NAME, "share_proto": 'FOO_PROTOCOL'}
|
share = {"name": self.SHARE_NAME, "share_proto": 'FOO_PROTOCOL'}
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.InvalidShare, self.storage_connection.delete_share,
|
exception.InvalidShare, self.storage_connection.delete_share,
|
||||||
self.mock_emc_driver, self.mock_context, share, None
|
self.mock_context, share, None
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_delete_nfs_share_backend_failure(self):
|
def test_delete_nfs_share_backend_failure(self):
|
||||||
@ -470,7 +455,7 @@ class IsilonTest(test.TestCase):
|
|||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.ShareBackendException,
|
exception.ShareBackendException,
|
||||||
self.storage_connection.delete_share,
|
self.storage_connection.delete_share,
|
||||||
self.mock_emc_driver, self.mock_context, share, None
|
self.mock_context, share, None
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_delete_nfs_share_share_does_not_exist(self):
|
def test_delete_nfs_share_share_does_not_exist(self):
|
||||||
@ -479,8 +464,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
# verify the calling delete on a non-existent share returns and does
|
# verify the calling delete on a non-existent share returns and does
|
||||||
# not throw exception
|
# not throw exception
|
||||||
self.storage_connection.delete_share(
|
self.storage_connection.delete_share(self.mock_context, share, None)
|
||||||
self.mock_emc_driver, self.mock_context, share, None)
|
|
||||||
|
|
||||||
def test_delete_cifs_share_backend_failure(self):
|
def test_delete_cifs_share_backend_failure(self):
|
||||||
share = {"name": self.SHARE_NAME, "share_proto": 'CIFS'}
|
share = {"name": self.SHARE_NAME, "share_proto": 'CIFS'}
|
||||||
@ -489,7 +473,7 @@ class IsilonTest(test.TestCase):
|
|||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.ShareBackendException,
|
exception.ShareBackendException,
|
||||||
self.storage_connection.delete_share,
|
self.storage_connection.delete_share,
|
||||||
self.mock_emc_driver, self.mock_context, share, None
|
self.mock_context, share, None
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_delete_cifs_share_share_does_not_exist(self):
|
def test_delete_cifs_share_share_does_not_exist(self):
|
||||||
@ -498,8 +482,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
# verify the calling delete on a non-existent share returns and does
|
# verify the calling delete on a non-existent share returns and does
|
||||||
# not throw exception
|
# not throw exception
|
||||||
self.storage_connection.delete_share(
|
self.storage_connection.delete_share(self.mock_context, share, None)
|
||||||
self.mock_emc_driver, self.mock_context, share, None)
|
|
||||||
|
|
||||||
def test_delete_snapshot(self):
|
def test_delete_snapshot(self):
|
||||||
# create a snapshot
|
# create a snapshot
|
||||||
@ -509,8 +492,7 @@ class IsilonTest(test.TestCase):
|
|||||||
self.assertFalse(self._mock_isilon_api.delete_snapshot.called)
|
self.assertFalse(self._mock_isilon_api.delete_snapshot.called)
|
||||||
|
|
||||||
# delete the created snapshot
|
# delete the created snapshot
|
||||||
self.storage_connection.delete_snapshot(self.mock_emc_driver,
|
self.storage_connection.delete_snapshot(self.mock_context, snapshot,
|
||||||
self.mock_context, snapshot,
|
|
||||||
None)
|
None)
|
||||||
|
|
||||||
# verify the API call was made to delete the snapshot
|
# verify the API call was made to delete the snapshot
|
||||||
@ -519,8 +501,7 @@ class IsilonTest(test.TestCase):
|
|||||||
|
|
||||||
def test_ensure_share(self):
|
def test_ensure_share(self):
|
||||||
share = {"name": self.SHARE_NAME, "share_proto": 'CIFS'}
|
share = {"name": self.SHARE_NAME, "share_proto": 'CIFS'}
|
||||||
self.storage_connection.ensure_share(self.mock_emc_driver,
|
self.storage_connection.ensure_share(self.mock_context, share, None)
|
||||||
self.mock_context, share, None)
|
|
||||||
|
|
||||||
@mock.patch(
|
@mock.patch(
|
||||||
'manila.share.drivers.emc.plugins.isilon.isilon.isilon_api.IsilonApi',
|
'manila.share.drivers.emc.plugins.isilon.isilon.isilon_api.IsilonApi',
|
||||||
|
@ -34,39 +34,35 @@ class FakeConnection(base.StorageConnection):
|
|||||||
def driver_handles_share_servers(self):
|
def driver_handles_share_servers(self):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def create_share(self, emc_share_driver, context, share, share_server):
|
def create_share(self, context, share, share_server):
|
||||||
"""Is called to create share."""
|
"""Is called to create share."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def create_snapshot(self, emc_share_driver, context,
|
def create_snapshot(self, context, snapshot, share_server):
|
||||||
snapshot, share_server):
|
|
||||||
"""Is called to create snapshot."""
|
"""Is called to create snapshot."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def delete_share(self, emc_share_driver, context, share, share_server):
|
def delete_share(self, context, share, share_server):
|
||||||
"""Is called to remove share."""
|
"""Is called to remove share."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def delete_snapshot(self, emc_share_driver, context,
|
def delete_snapshot(self, context, snapshot, share_server):
|
||||||
snapshot, share_server):
|
|
||||||
"""Is called to remove snapshot."""
|
"""Is called to remove snapshot."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def ensure_share(self, emc_share_driver, context, share, share_server):
|
def ensure_share(self, context, share, share_server):
|
||||||
"""Invoked to sure that share is exported."""
|
"""Invoked to sure that share is exported."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def allow_access(self, emc_share_driver, context, share,
|
def allow_access(self, context, share, access, share_server):
|
||||||
access, share_server):
|
|
||||||
"""Allow access to the share."""
|
"""Allow access to the share."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def deny_access(self, emc_share_driver, context, share,
|
def deny_access(self, context, share, access, share_server):
|
||||||
access, share_server):
|
|
||||||
"""Deny access to the share."""
|
"""Deny access to the share."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def raise_connect_error(self, emc_share_driver):
|
def raise_connect_error(self):
|
||||||
"""Check for setup error."""
|
"""Check for setup error."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user