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 <[email protected]> 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);
