Below is an example of how to create a multipart configuration compatible with cloud-init using Java:
import java.util.Properties;
import javax.mail.Session;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class CloudInitMultipart {
public static void main(String[] args) throws Exception {
String config = "#cloud-config\n"
+ "mounts:\n"
+ " - [ sdf, /mnt/data, \"auto\", \"defaults,nobootwait\", \"0\", \"0\" ]\n\n"
+ "packages:\n"
+ " - emacs23-nox\n\n";
MimeMultipart mime = new MimeMultipart();
MimeBodyPart part1 = new MimeBodyPart();
part1.setText(config, "us-ascii", "cloud-config");
part1.setFileName("cloud-config.txt");
MimeBodyPart part2 = new MimeBodyPart();
String script = "#!/bin/bash\n\n"
+ "NOW=`date +%s`\n"
+ "touch /mnt/$NOW";
part2.setText(script, "us-ascii", "x-shellscript");
part2.setFileName("runme.sh");
mime.addBodyPart(part1);
mime.addBodyPart(part2);
MimeMessage msg = new MimeMessage(Session.getDefaultInstance(new Properties()));
msg.setContent(mime);
msg.writeTo(System.out);
}
}
This will create a multipart configuration combining a cloud-config element which installs emacs and creates an fstab entry, and also runs a bash script that creates a file. The output can then be used as user-data for launching an EC2 instance with this configuration.