author Paul Tonelli <>
Mon, 11 Mar 2013 16:31:00 +0100
changeset 59 c062ff185a14
parent 58 987740c53034
child 61 3cd4cfb57874
permissions -rw-r--r--
updated and renamed user data options


Automatically create variations of virtual machines depending
on configuration files availables in repository :

Present state

The first step is to launch an instance of "ami-creation" on openstack. Use at
least 20Gb of disk

In the userdata, copy something like (if you do not put anything, what will be
used will be the latest version from repo):

====== START =======

rev: 1b995dc39507
origin: debian #or ubuntu

====== END ========

you can add an ip to your instance, ssh to the machine and wait until
everything in /mnt is unmounted. you can then upload what you want to glance
with something like (don't forget to change the ids in the last tim):

glance add is_public=false disk_format=aki container_format=aki\
name=ami-creator-kernel < vmlinuz-3.2.0-4-amd64

glance add is_public=false disk_format=ari container_format=ari\
name=ami-creator-ramdisk < initrd.img-3.2.0-4-amd64

glance add disk_format=ami container_format=ami name="ami-creator-amd64"\
ramdisk_id=b953e40a-2605-402b-8663-c8556a5899f2 < /mnt/ami-creator.img


top.sls : top file for the ami_creator

ami_creator.sls : state file to have a correct ami-builder environment

ami_creator_pre.sls : state file applied before the creation of variation

ami_creator_post.sls : state file applied after the creation of variation for

variation.sls : variation file (should be modified depending on requirements) : top file for the chroot

Additionnal Documentation

what is being done and where :

in /etc/init.d/ec2-run-ami

Add the content of userdata as salt-grains (version and address from repo)

in /etc/rc.local

salt-call state.highstate
salt-call state.highstate

(doing it twice is necessary to load new states)

salt-call state.sls ami_creator_pre

which mounts a debian image and creates all the necessary files inside. Then
update the chroot:

salt-call vm_create.update_image /mnt/variation

and run your state file (if necessary, modify /etc/salt/srv/variation.sls which
will be executed inside):

salt-call vm_create.variate_image /mnt/variation

which runs your variation inside the chroot. Finally run

salt-call state.sls ami_creator_post

which will extract your image kernel and ramdisk and unmount and resize as necessary


The salt module from glance does not work in debian as ``glanceclient`` package
is only available in experimental and I did not manage to connect to openstack
essex with it.


The salt module is working as intended.

Optimal behavior of this project

3 levels of scripting:

Virtual Instance Launcher

(hooked to modifications of HG repository)

Ami Creator

An image available on openstack / ec2.

At boot, the user must supply a repository address in user data as
``variation_address`` this information is used by salt at boot to download the
correct revision of files.  it then execute salt-call
vm_create.create_variation which will create a complete ami file and upload it
to glance EC2

Chroot Image

this script should only be a salt state file, and must be run using
salt-highstate before packaging of the ami.