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);