You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by we...@apache.org on 2023/08/29 12:36:28 UTC

[cloudstack] 03/05: userdata: support plain text

This is an automated email from the ASF dual-hosted git repository.

weizhou pushed a commit to branch 4.19-fix-test_vm_autoscaling
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit f262ec178f847c10411daee3c6de5198b8d47827
Author: Wei Zhou <we...@apache.org>
AuthorDate: Sat Aug 26 15:23:13 2023 +0200

    userdata: support plain text
---
 .../cloudstack/userdata/CloudInitUserDataProvider.java  | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/engine/userdata/cloud-init/src/main/java/org/apache/cloudstack/userdata/CloudInitUserDataProvider.java b/engine/userdata/cloud-init/src/main/java/org/apache/cloudstack/userdata/CloudInitUserDataProvider.java
index 6e1086c631e..25be89ed5fb 100644
--- a/engine/userdata/cloud-init/src/main/java/org/apache/cloudstack/userdata/CloudInitUserDataProvider.java
+++ b/engine/userdata/cloud-init/src/main/java/org/apache/cloudstack/userdata/CloudInitUserDataProvider.java
@@ -46,19 +46,21 @@ import com.sun.mail.util.BASE64DecoderStream;
 public class CloudInitUserDataProvider extends AdapterBase implements UserDataProvider {
 
     protected enum FormatType {
-        CLOUD_CONFIG, BASH_SCRIPT, MIME, CLOUD_BOOTHOOK, INCLUDE_FILE
+        CLOUD_CONFIG, BASH_SCRIPT, MIME, CLOUD_BOOTHOOK, INCLUDE_FILE, PLAIN_TEXT
     }
 
     private static final String CLOUD_CONFIG_CONTENT_TYPE = "text/cloud-config";
     private static final String BASH_SCRIPT_CONTENT_TYPE = "text/x-shellscript";
     private static final String INCLUDE_FILE_CONTENT_TYPE = "text/x-include-url";
     private static final String CLOUD_BOOTHOOK_CONTENT_TYPE = "text/cloud-boothook";
+    private static final String PLAIN_TEXT_CONTENT_TYPE = "text/plain";
 
     private static final Map<FormatType, String> formatContentTypeMap = Map.ofEntries(
             Map.entry(FormatType.CLOUD_CONFIG, CLOUD_CONFIG_CONTENT_TYPE),
             Map.entry(FormatType.BASH_SCRIPT, BASH_SCRIPT_CONTENT_TYPE),
             Map.entry(FormatType.CLOUD_BOOTHOOK, CLOUD_BOOTHOOK_CONTENT_TYPE),
-            Map.entry(FormatType.INCLUDE_FILE, INCLUDE_FILE_CONTENT_TYPE)
+            Map.entry(FormatType.INCLUDE_FILE, INCLUDE_FILE_CONTENT_TYPE),
+            Map.entry(FormatType.PLAIN_TEXT, PLAIN_TEXT_CONTENT_TYPE)
     );
 
     private static final Session session = Session.getDefaultInstance(new Properties());
@@ -85,14 +87,17 @@ public class CloudInitUserDataProvider extends AdapterBase implements UserDataPr
                 .filter(x -> (x.startsWith("#") && !x.startsWith("##")) || (x.startsWith("Content-Type:")))
                 .collect(Collectors.toList());
         if (CollectionUtils.isEmpty(lines)) {
-            throw new CloudRuntimeException("Failed to detect the user data format type as it " +
-                    "does not contain a header");
+            logger.info("Failed to detect the user data format type as it " +
+                    "does not contain a header, regard it as plain text");
+            return null;
         }
         return lines.get(0);
     }
 
     protected FormatType mapUserDataHeaderToFormatType(String header) {
-        if (header.equalsIgnoreCase("#cloud-config")) {
+        if (header == null) {
+            return FormatType.PLAIN_TEXT;
+        } else if (header.equalsIgnoreCase("#cloud-config")) {
             return FormatType.CLOUD_CONFIG;
         } else if (header.startsWith("#!")) {
             return FormatType.BASH_SCRIPT;
@@ -248,7 +253,7 @@ public class CloudInitUserDataProvider extends AdapterBase implements UserDataPr
             String userData2 = new String(Base64.decodeBase64(encodedUserData2));
             FormatType formatType1 = getUserDataFormatType(userData1);
             FormatType formatType2 = getUserDataFormatType(userData2);
-            if (formatType1.equals(formatType2) && List.of(FormatType.CLOUD_CONFIG, FormatType.BASH_SCRIPT).contains(formatType1)) {
+            if (formatType1.equals(formatType2) && List.of(FormatType.CLOUD_CONFIG, FormatType.BASH_SCRIPT, FormatType.PLAIN_TEXT).contains(formatType1)) {
                 return simpleAppendSameFormatTypeUserData(userData1, userData2);
             }
             NoIdMimeMessage message = new NoIdMimeMessage(session);