Skip to content

Conversation

@sandeeplocharla
Copy link
Collaborator

@sandeeplocharla sandeeplocharla commented Oct 13, 2025

Description

This PR...

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?

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

</parent>
<properties>
<spring-cloud.version>2021.0.7</spring-cloud.version>
<spring-boot.version>2.7.10</spring-boot.version>

Choose a reason for hiding this comment

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

remove this and below commented ones

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Taken care of

private String name;
private List<AggregateDTO> aggregates;
private SvmDTO svm;
private Integer size;

Choose a reason for hiding this comment

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

Make it of type Long. And please mention the comment stating "this value would always be in bytes".

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Done


return null;

String url = dsInfos.get("url").toString();

Choose a reason for hiding this comment

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

add logger with input map values

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

done


// Additional details requested for ONTAP primary storage pool creation
@SuppressWarnings("unchecked")
Map<String, String> details = (Map<String, String>)dsInfos.get("details");

Choose a reason for hiding this comment

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

  1. We have to check for empty and null both.
  2. We have to throw exceptions in case of failed validations.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Added where its necessary

public boolean attachZone(DataStore dataStore, ZoneScope scope, Hypervisor.HypervisorType hypervisorType) {
return false;
List<HostVO> hostsToConnect = new ArrayList<>();
Hypervisor.HypervisorType[] hypervisorTypes = {Hypervisor.HypervisorType.XenServer, Hypervisor.HypervisorType.VMware, Hypervisor.HypervisorType.KVM};

Choose a reason for hiding this comment

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

Please limit support for the KVM hypervisor for now. I think that the remaining would be done in future releases.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Done

@github-actions
Copy link

This pull request has merge conflicts. Dear author, please fix the conflicts and sync your branch with the base branch.

@sandeeplocharla sandeeplocharla changed the title CSTACKEX-25: Basic class structure CSTACKEX-25: ONTAP Primary storage pool creation Oct 17, 2025
}
}

if (storagePoolName == null || storagePoolName.isEmpty()) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

add check for space

// TODO: scheme could be 'custom' in our case and we might have to ask 'protocol' separately to the user
if (scheme.equalsIgnoreCase(Constants.NFS)) {
parameters.setType(Storage.StoragePoolType.NetworkFilesystem);
} else if (scheme.equalsIgnoreCase(Constants.ISCSI)) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

TODO:// Compare it with custom
and specific protocol field should be included on UI and validated here

Username = username;
Password = password;
ManagementLIF = managementLIF;
OntapStorage.SVM = SVM;
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

this should just be 'svm'

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Add this in feign/model

import org.springframework.stereotype.Component;

@Component
public class StorageProviderManager {
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Change the name to StorageProviderFactory

public StorageProviderManager(OntapStorage ontapStorage) {
String protocol = ontapStorage.getProtocol();
s_logger.info("Initializing StorageProviderManager with protocol: " + protocol);
if (protocol.equalsIgnoreCase(Constants.NFS)) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

change this to switch and add isDisaggregated flag to OntapStoragr, add the respective condition here

try {
// Call the SVM API to check if the SVM exists
Svm svm = null;
URI url = URI.create(Constants.HTTPS + storage.getManagementLIF() + Constants.GETSVMs);
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

create a common method to Utility.java for uri creation

details.get(Constants.MANAGEMENTLIF), details.get(Constants.SVMNAME), scheme); //TODO: Here the passing 'scheme' might need a re-look
StorageProviderManager storageProviderManager = new StorageProviderManager(ontapStorage);
StorageStrategy storageStrategy = storageProviderManager.getStrategy();
boolean isValid = storageStrategy.connect();
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

put this in try catch

boolean isValid = storageStrategy.connect();
if (isValid) {
// String volumeName = storagePoolName + "_vol"; //TODO: Figure out a better naming convention
storageStrategy.createVolume(storagePoolName, Long.parseLong((details.get("size")))); // TODO: size should be in bytes, so see if conversion is needed
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

try catch block

public boolean attachCluster(DataStore dataStore, ClusterScope scope) {
logger.debug("In attachCluster for ONTAP primary storage");
PrimaryDataStoreInfo primarystore = (PrimaryDataStoreInfo)dataStore;
List<HostVO> hostsToConnect = _resourceMgr.getEligibleUpAndEnabledHostsInClusterForStorageConnection(primarystore);
Copy link
Collaborator Author

@sandeeplocharla sandeeplocharla Oct 17, 2025

Choose a reason for hiding this comment

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

Add check to see if the host supports iscsi, because the scheme could be 'custom'

for (HostVO host : hostsToConnect) {
// TODO: Fetch the host IQN and add to the initiator group on ONTAP cluster
try {
_storageMgr.connectHostToSharedPool(host, dataStore.getId());
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Read about connectHostsToPool and decide on which one to use

Copy link

@rajiv-jain-netapp rajiv-jain-netapp left a comment

Choose a reason for hiding this comment

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

please exclude the files which are taken from other PR and repost.

vishesh92 and others added 27 commits October 21, 2025 08:15
This PR adds support for specifying user data (cloud-init) for system VMs via Zone Scoped global settings. This allows the operators to customize the System VMs and setup monitoring, logging or execute any custom commands.

We set the user data from the global setting in /var/cache/cloud/cmdline, and use the NoCloud datasource to process user data. cloud-init service is still disabled in the system VMs and it's executed as part of the cloud-postinit service which executes the postinit.sh script.

Added global settings:
systemvm.userdata.enabled - Disabled by default. Needs to be enabled to utilize the feature.
console.proxy.vm.userdata - UUID of the User data to be used for Console Proxy
secstorage.vm.userdata - UUID of the User data to be used for Secondary Storage VM
virtual.router.userdata - UUID of the User data to be used for Virtual Routers
* Return details of the storage pool in the response including url, and update capacityBytes and capacityIops if applicable while creating storage pool

* Added capacitybytes parameter to the storage pool response in sync with the capacityiops response parameter and createStoragePool cmd request parameter (existing disksizetotal parameter in the storage pool response can be deprecated)

* Don't keep url in details

* Persist the capacityBytes and capacityIops in the storage_pool_details table while creating storage pool as well, for consistency - as these are updated with during update storage pool

* rebase with main fixes
apache#11773)

* storage: change storage pool to Up state when cancel storage migration

* Update 11773: connect host to shared pool after cancelling storage migration

* Update 11773: update db only

* Update 11773: skip capacity update for storpool
… added EOF fixes + correcting license header
* 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 <[email protected]>
* 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 <[email protected]>
…ommits.

# This is the 1st commit message:

CSTACKEX-25: Basic class structure

# This is the commit message #2:

Add PrimaryStoragePool base code

# This is the commit message #3:

CSTACKEX-25: Create Volume code basic code added

# This is the commit message #4:

CSTACKEX-25: additional logic for Primary storage pool creation

# This is the commit message #5:

CSTACKEX-29 Cluster, SVM and Aggr Feign Client

# This is the commit message #6:

CSTACKEX-29 Added License Info

# This is the commit message #7:

CSTACKEX-29 Resolve Review Comments

# This is the commit message #8:

CSTACKEX-29 Resolve Style check issues

� This is the commit message #9:

CSTACKEX-29 Resolve Style check issues

� This is the commit message #10:

CSTACKEX-29 Resolve Precommits Issues

# This is the commit message #11:

CSTACKEX-29 Resolve Precommits Issues
Add PrimaryStoragePool base code

CSTACKEX-25: Create Volume code basic code added

CSTACKEX-25: additional logic for Primary storage pool creation

CSTACKEX-29 Cluster, SVM and Aggr Feign Client

CSTACKEX-29 Added License Info

CSTACKEX-29 Resolve Review Comments

CSTACKEX-29 Resolve Style check issues

� This is the commit message #9:

CSTACKEX-29 Resolve Style check issues

� This is the commit message #10:

CSTACKEX-29 Resolve Precommits Issues

CSTACKEX-29 Resolve Precommits Issues

CSTACKEX-25: PrimaryStoragePool create workflow almost done

CSTACKEX-25: PrimaryStoragePool create workflow almost done

CSTACKEX-25: Added license string to new file
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.