Skip to content

Commit 56ef349

Browse files
raveningRakesh VenkateshRakesh Venkatesh
authored
Display capability info in listNetwork response (apache#3804)
* Display capability info in listNetwork response Co-authored-by: Rakesh Venkatesh <r.venkatesh@global.leaseweb.com> Co-authored-by: Rakesh Venkatesh <rakeshv@apache.org>
1 parent 910d024 commit 56ef349

File tree

1 file changed

+68
-7
lines changed

1 file changed

+68
-7
lines changed

server/src/main/java/com/cloud/api/ApiResponseHelper.java

Lines changed: 68 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import java.text.DecimalFormat;
2222
import java.util.ArrayList;
23+
import java.util.Arrays;
2324
import java.util.Calendar;
2425
import java.util.Date;
2526
import java.util.EnumSet;
@@ -2166,6 +2167,27 @@ public NetworkOfferingResponse createNetworkOfferingResponse(NetworkOffering off
21662167
return response;
21672168
}
21682169

2170+
private void createCapabilityResponse(List<CapabilityResponse> capabilityResponses,
2171+
String name,
2172+
String value,
2173+
boolean canChoose,
2174+
String objectName) {
2175+
CapabilityResponse capabilityResponse = new CapabilityResponse();
2176+
capabilityResponse.setName(name);
2177+
capabilityResponse.setValue(value);
2178+
capabilityResponse.setCanChoose(canChoose);
2179+
capabilityResponse.setObjectName(objectName);
2180+
2181+
capabilityResponses.add(capabilityResponse);
2182+
}
2183+
2184+
private void createCapabilityResponse(List<CapabilityResponse> capabilityResponses,
2185+
String name,
2186+
String value,
2187+
boolean canChoose) {
2188+
createCapabilityResponse(capabilityResponses, name, value, canChoose, null);
2189+
}
2190+
21692191
@Override
21702192
public NetworkResponse createNetworkResponse(ResponseView view, Network network) {
21712193
// need to get network profile in order to retrieve dns information from
@@ -2299,6 +2321,7 @@ public NetworkResponse createNetworkResponse(ResponseView view, Network network)
22992321
response.setDns2(profile.getDns2());
23002322
// populate capability
23012323
Map<Service, Map<Capability, String>> serviceCapabilitiesMap = ApiDBUtils.getNetworkCapabilities(network.getId(), network.getDataCenterId());
2324+
Map<Service, Set<Provider>> serviceProviderMap = ApiDBUtils.listNetworkOfferingServices(network.getNetworkOfferingId());
23022325
List<ServiceResponse> serviceResponses = new ArrayList<ServiceResponse>();
23032326
if (serviceCapabilitiesMap != null) {
23042327
for (Map.Entry<Service, Map<Capability, String>>entry : serviceCapabilitiesMap.entrySet()) {
@@ -2311,20 +2334,58 @@ public NetworkResponse createNetworkResponse(ResponseView view, Network network)
23112334
serviceResponse.setName(service.getName());
23122335

23132336
// set list of capabilities for the service
2314-
List<CapabilityResponse> capabilityResponses = new ArrayList<CapabilityResponse>();
2337+
List<CapabilityResponse> capabilityResponses = new ArrayList<>();
23152338
Map<Capability, String> serviceCapabilities = entry.getValue();
23162339
if (serviceCapabilities != null) {
23172340
for (Map.Entry<Capability,String> ser_cap_entries : serviceCapabilities.entrySet()) {
23182341
Capability capability = ser_cap_entries.getKey();
2319-
CapabilityResponse capabilityResponse = new CapabilityResponse();
23202342
String capabilityValue = ser_cap_entries.getValue();
2321-
capabilityResponse.setName(capability.getName());
2322-
capabilityResponse.setValue(capabilityValue);
2323-
capabilityResponse.setObjectName("capability");
2324-
capabilityResponses.add(capabilityResponse);
2343+
if (Service.Lb == service && capability.getName().equals(Capability.SupportedLBIsolation.getName())) {
2344+
capabilityValue = networkOffering.isDedicatedLB() ? "dedicated" : "shared";
2345+
}
2346+
2347+
Set<String> capabilitySet = new HashSet<>(Arrays.asList(Capability.SupportedLBIsolation.getName(),
2348+
Capability.SupportedSourceNatTypes.getName(),
2349+
Capability.RedundantRouter.getName()));
2350+
boolean canChoose = capabilitySet.contains(capability.getName());
2351+
2352+
createCapabilityResponse(capabilityResponses, capability.getName(),
2353+
capabilityValue, canChoose, "capability");
2354+
}
2355+
}
2356+
2357+
if (Service.SourceNat == service) {
2358+
// overwrite
2359+
capabilityResponses = new ArrayList<>();
2360+
createCapabilityResponse(capabilityResponses, Capability.SupportedSourceNatTypes.getName(),
2361+
networkOffering.isSharedSourceNat() ? "perzone" : "peraccount", true);
2362+
2363+
createCapabilityResponse(capabilityResponses, Capability.RedundantRouter.getName(),
2364+
networkOffering.isRedundantRouter() ? "true" : "false", true);
2365+
} else if (service == Service.StaticNat) {
2366+
createCapabilityResponse(capabilityResponses, Capability.ElasticIp.getName(),
2367+
networkOffering.isElasticIp() ? "true" : "false", false);
2368+
2369+
createCapabilityResponse(capabilityResponses, Capability.AssociatePublicIP.getName(),
2370+
networkOffering.isAssociatePublicIP() ? "true" : "false", false);
2371+
} else if (Service.Lb == service) {
2372+
createCapabilityResponse(capabilityResponses, Capability.ElasticLb.getName(),
2373+
networkOffering.isElasticLb() ? "true" : "false", false);
2374+
2375+
createCapabilityResponse(capabilityResponses, Capability.InlineMode.getName(),
2376+
networkOffering.isInline() ? "true" : "false", false);
2377+
}
2378+
serviceResponse.setCapabilities(capabilityResponses);
2379+
2380+
List<ProviderResponse> providers = new ArrayList<>();
2381+
for (Provider provider : serviceProviderMap.get(service)) {
2382+
if (provider != null) {
2383+
ProviderResponse providerRsp = new ProviderResponse();
2384+
providerRsp.setName(provider.getName());
2385+
providers.add(providerRsp);
23252386
}
2326-
serviceResponse.setCapabilities(capabilityResponses);
23272387
}
2388+
serviceResponse.setProviders(providers);
23282389

23292390
serviceResponse.setObjectName("service");
23302391
serviceResponses.add(serviceResponse);

0 commit comments

Comments
 (0)