Merge "[NetApp-ZAPI] Enabling snapshot creation for flexgroup pool"

This commit is contained in:
Zuul
2025-09-15 16:19:11 +00:00
committed by Gerrit Code Review
4 changed files with 36 additions and 9 deletions

View File

@@ -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:

View File

@@ -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',

View File

@@ -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'],

View File

@@ -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.