2929import org .apache .cloudstack .engine .subsystem .api .storage .DataObject ;
3030import org .apache .cloudstack .engine .subsystem .api .storage .EndPoint ;
3131import org .apache .cloudstack .engine .subsystem .api .storage .EndPointSelector ;
32+ import org .apache .cloudstack .engine .subsystem .api .storage .PrimaryDataStoreInfo ;
3233import org .apache .cloudstack .storage .command .CreateObjectCommand ;
34+ import org .apache .cloudstack .storage .datastore .db .StoragePoolDetailsDao ;
3335import org .apache .cloudstack .storage .feign .FeignClientFactory ;
3436import org .apache .cloudstack .storage .feign .client .JobFeignClient ;
3537import org .apache .cloudstack .storage .feign .client .NASFeignClient ;
@@ -68,6 +70,7 @@ public class UnifiedNASStrategy extends NASStrategy {
6870 private final JobFeignClient jobFeignClient ;
6971 @ Inject private VolumeDao volumeDao ;
7072 @ Inject private EndPointSelector epSelector ;
73+ @ Inject private StoragePoolDetailsDao storagePoolDetailsDao ;
7174
7275 public UnifiedNASStrategy (OntapStorage ontapStorage ) {
7376 super (ontapStorage );
@@ -196,6 +199,9 @@ public AccessGroup createAccessGroup(AccessGroup accessGroup) {
196199 s_logger .info ("ExportPolicy created: {}, now attaching this policy to storage pool volume" , createdPolicy .getName ());
197200 // attach export policy to volume of storage pool
198201 assignExportPolicyToVolume (volumeUUID ,createdPolicy .getName ());
202+ // save the export policy details in storage pool details
203+ storagePoolDetailsDao .addDetail (accessGroup .getPrimaryDataStoreInfo ().getId (), Constants .EXPORT_POLICY_ID , String .valueOf (createdPolicy .getId ()), true );
204+ storagePoolDetailsDao .addDetail (accessGroup .getPrimaryDataStoreInfo ().getId (), Constants .EXPORT_POLICY_NAME , createdPolicy .getName (), true );
199205 s_logger .info ("Successfully assigned exportPolicy {} to volume {}" , policyRequest .getName (), volumeName );
200206 accessGroup .setPolicy (policyRequest );
201207 return accessGroup ;
@@ -207,7 +213,36 @@ public AccessGroup createAccessGroup(AccessGroup accessGroup) {
207213
208214 @ Override
209215 public void deleteAccessGroup (AccessGroup accessGroup ) {
210- //TODO
216+ s_logger .info ("deleteAccessGroup: Deleting export policy" );
217+
218+ if (accessGroup == null ) {
219+ throw new CloudRuntimeException ("deleteAccessGroup: Invalid accessGroup object - accessGroup is null" );
220+ }
221+
222+ // Get PrimaryDataStoreInfo from accessGroup
223+ PrimaryDataStoreInfo primaryDataStoreInfo = accessGroup .getPrimaryDataStoreInfo ();
224+ if (primaryDataStoreInfo == null ) {
225+ throw new CloudRuntimeException ("deleteAccessGroup: PrimaryDataStoreInfo is null in accessGroup" );
226+ }
227+ s_logger .info ("deleteAccessGroup: Deleting export policy for the storage pool {}" , primaryDataStoreInfo .getName ());
228+ try {
229+ String authHeader = Utility .generateAuthHeader (storage .getUsername (), storage .getPassword ());
230+ String svmName = storage .getSvmName ();
231+ // Determine export policy attached to the storage pool
232+ String exportPolicyName = primaryDataStoreInfo .getDetails ().get (Constants .EXPORT_POLICY_NAME );
233+ String exportPolicyId = primaryDataStoreInfo .getDetails ().get (Constants .EXPORT_POLICY_ID );
234+
235+ try {
236+ nasFeignClient .deleteExportPolicyById (authHeader ,exportPolicyId );
237+ s_logger .info ("deleteAccessGroup: Successfully deleted export policy '{}'" , exportPolicyName );
238+ } catch (Exception e ) {
239+ s_logger .error ("deleteAccessGroup: Failed to delete export policy. Exception: {}" , e .getMessage (), e );
240+ throw new CloudRuntimeException ("Failed to delete export policy: " + e .getMessage (), e );
241+ }
242+ } catch (Exception e ) {
243+ s_logger .error ("deleteAccessGroup: Failed to delete export policy. Exception: {}" , e .getMessage (), e );
244+ throw new CloudRuntimeException ("Failed to delete export policy: " + e .getMessage (), e );
245+ }
211246 }
212247
213248 @ Override
@@ -404,13 +439,10 @@ private boolean updateFile(String volumeUuid, String filePath, FileInfo fileInfo
404439 }
405440 }
406441
407- private String generateExportPolicyName (String svmName , String volumeName ){
408- return Constants .EXPORT + Constants .HYPHEN + svmName + Constants .HYPHEN + volumeName ;
409- }
410442
411443 private ExportPolicy createExportPolicyRequest (AccessGroup accessGroup ,String svmName , String volumeName ){
412444
413- String exportPolicyName = generateExportPolicyName (svmName ,volumeName );
445+ String exportPolicyName = Utility . generateExportPolicyName (svmName ,volumeName );
414446 ExportPolicy exportPolicy = new ExportPolicy ();
415447
416448 List <ExportRule > rules = new ArrayList <>();
0 commit comments