An Ubuntu machine has a pre-installed package called ‘Cloud-init’ that is capable of taking a configuration file with a pretty simple structure, and apply it to the machine right after its’ boot. That way, one can easily embed usernames, keys and initial commands to the configuration file, and once the server is booted - it’s going to run all the commands, install the right packages etc. and only than start.
Why would someone ever use it?
Cloud-init makes it easier and faster to customize your VM - install users, configure ssh keys, install packages, run commands at boot etc. It’s particularly useful when you aim to install a lot of identical machines or very similar machines with the same installations and configurations, or only one machine that has a lot of complex configuration details.
How do I use cloud-init?
A general guide to cloud-init package you can find here - https://help.ubuntu.com/community/CloudInit.
How does it work in Ravello?
First of all, you can see the related article here: https://www.ravellosystems.com/blog/using-red-hat-satellite-bootstrap-environments-ravello-aws-ec2/
This post is quite old and displays the old Ravello UI, but the practical aspect hasn’t changed at all. Now you can find the user-data section in the canvas configuration window to the right, in General a cloud init configuration a user data:
Important note: Cloudbase-init is the windows version of the cloud-init package. It’s currently not supported but is expected to be supported in the future.