From caf5fb841a4b08b398db5f8d282926cfdd0e5a5d Mon Sep 17 00:00:00 2001 From: abennatan Date: Tue, 2 Jun 2026 13:51:37 -0700 Subject: [PATCH 1/3] listHosts: add 'core' details --- .../apache/cloudstack/api/ApiConstants.java | 2 +- .../cloud/api/query/dao/HostJoinDaoImpl.java | 51 ++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index 03b73834a94e..5fa9757204e8 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -1407,7 +1407,7 @@ public String toString() { } public enum HostDetails { - all, capacity, events, stats, min; + all, capacity, events, stats, min, core; } public enum VMDetails { diff --git a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java index e7265a7e3b9a..f1b467b7896c 100644 --- a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java @@ -117,6 +117,51 @@ private boolean containsHostHATag(final String tags) { return result; } + private void setNewCoreHostResponse(HostJoinVO host, HostResponse hostResponse) { + hostResponse.setId(host.getUuid()); + hostResponse.setName(host.getName()); + hostResponse.setState(host.getStatus()); + hostResponse.setResourceState(host.getResourceState().toString()); + hostResponse.setDisconnectedOn(host.getDisconnectedOn()); + hostResponse.setHostType(host.getType()); + hostResponse.setIpAddress(host.getPrivateIpAddress()); + hostResponse.setVersion(host.getVersion()); + hostResponse.setCreated(host.getCreated()); + hostResponse.setRemoved(host.getRemoved()); + hostResponse.setLastPinged(new Date(host.getLastPinged())); + if (host.getHypervisorType() != null) { + hostResponse.setHypervisor(host.getHypervisorType().getHypervisorDisplayName()); + } + + hostResponse.setZoneId(host.getZoneUuid()); + hostResponse.setZoneName(host.getZoneName()); + hostResponse.setPodId(host.getPodUuid()); + hostResponse.setPodName(host.getPodName()); + if (host.getClusterId() > 0) { + hostResponse.setClusterId(host.getClusterUuid()); + hostResponse.setClusterName(host.getClusterName()); + if (host.getClusterType() != null) { + hostResponse.setClusterType(host.getClusterType().toString()); + } + } + + String hostTags = host.getTag(); + hostResponse.setHostTags(hostTags); + hostResponse.setExplicitHostTags(host.getExplicitTag()); + hostResponse.setImplicitHostTags(host.getImplicitTag()); + hostResponse.setStorageAccessGroups(host.getStorageAccessGroups()); + hostResponse.setClusterStorageAccessGroups(host.getClusterStorageAccessGroups()); + hostResponse.setPodStorageAccessGroups(host.getPodStorageAccessGroups()); + hostResponse.setZoneStorageAccessGroups(host.getZoneStorageAccessGroups()); + + // msid is returned as-is; callers resolve it to avoid a per-host lookup + if (host.getManagementServerId() != null) { + hostResponse.setManagementServerId(host.getManagementServerId().toString()); + } + + hostResponse.setObjectName("host"); + } + private void setNewHostResponseBase(HostJoinVO host, EnumSet details, HostResponse hostResponse) { hostResponse.setId(host.getUuid()); hostResponse.setCapabilities(host.getCapabilities()); @@ -334,7 +379,11 @@ public HostResponse newMinimalHostResponse(HostJoinVO host) { @Override public HostResponse newHostResponse(HostJoinVO host, EnumSet details) { HostResponse hostResponse = new HostResponse(); - setNewHostResponseBase(host, details, hostResponse); + if (details.contains(HostDetails.core)) { + setNewCoreHostResponse(host, hostResponse); + } else { + setNewHostResponseBase(host, details, hostResponse); + } return hostResponse; } From 1f39d6111e6386ba6604b66f7c4caae634a5d39c Mon Sep 17 00:00:00 2001 From: nvazquez Date: Tue, 23 Jun 2026 12:53:50 -0300 Subject: [PATCH 2/3] Refactor to integrate core details into the base response method --- .../apache/cloudstack/api/ApiConstants.java | 2 +- .../cloud/api/query/dao/HostJoinDaoImpl.java | 125 ++++++------------ 2 files changed, 44 insertions(+), 83 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index 5fa9757204e8..a8ff00c40ff3 100644 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@ -1407,7 +1407,7 @@ public String toString() { } public enum HostDetails { - all, capacity, events, stats, min, core; + all, capacity, core, events, stats, min; } public enum VMDetails { diff --git a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java index f1b467b7896c..a5496576c401 100644 --- a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java @@ -117,51 +117,6 @@ private boolean containsHostHATag(final String tags) { return result; } - private void setNewCoreHostResponse(HostJoinVO host, HostResponse hostResponse) { - hostResponse.setId(host.getUuid()); - hostResponse.setName(host.getName()); - hostResponse.setState(host.getStatus()); - hostResponse.setResourceState(host.getResourceState().toString()); - hostResponse.setDisconnectedOn(host.getDisconnectedOn()); - hostResponse.setHostType(host.getType()); - hostResponse.setIpAddress(host.getPrivateIpAddress()); - hostResponse.setVersion(host.getVersion()); - hostResponse.setCreated(host.getCreated()); - hostResponse.setRemoved(host.getRemoved()); - hostResponse.setLastPinged(new Date(host.getLastPinged())); - if (host.getHypervisorType() != null) { - hostResponse.setHypervisor(host.getHypervisorType().getHypervisorDisplayName()); - } - - hostResponse.setZoneId(host.getZoneUuid()); - hostResponse.setZoneName(host.getZoneName()); - hostResponse.setPodId(host.getPodUuid()); - hostResponse.setPodName(host.getPodName()); - if (host.getClusterId() > 0) { - hostResponse.setClusterId(host.getClusterUuid()); - hostResponse.setClusterName(host.getClusterName()); - if (host.getClusterType() != null) { - hostResponse.setClusterType(host.getClusterType().toString()); - } - } - - String hostTags = host.getTag(); - hostResponse.setHostTags(hostTags); - hostResponse.setExplicitHostTags(host.getExplicitTag()); - hostResponse.setImplicitHostTags(host.getImplicitTag()); - hostResponse.setStorageAccessGroups(host.getStorageAccessGroups()); - hostResponse.setClusterStorageAccessGroups(host.getClusterStorageAccessGroups()); - hostResponse.setPodStorageAccessGroups(host.getPodStorageAccessGroups()); - hostResponse.setZoneStorageAccessGroups(host.getZoneStorageAccessGroups()); - - // msid is returned as-is; callers resolve it to avoid a per-host lookup - if (host.getManagementServerId() != null) { - hostResponse.setManagementServerId(host.getManagementServerId().toString()); - } - - hostResponse.setObjectName("host"); - } - private void setNewHostResponseBase(HostJoinVO host, EnumSet details, HostResponse hostResponse) { hostResponse.setId(host.getUuid()); hostResponse.setCapabilities(host.getCapabilities()); @@ -185,10 +140,15 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail hostResponse.setLastPinged(new Date(host.getLastPinged())); Long mshostId = host.getManagementServerId(); if (mshostId != null) { - ManagementServerHostVO managementServer = managementServerHostDao.findByMsid(host.getManagementServerId()); - if (managementServer != null) { - hostResponse.setManagementServerId(managementServer.getUuid()); - hostResponse.setManagementServerName(managementServer.getName()); + if (details.contains(HostDetails.core)) { + // msid is returned as-is; callers resolve it to avoid a per-host lookup + hostResponse.setManagementServerId(mshostId.toString()); + } else { + ManagementServerHostVO managementServer = managementServerHostDao.findByMsid(host.getManagementServerId()); + if (managementServer != null) { + hostResponse.setManagementServerId(managementServer.getUuid()); + hostResponse.setManagementServerName(managementServer.getName()); + } } } hostResponse.setName(host.getName()); @@ -234,9 +194,12 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail hostResponse.setGpuGroup(gpus); } if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.stats) || details.contains(HostDetails.events)) { - hostResponse.setOsCategoryId(host.getOsCategoryUuid()); hostResponse.setOsCategoryName(host.getOsCategoryName()); + } + + if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.core) || + details.contains(HostDetails.stats) || details.contains(HostDetails.events)) { hostResponse.setZoneName(host.getZoneName()); hostResponse.setPodName(host.getPodName()); if (host.getClusterId() > 0) { @@ -248,42 +211,44 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail DecimalFormat decimalFormat = new DecimalFormat("#.##"); if (host.getType() == Host.Type.Routing) { float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor(host.getClusterId()); - if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity)) { - // set allocated capacities - Long mem = host.getMemReservedCapacity() + host.getMemUsedCapacity(); - Long cpu = host.getCpuReservedCapacity() + host.getCpuUsedCapacity(); - - Float memWithOverprovisioning = host.getTotalMemory() * ApiDBUtils.getMemOverprovisioningFactor(host.getClusterId()); - hostResponse.setMemoryTotal(memWithOverprovisioning.longValue()); - hostResponse.setMemWithOverprovisioning(decimalFormat.format(memWithOverprovisioning)); - hostResponse.setMemoryAllocated(mem); - hostResponse.setMemoryAllocatedBytes(mem); - hostResponse.setMemoryAllocatedPercentage(calculateResourceAllocatedPercentage(mem, memWithOverprovisioning)); - + if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.core)) { String hostTags = host.getTag(); hostResponse.setHostTags(hostTags); - hostResponse.setIsTagARule(host.getIsTagARule()); - hostResponse.setHaHost(containsHostHATag(hostTags)); hostResponse.setExplicitHostTags(host.getExplicitTag()); hostResponse.setImplicitHostTags(host.getImplicitTag()); - - hostResponse.setHypervisorVersion(host.getHypervisorVersion()); - if (host.getArch() != null) { - hostResponse.setArch(host.getArch().getType()); - } - hostResponse.setStorageAccessGroups(host.getStorageAccessGroups()); hostResponse.setClusterStorageAccessGroups(host.getClusterStorageAccessGroups()); hostResponse.setPodStorageAccessGroups(host.getPodStorageAccessGroups()); hostResponse.setZoneStorageAccessGroups(host.getZoneStorageAccessGroups()); - float cpuWithOverprovisioning = host.getCpus() * host.getSpeed() * cpuOverprovisioningFactor; - hostResponse.setCpuAllocatedValue(cpu); - String cpuAllocated = calculateResourceAllocatedPercentage(cpu, cpuWithOverprovisioning); - hostResponse.setCpuAllocated(cpuAllocated); - hostResponse.setCpuAllocatedPercentage(cpuAllocated); - hostResponse.setCpuAllocatedWithOverprovisioning(cpuAllocated); - hostResponse.setCpuWithOverprovisioning(decimalFormat.format(cpuWithOverprovisioning)); + if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity)) { + // set allocated capacities + Long mem = host.getMemReservedCapacity() + host.getMemUsedCapacity(); + Long cpu = host.getCpuReservedCapacity() + host.getCpuUsedCapacity(); + + Float memWithOverprovisioning = host.getTotalMemory() * ApiDBUtils.getMemOverprovisioningFactor(host.getClusterId()); + hostResponse.setMemoryTotal(memWithOverprovisioning.longValue()); + hostResponse.setMemWithOverprovisioning(decimalFormat.format(memWithOverprovisioning)); + hostResponse.setMemoryAllocated(mem); + hostResponse.setMemoryAllocatedBytes(mem); + hostResponse.setMemoryAllocatedPercentage(calculateResourceAllocatedPercentage(mem, memWithOverprovisioning)); + + hostResponse.setIsTagARule(host.getIsTagARule()); + hostResponse.setHaHost(containsHostHATag(hostTags)); + + hostResponse.setHypervisorVersion(host.getHypervisorVersion()); + if (host.getArch() != null) { + hostResponse.setArch(host.getArch().getType()); + } + + float cpuWithOverprovisioning = host.getCpus() * host.getSpeed() * cpuOverprovisioningFactor; + hostResponse.setCpuAllocatedValue(cpu); + String cpuAllocated = calculateResourceAllocatedPercentage(cpu, cpuWithOverprovisioning); + hostResponse.setCpuAllocated(cpuAllocated); + hostResponse.setCpuAllocatedPercentage(cpuAllocated); + hostResponse.setCpuAllocatedWithOverprovisioning(cpuAllocated); + hostResponse.setCpuWithOverprovisioning(decimalFormat.format(cpuWithOverprovisioning)); + } } if (details.contains(HostDetails.all) || details.contains(HostDetails.stats)) { @@ -379,11 +344,7 @@ public HostResponse newMinimalHostResponse(HostJoinVO host) { @Override public HostResponse newHostResponse(HostJoinVO host, EnumSet details) { HostResponse hostResponse = new HostResponse(); - if (details.contains(HostDetails.core)) { - setNewCoreHostResponse(host, hostResponse); - } else { - setNewHostResponseBase(host, details, hostResponse); - } + setNewHostResponseBase(host, details, hostResponse); return hostResponse; } From 2a4995ce7ff594771fd7385eac49e0f2abb56407 Mon Sep 17 00:00:00 2001 From: nvazquez Date: Fri, 26 Jun 2026 15:47:59 -0300 Subject: [PATCH 3/3] Include msid response and integrate core details into the base response method --- .../cloudstack/api/response/HostResponse.java | 12 ++ .../cloud/api/query/dao/HostJoinDaoImpl.java | 159 +++++++++--------- 2 files changed, 96 insertions(+), 75 deletions(-) diff --git a/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java b/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java index 5d085d1bee05..324cc31177a7 100644 --- a/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java +++ b/api/src/main/java/org/apache/cloudstack/api/response/HostResponse.java @@ -197,6 +197,10 @@ public class HostResponse extends BaseResponseWithAnnotations { @Param(description = "the virtual machine id for host type ConsoleProxy and SecondaryStorageVM", since = "4.21.0") private String virtualMachineId; + @SerializedName("msid") + @Param(description = "(only for details=core) the msid of the host's management server") + private Long msId; + @SerializedName(ApiConstants.MANAGEMENT_SERVER_ID) @Param(description = "The management server ID of the host") private String managementServerId; @@ -488,6 +492,14 @@ public void setVirtualMachineId(String virtualMachineId) { this.virtualMachineId = virtualMachineId; } + public Long getMsId() { + return msId; + } + + public void setMsId(Long msId) { + this.msId = msId; + } + public void setManagementServerId(String managementServerId) { this.managementServerId = managementServerId; } diff --git a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java index a5496576c401..7e149020cb00 100644 --- a/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/HostJoinDaoImpl.java @@ -131,26 +131,16 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail hostResponse.setHypervisor(hypervisorType); } hostResponse.setHostType(host.getType()); - if (host.getType().equals(Host.Type.ConsoleProxy) || host.getType().equals(Host.Type.SecondaryStorageVM)) { + if (!details.contains(HostDetails.core) && (host.getType().equals(Host.Type.ConsoleProxy) || host.getType().equals(Host.Type.SecondaryStorageVM))) { VMInstanceVO vm = virtualMachineDao.findVMByInstanceNameIncludingRemoved(host.getName()); if (vm != null) { hostResponse.setVirtualMachineId(vm.getUuid()); } } hostResponse.setLastPinged(new Date(host.getLastPinged())); - Long mshostId = host.getManagementServerId(); - if (mshostId != null) { - if (details.contains(HostDetails.core)) { - // msid is returned as-is; callers resolve it to avoid a per-host lookup - hostResponse.setManagementServerId(mshostId.toString()); - } else { - ManagementServerHostVO managementServer = managementServerHostDao.findByMsid(host.getManagementServerId()); - if (managementServer != null) { - hostResponse.setManagementServerId(managementServer.getUuid()); - hostResponse.setManagementServerName(managementServer.getName()); - } - } - } + + setManagementServerResponse(hostResponse, host, details); + hostResponse.setName(host.getName()); hostResponse.setPodId(host.getPodUuid()); hostResponse.setRemoved(host.getRemoved()); @@ -160,46 +150,46 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail hostResponse.setVersion(host.getVersion()); hostResponse.setCreated(host.getCreated()); - List gpuGroups = ApiDBUtils.getGpuGroups(host.getId()); - if (gpuGroups != null && !gpuGroups.isEmpty()) { - List gpus = new ArrayList(); - long gpuRemaining = 0; - long gpuTotal = 0; - for (HostGpuGroupsVO entry : gpuGroups) { - GpuResponse gpuResponse = new GpuResponse(); - gpuResponse.setGpuGroupName(entry.getGroupName()); - List vgpuTypes = ApiDBUtils.getVgpus(entry.getId()); - if (vgpuTypes != null && !vgpuTypes.isEmpty()) { - List vgpus = new ArrayList(); - for (VGPUTypesVO vgpuType : vgpuTypes) { - VgpuResponse vgpuResponse = new VgpuResponse(); - vgpuResponse.setName(vgpuType.getVgpuType()); - vgpuResponse.setVideoRam(vgpuType.getVideoRam()); - vgpuResponse.setMaxHeads(vgpuType.getMaxHeads()); - vgpuResponse.setMaxResolutionX(vgpuType.getMaxResolutionX()); - vgpuResponse.setMaxResolutionY(vgpuType.getMaxResolutionY()); - vgpuResponse.setMaxVgpuPerPgpu(vgpuType.getMaxVgpuPerPgpu()); - vgpuResponse.setRemainingCapacity(vgpuType.getRemainingCapacity()); - vgpuResponse.setmaxCapacity(vgpuType.getMaxCapacity()); - vgpus.add(vgpuResponse); - gpuRemaining += vgpuType.getRemainingCapacity(); - gpuTotal += vgpuType.getMaxCapacity(); + if (!details.contains(HostDetails.core)) { + List gpuGroups = ApiDBUtils.getGpuGroups(host.getId()); + if (gpuGroups != null && !gpuGroups.isEmpty()) { + List gpus = new ArrayList(); + long gpuRemaining = 0; + long gpuTotal = 0; + for (HostGpuGroupsVO entry : gpuGroups) { + GpuResponse gpuResponse = new GpuResponse(); + gpuResponse.setGpuGroupName(entry.getGroupName()); + List vgpuTypes = ApiDBUtils.getVgpus(entry.getId()); + if (vgpuTypes != null && !vgpuTypes.isEmpty()) { + List vgpus = new ArrayList(); + for (VGPUTypesVO vgpuType : vgpuTypes) { + VgpuResponse vgpuResponse = new VgpuResponse(); + vgpuResponse.setName(vgpuType.getVgpuType()); + vgpuResponse.setVideoRam(vgpuType.getVideoRam()); + vgpuResponse.setMaxHeads(vgpuType.getMaxHeads()); + vgpuResponse.setMaxResolutionX(vgpuType.getMaxResolutionX()); + vgpuResponse.setMaxResolutionY(vgpuType.getMaxResolutionY()); + vgpuResponse.setMaxVgpuPerPgpu(vgpuType.getMaxVgpuPerPgpu()); + vgpuResponse.setRemainingCapacity(vgpuType.getRemainingCapacity()); + vgpuResponse.setmaxCapacity(vgpuType.getMaxCapacity()); + vgpus.add(vgpuResponse); + gpuRemaining += vgpuType.getRemainingCapacity(); + gpuTotal += vgpuType.getMaxCapacity(); + } + gpuResponse.setVgpu(vgpus); } - gpuResponse.setVgpu(vgpus); + gpus.add(gpuResponse); } - gpus.add(gpuResponse); + hostResponse.setGpuTotal(gpuTotal); + hostResponse.setGpuUsed(gpuTotal - gpuRemaining); + hostResponse.setGpuGroup(gpus); } - hostResponse.setGpuTotal(gpuTotal); - hostResponse.setGpuUsed(gpuTotal - gpuRemaining); - hostResponse.setGpuGroup(gpus); - } - if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.stats) || details.contains(HostDetails.events)) { - hostResponse.setOsCategoryId(host.getOsCategoryUuid()); - hostResponse.setOsCategoryName(host.getOsCategoryName()); } if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.core) || details.contains(HostDetails.stats) || details.contains(HostDetails.events)) { + hostResponse.setOsCategoryId(host.getOsCategoryUuid()); + hostResponse.setOsCategoryName(host.getOsCategoryName()); hostResponse.setZoneName(host.getZoneName()); hostResponse.setPodName(host.getPodName()); if (host.getClusterId() > 0) { @@ -210,7 +200,6 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail DecimalFormat decimalFormat = new DecimalFormat("#.##"); if (host.getType() == Host.Type.Routing) { - float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor(host.getClusterId()); if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity) || details.contains(HostDetails.core)) { String hostTags = host.getTag(); hostResponse.setHostTags(hostTags); @@ -220,8 +209,10 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail hostResponse.setClusterStorageAccessGroups(host.getClusterStorageAccessGroups()); hostResponse.setPodStorageAccessGroups(host.getPodStorageAccessGroups()); hostResponse.setZoneStorageAccessGroups(host.getZoneStorageAccessGroups()); + hostResponse.setHypervisorVersion(host.getHypervisorVersion()); - if (details.contains(HostDetails.all) || details.contains(HostDetails.capacity)) { + if (!details.contains(HostDetails.core)) { + float cpuOverprovisioningFactor = ApiDBUtils.getCpuOverprovisioningFactor(host.getClusterId()); // set allocated capacities Long mem = host.getMemReservedCapacity() + host.getMemUsedCapacity(); Long cpu = host.getCpuReservedCapacity() + host.getCpuUsedCapacity(); @@ -236,7 +227,6 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail hostResponse.setIsTagARule(host.getIsTagARule()); hostResponse.setHaHost(containsHostHATag(hostTags)); - hostResponse.setHypervisorVersion(host.getHypervisorVersion()); if (host.getArch() != null) { hostResponse.setArch(host.getArch().getType()); } @@ -267,27 +257,29 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail } } - Map hostDetails = hostDetailsDao.findDetails(host.getId()); - if (hostDetails != null) { - if (hostDetails.containsKey(Host.HOST_UEFI_ENABLE)) { - hostResponse.setUefiCapability(Boolean.parseBoolean((String) hostDetails.get(Host.HOST_UEFI_ENABLE))); - } else { - hostResponse.setUefiCapability(new Boolean(false)); + if (!details.contains(HostDetails.core)) { + Map hostDetails = hostDetailsDao.findDetails(host.getId()); + if (hostDetails != null) { + if (hostDetails.containsKey(Host.HOST_UEFI_ENABLE)) { + hostResponse.setUefiCapability(Boolean.parseBoolean((String) hostDetails.get(Host.HOST_UEFI_ENABLE))); + } else { + hostResponse.setUefiCapability(new Boolean(false)); + } } - } - if (details.contains(HostDetails.all) && - Arrays.asList(Hypervisor.HypervisorType.KVM, - Hypervisor.HypervisorType.Custom, - Hypervisor.HypervisorType.External).contains(host.getHypervisorType())) { - //only kvm has the requirement to return host details - try { - hostResponse.setDetails(hostDetails, host.getHypervisorType()); - } catch (Exception e) { - logger.debug("failed to get host details", e); + if (details.contains(HostDetails.all) && + Arrays.asList(Hypervisor.HypervisorType.KVM, + Hypervisor.HypervisorType.Custom, + Hypervisor.HypervisorType.External).contains(host.getHypervisorType())) { + //only kvm has the requirement to return host details + try { + hostResponse.setDetails(hostDetails, host.getHypervisorType()); + } catch (Exception e) { + logger.debug("failed to get host details", e); + } } } - } else if (host.getType() == Host.Type.SecondaryStorage) { + } else if (host.getType() == Host.Type.SecondaryStorage && !details.contains(HostDetails.core)) { StorageStats secStorageStats = ApiDBUtils.getSecondaryStorageStatistics(host.getId()); if (secStorageStats != null) { hostResponse.setDiskSizeTotal(secStorageStats.getCapacityBytes()); @@ -295,7 +287,16 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail } } - hostResponse.setLocalStorageActive(ApiDBUtils.isLocalStorageActiveOnHost(host.getId())); + if (!details.contains(HostDetails.core)) { + hostResponse.setLocalStorageActive(ApiDBUtils.isLocalStorageActiveOnHost(host.getId())); + hostResponse.setHostHAResponse(haConfigDao.findHAResource(host.getId(), HAResource.ResourceType.Host)); + hostResponse.setOutOfBandManagementResponse(outOfBandManagementDao.findByHost(host.getId())); + hostResponse.setHasAnnotation(annotationDao.hasAnnotations(host.getUuid(), AnnotationService.EntityType.HOST.name(), + accountManager.isRootAdmin(CallContext.current().getCallingAccount().getId()))); + hostResponse.setAnnotation(host.getAnnotation()); + hostResponse.setLastAnnotated(host.getLastAnnotated()); + hostResponse.setUsername(host.getUsername()); + } if (details.contains(HostDetails.all) || details.contains(HostDetails.events)) { Set possibleEvents = host.getStatus().getPossibleEvents(); @@ -313,8 +314,6 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail } } - hostResponse.setHostHAResponse(haConfigDao.findHAResource(host.getId(), HAResource.ResourceType.Host)); - hostResponse.setOutOfBandManagementResponse(outOfBandManagementDao.findByHost(host.getId())); hostResponse.setResourceState(host.getResourceState().toString()); // set async job @@ -322,15 +321,25 @@ private void setNewHostResponseBase(HostJoinVO host, EnumSet detail hostResponse.setJobId(host.getJobUuid()); hostResponse.setJobStatus(host.getJobStatus()); } - hostResponse.setHasAnnotation(annotationDao.hasAnnotations(host.getUuid(), AnnotationService.EntityType.HOST.name(), - accountManager.isRootAdmin(CallContext.current().getCallingAccount().getId()))); - hostResponse.setAnnotation(host.getAnnotation()); - hostResponse.setLastAnnotated(host.getLastAnnotated ()); - hostResponse.setUsername(host.getUsername()); hostResponse.setObjectName("host"); } + private void setManagementServerResponse(HostResponse hostResponse, HostJoinVO host, EnumSet details) { + if (host.getManagementServerId() != null) { + if (details.size() == 1 && details.contains(HostDetails.core)) { + // msid is returned as-is; callers resolve it to avoid a per-host lookup + hostResponse.setMsId(host.getManagementServerId()); + } else { + ManagementServerHostVO managementServer = managementServerHostDao.findByMsid(host.getManagementServerId()); + if (managementServer != null) { + hostResponse.setManagementServerId(managementServer.getUuid()); + hostResponse.setManagementServerName(managementServer.getName()); + } + } + } + } + @Override public HostResponse newMinimalHostResponse(HostJoinVO host) { HostResponse hostResponse = new HostResponse();