This directory contains documentation and a demo of the OVF
functionality that is present in cloud-init.

The example/ directory contains the following files:
  example/ovf-env.xml
  This is an example ovf environment file
  to make an iso that qualifies for the ISO transport, do:
    mkdir my-iso
    cp environment.xml my-iso/ovf-env.xml
    genisoimage -o transport.iso -r my-iso
  Then, boot with that ISO attached as a CDrom
- example/ubuntu-server.ovf
  Example generated by virtualbox "export" of a simple VM.
  It contains a functional ProductSection also.  Given answers
  to each of the Properties there, a suitable OVF environment file
  (ovf-env.xml) could be created.

== Demo ==
In order to easily demonstrate this functionality, simple demo is
contained here.  To boot a local virtual machine in either kvm or virtual
box, follow the steps below.

- download a suitable Ubuntu image
  Visit http://cloud-images.ubuntu.com/releases and download a disk image
  of Natty, Oneiric or a newer release.

  $ burl="http://cloud-images.ubuntu.com/releases/"
  $ disk="ubuntu-11.10-server-cloudimg-i386-disk1"
  $ wget "$burl/11.10/release/$disk.img" -O "$disk.img"

- If you're going to use virtual box, you will need to convert the image
  from qcow2 format into a virtual-box friendly VHD format.  
  $ qemu-img convert -O vdi "$disk.img" "ubuntu.vdi"

- If you're using kvm, you should create a qcow delta image to store
  the changes so you keep the original pristine.
  $ qemu-img create -f qcow2 -b "$disk.img" "ubuntu.qcow2"

  Optionally, you could decompress the image, which will make it boot faster
  but will take up more local disk space.
  $ qemu-img convert -O qcow2 "$disk.img" "$disk.qcow2"
  $ qemu-img create -f qcow2 -b "$disk.qcow2" ubuntu.qcow2

- Create an ISO file that will provide user-data to the image.
  This will put the contents of 'user-data' into an ovf-env.xml file
  and create an ISO file that can then be attached at boot to provide
  the user data to cloud-init.

  $ ./make-iso ovf-env.xml.tmpl user-data --output ovftransport.iso

- Boot your virtual machine
  The cloud-images boot with kernel and boot progress to ttyS0.
  You can change that at the grub prompt if you'd like by editing the
  kernel entry.  Otherwise, to see progress you'll need to switch
  to the serial console.  In kvm graphic mode, you do that by clicking
  in the window and then pressing pressing 'ctrl-alt-3'.  For information
  on how to do that in virtualbox or kvm curses, see the relevant
  documentation.

  KVM:
   $ kvm -drive file=ubuntu.qcow2,if=virtio -cdrom ovftransport.iso \
        -m 256 -net nic -net user,hostfwd=tcp::2222-:22

  VirtualBox:
   - Launch the GUI and create a new vm with $disk.vdi and ovftransport.iso
     attached.
   - If you use 'NAT' networking, then forward a port (2222) to the
     guests' port 22 to be able to ssh.

  Upon successful boot you will be able to log in as the 'ubuntu' user
  with the password 'passw0rd' (which was set in the 'user-data' file).
  
  You will also be able to ssh to the instance with the provided:
  $ chmod 600 ovfdemo.pem
  $ ssh -i ovfdemo.pem -p 2222 ubuntu@localhost

- Notes:
  * The 'instance-id' that is set in the ovf-env.xml image needs to
    be unique.  If you want to run the first-boot code of cloud-init
    again you will either have to remove /var/lib/cloud ('rm -Rf' is fine)
    or create a new cdrom with a different instance-id.  To do the
    ladder, simply add the '--instance-id=' flag to the 'make-iso'
    command above and start your vm with the new ISO attached.
