You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by sh...@apache.org on 2026/08/18 13:55:57 UTC
(cloudstack) 23/23: build: fix after forward-merge
This is an automated email from the ASF dual-hosted git repository.
shwstppr pushed a commit to branch 4.22
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 7fc063ec13df5b4ae3dfd32242396e7e68436608
Author: Abhishek Kumar <ab...@gmail.com>
AuthorDate: Tue Aug 18 19:24:22 2026 +0530
build: fix after forward-merge
Signed-off-by: Abhishek Kumar <ab...@gmail.com>
---
.../com/cloud/resource/ResourceManagerImpl.java | 47 +++++++++++++++++-----
.../com/cloud/template/TemplateManagerImpl.java | 8 +---
.../java/com/cloud/user/AccountManagerImpl.java | 5 +--
3 files changed, 41 insertions(+), 19 deletions(-)
diff --git a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java
index 00e9cec90d8..26532354720 100755
--- a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java
@@ -42,16 +42,6 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import com.cloud.gpu.dao.VgpuProfileDao;
-import com.cloud.offering.ServiceOffering;
-import com.cloud.service.ServiceOfferingDetailsVO;
-import com.cloud.storage.ScopeType;
-import com.cloud.storage.StoragePoolAndAccessGroupMapVO;
-import com.cloud.storage.dao.StoragePoolAndAccessGroupMapDao;
-import com.cloud.storage.dao.StoragePoolTagsDao;
-import com.cloud.gpu.GpuCardVO;
-import com.cloud.gpu.VgpuProfileVO;
-import com.cloud.gpu.dao.GpuCardDao;
import org.apache.cloudstack.alert.AlertService;
import org.apache.cloudstack.annotation.AnnotationService;
import org.apache.cloudstack.annotation.dao.AnnotationDao;
@@ -154,10 +144,14 @@ import com.cloud.exception.ResourceUnavailableException;
import com.cloud.exception.StorageConflictException;
import com.cloud.exception.StorageUnavailableException;
import com.cloud.gpu.GPU;
+import com.cloud.gpu.GpuCardVO;
import com.cloud.gpu.HostGpuGroupsVO;
import com.cloud.gpu.VGPUTypesVO;
+import com.cloud.gpu.VgpuProfileVO;
+import com.cloud.gpu.dao.GpuCardDao;
import com.cloud.gpu.dao.HostGpuGroupsDao;
import com.cloud.gpu.dao.VGPUTypesDao;
+import com.cloud.gpu.dao.VgpuProfileDao;
import com.cloud.ha.HighAvailabilityManager;
import com.cloud.ha.HighAvailabilityManager.WorkType;
import com.cloud.ha.HighAvailabilityManagerImpl;
@@ -178,17 +172,21 @@ import com.cloud.hypervisor.HypervisorGuru;
import com.cloud.hypervisor.kvm.discoverer.KvmDummyResourceBase;
import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.IPAddressVO;
+import com.cloud.offering.ServiceOffering;
import com.cloud.org.Cluster;
import com.cloud.org.Grouping;
import com.cloud.org.Managed;
import com.cloud.serializer.GsonHelper;
import com.cloud.server.ManagementService;
+import com.cloud.service.ServiceOfferingDetailsVO;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.service.dao.ServiceOfferingDetailsDao;
import com.cloud.storage.GuestOSCategoryVO;
+import com.cloud.storage.ScopeType;
import com.cloud.storage.StorageManager;
import com.cloud.storage.StoragePool;
+import com.cloud.storage.StoragePoolAndAccessGroupMapVO;
import com.cloud.storage.StoragePoolHostVO;
import com.cloud.storage.StoragePoolStatus;
import com.cloud.storage.StorageService;
@@ -196,7 +194,9 @@ import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.Volume;
import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.GuestOSCategoryDao;
+import com.cloud.storage.dao.StoragePoolAndAccessGroupMapDao;
import com.cloud.storage.dao.StoragePoolHostDao;
+import com.cloud.storage.dao.StoragePoolTagsDao;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VolumeDao;
import com.cloud.user.Account;
@@ -719,6 +719,7 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
String hypervisorType =
cmd.getHypervisor().equalsIgnoreCase(HypervisorGuru.HypervisorCustomDisplayName.value()) ?
"Custom" : cmd.getHypervisor();
+ checkForDuplicateHost(url);
return discoverHostsFull(dcId, podId, clusterId, clusterName, url, username, password, hypervisorType,
hostTags, storageAccessGroups, cmd.getFullUrlParams(), false, cmd.getExternalDetails());
}
@@ -3523,6 +3524,32 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
return host;
}
+ void checkForDuplicateHost(final String url) {
+ String hostIpOrName = null;
+ String ipAddress = null;
+ try {
+ hostIpOrName = new URI(UriUtils.encodeURIComponent(url)).getHost();
+ if (StringUtils.isBlank(hostIpOrName)) {
+ return;
+ }
+ InetAddress ip = InetAddress.getByName(hostIpOrName);
+ ipAddress = ip.getHostAddress();
+ } catch (final URISyntaxException | UnknownHostException ignore) {
+ // unparseable URL or unknown host - discoverer will reject it shortly anyway
+ return;
+ }
+
+ if (StringUtils.isNotBlank(ipAddress)) {
+ final HostVO existingByIp = _hostDao.findByIp(ipAddress);
+ // findByIp matches hosts of any type; only a Routing host is a duplicate for addHost
+ if (existingByIp != null && Host.Type.Routing.equals(existingByIp.getType())) {
+ throw new InvalidParameterValueException(String.format(
+ "A host with IP address '%s' (%s) already exists (id: %s). Remove it before adding again.",
+ ipAddress, hostIpOrName, existingByIp.getUuid()));
+ }
+ }
+ }
+
private Host createHostAndAgentDeferred(final ServerResource resource, final Map<String, String> details, final boolean old, final List<String> hostTags, List<String> storageAccessGroups, final boolean forRebalance) {
HostVO host = null;
StartupCommand[] cmds = null;
diff --git a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
index 39870ebaafd..13c47e83bfc 100755
--- a/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/main/java/com/cloud/template/TemplateManagerImpl.java
@@ -322,6 +322,8 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
private SecondaryStorageHeuristicDao secondaryStorageHeuristicDao;
@Inject
private HeuristicRuleHelper heuristicRuleHelper;
+ @Inject
+ private UserDataDao userDataDao;
private List<TemplateAdapter> _adapters;
@@ -329,12 +331,6 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
protected boolean backupSnapshotAfterTakingSnapshot = SnapshotInfo.BackupSnapshotAfterTakingSnapshot.value();
- @Inject
- private UserDataDao userDataDao;
-
- @Inject
- private UserDataDao userDataDao;
-
private TemplateAdapter getAdapter(HypervisorType type) {
TemplateAdapter adapter = null;
if (type == HypervisorType.BareMetal) {
diff --git a/server/src/main/java/com/cloud/user/AccountManagerImpl.java b/server/src/main/java/com/cloud/user/AccountManagerImpl.java
index a09b8b329f4..b4c23beaef2 100644
--- a/server/src/main/java/com/cloud/user/AccountManagerImpl.java
+++ b/server/src/main/java/com/cloud/user/AccountManagerImpl.java
@@ -42,8 +42,8 @@ import javax.crypto.spec.SecretKeySpec;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import org.apache.cloudstack.acl.APIChecker;
import org.apache.cloudstack.acl.APIAclChecker;
+import org.apache.cloudstack.acl.APIChecker;
import org.apache.cloudstack.acl.ControlledEntity;
import org.apache.cloudstack.acl.InfrastructureEntity;
import org.apache.cloudstack.acl.QuerySelector;
@@ -176,10 +176,9 @@ import com.cloud.user.dao.UserDataDao;
import com.cloud.utils.ConstantTimeComparator;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
-import com.cloud.utils.Ternary;
-import com.cloud.utils.UuidUtils;
import com.cloud.utils.StringUtils;
import com.cloud.utils.Ternary;
+import com.cloud.utils.UuidUtils;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.Manager;
import com.cloud.utils.component.ManagerBase;