Merge "[NetApp-ZAPI] Enabling snapshot creation for flexgroup pool"
This commit is contained in:
@@ -367,12 +367,17 @@ class NetAppNfsDriverTestCase(test.TestCase):
|
||||
fake.NFS_VOLUME,
|
||||
fake.EXTRA_SPECS)
|
||||
|
||||
@ddt.data(True, False)
|
||||
def test_create_snapshot(self, is_flexgroup):
|
||||
@ddt.data((True, False),
|
||||
(False, True),
|
||||
(True, True),
|
||||
(False, False))
|
||||
@ddt.unpack
|
||||
def test_create_snapshot(self, is_flexgroup,
|
||||
is_flexgroup_clone_file_supported):
|
||||
self.mock_object(self.driver, '_is_flexgroup',
|
||||
return_value=is_flexgroup)
|
||||
self.mock_object(self.driver, '_is_flexgroup_clone_file_supported',
|
||||
return_value=not is_flexgroup)
|
||||
return_value=is_flexgroup_clone_file_supported)
|
||||
mock_clone_backing_file_for_volume = self.mock_object(
|
||||
self.driver, '_clone_backing_file_for_volume')
|
||||
mock_snap_flexgroup = self.mock_object(
|
||||
@@ -380,7 +385,9 @@ class NetAppNfsDriverTestCase(test.TestCase):
|
||||
|
||||
self.driver.create_snapshot(fake.SNAPSHOT)
|
||||
|
||||
if is_flexgroup:
|
||||
if (is_flexgroup and (self.driver.configuration.safe_get
|
||||
('netapp_use_legacy_client') or
|
||||
not is_flexgroup_clone_file_supported)):
|
||||
mock_snap_flexgroup.assert_called_once_with(fake.SNAPSHOT)
|
||||
mock_clone_backing_file_for_volume.assert_not_called()
|
||||
else:
|
||||
|
||||
@@ -146,7 +146,7 @@ class RestClient(object, metaclass=volume_utils.TraceWrapperMetaclass):
|
||||
ontap_9_5 = ontap_version >= (9, 5)
|
||||
ontap_9_6 = ontap_version >= (9, 6)
|
||||
ontap_9_8 = ontap_version >= (9, 8)
|
||||
ontap_9_9 = ontap_version >= (9, 9)
|
||||
ontap_9_14 = ontap_version >= (9, 14)
|
||||
|
||||
nodes_info = self._get_cluster_nodes_info()
|
||||
for node in nodes_info:
|
||||
@@ -181,8 +181,10 @@ class RestClient(object, metaclass=volume_utils.TraceWrapperMetaclass):
|
||||
self.features.add_feature('CLUSTER_PEER_POLICY', supported=ontap_9_0)
|
||||
self.features.add_feature('FLEXVOL_ENCRYPTION', supported=ontap_9_0)
|
||||
self.features.add_feature('FLEXGROUP', supported=ontap_9_8)
|
||||
# Flex group file clone is supported for ONTAP 9.14 and above versions
|
||||
# so updating this from 9.9 to 9.14.
|
||||
self.features.add_feature('FLEXGROUP_CLONE_FILE',
|
||||
supported=ontap_9_9)
|
||||
supported=ontap_9_14)
|
||||
|
||||
self.features.add_feature('ADAPTIVE_QOS', supported=ontap_9_4)
|
||||
self.features.add_feature('ADAPTIVE_QOS_BLOCK_SIZE',
|
||||
|
||||
@@ -319,11 +319,15 @@ class NetAppNfsDriver(driver.ManageableVD,
|
||||
def create_snapshot(self, snapshot):
|
||||
"""Creates a snapshot.
|
||||
|
||||
For a FlexGroup pool, the operation relies on the NFS generic driver
|
||||
because the ONTAP clone file is not supported by FlexGroup yet.
|
||||
For a FlexGroup pool, the ZAPI operation uses the NFS generic
|
||||
driver. When it comes to REST, if the ONTAP version is below
|
||||
9.14, the operation depends on the NFS generic driver. However,
|
||||
for ONTAP versions 9.14 and above, it relies on the ONTAP file
|
||||
clone API.
|
||||
"""
|
||||
if (self._is_flexgroup(vol_id=snapshot['volume_id']) and
|
||||
not self._is_flexgroup_clone_file_supported()):
|
||||
(self.configuration.safe_get('netapp_use_legacy_client') or
|
||||
not self._is_flexgroup_clone_file_supported())):
|
||||
self._create_snapshot_for_flexgroup(snapshot)
|
||||
else:
|
||||
self._clone_backing_file_for_volume(snapshot['volume_name'],
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
NetApp driver `bug #2119644
|
||||
<https://bugs.launchpad.net/cinder/+bug/2119644>`_: Fixed
|
||||
unable to create snapshots for Cinder volume that belongs
|
||||
to FlexGroup pool.
|
||||
features:
|
||||
- |
|
||||
The NetApp driver now supports creating snapshots for flexgroup pools
|
||||
through ZAPI client and it utilizes the NFS generic driver. When it
|
||||
comes to REST, if the ONTAP version is below 9.14, the operation
|
||||
depends on the NFS generic driver. However, for ONTAP versions 9.14
|
||||
and above, it relies on the ONTAP file clone API.
|
||||
Reference in New Issue
Block a user