From 2a27851a604353ced9c42734e0aaa8c37bf348cd Mon Sep 17 00:00:00 2001 From: "Srivastava, Piyush" Date: Fri, 9 Jan 2026 12:17:14 +0530 Subject: [PATCH] Delete export policy NFS --- .../storage/service/UnifiedNASStrategy.java | 44 ++++++++++++++++--- .../cloudstack/storage/utils/Constants.java | 2 + .../cloudstack/storage/utils/Utility.java | 4 ++ 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/service/UnifiedNASStrategy.java b/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/service/UnifiedNASStrategy.java index 4d6948b1c01f..4d9239025a2f 100644 --- a/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/service/UnifiedNASStrategy.java +++ b/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/service/UnifiedNASStrategy.java @@ -29,7 +29,9 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector; +import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo; import org.apache.cloudstack.storage.command.CreateObjectCommand; +import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao; import org.apache.cloudstack.storage.feign.FeignClientFactory; import org.apache.cloudstack.storage.feign.client.JobFeignClient; import org.apache.cloudstack.storage.feign.client.NASFeignClient; @@ -66,6 +68,7 @@ public class UnifiedNASStrategy extends NASStrategy { private final JobFeignClient jobFeignClient; @Inject private VolumeDao volumeDao; @Inject private EndPointSelector epSelector; + @Inject private StoragePoolDetailsDao storagePoolDetailsDao; public UnifiedNASStrategy(OntapStorage ontapStorage) { super(ontapStorage); @@ -132,6 +135,9 @@ public AccessGroup createAccessGroup(AccessGroup accessGroup) { s_logger.info("ExportPolicy created: {}, now attaching this policy to storage pool volume", createdPolicy.getName()); // attach export policy to volume of storage pool assignExportPolicyToVolume(volumeUUID,createdPolicy.getName()); + // save the export policy details in storage pool details + storagePoolDetailsDao.addDetail(accessGroup.getPrimaryDataStoreInfo().getId(), Constants.EXPORT_POLICY_ID, String.valueOf(createdPolicy.getId()), true); + storagePoolDetailsDao.addDetail(accessGroup.getPrimaryDataStoreInfo().getId(), Constants.EXPORT_POLICY_NAME, createdPolicy.getName(), true); s_logger.info("Successfully assigned exportPolicy {} to volume {}", policyRequest.getName(), volumeName); accessGroup.setPolicy(policyRequest); return accessGroup; @@ -143,7 +149,38 @@ public AccessGroup createAccessGroup(AccessGroup accessGroup) { @Override public void deleteAccessGroup(AccessGroup accessGroup) { - //TODO + s_logger.info("deleteAccessGroup: Deleting export policy"); + + if (accessGroup == null) { + throw new CloudRuntimeException("deleteAccessGroup: Invalid accessGroup object - accessGroup is null"); + } + + // Get PrimaryDataStoreInfo from accessGroup + PrimaryDataStoreInfo primaryDataStoreInfo = accessGroup.getPrimaryDataStoreInfo(); + if (primaryDataStoreInfo == null) { + throw new CloudRuntimeException("deleteAccessGroup: PrimaryDataStoreInfo is null in accessGroup"); + } + + try { + String authHeader = Utility.generateAuthHeader(storage.getUsername(), storage.getPassword()); + String svmName = storage.getSvmName(); + // Determine export policy attached to the storage pool + String exportPolicyName = primaryDataStoreInfo.getDetails().get(Constants.EXPORT_POLICY_NAME); + String exportPolicyId = primaryDataStoreInfo.getDetails().get(Constants.EXPORT_POLICY_ID); + + try { + nasFeignClient.deleteExportPolicyById(authHeader,exportPolicyId); + s_logger.info("Export policy deleted successfully: {}", exportPolicyName); + + s_logger.info("deleteAccessGroup: Successfully deleted export policy '{}'", exportPolicyName); + } catch (Exception e) { + s_logger.error("deleteAccessGroup: Failed to delete iGroup. Exception: {}", e.getMessage(), e); + throw new CloudRuntimeException("Failed to delete iGroup: " + e.getMessage(), e); + } + } catch (Exception e) { + s_logger.error("deleteAccessGroup: Failed to delete iGroup. Exception: {}", e.getMessage(), e); + throw new CloudRuntimeException("Failed to delete iGroup: " + e.getMessage(), e); + } } @Override @@ -340,13 +377,10 @@ private boolean updateFile(String volumeUuid, String filePath, FileInfo fileInfo } } - private String generateExportPolicyName(String svmName, String volumeName){ - return Constants.EXPORT + Constants.HYPHEN + svmName + Constants.HYPHEN + volumeName; - } private ExportPolicy createExportPolicyRequest(AccessGroup accessGroup,String svmName , String volumeName){ - String exportPolicyName = generateExportPolicyName(svmName,volumeName); + String exportPolicyName = Utility.generateExportPolicyName(svmName,volumeName); ExportPolicy exportPolicy = new ExportPolicy(); List rules = new ArrayList<>(); diff --git a/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Constants.java b/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Constants.java index a45fb4a5b21d..23425aa6b797 100644 --- a/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Constants.java +++ b/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Constants.java @@ -33,6 +33,8 @@ public class Constants { public static final String MANAGEMENT_LIF = "managementLIF"; public static final String VOLUME_NAME = "volumeName"; public static final String VOLUME_UUID = "volumeUUID"; + public static final String EXPORT_POLICY_ID = "exportPolicyId"; + public static final String EXPORT_POLICY_NAME = "exportPolicyName"; public static final String IS_DISAGGREGATED = "isDisaggregated"; public static final String RUNNING = "running"; public static final String EXPORT = "export"; diff --git a/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Utility.java b/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Utility.java index a92d99b394fa..c20c9d6dd151 100644 --- a/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Utility.java +++ b/plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Utility.java @@ -139,4 +139,8 @@ public static String getIgroupName(String svmName, ScopeType scopeType, Long sco //Igroup name format: cs_svmName_scopeId return Constants.CS + Constants.UNDERSCORE + svmName + Constants.UNDERSCORE + scopeType.toString().toLowerCase() + Constants.UNDERSCORE + scopeId; } + + public static String generateExportPolicyName(String svmName, String volumeName){ + return Constants.EXPORT + Constants.HYPHEN + svmName + Constants.HYPHEN + volumeName; + } }