This is an automated email from the ASF dual-hosted git repository. sureshanaparti pushed a commit to branch 4.22 in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 5caf6cd043f2ba7f23bb0a7128483f285a095584 Merge: 11df71e55cc 32c0cdbed98 Author: Suresh Kumar Anaparti <[email protected]> AuthorDate: Thu Feb 19 13:19:14 2026 +0530 Merge branch '4.20' into 4.22 api/src/main/java/com/cloud/host/Host.java | 3 ++ .../api/command/admin/host/AddHostCmd.java | 3 +- .../main/java/com/cloud/agent/AgentManager.java | 6 ++++ .../com/cloud/agent/manager/AgentManagerImpl.java | 23 +++++++++++++-- .../cloud/agent/manager/AgentManagerImplTest.java | 33 ++++++++++++++++++++++ .../java/com/cloud/storage/dao/VolumeDaoImpl.java | 13 ++++----- .../storage/volume/VolumeServiceImpl.java | 3 ++ .../cloudstack/backup/NetworkerBackupProvider.java | 17 +++++++++-- .../cloudstack/mom/rabbitmq/RabbitMQEventBus.java | 2 +- .../api/command/OauthLoginAPIAuthenticatorCmd.java | 6 +--- .../api/command/SAML2LoginAPIAuthenticatorCmd.java | 10 +++++-- server/src/main/java/com/cloud/api/ApiServlet.java | 13 +++++---- .../DefaultForgotPasswordAPIAuthenticatorCmd.java | 6 ++-- .../api/auth/DefaultLoginAPIAuthenticatorCmd.java | 12 +++----- .../DefaultResetPasswordAPIAuthenticatorCmd.java | 1 - .../kvm/discoverer/LibvirtServerDiscoverer.java | 10 ++++++- .../com/cloud/resource/ResourceManagerImpl.java | 4 +-- .../cloud/resource/ResourceManagerImplTest.java | 2 ++ .../java/com/cloud/utils/ssh/SSHCmdHelper.java | 2 +- 19 files changed, 128 insertions(+), 41 deletions(-) diff --cc engine/components-api/src/main/java/com/cloud/agent/AgentManager.java index 0aa5805b160,f70ab494fdc..4d63fae3356 --- a/engine/components-api/src/main/java/com/cloud/agent/AgentManager.java +++ b/engine/components-api/src/main/java/com/cloud/agent/AgentManager.java @@@ -171,5 -175,5 +175,7 @@@ public interface AgentManager void propagateChangeToAgents(Map<String, String> params); + boolean transferDirectAgentsFromMS(String fromMsUuid, long fromMsId, long timeoutDurationInMs, boolean excludeHostsInMaintenance); ++ + int getHostSshPort(HostVO host); } diff --cc engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java index 3d398ca5dd9,ebe0465e3f0..9e85be87db3 --- a/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java @@@ -42,12 -40,9 +42,13 @@@ import java.util.stream.Collectors import javax.inject.Inject; import javax.naming.ConfigurationException; + import com.cloud.utils.StringUtils; import org.apache.cloudstack.agent.lb.IndirectAgentLB; import org.apache.cloudstack.ca.CAManager; +import org.apache.cloudstack.command.ReconcileCommandService; +import org.apache.cloudstack.command.ReconcileCommandUtils; +import org.apache.cloudstack.command.ReconcileCommandVO; +import org.apache.cloudstack.command.dao.ReconcileCommandDao; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.framework.config.Configurable; @@@ -2231,11 -2093,25 +2231,30 @@@ public class AgentManagerImpl extends M } } + @Override + public boolean transferDirectAgentsFromMS(String fromMsUuid, long fromMsId, long timeoutDurationInMs, boolean excludeHostsInMaintenance) { + return true; + } + + @Override + public int getHostSshPort(HostVO host) { + if (host == null) { + return KVMHostDiscoverySshPort.value(); + } + + if (host.getHypervisorType() != HypervisorType.KVM) { + return Host.DEFAULT_SSH_PORT; + } + + _hostDao.loadDetails(host); + String hostPort = host.getDetail(Host.HOST_SSH_PORT); + if (StringUtils.isBlank(hostPort)) { + return KVMHostDiscoverySshPort.valueIn(host.getClusterId()); + } + + return Integer.parseInt(hostPort); + } + private GlobalLock getHostJoinLock(Long hostId) { return GlobalLock.getInternLock(String.format("%s-%s", "Host-Join", hostId)); } diff --cc plugins/backup/networker/src/main/java/org/apache/cloudstack/backup/NetworkerBackupProvider.java index 66b633e11a9,3f14ab259a0..4cf4bd111ef --- a/plugins/backup/networker/src/main/java/org/apache/cloudstack/backup/NetworkerBackupProvider.java +++ b/plugins/backup/networker/src/main/java/org/apache/cloudstack/backup/NetworkerBackupProvider.java @@@ -122,18 -118,9 +123,21 @@@ public class NetworkerBackupProvider ex @Inject private VMInstanceDao vmInstanceDao; + @Inject + private VMTemplateDao vmTemplateDao; + + @Inject + ServiceOfferingDao serviceOfferingDao; + + @Inject + private BackupManager backupManager; + + @Inject + private DiskOfferingDao diskOfferingDao; + + @Inject + private AgentManager agentMgr; + private static String getUrlDomain(String url) throws URISyntaxException { URI uri; try { @@@ -251,13 -233,18 +255,18 @@@ String nstRegex = "\\bcompleted savetime=([0-9]{10})"; Pattern saveTimePattern = Pattern.compile(nstRegex); + if (host == null) { + LOG.warn("Unable to take backup, host is null"); + return null; + } + try { - Pair<Boolean, String> response = SshHelper.sshExecute(host.getPrivateIpAddress(), 22, + Pair<Boolean, String> response = SshHelper.sshExecute(host.getPrivateIpAddress(), agentMgr.getHostSshPort(host), username, null, password, command, 120000, 120000, 3600000); if (!response.first()) { - LOG.error(String.format("Backup Script failed on HYPERVISOR %s due to: %s", host, response.second())); + LOG.error("Backup Script failed on HYPERVISOR {} due to: {}", host, response.second()); } else { - LOG.debug(String.format("Networker Backup Results: %s", response.second())); + LOG.debug("Networker Backup Results: {}", response.second()); } Matcher saveTimeMatcher = saveTimePattern.matcher(response.second()); if (saveTimeMatcher.find()) { diff --cc server/src/main/java/com/cloud/api/ApiServlet.java index db17daaf146,01cb21681b0..93d8e09520a --- a/server/src/main/java/com/cloud/api/ApiServlet.java +++ b/server/src/main/java/com/cloud/api/ApiServlet.java @@@ -37,7 -34,7 +37,8 @@@ import javax.servlet.http.HttpServletRe import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.cloudstack.api.APICommand; + import com.cloud.api.auth.DefaultForgotPasswordAPIAuthenticatorCmd; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.ApiServerService; diff --cc server/src/main/java/com/cloud/resource/ResourceManagerImpl.java index 0e1b7cdbc80,cc789bf5650..621b110486b --- a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java @@@ -851,10 -776,27 +851,9 @@@ public class ResourceManagerImpl extend _clusterDetailsDao.persist(cluster_cpu_detail); _clusterDetailsDao.persist(cluster_memory_detail); } - } - try { - uri = new URI(UriUtils.encodeURIComponent(url)); - if (uri.getScheme() == null) { - throw new InvalidParameterValueException("uri.scheme is null " + url + ", add nfs:// (or cifs://) as a prefix"); - } else if (uri.getScheme().equalsIgnoreCase("nfs")) { - if (uri.getHost() == null || uri.getHost().equalsIgnoreCase("") || uri.getPath() == null || uri.getPath().equalsIgnoreCase("")) { - throw new InvalidParameterValueException("Your host and/or path is wrong. Make sure it's of the format nfs://hostname/path"); - } - } else if (uri.getScheme().equalsIgnoreCase("cifs")) { - // Don't validate against a URI encoded URI. - final URI cifsUri = new URI(url); - final String warnMsg = UriUtils.getCifsUriParametersProblems(cifsUri); - if (warnMsg != null) { - throw new InvalidParameterValueException(warnMsg); - } - } - } catch (final URISyntaxException e) { - throw new InvalidParameterValueException(url + " is not a valid uri"); - } + uri = validatedHostUrl(url, hypervisorType); final List<HostVO> hosts = new ArrayList<>(); logger.info("Trying to add a new host at {} in data center {}", url, zone);
