mirror of https://github.com/apache/cloudstack.git
api: Fix missing keys in listZonesMetrics response (#9419)
This PR fixes #9379 Fix missing keys in listZonesMetrics. We use BeanUtils.copyProperties to copy the properties of ZoneResponse to ZoneMetricsResponse. Fields with missing getters are skipped from the response because of this.
This commit is contained in:
parent
d606ee7a07
commit
f0ba90568d
|
|
@ -73,7 +73,7 @@ public class ClusterResponse extends BaseResponseWithAnnotations {
|
||||||
|
|
||||||
@SerializedName("capacity")
|
@SerializedName("capacity")
|
||||||
@Param(description = "the capacity of the Cluster", responseObject = CapacityResponse.class)
|
@Param(description = "the capacity of the Cluster", responseObject = CapacityResponse.class)
|
||||||
private List<CapacityResponse> capacitites;
|
private List<CapacityResponse> capacities;
|
||||||
|
|
||||||
@SerializedName("cpuovercommitratio")
|
@SerializedName("cpuovercommitratio")
|
||||||
@Param(description = "The cpu overcommit ratio of the cluster")
|
@Param(description = "The cpu overcommit ratio of the cluster")
|
||||||
|
|
@ -171,12 +171,12 @@ public class ClusterResponse extends BaseResponseWithAnnotations {
|
||||||
this.managedState = managedState;
|
this.managedState = managedState;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<CapacityResponse> getCapacitites() {
|
public List<CapacityResponse> getCapacities() {
|
||||||
return capacitites;
|
return capacities;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCapacitites(ArrayList<CapacityResponse> arrayList) {
|
public void setCapacities(ArrayList<CapacityResponse> arrayList) {
|
||||||
this.capacitites = arrayList;
|
this.capacities = arrayList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCpuOvercommitRatio(String cpuovercommitratio) {
|
public void setCpuOvercommitRatio(String cpuovercommitratio) {
|
||||||
|
|
@ -219,4 +219,32 @@ public class ClusterResponse extends BaseResponseWithAnnotations {
|
||||||
public Map<String, String> getResourceDetails() {
|
public Map<String, String> getResourceDetails() {
|
||||||
return resourceDetails;
|
return resourceDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCpuovercommitratio() {
|
||||||
|
return cpuovercommitratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCpuovercommitratio(String cpuovercommitratio) {
|
||||||
|
this.cpuovercommitratio = cpuovercommitratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMemoryovercommitratio() {
|
||||||
|
return memoryovercommitratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMemoryovercommitratio(String memoryovercommitratio) {
|
||||||
|
this.memoryovercommitratio = memoryovercommitratio;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOvm3vip() {
|
||||||
|
return ovm3vip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOvm3vip(String ovm3vip) {
|
||||||
|
this.ovm3vip = ovm3vip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCapacities(List<CapacityResponse> capacities) {
|
||||||
|
this.capacities = capacities;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -272,7 +272,7 @@ public class HostResponse extends BaseResponseWithAnnotations {
|
||||||
|
|
||||||
@SerializedName("ueficapability")
|
@SerializedName("ueficapability")
|
||||||
@Param(description = "true if the host has capability to support UEFI boot")
|
@Param(description = "true if the host has capability to support UEFI boot")
|
||||||
private Boolean uefiCapabilty;
|
private Boolean uefiCapability;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.ENCRYPTION_SUPPORTED)
|
@SerializedName(ApiConstants.ENCRYPTION_SUPPORTED)
|
||||||
@Param(description = "true if the host supports encryption", since = "4.18")
|
@Param(description = "true if the host supports encryption", since = "4.18")
|
||||||
|
|
@ -711,7 +711,7 @@ public class HostResponse extends BaseResponseWithAnnotations {
|
||||||
return clusterType;
|
return clusterType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isLocalStorageActive() {
|
public Boolean getLocalStorageActive() {
|
||||||
return localStorageActive;
|
return localStorageActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -731,7 +731,7 @@ public class HostResponse extends BaseResponseWithAnnotations {
|
||||||
return hasEnoughCapacity;
|
return hasEnoughCapacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isSuitableForMigration() {
|
public Boolean getSuitableForMigration() {
|
||||||
return suitableForMigration;
|
return suitableForMigration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -743,8 +743,8 @@ public class HostResponse extends BaseResponseWithAnnotations {
|
||||||
return haHost;
|
return haHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUefiCapabilty(Boolean hostCapability) {
|
public void setUefiCapability(Boolean hostCapability) {
|
||||||
this.uefiCapabilty = hostCapability;
|
this.uefiCapability = hostCapability;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEncryptionSupported(Boolean encryptionSupported) {
|
public void setEncryptionSupported(Boolean encryptionSupported) {
|
||||||
|
|
@ -762,4 +762,76 @@ public class HostResponse extends BaseResponseWithAnnotations {
|
||||||
public void setIsTagARule(Boolean tagARule) {
|
public void setIsTagARule(Boolean tagARule) {
|
||||||
isTagARule = tagARule;
|
isTagARule = tagARule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Long getCpuAllocatedValue() {
|
||||||
|
return cpuAllocatedValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCpuAllocatedPercentage() {
|
||||||
|
return cpuAllocatedPercentage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCpuAllocatedWithOverprovisioning() {
|
||||||
|
return cpuAllocatedWithOverprovisioning;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double getCpuloadaverage() {
|
||||||
|
return cpuloadaverage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCpuloadaverage(Double cpuloadaverage) {
|
||||||
|
this.cpuloadaverage = cpuloadaverage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMemWithOverprovisioning() {
|
||||||
|
return memWithOverprovisioning;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMemoryAllocatedPercentage() {
|
||||||
|
return memoryAllocatedPercentage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getMemoryAllocatedBytes() {
|
||||||
|
return memoryAllocatedBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getTagARule() {
|
||||||
|
return isTagARule;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTagARule(Boolean tagARule) {
|
||||||
|
isTagARule = tagARule;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getHasEnoughCapacity() {
|
||||||
|
return hasEnoughCapacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDetails(Map details) {
|
||||||
|
this.details = details;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAnnotation() {
|
||||||
|
return annotation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getLastAnnotated() {
|
||||||
|
return lastAnnotated;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getUefiCapability() {
|
||||||
|
return uefiCapability;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getEncryptionSupported() {
|
||||||
|
return encryptionSupported;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getInstanceConversionSupported() {
|
||||||
|
return instanceConversionSupported;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -167,4 +167,8 @@ public class ManagementServerResponse extends BaseResponse {
|
||||||
public void setServiceIp(String serviceIp) {
|
public void setServiceIp(String serviceIp) {
|
||||||
this.serviceIp = serviceIp;
|
this.serviceIp = serviceIp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getKernelVersion() {
|
||||||
|
return kernelVersion;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -371,4 +371,16 @@ public class StoragePoolResponse extends BaseResponseWithAnnotations {
|
||||||
public void setNfsMountOpts(String nfsMountOpts) {
|
public void setNfsMountOpts(String nfsMountOpts) {
|
||||||
this.nfsMountOpts = nfsMountOpts;
|
this.nfsMountOpts = nfsMountOpts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Long getAllocatedIops() {
|
||||||
|
return allocatedIops;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getTagARule() {
|
||||||
|
return isTagARule;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTagARule(Boolean tagARule) {
|
||||||
|
isTagARule = tagARule;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1133,4 +1133,8 @@ public class UserVmResponse extends BaseResponseWithTagInformation implements Co
|
||||||
}
|
}
|
||||||
this.vnfDetails.put(key,value);
|
this.vnfDetails.put(key,value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setIpAddress(String ipAddress) {
|
||||||
|
this.ipAddress = ipAddress;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -211,7 +211,7 @@ public class VolumeResponse extends BaseResponseWithTagInformation implements Co
|
||||||
|
|
||||||
@SerializedName("destroyed")
|
@SerializedName("destroyed")
|
||||||
@Param(description = "the boolean state of whether the volume is destroyed or not")
|
@Param(description = "the boolean state of whether the volume is destroyed or not")
|
||||||
private Boolean destroyed;
|
private boolean destroyed;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.SERVICE_OFFERING_ID)
|
@SerializedName(ApiConstants.SERVICE_OFFERING_ID)
|
||||||
@Param(description = "ID of the service offering for root disk")
|
@Param(description = "ID of the service offering for root disk")
|
||||||
|
|
@ -227,7 +227,7 @@ public class VolumeResponse extends BaseResponseWithTagInformation implements Co
|
||||||
|
|
||||||
@SerializedName("isextractable")
|
@SerializedName("isextractable")
|
||||||
@Param(description = "true if the volume is extractable, false otherwise")
|
@Param(description = "true if the volume is extractable, false otherwise")
|
||||||
private Boolean extractable;
|
private boolean extractable;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.STATUS)
|
@SerializedName(ApiConstants.STATUS)
|
||||||
@Param(description = "the status of the volume")
|
@Param(description = "the status of the volume")
|
||||||
|
|
@ -235,7 +235,7 @@ public class VolumeResponse extends BaseResponseWithTagInformation implements Co
|
||||||
|
|
||||||
@SerializedName(ApiConstants.DISPLAY_VOLUME)
|
@SerializedName(ApiConstants.DISPLAY_VOLUME)
|
||||||
@Param(description = "an optional field whether to the display the volume to the end user or not.", authorized = {RoleType.Admin})
|
@Param(description = "an optional field whether to the display the volume to the end user or not.", authorized = {RoleType.Admin})
|
||||||
private Boolean displayVolume;
|
private boolean displayVolume;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.PATH)
|
@SerializedName(ApiConstants.PATH)
|
||||||
@Param(description = "the path of the volume")
|
@Param(description = "the path of the volume")
|
||||||
|
|
@ -318,11 +318,11 @@ public class VolumeResponse extends BaseResponseWithTagInformation implements Co
|
||||||
return this.getId();
|
return this.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean isDestroyed() {
|
public boolean isDestroyed() {
|
||||||
return destroyed;
|
return destroyed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDestroyed(Boolean destroyed) {
|
public void setDestroyed(boolean destroyed) {
|
||||||
this.destroyed = destroyed;
|
this.destroyed = destroyed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -521,7 +521,7 @@ public class VolumeResponse extends BaseResponseWithTagInformation implements Co
|
||||||
this.serviceOfferingDisplayText = serviceOfferingDisplayText;
|
this.serviceOfferingDisplayText = serviceOfferingDisplayText;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setExtractable(Boolean extractable) {
|
public void setExtractable(boolean extractable) {
|
||||||
this.extractable = extractable;
|
this.extractable = extractable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -539,7 +539,7 @@ public class VolumeResponse extends BaseResponseWithTagInformation implements Co
|
||||||
this.projectName = projectName;
|
this.projectName = projectName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDisplayVolume(Boolean displayVm) {
|
public void setDisplayVolume(boolean displayVm) {
|
||||||
this.displayVolume = displayVm;
|
this.displayVolume = displayVm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -755,7 +755,7 @@ public class VolumeResponse extends BaseResponseWithTagInformation implements Co
|
||||||
return serviceOfferingDisplayText;
|
return serviceOfferingDisplayText;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getExtractable() {
|
public boolean isExtractable() {
|
||||||
return extractable;
|
return extractable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -763,7 +763,7 @@ public class VolumeResponse extends BaseResponseWithTagInformation implements Co
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getDisplayVolume() {
|
public boolean isDisplayVolume() {
|
||||||
return displayVolume;
|
return displayVolume;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ public class ZoneResponse extends BaseResponseWithAnnotations implements SetReso
|
||||||
|
|
||||||
@SerializedName("securitygroupsenabled")
|
@SerializedName("securitygroupsenabled")
|
||||||
@Param(description = "true if security groups support is enabled, false otherwise")
|
@Param(description = "true if security groups support is enabled, false otherwise")
|
||||||
private Boolean securityGroupsEnabled;
|
private boolean securityGroupsEnabled;
|
||||||
|
|
||||||
@SerializedName("allocationstate")
|
@SerializedName("allocationstate")
|
||||||
@Param(description = "the allocation state of the cluster")
|
@Param(description = "the allocation state of the cluster")
|
||||||
|
|
@ -111,11 +111,11 @@ public class ZoneResponse extends BaseResponseWithAnnotations implements SetReso
|
||||||
|
|
||||||
@SerializedName("capacity")
|
@SerializedName("capacity")
|
||||||
@Param(description = "the capacity of the Zone", responseObject = CapacityResponse.class)
|
@Param(description = "the capacity of the Zone", responseObject = CapacityResponse.class)
|
||||||
private List<CapacityResponse> capacitites;
|
private List<CapacityResponse> capacities;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.LOCAL_STORAGE_ENABLED)
|
@SerializedName(ApiConstants.LOCAL_STORAGE_ENABLED)
|
||||||
@Param(description = "true if local storage offering enabled, false otherwise")
|
@Param(description = "true if local storage offering enabled, false otherwise")
|
||||||
private Boolean localStorageEnabled;
|
private boolean localStorageEnabled;
|
||||||
|
|
||||||
@SerializedName(ApiConstants.TAGS)
|
@SerializedName(ApiConstants.TAGS)
|
||||||
@Param(description = "the list of resource tags associated with zone.", responseObject = ResourceTagResponse.class, since = "4.3")
|
@Param(description = "the list of resource tags associated with zone.", responseObject = ResourceTagResponse.class, since = "4.3")
|
||||||
|
|
@ -197,7 +197,7 @@ public class ZoneResponse extends BaseResponseWithAnnotations implements SetReso
|
||||||
this.networkType = networkType;
|
this.networkType = networkType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSecurityGroupsEnabled(Boolean securityGroupsEnabled) {
|
public void setSecurityGroupsEnabled(boolean securityGroupsEnabled) {
|
||||||
this.securityGroupsEnabled = securityGroupsEnabled;
|
this.securityGroupsEnabled = securityGroupsEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -213,15 +213,15 @@ public class ZoneResponse extends BaseResponseWithAnnotations implements SetReso
|
||||||
this.dhcpProvider = dhcpProvider;
|
this.dhcpProvider = dhcpProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCapacitites(List<CapacityResponse> capacitites) {
|
public void setCapacities(List<CapacityResponse> capacities) {
|
||||||
this.capacitites = capacitites;
|
this.capacities = capacities;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDomainName(String domainName) {
|
public void setDomainName(String domainName) {
|
||||||
this.domainName = domainName;
|
this.domainName = domainName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLocalStorageEnabled(Boolean localStorageEnabled) {
|
public void setLocalStorageEnabled(boolean localStorageEnabled) {
|
||||||
this.localStorageEnabled = localStorageEnabled;
|
this.localStorageEnabled = localStorageEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -324,8 +324,8 @@ public class ZoneResponse extends BaseResponseWithAnnotations implements SetReso
|
||||||
return dhcpProvider;
|
return dhcpProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<CapacityResponse> getCapacitites() {
|
public List<CapacityResponse> getCapacities() {
|
||||||
return capacitites;
|
return capacities;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLocalStorageEnabled() {
|
public boolean isLocalStorageEnabled() {
|
||||||
|
|
@ -340,6 +340,18 @@ public class ZoneResponse extends BaseResponseWithAnnotations implements SetReso
|
||||||
return resourceDetails;
|
return resourceDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean getAllowUserSpecifyVRMtu() {
|
||||||
|
return allowUserSpecifyVRMtu;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getRouterPrivateInterfaceMaxMtu() {
|
||||||
|
return routerPrivateInterfaceMaxMtu;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getRouterPublicInterfaceMaxMtu() {
|
||||||
|
return routerPublicInterfaceMaxMtu;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setResourceIconResponse(ResourceIconResponse resourceIconResponse) {
|
public void setResourceIconResponse(ResourceIconResponse resourceIconResponse) {
|
||||||
this.resourceIconResponse = resourceIconResponse;
|
this.resourceIconResponse = resourceIconResponse;
|
||||||
|
|
|
||||||
|
|
@ -1512,7 +1512,7 @@ public class ApiResponseHelper implements ResponseGenerator {
|
||||||
}
|
}
|
||||||
// Do it for stats as well.
|
// Do it for stats as well.
|
||||||
capacityResponses.addAll(getStatsCapacityresponse(null, cluster.getId(), pod.getId(), pod.getDataCenterId()));
|
capacityResponses.addAll(getStatsCapacityresponse(null, cluster.getId(), pod.getId(), pod.getDataCenterId()));
|
||||||
clusterResponse.setCapacitites(new ArrayList<CapacityResponse>(capacityResponses));
|
clusterResponse.setCapacities(new ArrayList<CapacityResponse>(capacityResponses));
|
||||||
}
|
}
|
||||||
clusterResponse.setHasAnnotation(annotationDao.hasAnnotations(cluster.getUuid(), AnnotationService.EntityType.CLUSTER.name(),
|
clusterResponse.setHasAnnotation(annotationDao.hasAnnotations(cluster.getUuid(), AnnotationService.EntityType.CLUSTER.name(),
|
||||||
_accountMgr.isRootAdmin(CallContext.current().getCallingAccount().getId())));
|
_accountMgr.isRootAdmin(CallContext.current().getCallingAccount().getId())));
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ public class DataCenterJoinDaoImpl extends GenericDaoBase<DataCenterJoinVO, Long
|
||||||
zoneResponse.setGuestCidrAddress(dataCenter.getGuestNetworkCidr());
|
zoneResponse.setGuestCidrAddress(dataCenter.getGuestNetworkCidr());
|
||||||
|
|
||||||
if (showCapacities != null && showCapacities) {
|
if (showCapacities != null && showCapacities) {
|
||||||
zoneResponse.setCapacitites(ApiResponseHelper.getDataCenterCapacityResponse(dataCenter.getId()));
|
zoneResponse.setCapacities(ApiResponseHelper.getDataCenterCapacityResponse(dataCenter.getId()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -238,9 +238,9 @@ public class HostJoinDaoImpl extends GenericDaoBase<HostJoinVO, Long> implements
|
||||||
Map<String, String> hostDetails = hostDetailsDao.findDetails(host.getId());
|
Map<String, String> hostDetails = hostDetailsDao.findDetails(host.getId());
|
||||||
if (hostDetails != null) {
|
if (hostDetails != null) {
|
||||||
if (hostDetails.containsKey(Host.HOST_UEFI_ENABLE)) {
|
if (hostDetails.containsKey(Host.HOST_UEFI_ENABLE)) {
|
||||||
hostResponse.setUefiCapabilty(Boolean.parseBoolean((String) hostDetails.get(Host.HOST_UEFI_ENABLE)));
|
hostResponse.setUefiCapability(Boolean.parseBoolean((String) hostDetails.get(Host.HOST_UEFI_ENABLE)));
|
||||||
} else {
|
} else {
|
||||||
hostResponse.setUefiCapabilty(new Boolean(false));
|
hostResponse.setUefiCapability(new Boolean(false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (details.contains(HostDetails.all) && (host.getHypervisorType() == Hypervisor.HypervisorType.KVM ||
|
if (details.contains(HostDetails.all) && (host.getHypervisorType() == Hypervisor.HypervisorType.KVM ||
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue