Skip to content

CloudStack Volume support with ONTAP storage#13053

Open
rajiv-jain-netapp wants to merge 105 commits into
apache:mainfrom
NetApp:sync/apache-main-apr-2026
Open

CloudStack Volume support with ONTAP storage#13053
rajiv-jain-netapp wants to merge 105 commits into
apache:mainfrom
NetApp:sync/apache-main-apr-2026

Conversation

@rajiv-jain-netapp

@rajiv-jain-netapp rajiv-jain-netapp commented Apr 22, 2026

Copy link
Copy Markdown

Description

Co-authored-by: Sandeep Locharla sandeep.locharla@netapp.com
Co-authored-by: Piyush Srivastava piyush5@netapp.com
Co-authored-by: Surya Gupta suryag@netapp.com

This PR...

  1. Supports cloudstack-volume usecases support for NFS3 and iSCSI protocols.
  2. Support for cloudStack-volume create/delete/attach/detach/snapshot-create.
  3. Instance create/delete/snapshot-create support
  4. Snapshot-create would not support
    1. memory snapshot
    2. user input for quicing option during snapshot creation

Types of changes

  • Breaking change (fix or feature that would cause existing functionality to change)
  • New feature (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)
  • Enhancement (improves an existing feature and functionality)
  • Cleanup (Code refactoring and cleanup, that may add test cases)
  • Build/CI
  • Test (unit or integration test code)

Feature/Enhancement Scale or Bug Severity

Feature/Enhancement Scale

  • Major
  • Minor

Bug Severity

  • BLOCKER
  • Critical
  • Major
  • Minor
  • Trivial

Screenshots (if appropriate):

How Has This Been Tested?

Testing Done:

  1. VM create
Screenshot 2026-04-21 at 8 23 41 PM
  1. Validate the respective CloudStack volume
Screenshot 2026-04-21 at 8 24 08 PM
  1. Storage view for the cloudStack volumes
Screenshot 2026-04-21 at 8 32 03 PM
  1. VM snapshot support
Screenshot 2026-04-21 at 8 34 48 PM
  1. Storage view, post snapshot create
Screenshot 2026-04-21 at 8 35 16 PM
  1. CloudStack UI list view for snapshot
Screenshot 2026-04-21 at 8 35 47 PM
  1. CloudStack volume snapshot support
Screenshot 2026-04-21 at 8 36 34 PM
  1. Storage view, post snapshot create
Screenshot 2026-04-21 at 8 37 09 PM
  1. CloudStack UI list view for snapshot
Screenshot 2026-04-21 at 8 43 32 PM

How did you try to break this feature and the system with this change?

Jain, Rajiv and others added 30 commits October 3, 2025 14:02
… added EOF fixes + correcting license header
Initial primary storage pool plugin skeleton
Feignconfiguration and volume feignClient along with desired POJOs with cstack 28
* CSTACKEX-29 Cluster, SVM and Aggr Feign Client

* CSTACKEX-29 Change the endpoint method name in feign client

* CSTACKEX-29 Make the alignment proper

* CSTACKEX-29 Added License Info

* CSTACKEX-29 Resolve Review Comments

* CSTACKEX-29 Remove Component Annotation from datastoredriverclass

* CSTACKEX-29 Resolve Style check issues

* CSTACKEX-29 Resolve ALL Style issues

* CSTACKEX-29 Resolve Precommits Issues

* CSTACKEX-29 Added Method comments and change the ontap response class name

---------

Co-authored-by: Gupta, Surya <Surya.Gupta@netapp.com>
* CSTACKEX-31 NAS and Job Feign Client and POJOs

* CSTACKEX-31 Fixed Checks Issues

* CSTACKEX-31 Resolve Review Comments

* CSTACKEX-31 Resolve Review Comments

* CSTACKEX-31 Resolve Review Comments

* CSTACKEX-31 Added Aggr and size to volume model

* CSTACKEX-31 Change the export policy endpoint path

* CSTACKEX-31 Fixed check styles

---------

Co-authored-by: Gupta, Surya <Surya.Gupta@netapp.com>
* CSTACKEX-30 SAN Feign Client

* CSTACKEX-30 Fixed check style issues

* CSTACKEX-30 Fixed review comments

---------

Co-authored-by: Gupta, Surya <Surya.Gupta@netapp.com>
* CSTACKEX-7: ONTAP Primary storage pool

---------

Co-authored-by: Locharla, Sandeep <Sandeep.Locharla@netapp.com>
CSTACKEX-34: Upgrade to framework classes design
* CSTACKEX-35 Create Async

* CSTACKEX-35 Added Null and empty check

* CSTACKEX-35 Resolved review comments

* CSTACKEX-35 Removed Type Casting for logger

---------

Co-authored-by: Gupta, Surya <Surya.Gupta@netapp.com>
* CSTACKEX-1: Feign changes and fixes for getting storage pool creation to work

* CSTACKEX-01: Create Primary Storage pool changes with working code

* CSTACKEX-01: Addressed all review comments and updated some code

* CSTACKEX-01: Made some changes to fix some errors seen during testing

* CSTACKEX-01: Addressed additional comments

---------

Co-authored-by: Locharla, Sandeep <Sandeep.Locharla@netapp.com>
@winterhazel winterhazel mentioned this pull request May 11, 2026
14 tasks
@winterhazel

Copy link
Copy Markdown
Member

@piyush5netapp @rajiv-jain-netapp I went through the reviews and resolved the ones that already seem addressed. Could you go through the comments that are still open and address them, or close with a comment if you judge it unnecessary (the indentation ones)?

 - extracted the ONTAP plugin name to interface nane to use it from one place.
 - Corrected indentation gaps.
@rajiv-jain-netapp

Copy link
Copy Markdown
Author

Thank you for your comments, @winterhazel.
I have updated the PR—please take a look at your convenience. I’ve addressed several of the pending items with additional commits today and have also provided responses to clarify some of the points raised.

@rajiv-jain-netapp

Copy link
Copy Markdown
Author

@winterhazel @DaanHoogland @weizhouapache

Gentle reminder to review the PR. We are looking to incorporate feedback and progress further—your inputs would be highly valuable. Appreciate your support!

@sureshanaparti

Copy link
Copy Markdown
Contributor

@blueorangutan package

@blueorangutan

Copy link
Copy Markdown

@sureshanaparti a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✖️ el8 ✖️ el9 ✖️ debian ✖️ suse15. SL-JID 17898

piyush5netapp and others added 3 commits May 19, 2026 18:25
 - extracted the ONTAP plugin name to interface nane to use it from one place.
 - Corrected indentation gaps.
@DaanHoogland

Copy link
Copy Markdown
Contributor

@blueorangutan package

@blueorangutan

Copy link
Copy Markdown

@DaanHoogland a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 17938

@weizhouapache

Copy link
Copy Markdown
Member

@blueorangutan test

@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

@winterhazel

Copy link
Copy Markdown
Member

Thank you for your comments, @winterhazel. I have updated the PR—please take a look at your convenience. I’ve addressed several of the pending items with additional commits today and have also provided responses to clarify some of the points raised.

@rajiv-jain-netapp there are still some comments that were not addressed. Could you have a look?

Also, I did not receive any responses on this day you commented, maybe you added them to a review and forgot to submit it?

Comment on lines +32 to +34
@JsonProperty("name")

private String name;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
@JsonProperty("name")
private String name;
@JsonProperty("name")
private String name;

Addressing some formatting issues from the latest commits

Comment on lines +48 to +49
public void setName(String name) {
this.name = name; }

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
public void setName(String name) {
this.name = name; }
public void setName(String name) {
this.name = name;
}

Formatting

}
if (StringUtils.isBlank(providerName)) {

if (StringUtils.isBlank(providerName )) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (StringUtils.isBlank(providerName )) {
if (StringUtils.isBlank(providerName)) {

@blueorangutan

Copy link
Copy Markdown

[SF] Trillian test result (tid-16133)
Environment: kvm-ol8 (x2), zone: Advanced Networking with Mgmt server ol8
Total time taken: 82743 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr13053-t16133-kvm-ol8.zip
Smoke tests completed. 145 look OK, 6 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test Result Time (s) Test File
test_vm_backup_create_vm_from_backup Failure 607.91 test_backup_recovery_nas.py
test_vm_backup_lifecycle Error 0.09 test_backup_recovery_nas.py
test_router_dhcphosts Failure 25.69 test_router_dhcphosts.py
ContextSuite context=TestSharedFSLifecycle>:setup Error 0.00 test_sharedfs_lifecycle.py
test_10_attachAndDetach_iso Failure 634.31 test_vm_life_cycle.py
test_01_create_vm_snapshots Failure 606.75 test_vm_snapshots.py
test_02_revert_vm_snapshots Failure 600.63 test_vm_snapshots.py
test_03_delete_vm_snapshots Failure 0.03 test_vm_snapshots.py
test_01_create_volume Failure 612.48 test_volumes.py
test_01_root_volume_encryption Failure 709.50 test_volumes.py
test_02_data_volume_encryption Failure 658.42 test_volumes.py
test_03_root_and_data_volume_encryption Failure 665.48 test_volumes.py
test_02_attach_volume Failure 1272.66 test_volumes.py
test_02_attach_volume Failure 1272.68 test_volumes.py
test_03_download_attached_volume Failure 664.79 test_volumes.py
test_04_delete_attached_volume Failure 668.99 test_volumes.py
test_05_detach_volume Failure 753.92 test_volumes.py
test_06_download_detached_volume Failure 877.76 test_volumes.py
test_07_resize_fail Failure 660.57 test_volumes.py
test_08_resize_volume Failure 673.37 test_volumes.py
test_09_delete_detached_volume Failure 670.10 test_volumes.py
test_10_list_volumes Failure 660.47 test_volumes.py
test_11_attach_volume_with_unstarted_vm Failure 769.75 test_volumes.py
test_12_resize_volume_with_only_size_parameter Failure 667.00 test_volumes.py
test_13_migrate_volume_and_change_offering Failure 803.51 test_volumes.py
test_14_delete_volume_delete_protection Failure 664.25 test_volumes.py

@matthiasdeblock

Copy link
Copy Markdown

Hi

This is mainly about NFS and iSCSI, what about Fibre Channel SAN with MultiPath?

@weizhouapache

Copy link
Copy Markdown
Member

Hi

This is mainly about NFS and iSCSI, what about Fibre Channel SAN with MultiPath?

good point

@rajiv-jain-netapp
is this also in your plan?

@rajiv-jain-netapp

Copy link
Copy Markdown
Author

Hi
This is mainly about NFS and iSCSI, what about Fibre Channel SAN with MultiPath?

good point

@rajiv-jain-netapp is this also in your plan?

We planned to add support in incremental order for the protocols. Currently, we picked NFS3 and iSCSI and remaining protocols support would be added in subsequent releases.

suryag1201 and others added 2 commits June 8, 2026 09:29
…ISCSI protocol is not enabled at the SVM(#61)

### Description

This PR...
Primary storage-pool is not failing even if NFS3/ISCSI protocol is not
enabled at the storage VM

<!-- For new features, provide link to FS, dev ML discussion etc. -->
<!-- In case of bug fix, the expected and actual behaviours, steps to
reproduce. -->

<!-- When "Fixes: #<id>" is specified, the issue/PR will automatically
be closed when this PR gets merged -->
<!-- For addressing multiple issues/PRs, use multiple "Fixes: #<id>" -->
<!-- Fixes: # -->

<!---
*******************************************************************************
-->
<!--- NOTE: AUTOMATION USES THE DESCRIPTIONS TO SET LABELS AND PRODUCE
DOCUMENTATION. -->
<!--- PLEASE PUT AN 'X' in only **ONE** box -->
<!---
*******************************************************************************
-->

### Types of changes

- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] New feature (non-breaking change which adds functionality)
- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] Enhancement (improves an existing feature and functionality)
- [ ] Cleanup (Code refactoring and cleanup, that may add test cases)
- [ ] Build/CI
- [ ] Test (unit or integration test code)

### Feature/Enhancement Scale or Bug Severity

#### Feature/Enhancement Scale

- [ ] Major
- [ ] Minor

#### Bug Severity

- [ ] BLOCKER
- [ ] Critical
- [ ] Major
- [x] Minor
- [ ] Trivial

### Screenshots (if appropriate):

<img width="1707" height="848" alt="Screenshot 2026-05-24 at 8 45 02 PM"
src="https://github.com/user-attachments/assets/9dbc8386-29b4-4ce2-b863-6933c1c0a8d6"
/>

<img width="1697" height="937" alt="Screenshot 2026-05-24 at 8 44 46 PM"
src="https://github.com/user-attachments/assets/5c8abce4-0343-453e-a980-bd7124034083"
/>



### How Has This Been Tested?

<!-- Please describe in detail how you tested your changes. -->
<!-- Include details of your testing environment, and the tests you ran
to -->

#### How did you try to break this feature and the system with this
change?

<!-- see how your change affects other areas of the code, etc. -->

<!-- Please read the
[CONTRIBUTING](https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md)
document -->

---------

Co-authored-by: Gupta, Surya <Surya.Gupta@netapp.com>
### Description
Storage Pool Creation is failing "message": "Unexpected argument
\"svm.iscsiEnabled\"

<!-- For new features, provide link to FS, dev ML discussion etc. -->
<!-- In case of bug fix, the expected and actual behaviours, steps to
reproduce. -->

<!-- When "Fixes: #<id>" is specified, the issue/PR will automatically
be closed when this PR gets merged -->
<!-- For addressing multiple issues/PRs, use multiple "Fixes: #<id>" -->
<!-- Fixes: # -->

<!---
*******************************************************************************
-->
<!--- NOTE: AUTOMATION USES THE DESCRIPTIONS TO SET LABELS AND PRODUCE
DOCUMENTATION. -->
<!--- PLEASE PUT AN 'X' in only **ONE** box -->
<!---
*******************************************************************************
-->

### Types of changes

- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] New feature (non-breaking change which adds functionality)
- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] Enhancement (improves an existing feature and functionality)
- [ ] Cleanup (Code refactoring and cleanup, that may add test cases)
- [ ] Build/CI
- [ ] Test (unit or integration test code)

### Feature/Enhancement Scale or Bug Severity

#### Feature/Enhancement Scale

- [x] Major
- [ ] Minor

#### Bug Severity

- [ ] BLOCKER
- [ ] Critical
- [ ] Major
- [ ] Minor
- [ ] Trivial

### Screenshots (if appropriate):

<img width="1471" height="145" alt="image"
src="https://github.com/user-attachments/assets/f894ec2d-0769-4f6d-8ad3-13b3e6b2b5cc"
/>

<img width="2292" height="1672" alt="image"
src="https://github.com/user-attachments/assets/403bce30-c9a2-44ec-a783-cf65c1fa2bd9"
/>



### How Has This Been Tested?

1- Disable the NFS and ISCSI protocol on svm and checked the storage
pool creation: It threw the appropriate error on UI, below is the
screenshot
2- Enable the NFS and ISCSI protocol on svm: Storage pool creation went
fine


#### How did you try to break this feature and the system with this
change?

<!-- see how your change affects other areas of the code, etc. -->

<!-- Please read the
[CONTRIBUTING](https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md)
document -->

Co-authored-by: Gupta, Surya <Surya.Gupta@netapp.com>
@winterhazel

Copy link
Copy Markdown
Member

@piyush5netapp and @rajiv-jain-netapp, could you have a look at the pending comments?

@rajiv-jain-netapp commented about providing responses to some of them, but I did not receive any responses, maybe they were added to a review and not submitted?

@nvazquez nvazquez left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @rajiv-jain-netapp please find a first round of review comments

return true;
}
String msg = result.toLowerCase();
if (msg.contains("already exists") || msg.contains("database exists") || msg.contains("exists")) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As an improvement, non-blocking comment, would it be possible to check the exit status code instead of the returned message?

return true;
}
String msg = result.toLowerCase();
if (msg.contains("already present") || msg.contains("already logged in") || msg.contains("session exists")) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar here?


private void waitForDiskToBecomeAvailable(String volumeUuid, KVMStoragePool pool) {
int numberOfTries = 10;
int numberOfTries = 30;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it worth being configurable by administrators?

return 0L;
}
} catch (Exception ignore) {
// If FS check fails for any reason, fall back to blockdev call

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this deserves a log line


@Override
public boolean volumesRequireGrantAccessWhenUsed() {
logger.info("OntapPrimaryDatastoreDriver: volumesRequireGrantAccessWhenUsed: Called");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it need to be at INFO level?

Comment on lines +125 to +133
if (dataObject == null) {
throw new InvalidParameterValueException("dataObject should not be null");
}
if (dataStore == null) {
throw new InvalidParameterValueException("dataStore should not be null");
}
if (callback == null) {
throw new InvalidParameterValueException("callback should not be null");
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like this?

Suggested change
if (dataObject == null) {
throw new InvalidParameterValueException("dataObject should not be null");
}
if (dataStore == null) {
throw new InvalidParameterValueException("dataStore should not be null");
}
if (callback == null) {
throw new InvalidParameterValueException("callback should not be null");
}
if (ObjectUtils.anyNull(dataObject, dataStore, callback)) {
throw new InvalidParameterValueException("dataObject, dataStore and callback must not be null");
}

Comment on lines +358 to +366
if (dataStore == null) {
throw new InvalidParameterValueException("dataStore should not be null");
}
if (dataObject == null) {
throw new InvalidParameterValueException("dataObject should not be null");
}
if (host == null) {
throw new InvalidParameterValueException("host should not be null");
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly here

Comment on lines +391 to +429
// Only retrieve LUN name for iSCSI volumes
String cloudStackVolumeName = volumeDetailsDao.findDetail(volumeVO.getId(), OntapStorageConstants.LUN_DOT_NAME).getValue();
UnifiedSANStrategy sanStrategy = (UnifiedSANStrategy) OntapStorageUtils.getStrategyByStoragePoolDetails(details);
String accessGroupName = OntapStorageUtils.getIgroupName(svmName, host.getName());

// Validate if Igroup exist ONTAP for this host as we may be using delete_on_unmap= true and igroup may be deleted by ONTAP automatically
Map<String, String> getAccessGroupMap = Map.of(
OntapStorageConstants.NAME, accessGroupName,
OntapStorageConstants.SVM_DOT_NAME, svmName
);
AccessGroup accessGroup = sanStrategy.getAccessGroup(getAccessGroupMap);
if(accessGroup == null || accessGroup.getIgroup() == null) {
logger.info("grantAccess: Igroup {} does not exist for the host {} : Need to create Igroup for the host ", accessGroupName, host.getName());
// create the igroup for the host and perform lun-mapping
accessGroup = new AccessGroup();
List<HostVO> hosts = new ArrayList<>();
hosts.add((HostVO) host);
accessGroup.setHostsToConnect(hosts);
accessGroup.setStoragePoolId(storagePool.getId());
accessGroup = sanStrategy.createAccessGroup(accessGroup);
}else{
logger.info("grantAccess: Igroup {} already exist for the host {}: ", accessGroup.getIgroup().getName() ,host.getName());
/* TODO Below cases will be covered later, for now they will be a pre-requisite on customer side
1. Igroup exist with the same name but host initiator has been rempved
2. Igroup exist with the same name but host initiator has been changed may be due to new NIC or new adapter
In both cases we need to verify current host initiator is registered in the igroup before allowing access
Incase it is not , add it and proceed for lun-mapping
*/
}
logger.info("grantAccess: Igroup {} is present now with initiators {} ", accessGroup.getIgroup().getName(), accessGroup.getIgroup().getInitiators());
// Create or retrieve existing LUN mapping
String lunNumber = sanStrategy.ensureLunMapped(svmName, cloudStackVolumeName, accessGroupName);

// Update volume path if changed (e.g., after migration or re-mapping)
String iscsiPath = OntapStorageConstants.SLASH + storagePool.getPath() + OntapStorageConstants.SLASH + lunNumber;
if (volumeVO.getPath() == null || !volumeVO.getPath().equals(iscsiPath)) {
volumeVO.set_iScsiName(iscsiPath);
volumeVO.setPath(iscsiPath);
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can these lines be extracted to a method?

Comment on lines +504 to +543
String accessGroupName = OntapStorageUtils.getIgroupName(svmName, host.getName());

// Retrieve LUN name from volume details; if missing, volume may not have been fully created
VolumeDetailVO lunDetail = volumeDetailsDao.findDetail(volumeVO.getId(), OntapStorageConstants.LUN_DOT_NAME);
String lunName = lunDetail != null ? lunDetail.getValue() : null;
if (lunName == null) {
logger.warn("revokeAccessForVolume: No LUN name found for volume [{}]; skipping revoke", volumeVO.getId());
return;
}

// Verify LUN still exists on ONTAP (may have been manually deleted)
CloudStackVolume cloudStackVolume = getCloudStackVolumeByName(storageStrategy, svmName, lunName);
if (cloudStackVolume == null || cloudStackVolume.getLun() == null || cloudStackVolume.getLun().getUuid() == null) {
logger.warn("revokeAccessForVolume: LUN for volume [{}] not found on ONTAP, skipping revoke", volumeVO.getId());
return;
}

// Verify igroup still exists on ONTAP
AccessGroup accessGroup = getAccessGroupByName(storageStrategy, svmName, accessGroupName);
if (accessGroup == null || accessGroup.getIgroup() == null || accessGroup.getIgroup().getUuid() == null) {
logger.warn("revokeAccessForVolume: iGroup [{}] not found on ONTAP, skipping revoke", accessGroupName);
return;
}

// Verify host initiator is in the igroup before attempting to remove mapping
SANStrategy sanStrategy = (UnifiedSANStrategy) storageStrategy;
if (!sanStrategy.validateInitiatorInAccessGroup(host.getStorageUrl(), svmName, accessGroup.getIgroup())) {
logger.warn("revokeAccessForVolume: Initiator [{}] is not in iGroup [{}], skipping revoke",
host.getStorageUrl(), accessGroupName);
return;
}

// Remove the LUN mapping from the igroup
Map<String, String> disableLogicalAccessMap = new HashMap<>();
disableLogicalAccessMap.put(OntapStorageConstants.LUN_DOT_UUID, cloudStackVolume.getLun().getUuid());
disableLogicalAccessMap.put(OntapStorageConstants.IGROUP_DOT_UUID, accessGroup.getIgroup().getUuid());
storageStrategy.disableLogicalAccess(disableLogicalAccessMap);

logger.info("revokeAccessForVolume: Successfully revoked access to LUN [{}] for host [{}]",
lunName, host.getName());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly here

public Map<String, String> enableLogicalAccess(Map<String, String> values) {
return null;
public String enableLogicalAccess(Map<String, String> values) {
logger.info("enableLogicalAccess : Create LunMap");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are both consecutive log lines needed? Similar pattern is also present in other methods as well

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.