author Paul Tonelli <>
Tue, 12 Mar 2013 17:31:13 +0100
changeset 69 03a191bfee6f
parent 68 601c145e6326
child 71 d13233afb293
permissions -rw-r--r--
bug corrections and renamed initrd to ramdisk and vmlinuz to kernel when possible


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 =======

ami.hg_rev: c3984088f6b5
ami.type: debian #or ubuntu

### optionnal ###
keystone.user: ptonelli
keystone.password: ptonelli
keystone.tenant: ptonelli
keystone.tenant_id: 7050e8e884414ef985826434c52d93f3
keystone.auth_url: ''
keystone.insecure: False   #(optional)

### only if you know what you are doing ! ###

====== 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 or to
include your credentials by downloading and running

glance add is_public=false disk_format=aki container_format=aki \
name=variation_kernel < kernel_variation

glance add is_public=false disk_format=ari container_format=ari \
name=variation_ramdisk < ramdisk_variation

glance add disk_format=ami container_format=ami name="variation-amd64" \
kernel_id=278de93c-5276-410f-a221-667cc1443cf8 \
ramdisk_id=b953e40a-2605-402b-8663-c8556a5899f2 < /mnt/variation.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.