Merge "Unity: Add revert_to_snapshot support"
This commit is contained in:
commit
a367042187
@ -192,6 +192,9 @@ class MockClient(object):
|
||||
def system(self):
|
||||
return self._system
|
||||
|
||||
def restore_snapshot(self, snap_name):
|
||||
return test_client.MockResource(name="back_snap")
|
||||
|
||||
|
||||
class MockLookupService(object):
|
||||
@staticmethod
|
||||
@ -686,6 +689,11 @@ class CommonAdapterTest(test.TestCase):
|
||||
config.unity_io_ports = ['', ' ']
|
||||
self.adapter.normalize_config(config)
|
||||
|
||||
def test_restore_snapshot(self):
|
||||
volume = MockOSResource(id='1', name='vol_1')
|
||||
snapshot = MockOSResource(id='2', name='snap_1')
|
||||
self.adapter.restore_snapshot(volume, snapshot)
|
||||
|
||||
|
||||
class FCAdapterTest(test.TestCase):
|
||||
def setUp(self):
|
||||
|
@ -177,6 +177,12 @@ class MockResource(object):
|
||||
raise ex.UnityLunNameInUseError
|
||||
return MockResource(_id=name, name=name)
|
||||
|
||||
def get_snap(self, name):
|
||||
return MockResource(_id=name, name=name)
|
||||
|
||||
def restore(self, delete_backup):
|
||||
return MockResource(_id='snap_1', name="internal_snap")
|
||||
|
||||
|
||||
class MockResourceList(object):
|
||||
def __init__(self, names=None, ids=None):
|
||||
@ -521,3 +527,7 @@ class ClientTest(unittest.TestCase):
|
||||
|
||||
def test_get_pool_name(self):
|
||||
self.assertEqual('Pool0', self.client.get_pool_name('lun_0'))
|
||||
|
||||
def test_restore_snapshot(self):
|
||||
back_snap = self.client.restore_snapshot('snap1')
|
||||
self.assertEqual("internal_snap", back_snap.name)
|
||||
|
@ -96,6 +96,9 @@ class MockAdapter(object):
|
||||
def terminate_connection_snapshot(snapshot, connector):
|
||||
return {'snapshot': snapshot, 'connector': connector}
|
||||
|
||||
@staticmethod
|
||||
def restore_snapshot(volume, snapshot):
|
||||
return True
|
||||
|
||||
########################
|
||||
#
|
||||
@ -103,6 +106,7 @@ class MockAdapter(object):
|
||||
#
|
||||
########################
|
||||
|
||||
|
||||
class UnityDriverTest(unittest.TestCase):
|
||||
@staticmethod
|
||||
def get_volume():
|
||||
@ -256,3 +260,9 @@ class UnityDriverTest(unittest.TestCase):
|
||||
conn_info = self.driver.terminate_connection_snapshot(
|
||||
snapshot, self.get_connector())
|
||||
self.assertEqual(snapshot, conn_info['snapshot'])
|
||||
|
||||
def test_restore_snapshot(self):
|
||||
snapshot = self.get_snapshot()
|
||||
volume = self.get_volume()
|
||||
r = self.driver.revert_to_snapshot(None, volume, snapshot)
|
||||
self.assertTrue(r)
|
||||
|
@ -24,6 +24,13 @@ from oslo_log import log as logging
|
||||
from oslo_utils import excutils
|
||||
from oslo_utils import importutils
|
||||
|
||||
from cinder import exception
|
||||
from cinder.i18n import _
|
||||
from cinder import utils as cinder_utils
|
||||
from cinder.volume.drivers.dell_emc.unity import client
|
||||
from cinder.volume.drivers.dell_emc.unity import utils
|
||||
from cinder.volume import utils as vol_utils
|
||||
|
||||
storops = importutils.try_import('storops')
|
||||
if storops:
|
||||
from storops import exception as storops_ex
|
||||
@ -31,12 +38,6 @@ else:
|
||||
# Set storops_ex to be None for unit test
|
||||
storops_ex = None
|
||||
|
||||
from cinder import exception
|
||||
from cinder.i18n import _
|
||||
from cinder import utils as cinder_utils
|
||||
from cinder.volume.drivers.dell_emc.unity import client
|
||||
from cinder.volume.drivers.dell_emc.unity import utils
|
||||
from cinder.volume import utils as vol_utils
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
@ -109,10 +110,10 @@ class VolumeParams(object):
|
||||
self._io_limit_policy = value
|
||||
|
||||
def __eq__(self, other):
|
||||
return (self.volume_id == other.volume_id
|
||||
and self.name == other.name
|
||||
and self.size == other.size
|
||||
and self.io_limit_policy == other.io_limit_policy)
|
||||
return (self.volume_id == other.volume_id and
|
||||
self.name == other.name and
|
||||
self.size == other.size and
|
||||
self.io_limit_policy == other.io_limit_policy)
|
||||
|
||||
|
||||
class CommonAdapter(object):
|
||||
@ -661,6 +662,10 @@ class CommonAdapter(object):
|
||||
snap = self.client.get_snap(snapshot.name)
|
||||
return self._terminate_connection(snap, connector)
|
||||
|
||||
@cinder_utils.trace
|
||||
def restore_snapshot(self, volume, snapshot):
|
||||
return self.client.restore_snapshot(snapshot.name)
|
||||
|
||||
|
||||
class ISCSIAdapter(CommonAdapter):
|
||||
protocol = PROTOCOL_ISCSI
|
||||
|
@ -315,3 +315,7 @@ class UnityClient(object):
|
||||
def get_pool_name(self, lun_name):
|
||||
lun = self.system.get_lun(name=lun_name)
|
||||
return lun.pool_name
|
||||
|
||||
def restore_snapshot(self, snap_name):
|
||||
snap = self.get_snap(snap_name)
|
||||
return snap.restore(delete_backup=True)
|
||||
|
@ -52,9 +52,10 @@ class UnityDriver(driver.ManageableVD,
|
||||
1.0.0 - Initial version
|
||||
2.0.0 - Add thin clone support
|
||||
3.0.0 - Add IPv6 support
|
||||
3.1.0 - Support revert to snapshot API
|
||||
"""
|
||||
|
||||
VERSION = '03.00.00'
|
||||
VERSION = '03.01.00'
|
||||
VENDOR = 'Dell EMC'
|
||||
# ThirdPartySystems wiki page
|
||||
CI_WIKI_NAME = "EMC_UNITY_CI"
|
||||
@ -226,3 +227,7 @@ class UnityDriver(driver.ManageableVD,
|
||||
|
||||
def terminate_connection_snapshot(self, snapshot, connector, **kwargs):
|
||||
return self.adapter.terminate_connection_snapshot(snapshot, connector)
|
||||
|
||||
def revert_to_snapshot(self, context, volume, snapshot):
|
||||
"""Reverts a volume to a snapshot."""
|
||||
return self.adapter.restore_snapshot(volume, snapshot)
|
||||
|
@ -13,11 +13,9 @@ Prerequisites
|
||||
+-------------------+----------------+
|
||||
| Software | Version |
|
||||
+===================+================+
|
||||
| Unity OE | 4.1.X |
|
||||
| Unity OE | 4.1.X or newer |
|
||||
+-------------------+----------------+
|
||||
| OpenStack | Ocata |
|
||||
+-------------------+----------------+
|
||||
| storops | 0.4.2 or newer |
|
||||
| storops | 0.5.7 or newer |
|
||||
+-------------------+----------------+
|
||||
|
||||
|
||||
@ -34,6 +32,7 @@ Supported operations
|
||||
- Migrate a volume.
|
||||
- Get volume statistics.
|
||||
- Efficient non-disruptive volume backup.
|
||||
- Revert a volume to a snapshot.
|
||||
|
||||
Driver configuration
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
Loading…
x
Reference in New Issue
Block a user