Raiders of the lost testing env

The search for a reproducible vm testing environment

Who's this guy?

Creating test scenarios

Test legacy applications

Support DevOps flows (test configuration management code)

OS-coupled applications

Load balancing and clustering

Embrace continuous integration, test each commit

Virtualizing everything


  • Ability to create complex environments (multi-VM, multi-net)
  • Run in a standard laptop (lightweight)
  • No external dependencies (isolated)
  • Easy to use
  • Fast enough to run before pushing
  • Allow nested virtualization

*Logo under active development, any ideas are welcome

What is lago?

Ad-hoc virtual testing environment framework


In-place, on demand environments


Simulates the complete real environment


Made to run tests, on your own development laptop


Prepares the everything you need, hosts, network, disks, repositories


Provides the basic tools to create your own flow, and extend it to adapt to your needs

  • kvm/libvirt based
    • oVirt heavily usesĀ  the nested virtualization capabilities
  • Pluggable infrastructure
  • CLI as main entry point
    • Language agnostic
  • python-nose api for better integration

Detailed implementation

Detailed implementation






Defining the environment:

  • Single json file "init.json"
  • Easy to integrate with cvs
  • Easy to manipulate
  • Infrastructure as code

Defining the environment:


"domains": {
    "test1": {
        "memory": "4096",
        "nics": [
            {"net": "lago"}
        "disks": [
                "template_name": "fc23-base",
                "type": "template",
                "name": "root",
                "dev": "vda",
                "format": "qcow2"
        "metadata": {
            "ovirt-scripts": ["../"]

Defining the environment:


    "lago": {
        "type": "nat",
        "dhcp": {
            "start": 100,
            "end": 254
        "management": true

Creating the environment


Copy files in and out of a VM

Vm image sources

  • Remote templates repository
  • Local templates
  • Remote images
  • Local images
  • Empty image


oVirt plugin: Custom host setup scripts

oVirt plugin: local yum repo

oVirt plugin: log collection

Currently working on

Layered image templates

Pumped up plugin infrastructure

Glance source images

Generic log collection

Generic yum repository local cache

Serial console capture

Things to keep an eye on

Disk image recipes hub

Containers/chroot/other VM provider plugins

Java, ruby, go, clojure, pytest, ...

Debian/arch/... packaging

Current status

Alpha status (not production ready)

Early development phase

Actively used for oVirt system tests

Actively developed

Get involved, every idea is welcome!

Mailing list -

Pull requests -

Bugs/feature requests -

Twitter - @lago-project