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;

Reply via email to