This is an automated email from the ASF dual-hosted git repository. sureshanaparti pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 2d6280b9daa7abea59be891b10ba6d405c57dc78 Merge: 82bfa9fb3f4 13a2c7793c2 Author: Suresh Kumar Anaparti <[email protected]> AuthorDate: Fri Apr 17 04:35:25 2026 +0530 Merge branch '4.22' agent/conf/agent.properties | 13 + .../cloud/agent/properties/AgentProperties.java | 24 + .../com/cloud/agent/api/to/RemoteInstanceTO.java | 20 +- api/src/main/java/com/cloud/host/Host.java | 3 + .../org/apache/cloudstack/api/ApiConstants.java | 3 +- .../api/command/admin/vm/ImportVmCmd.java | 12 + .../api/command/user/bucket/DeleteBucketCmd.java | 3 +- .../apache/cloudstack/backup/BackupManager.java | 2 +- .../storage/object/BucketApiService.java | 2 +- .../agent/api/CheckConvertInstanceCommand.java | 23 + .../cloud/agent/api/ConvertInstanceCommand.java | 36 + .../agent/api/PropagateResourceEventCommand.java | 17 + .../api/routing/LoadBalancerConfigCommand.java | 4 +- .../com/cloud/network/HAProxyConfigurator.java | 13 + .../resource/virtualnetwork/ConfigHelperTest.java | 2 +- .../virtualnetwork/VirtualRoutingResourceTest.java | 4 +- .../com/cloud/network/HAProxyConfiguratorTest.java | 32 +- .../service/NetworkOrchestrationService.java | 8 + .../java/com/cloud/resource/ResourceManager.java | 2 + .../com/cloud/agent/manager/AgentManagerImpl.java | 25 +- .../agent/manager/ClusteredAgentManagerImpl.java | 11 +- .../engine/orchestration/NetworkOrchestrator.java | 468 ++++++------- .../cloud/upgrade/DatabaseVersionHierarchy.java | 5 +- .../com/cloud/upgrade/dao/Upgrade42020to42030.java | 4 - .../resources/META-INF/db/schema-42000to42010.sql | 2 +- .../resources/META-INF/db/schema-42200to42210.sql | 7 + .../cloud/upgrade/DatabaseUpgradeCheckerTest.java | 20 + .../kvm/resource/LibvirtComputingResource.java | 162 +++++ .../LibvirtCheckConvertInstanceCommandWrapper.java | 10 +- .../LibvirtConvertInstanceCommandWrapper.java | 307 ++++++-- .../wrapper/LibvirtReadyCommandWrapper.java | 4 + ...virtCheckConvertInstanceCommandWrapperTest.java | 25 + .../LibvirtConvertInstanceCommandWrapperTest.java | 124 ++++ ...ernetesClusterResourceModifierActionWorker.java | 2 +- .../KubernetesClusterScaleWorker.java | 8 +- .../network/lb/ElasticLoadBalancerManagerImpl.java | 3 +- .../lb/InternalLoadBalancerVMManagerImpl.java | 3 +- .../apache/cloudstack/service/NsxApiClient.java | 218 ++++-- .../apache/cloudstack/service/PagedFetcher.java | 82 +++ .../cloudstack/service/NsxApiClientTest.java | 311 +++++++++ .../cloudstack/service/PagedFetcherTest.java | 156 +++++ .../java/com/cloud/network/NetworkServiceImpl.java | 28 +- .../cloud/network/router/CommandSetupHelper.java | 3 +- .../router/VirtualNetworkApplianceManagerImpl.java | 2 +- .../java/com/cloud/network/vpc/VpcManagerImpl.java | 34 +- .../com/cloud/projects/ProjectManagerImpl.java | 111 ++- .../com/cloud/resource/ResourceManagerImpl.java | 24 +- .../cloud/storage/ImageStoreUploadMonitorImpl.java | 2 +- .../java/com/cloud/storage/StorageManagerImpl.java | 18 +- .../com/cloud/storage/VolumeApiServiceImpl.java | 24 +- .../cloud/storage/download/DownloadListener.java | 4 +- .../storage/snapshot/SnapshotManagerImpl.java | 22 +- .../com/cloud/template/TemplateManagerImpl.java | 21 +- .../main/java/com/cloud/vm/UserVmManagerImpl.java | 161 ++--- .../cloud/vm/snapshot/VMSnapshotManagerImpl.java | 54 +- .../cloudstack/backup/BackupManagerImpl.java | 29 +- .../storage/object/BucketApiServiceImpl.java | 63 +- .../volume/VolumeImportUnmanageManagerImpl.java | 20 +- .../cloudstack/vm/UnmanagedVMsManagerImpl.java | 386 ++++++++--- .../java/com/cloud/hypervisor/KVMGuruTest.java | 50 +- .../com/cloud/network/vpc/VpcManagerImplTest.java | 1 + .../cloud/resource/MockResourceManagerImpl.java | 5 + .../cloud/resource/ResourceManagerImplTest.java | 27 + .../cloud/template/TemplateManagerImplTest.java | 2 +- .../java/com/cloud/vm/UserVmManagerImplTest.java | 135 +++- .../cloud/vm/snapshot/VMSnapshotManagerTest.java | 50 +- .../cloudstack/backup/BackupManagerTest.java | 14 +- .../storage/object/BucketApiServiceImplTest.java | 2 +- .../cloudstack/vm/UnmanagedVMsManagerImplTest.java | 310 ++++++++- systemvm/debian/opt/cloud/bin/cs/CsAddress.py | 47 +- systemvm/debian/opt/cloud/bin/cs/CsHelper.py | 30 + systemvm/debian/opt/cloud/bin/cs/CsNetfilter.py | 2 + systemvm/debian/opt/cloud/bin/cs/CsStaticRoutes.py | 40 +- .../debian/root/health_checks/haproxy_check.py | 43 +- .../test_redundant_router_deployment_planning.py | 770 +++++++++++---------- test/integration/smoke/test_public_ip_range.py | 68 +- ui/public/locales/en.json | 3 + ui/src/views/infra/HostInfo.vue | 16 + ui/src/views/tools/ImportUnmanagedInstance.vue | 100 ++- 79 files changed, 3626 insertions(+), 1275 deletions(-) diff --cc api/src/main/java/org/apache/cloudstack/api/ApiConstants.java index 9ec85734233,03b73834a94..7eae16a2a37 --- a/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/main/java/org/apache/cloudstack/api/ApiConstants.java @@@ -526,9 -519,9 +526,8 @@@ public class ApiConstants public static final String SCHEDULE = "schedule"; public static final String SCHEDULE_ID = "scheduleid"; public static final String SCOPE = "scope"; - public static final String USER_SECRET_KEY = "usersecretkey"; public static final String SEARCH_BASE = "searchbase"; public static final String SECONDARY_IP = "secondaryip"; - public static final String SECRET_KEY = "secretkey"; public static final String SECURITY_GROUP_IDS = "securitygroupids"; public static final String SECURITY_GROUP_NAMES = "securitygroupnames"; public static final String SECURITY_GROUP_NAME = "securitygroupname"; diff --cc api/src/main/java/org/apache/cloudstack/api/command/user/bucket/DeleteBucketCmd.java index 4a9a0569c3b,e7b940fc0ad..abbb1760f9d --- a/api/src/main/java/org/apache/cloudstack/api/command/user/bucket/DeleteBucketCmd.java +++ b/api/src/main/java/org/apache/cloudstack/api/command/user/bucket/DeleteBucketCmd.java @@@ -82,8 -83,8 +83,8 @@@ public class DeleteBucketCmd extends Ba } @Override - public void execute() throws ConcurrentOperationException { + public void execute() throws ConcurrentOperationException, ResourceAllocationException { - CallContext.current().setEventDetails("Bucket Id: " + this._uuidMgr.getUuid(Bucket.class, getId())); + CallContext.current().setEventDetails("Bucket ID: " + getResourceUuid(ApiConstants.ID)); boolean result = _bucketService.deleteBucket(id, CallContext.current().getCallingAccount()); SuccessResponse response = new SuccessResponse(getCommandName()); response.setSuccess(result); diff --cc server/src/main/java/com/cloud/projects/ProjectManagerImpl.java index 06397f5a81b,d165f0cd1b6..92af441d06b --- a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java +++ b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java @@@ -277,40 -277,39 +277,39 @@@ public class ProjectManagerImpl extend } try (CheckedReservation projectReservation = new CheckedReservation(owner, ResourceType.project, null, null, 1L, reservationDao, _resourceLimitMgr)) { + final Account ownerFinal = owner; + User finalUser = user; + Project project = Transaction.execute(new TransactionCallback<Project>() { + @Override + public Project doInTransaction(TransactionStatus status) { - final Account ownerFinal = owner; - User finalUser = user; - Project project = Transaction.execute(new TransactionCallback<Project>() { - @Override - public Project doInTransaction(TransactionStatus status) { - - //Create an account associated with the project - StringBuilder acctNm = new StringBuilder("PrjAcct-"); - acctNm.append(name).append("-").append(ownerFinal.getDomainId()); + //Create an account associated with the project + StringBuilder acctNm = new StringBuilder("PrjAcct-"); + acctNm.append(name).append("-").append(ownerFinal.getDomainId()); - Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.Type.PROJECT, null, domainId, null, null, UUID.randomUUID().toString()); + Account projectAccount = _accountMgr.createAccount(acctNm.toString(), Account.Type.PROJECT, null, domainId, null, null, UUID.randomUUID().toString()); - Project project = _projectDao.persist(new ProjectVO(name, displayText, ownerFinal.getDomainId(), projectAccount.getId())); + Project project = _projectDao.persist(new ProjectVO(name, displayText, ownerFinal.getDomainId(), projectAccount.getId())); - //assign owner to the project - assignAccountToProject(project, ownerFinal.getId(), ProjectAccount.Role.Admin, - Optional.ofNullable(finalUser).map(User::getId).orElse(null), null); + //assign owner to the project + assignAccountToProject(project, ownerFinal.getId(), ProjectAccount.Role.Admin, + Optional.ofNullable(finalUser).map(User::getId).orElse(null), null); - if (project != null) { - CallContext.current().setEventDetails("Project id=" + project.getId()); - CallContext.current().putContextParameter(Project.class, project.getUuid()); - } + if (project != null) { + CallContext.current().setEventDetails("Project ID: " + project.getUuid()); + CallContext.current().putContextParameter(Project.class, project.getUuid()); + } - //Increment resource count - _resourceLimitMgr.incrementResourceCount(ownerFinal.getId(), ResourceType.project); + //Increment resource count + _resourceLimitMgr.incrementResourceCount(ownerFinal.getId(), ResourceType.project); - return project; - } - }); + return project; + } + }); - messageBus.publish(_name, ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT, PublishScope.LOCAL, project); + messageBus.publish(_name, ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT, PublishScope.LOCAL, project); - return project; + return project; } } diff --cc server/src/main/java/com/cloud/storage/StorageManagerImpl.java index a7c700debb7,2d170049663..7c501c78bee --- a/server/src/main/java/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/main/java/com/cloud/storage/StorageManagerImpl.java @@@ -1038,7 -1033,14 +1038,11 @@@ public class StorageManagerImpl extend if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(account.getId())) { throw new PermissionDeniedException(String.format("Cannot perform this operation, Zone is currently disabled: %s", zone)); } + // Check if it's local storage and if it's enabled on the zone + if (isFileScheme && !isLocalStorageEnabledForZone(zone)) { + throw new InvalidParameterValueException("Local storage is not enabled for zone: " + zone); + } - managementService.checkJsInterpretationAllowedIfNeededForParameterValue(ApiConstants.IS_TAG_A_RULE, - Boolean.TRUE.equals(cmd.isTagARule())); - Map<String, Object> params = new HashMap<>(); params.put("zoneId", zone.getId()); params.put("clusterId", clusterId); diff --cc server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java index 341d6abe332,cb15298fbf3..ff67d73c0f4 --- a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java +++ b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java @@@ -139,19 -138,14 +144,13 @@@ import com.cloud.host.Host import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor; -import com.cloud.kubernetes.cluster.KubernetesServiceHelper; import com.cloud.network.Network; import com.cloud.network.NetworkModel; - import com.cloud.network.as.AutoScaleManager; - import com.cloud.network.dao.FirewallRulesDao; - import com.cloud.network.dao.IPAddressDao; - import com.cloud.network.dao.IPAddressVO; - import com.cloud.network.dao.LoadBalancerVMMapDao; - import com.cloud.network.dao.LoadBalancerVMMapVO; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkVO; -import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkVO; +import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.rules.PortForwardingRule;
