This is an automated email from the ASF dual-hosted git repository. weizhou pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit d81ffd2d86493e06d5f0baebd8b117086bc32667 Merge: 3e6900ac1a5 84b91cc9a3d Author: Wei Zhou <[email protected]> AuthorDate: Thu Jun 20 08:57:17 2024 +0200 Merge remote-tracking branch 'apache/4.19' PULL_REQUEST_TEMPLATE.md | 1 + .../admin/vm/ListVnfAppliancesCmdByAdmin.java | 36 ++++++++++ .../autoscale/CreateAutoScaleVmProfileCmd.java | 2 +- .../autoscale/UpdateAutoScaleVmProfileCmd.java | 2 +- .../command/user/userdata/RegisterUserDataCmd.java | 9 ++- .../api/command/user/vm/DeployVMCmd.java | 6 +- .../api/command/user/vm/ListVnfAppliancesCmd.java | 39 ++++++++++ .../api/command/user/vm/ResetVMUserDataCmd.java | 2 +- .../api/command/user/vm/UpdateVMCmd.java | 2 +- .../api/response/AutoScaleVmProfileResponse.java | 2 +- .../api/response/VMUserDataResponse.java | 2 +- .../cloudstack/userdata/UserDataManager.java | 5 ++ .../storage/CreateEntityDownloadURLCommand.java | 27 ++++--- .../engine/subsystem/api/storage/DataObject.java | 2 + .../cloud/configuration/ConfigurationManager.java | 4 -- .../cloudstack/userdata/UserDataManagerImpl.java | 83 ++++++++++++---------- .../xenserver/ExtraConfigurationUtility.java | 50 +++++++++---- .../xenserver/ExtraConfigurationUtilityTest.java | 52 ++++++++++++++ .../cloud/network/guru/VxlanGuestNetworkGuru.java | 2 +- .../driver/CloudStackImageStoreDriverImpl.java | 44 +++++++++--- .../configuration/ConfigurationManagerImpl.java | 7 +- .../com/cloud/network/as/AutoScaleManagerImpl.java | 7 +- .../cloud/storage/upload/UploadMonitorImpl.java | 4 +- .../src/main/java/com/cloud/vm/UserVmManager.java | 2 - .../main/java/com/cloud/vm/UserVmManagerImpl.java | 55 +------------- .../diagnostics/to/DiagnosticsDataObject.java | 5 ++ .../storage/template/VnfTemplateManagerImpl.java | 4 ++ .../cloud/network/as/AutoScaleManagerImplTest.java | 10 ++- .../storage/template/UploadManagerImpl.java | 5 +- test/integration/smoke/test_cluster_drs.py | 61 +++++++++++++--- ui/src/config/section/image.js | 2 +- ui/src/config/section/network.js | 4 +- ui/src/config/section/storage.js | 8 ++- ui/src/views/network/VnfAppliancesTab.vue | 2 +- 34 files changed, 384 insertions(+), 164 deletions(-) diff --cc engine/components-api/src/main/java/com/cloud/configuration/ConfigurationManager.java index 0aff8435d9e,3341f6e6bb0..d078a86b06a --- a/engine/components-api/src/main/java/com/cloud/configuration/ConfigurationManager.java +++ b/engine/components-api/src/main/java/com/cloud/configuration/ConfigurationManager.java @@@ -61,12 -60,6 +60,9 @@@ public interface ConfigurationManager public static final String MESSAGE_CREATE_VLAN_IP_RANGE_EVENT = "Message.CreateVlanIpRange.Event"; public static final String MESSAGE_DELETE_VLAN_IP_RANGE_EVENT = "Message.DeleteVlanIpRange.Event"; - static final String VM_USERDATA_MAX_LENGTH_STRING = "vm.userdata.max.length"; - static final ConfigKey<Integer> VM_USERDATA_MAX_LENGTH = new ConfigKey<>("Advanced", Integer.class, VM_USERDATA_MAX_LENGTH_STRING, "32768", - "Max length of vm userdata after base64 decoding. Default is 32768 and maximum is 1048576", true); + public static final ConfigKey<Boolean> AllowNonRFC1918CompliantIPs = new ConfigKey<>(Boolean.class, + "allow.non.rfc1918.compliant.ips", "Advanced", "false", + "Allows non-compliant RFC 1918 IPs for Shared, Isolated networks and VPCs", true, null); /** * @param offering diff --cc plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/ExtraConfigurationUtility.java index 64d83c1427b,a0a51b121c7..94586af179a --- a/plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/ExtraConfigurationUtility.java +++ b/plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/ExtraConfigurationUtility.java @@@ -16,11 -16,9 +16,10 @@@ // under the License. package org.apache.cloudstack.hypervisor.xenserver; - import java.util.HashMap; import java.util.Map; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; import org.apache.xmlrpc.XmlRpcException; import com.cloud.exception.InvalidParameterValueException; @@@ -36,17 -35,22 +36,24 @@@ public class ExtraConfigurationUtility Map<String, Object> recordMap = vmr.toMap(); for (String key : extraConfig.keySet()) { String cfg = extraConfig.get(key); - Map<String, String> configParams = prepareKeyValuePair(cfg); + // cfg is either param=value or map-param:key=value + Pair<String, String> configParam = prepareKeyValuePair(cfg); + if (configParam == null) { + LOG.warn("Invalid extra config passed: " + cfg); + continue; + } - // paramKey is either param or param:key for map parameters - String paramKey = configParams.keySet().toString().replaceAll("[\\[\\]]", ""); - String paramValue = configParams.get(paramKey); + // paramKey is either param or map-param:key for map parameters + String paramKey = configParam.first(); + String paramValue = configParam.second(); + //Map params + LOGGER.debug("Applying [{}] configuration as [{}].", paramKey, paramValue); if (paramKey.contains(":")) { + // Map params - paramKey is map-param:key applyConfigWithNestedKeyValue(conn, vm, recordMap, paramKey, paramValue); } else { + // Params - paramKey is param applyConfigWithKeyValue(conn, vm, recordMap, paramKey, paramValue); } } @@@ -75,21 -75,22 +83,22 @@@ } try { + // map-param param with '_' switch (actualParam) { case "VCPUs_params": - vm.addToVCPUsParams(conn, keyName, paramValue); + vm.setVCPUsParams(conn, putInMap(vm.getVCPUsParams(conn), keyName, paramValue)); break; case "platform": - vm.setOtherConfig(conn, putInMap(vm.getOtherConfig(conn), keyName, paramValue)); + vm.addToPlatform(conn, keyName, paramValue); break; case "HVM_boot_params": - vm.addToHVMBootParams(conn, keyName, paramValue); + vm.setHVMBootParams(conn, putInMap(vm.getHVMBootParams(conn), keyName, paramValue)); break; case "other_config": - vm.addToOtherConfig(conn, keyName, paramValue); + vm.setOtherConfig(conn, putInMap(vm.getOtherConfig(conn), keyName, paramValue)); break; case "xenstore_data": - vm.addToXenstoreData(conn, keyName, paramValue); + vm.setXenstoreData(conn, putInMap(vm.getXenstoreData(conn), keyName, paramValue)); break; default: String msg = String.format("Passed configuration %s is not supported", paramKey); diff --cc plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java index a1ff8d309d9,410ed3c5c34..fc92775c697 --- a/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java +++ b/plugins/network-elements/vxlan/src/main/java/com/cloud/network/guru/VxlanGuestNetworkGuru.java @@@ -57,10 -59,10 +57,10 @@@ public class VxlanGuestNetworkGuru exte // This guru handles only Guest Isolated network that supports Source nat service if (networkType == NetworkType.Advanced && isMyTrafficType(offering.getTrafficType()) && (offering.getGuestType() == Network.GuestType.Isolated || offering.getGuestType() == Network.GuestType.L2) && - isMyIsolationMethod(physicalNetwork)) { + isMyIsolationMethod(physicalNetwork) && !offering.isSystemOnly()) { return true; } else { - s_logger.trace("We only take care of Guest networks of type " + GuestType.Isolated + " or " + GuestType.L2 + " in zone of type " + NetworkType.Advanced); + logger.trace("We only take care of Guest networks of type " + GuestType.Isolated + " or " + GuestType.L2 + " in zone of type " + NetworkType.Advanced); return false; } } diff --cc plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java index 3b5c47c5029,fca6db26169..d9a12d382ba --- a/plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java +++ b/plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java @@@ -25,6 -25,8 +25,7 @@@ import javax.inject.Inject import com.cloud.agent.api.storage.DeleteEntityDownloadURLCommand; import com.cloud.host.dao.HostDao; import com.cloud.storage.Upload; + import com.cloud.utils.StringUtils; -import org.apache.log4j.Logger; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; diff --cc server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java index ff7f0d4935e,f65dffb18cd..4f70149ad11 --- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java @@@ -7859,9 -7793,9 +7860,9 @@@ public class ConfigurationManagerImpl e @Override public ConfigKey<?>[] getConfigKeys() { return new ConfigKey<?>[] {SystemVMUseLocalStorage, IOPS_MAX_READ_LENGTH, IOPS_MAX_WRITE_LENGTH, - BYTES_MAX_READ_LENGTH, BYTES_MAX_WRITE_LENGTH, ADD_HOST_ON_SERVICE_RESTART_KVM, SET_HOST_DOWN_TO_MAINTENANCE, - VM_SERVICE_OFFERING_MAX_CPU_CORES, VM_SERVICE_OFFERING_MAX_RAM_SIZE, MIGRATE_VM_ACROSS_CLUSTERS, - ENABLE_ACCOUNT_SETTINGS_FOR_DOMAIN, ENABLE_DOMAIN_SETTINGS_FOR_CHILD_DOMAIN, ALLOW_DOMAIN_ADMINS_TO_CREATE_TAGGED_OFFERINGS + BYTES_MAX_READ_LENGTH, BYTES_MAX_WRITE_LENGTH, ADD_HOST_ON_SERVICE_RESTART_KVM, SET_HOST_DOWN_TO_MAINTENANCE, VM_SERVICE_OFFERING_MAX_CPU_CORES, - VM_SERVICE_OFFERING_MAX_RAM_SIZE, VM_USERDATA_MAX_LENGTH, MIGRATE_VM_ACROSS_CLUSTERS, ENABLE_ACCOUNT_SETTINGS_FOR_DOMAIN, ++ VM_SERVICE_OFFERING_MAX_RAM_SIZE, MIGRATE_VM_ACROSS_CLUSTERS, ENABLE_ACCOUNT_SETTINGS_FOR_DOMAIN, + ENABLE_DOMAIN_SETTINGS_FOR_CHILD_DOMAIN, ALLOW_DOMAIN_ADMINS_TO_CREATE_TAGGED_OFFERINGS, AllowNonRFC1918CompliantIPs }; } diff --cc server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 427a0571222,f68b3a6237a..6406d75e866 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@@ -16,8 -16,6 +16,7 @@@ // under the License. package com.cloud.vm; - import static com.cloud.configuration.ConfigurationManagerImpl.VM_USERDATA_MAX_LENGTH; +import static com.cloud.storage.Volume.IOPS_LIMIT; import static com.cloud.utils.NumbersUtil.toHumanReadableSize; import static org.apache.cloudstack.api.ApiConstants.MAX_IOPS; import static org.apache.cloudstack.api.ApiConstants.MIN_IOPS; diff --cc services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadManagerImpl.java index 468c20e9626,9c8587b6954..a14667886c7 --- a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadManagerImpl.java +++ b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/template/UploadManagerImpl.java @@@ -266,7 -268,9 +266,8 @@@ public class UploadManagerImpl extends } // Create the directory structure so that its visible under apache server root String extractDir = "/var/www/html/userdata/"; + extractDir = extractDir + cmd.getFilepathInExtractURL() + File.separator; - s_logger.info("HARI " + extractDir); - Script command = new Script("/bin/su", s_logger); + Script command = new Script("/bin/su", logger); command.add("-s"); command.add("/bin/bash"); command.add("-c"); @@@ -288,11 -292,11 +289,11 @@@ } // Create a random file under the directory for security reasons. - String uuid = cmd.getExtractLinkUUID(); + String filename = cmd.getFilenameInExtractURL(); // Create a symbolic link from the actual directory to the template location. The entity would be directly visible under /var/www/html/userdata/cmd.getInstallPath(); - command = new Script("/bin/bash", s_logger); + command = new Script("/bin/bash", logger); command.add("-c"); - command.add("ln -sf /mnt/SecStorage/" + cmd.getParent() + File.separator + cmd.getInstallPath() + " " + extractDir + uuid); + command.add("ln -sf /mnt/SecStorage/" + cmd.getParent() + File.separator + cmd.getInstallPath() + " " + extractDir + filename); result = command.execute(); if (result != null) { String errorString = "Error in linking err=" + result;
