Launchpad Entry: server-maverick-cloud-init
Contributors: Scott Moser
Packages affected: cloud-init
Ubuntu Enterprise Cloud Images have new functionality, making them easier to use both as is, and when re-bundled.
Cloud-init was first added as a re-vamped 'ec2-init' in the 10.04 cycle. It generally is quite functional and allows the user to very powerfully configure an instance on first boot.
- Ted has used the Ubuntu based Turnkey images before and was quite pleased with some of the functionality they provide. He has used the ebsmount hooks to take action whenever an EBS volume is attached to the instance, and has used inithooks function to place files in a directory and have them run on boot. He would like to have these features on Ubuntu images.
- Sally has downloaded a UEC image, and is running it locally. Something is going wrong in the boot process and the console messages are not very useful. Sometimes a slew of python errors are present, sometimes there is nothing at all. She would like to see improved logging and debugging information.
This spec generally includes small improvements to the cloud-init package. Overall, there isn't a lot of "Design" per se, but general evolution of code.
The following are some new features that we would like to support:
- Features of the Turnkey Linux images that we'd like to pull in:
- "inithooks" like behavior. inithooks allows executables to be placed into a first-boot.d directory or a every-boot.d directory. These are then run via run-parts like symantics accordingly.
package ebsmount. EBS allows the user to place data on an EBS volume such that when it is attached, certain actions are taken. This may include mounting the volume to a defined location, or executing arbitrary programs from the volume.
- cloud-config syntax additions:
- ssh-import-lp-id: easily import ssh keys from launchpad via the cloud-config syntax.
- byobu enable (or disable) : This would enable or disable byobu for the image
Bug 582667 requests addition of content to be fed into set-selections. There is examples in the cloud-init package of the text for this.
- #include from ebs volume : The '#include' syntax in user-data was meant to allow the user to provide the instance with larger content than would fit in userdata (which is limited to 16k). Supporting "include" of data from an ebs volume would be convienent and probably the most secure mechanism for doing so, as the user can detach the volume after data is consumed.
- improve the way to add cloud-config hooks. Currently in order to add a cloud-config hook, the user has to modify an existing class. It would be much nicer if the user could simply add files into a directory to register, or "plug-in" in some other way.
- user configurable 'run-once-per'. All things that are 'run-once-per' could be configured via user-data or cloud.cfg. The user could chose to run the hooks at 'every' if they wanted.
- better logging, trace errors and such (general programming improvements).
- documentation : There is generally a lack of knowledge of the features of the ubuntu images. We should publicize their features somehow to make people aware of what can be done.
- Get instances to have ext4 root filesystem
Work Items tracker will be used. See the whiteboard of server-maverick-cloud-init .
The UI changes here would be minimal. There would be additional cloud-config options exposed to the user, and documentation would have to be changed to cover the new function.
Code changes will be contained in the cloud-init package, with some additional code being added.
It is intended that all function would be additional. All previously functional user-data scripts would continue to function. Thus, no need for migration.
It's important that we are able to test new features, and demonstrate them to users. Use this section to describe a short plan that anybody can follow that demonstrates the feature is working. This can then be used during testing, and to show off after release. Please add an entry to http://testcases.qa.ubuntu.com/Coverage/NewFeatures for tracking test coverage.
This need not be added or completed until the specification is nearing beta.
BoF agenda and discussion
- better 'inithooks' like behavior cloud-config syntax additions: - ssh-import-lp-id - byobu enable (or disable) == this can be done via generic "debconf" module possible, or byobu-launcher-install/byobu-launcher-uninstall - improving the way to add cloud-config syntax - improve documentation (wiki?), discoverability - ec2metadata (from the turnkey) - landscape use of cloud-config / cloud-init - #include from ebs - improve stability of boot process/ bug fixes - alon suggest auto associating elastic ip on boot - investigate better launching tools to add data to s3, then utilize (expiring urls)