Skip to content

Commit 856c5cc

Browse files
suryag1201Gupta, Surya
andauthored
Feature/cstackex 112 (#33)
* CSTACKEX-112 UI Changes for storage pool creation * CSTACKEX-112 Rebase * CSTACKEX-112 Fixed test cases * CSTACKEX-112 Change the provider name --------- Co-authored-by: Gupta, Surya <Surya.Gupta@netapp.com>
1 parent b26542f commit 856c5cc

File tree

14 files changed

+131
-118
lines changed

14 files changed

+131
-118
lines changed

plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/feign/model/OntapStorage.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,18 @@
2424
public class OntapStorage {
2525
private final String username;
2626
private final String password;
27-
private final String managementLIF;
27+
private final String storageIP;
2828
private final String svmName;
2929
private final Long size;
3030
private final ProtocolType protocolType;
31-
private final Boolean isDisaggregated;
3231

33-
public OntapStorage(String username, String password, String managementLIF, String svmName, Long size, ProtocolType protocolType, Boolean isDisaggregated) {
32+
public OntapStorage(String username, String password, String storageIP, String svmName, Long size, ProtocolType protocolType) {
3433
this.username = username;
3534
this.password = password;
36-
this.managementLIF = managementLIF;
35+
this.storageIP = storageIP;
3736
this.svmName = svmName;
3837
this.size = size;
3938
this.protocolType = protocolType;
40-
this.isDisaggregated = isDisaggregated;
4139
}
4240

4341
public String getUsername() {
@@ -48,13 +46,9 @@ public String getPassword() {
4846
return password;
4947
}
5048

51-
public String getManagementLIF() {
52-
return managementLIF;
53-
}
49+
public String getStorageIP() { return storageIP; }
5450

55-
public String getSvmName() {
56-
return svmName;
57-
}
51+
public String getSvmName() { return svmName; }
5852

5953
public Long getSize() {
6054
return size;
@@ -63,8 +57,4 @@ public Long getSize() {
6357
public ProtocolType getProtocol() {
6458
return protocolType;
6559
}
66-
67-
public Boolean getIsDisaggregated() {
68-
return isDisaggregated;
69-
}
7060
}

plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/lifecycle/OntapPrimaryDatastoreLifecycle.java

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ public DataStore initialize(Map<String, Object> dsInfos) {
8888
if (dsInfos == null) {
8989
throw new CloudRuntimeException("Datastore info map is null, cannot create primary storage");
9090
}
91-
String url = (String) dsInfos.get("url");
9291
Long zoneId = (Long) dsInfos.get("zoneId");
9392
Long podId = (Long) dsInfos.get("podId");
9493
Long clusterId = (Long) dsInfos.get("clusterId");
@@ -152,39 +151,20 @@ public DataStore initialize(Map<String, Object> dsInfos) {
152151
throw new CloudRuntimeException("ONTAP primary storage must be managed");
153152
}
154153

154+
//Required ONTAP detail keys
155155
Set<String> requiredKeys = Set.of(
156156
Constants.USERNAME,
157157
Constants.PASSWORD,
158158
Constants.SVM_NAME,
159159
Constants.PROTOCOL,
160-
Constants.MANAGEMENT_LIF
160+
Constants.STORAGE_IP
161161
);
162162

163-
Set<String> optionalKeys = Set.of(
164-
Constants.IS_DISAGGREGATED
165-
);
166-
167-
Set<String> allowedKeys = new java.util.HashSet<>(requiredKeys);
168-
allowedKeys.addAll(optionalKeys);
169-
170-
// Parse key=value pairs from URL into details (skip empty segments)
171-
if (url != null && !url.isEmpty()) {
172-
for (String segment : url.split(Constants.SEMICOLON)) {
173-
if (segment.isEmpty()) {
174-
continue;
175-
}
176-
String[] kv = segment.split(Constants.EQUALS, 2);
177-
if (kv.length == 2) {
178-
details.put(kv[0].trim(), kv[1].trim());
179-
}
180-
}
181-
}
182-
183163
// Validate existing entries (reject unexpected keys, empty values)
184164
for (Map.Entry<String, String> e : details.entrySet()) {
185165
String key = e.getKey();
186166
String val = e.getValue();
187-
if (!allowedKeys.contains(key)) {
167+
if (!requiredKeys.contains(key)) {
188168
throw new CloudRuntimeException("Unexpected ONTAP detail key in URL: " + key);
189169
}
190170
if (val == null || val.isEmpty()) {
@@ -202,21 +182,17 @@ public DataStore initialize(Map<String, Object> dsInfos) {
202182

203183
details.put(Constants.SIZE, capacityBytes.toString());
204184

205-
// Default for IS_DISAGGREGATED if needed
206-
details.putIfAbsent(Constants.IS_DISAGGREGATED, "false");
207-
208185
ProtocolType protocol = ProtocolType.valueOf(details.get(Constants.PROTOCOL));
209186

210187
// Connect to ONTAP and create volume
211188
long volumeSize = Long.parseLong(details.get(Constants.SIZE));
212189
OntapStorage ontapStorage = new OntapStorage(
213190
details.get(Constants.USERNAME),
214191
details.get(Constants.PASSWORD),
215-
details.get(Constants.MANAGEMENT_LIF),
192+
details.get(Constants.STORAGE_IP),
216193
details.get(Constants.SVM_NAME),
217194
volumeSize,
218-
protocol,
219-
Boolean.parseBoolean(details.get(Constants.IS_DISAGGREGATED).toLowerCase()));
195+
protocol);
220196

221197
StorageStrategy storageStrategy = StorageProviderFactory.getStrategy(ontapStorage);
222198
boolean isValid = storageStrategy.connect();

plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/provider/StorageProviderFactory.java

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,15 @@ public static StorageStrategy getStrategy(OntapStorage ontapStorage) {
3838
s_logger.info("Initializing StorageProviderFactory with protocol: " + protocol);
3939
switch (protocol) {
4040
case NFS3:
41-
if (!ontapStorage.getIsDisaggregated()) {
42-
UnifiedNASStrategy unifiedNASStrategy = new UnifiedNASStrategy(ontapStorage);
43-
ComponentContext.inject(unifiedNASStrategy);
44-
unifiedNASStrategy.setOntapStorage(ontapStorage);
45-
return unifiedNASStrategy;
46-
}
47-
throw new CloudRuntimeException("Unsupported configuration: Disaggregated ONTAP is not supported.");
41+
UnifiedNASStrategy unifiedNASStrategy = new UnifiedNASStrategy(ontapStorage);
42+
ComponentContext.inject(unifiedNASStrategy);
43+
unifiedNASStrategy.setOntapStorage(ontapStorage);
44+
return unifiedNASStrategy;
4845
case ISCSI:
49-
if (!ontapStorage.getIsDisaggregated()) {
50-
UnifiedSANStrategy unifiedSANStrategy = new UnifiedSANStrategy(ontapStorage);
51-
ComponentContext.inject(unifiedSANStrategy);
52-
unifiedSANStrategy.setOntapStorage(ontapStorage);
53-
return unifiedSANStrategy;
54-
}
55-
throw new CloudRuntimeException("Unsupported configuration: Disaggregated ONTAP is not supported.");
46+
UnifiedSANStrategy unifiedSANStrategy = new UnifiedSANStrategy(ontapStorage);
47+
ComponentContext.inject(unifiedSANStrategy);
48+
unifiedSANStrategy.setOntapStorage(ontapStorage);
49+
return unifiedSANStrategy;
5650
default:
5751
throw new CloudRuntimeException("Unsupported protocol: " + protocol);
5852
}

plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/service/StorageStrategy.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public abstract class StorageStrategy {
7979

8080
public StorageStrategy(OntapStorage ontapStorage) {
8181
storage = ontapStorage;
82-
String baseURL = Constants.HTTPS + storage.getManagementLIF();
82+
String baseURL = Constants.HTTPS + storage.getStorageIP();
8383
s_logger.info("Initializing StorageStrategy with base URL: " + baseURL);
8484
// Initialize FeignClientFactory and create clients
8585
this.feignClientFactory = new FeignClientFactory();
@@ -93,7 +93,7 @@ public StorageStrategy(OntapStorage ontapStorage) {
9393

9494
// Connect method to validate ONTAP cluster, credentials, protocol, and SVM
9595
public boolean connect() {
96-
s_logger.info("Attempting to connect to ONTAP cluster at " + storage.getManagementLIF() + " and validate SVM " +
96+
s_logger.info("Attempting to connect to ONTAP cluster at " + storage.getStorageIP() + " and validate SVM " +
9797
storage.getSvmName() + ", protocol " + storage.getProtocol());
9898
//Get AuthHeader
9999
String authHeader = Utility.generateAuthHeader(storage.getUsername(), storage.getPassword());

plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/service/UnifiedNASStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public class UnifiedNASStrategy extends NASStrategy {
7272

7373
public UnifiedNASStrategy(OntapStorage ontapStorage) {
7474
super(ontapStorage);
75-
String baseURL = Constants.HTTPS + ontapStorage.getManagementLIF();
75+
String baseURL = Constants.HTTPS + ontapStorage.getStorageIP();
7676
this.feignClientFactory = new FeignClientFactory();
7777
this.nasFeignClient = feignClientFactory.createClient(NASFeignClient.class, baseURL);
7878
this.volumeFeignClient = feignClientFactory.createClient(VolumeFeignClient.class,baseURL );

plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/service/UnifiedSANStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public class UnifiedSANStrategy extends SANStrategy {
5454

5555
public UnifiedSANStrategy(OntapStorage ontapStorage) {
5656
super(ontapStorage);
57-
String baseURL = Constants.HTTPS + ontapStorage.getManagementLIF();
57+
String baseURL = Constants.HTTPS + ontapStorage.getStorageIP();
5858
// Initialize FeignClientFactory and create SAN client
5959
this.feignClientFactory = new FeignClientFactory();
6060
this.sanFeignClient = feignClientFactory.createClient(SANFeignClient.class, baseURL);

plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Constants.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
public class Constants {
2424

25-
public static final String ONTAP_PLUGIN_NAME = "ONTAP";
25+
public static final String ONTAP_PLUGIN_NAME = "NetApp ONTAP";
2626
public static final int NFS3_PORT = 2049;
2727
public static final int ISCSI_PORT = 3260;
2828

@@ -34,7 +34,7 @@ public class Constants {
3434
public static final String USERNAME = "username";
3535
public static final String PASSWORD = "password";
3636
public static final String DATA_LIF = "dataLIF";
37-
public static final String MANAGEMENT_LIF = "managementLIF";
37+
public static final String STORAGE_IP = "storageIP";
3838
public static final String VOLUME_NAME = "volumeName";
3939
public static final String VOLUME_UUID = "volumeUUID";
4040
public static final String EXPORT_POLICY_ID = "exportPolicyId";

plugins/storage/volume/ontap/src/main/java/org/apache/cloudstack/storage/utils/Utility.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,8 @@ public static StorageStrategy getStrategyByStoragePoolDetails(Map<String, String
126126
}
127127
String protocol = details.get(Constants.PROTOCOL);
128128
OntapStorage ontapStorage = new OntapStorage(details.get(Constants.USERNAME), details.get(Constants.PASSWORD),
129-
details.get(Constants.MANAGEMENT_LIF), details.get(Constants.SVM_NAME), Long.parseLong(details.get(Constants.SIZE)),
130-
ProtocolType.valueOf(protocol),
131-
Boolean.parseBoolean(details.get(Constants.IS_DISAGGREGATED)));
129+
details.get(Constants.STORAGE_IP), details.get(Constants.SVM_NAME), Long.parseLong(details.get(Constants.SIZE)),
130+
ProtocolType.valueOf(protocol));
132131
StorageStrategy storageStrategy = StorageProviderFactory.getStrategy(ontapStorage);
133132
boolean isValid = storageStrategy.connect();
134133
if (isValid) {

0 commit comments

Comments
 (0)