openstack midonet liberty

6 machines, 13 units

MidoNet OpenStack Cloud

This bundle deploys a basic OpenStack Cloud (Liberty release) on Ubuntu 14.04
LTS, providing Dashboard, Compute, MidoNet Networking, Block Storage, Object
Storage, Identity and Image services.


This bundle is designed to run on bare metal using Juju with MAAS
(Metal-as-a-Service); you will need to have setup a MAAS deployment with a
minimum of 4 physical servers prior to using this bundle.

Servers should have:

  • A minimum of 8GB of physical RAM (16 recommended for compute and controller
  • Enough CPU cores to support your capacity requirements.
  • Two cabled network ports on eth0 and eth1 (see below).


juju quickstart openstack-midonet-liberty


  • 1 Node for Network State Distributed DB (Zookeeper and Cassandra).
  • 1 Node for Horizon, MySQL and RabbitMQ
  • 1 Node for Neutron-agents-midonet, MidoNet agent, Keystone, MidoNet API,
    Cinder, Glance, Neutron and Nova Cloud Controller
  • 2 Nova computes with MidoNet agents


To horizontally scale Nova Compute:

juju add-unit compute # Add one more unit
juju add-unit -n5 compute # Add 5 more units

To horizontally scale Zookeeper (keep odd number):

juju add-unit -n2 zookeeper # Add 2 more unitsa

To horizontally scale Cassandra (keep odd number):

juju add-unit -n2 cassandra # Add 2 more unitsa

To scale API services, like MidoNet API, Neutron, Nova, etc, it is necessary
to set a vip (in the MaaS network range) for each service:

juju set neutron vip=

Then deploy a hacluster service for it and relate them and add a unit:

juju deploy hacluster ha-neutron
juju add-relation ha-neutron neutron
juju add-unit neutron --to lxc:X

Note that hacluster services should run on lxc containers. It is generally a
good practice to scale the nodes for all the API services co-locating them
in LXC containers in the same machine.

Ensuring it's working

To ensure your cloud is functioning correctly, download this bundle and then
run through the following sections.

All commands are executed from within the expanded bundle.

Install OpenStack client tools

In order to configure and use your cloud, you'll need to install the
appropriate client tools:

sudo apt-get -y install python-novaclient python-keystoneclient \
    python-glanceclient python-neutronclient

Accessing the cloud

Check that you can access your cloud from the command line:

source openrc
keystone catalog

You should get a full listing of all services registered in the cloud which
should include identity, compute, image, midonet and network.

Configuring an image

In order to run instances on your cloud, you'll need to upload an image to boot instances from:

mkdir -p ~/images
wget -O ~/images/trusty-server-cloudimg-amd64-disk1.img \
glance image-create --name="trusty" --is-public=true --progress \
    --container-format=bare --disk-format=qcow2 \
    < ~/images/trusty-server-cloudimg-amd64-disk1.img

Configure networking

To be able to reach external networks like the internet, one should make use
of the MidoNet gateway charm, configured either statically or with BGP peering.

In any case, you need a network to run your VMs:

source openrc
neutron net-create mynet
neutron subnet-create mynet --name mysubnet

Booting an instance

First generate a SSH keypair so that you can access your instances once you've booted them:

nova keypair-add mykey > ~/.ssh/id_rsa_cloud

Note: you can also upload an existing public key to the cloud rather than generating a new one:

nova keypair-add --pub-key ~/.ssh/ mykey

You can now boot an instance on your cloud:

nova boot --image trusty --flavor m1.small --key-name mykey \
    --nic net-id=$(neutron net-list | grep mynet | awk '{ print $2 }') \

Accessing your instance

If you do not make use of MidoNet gateway charms you can access the VMs only
through the Horizon console.

What next?

Configuring and managing services on an OpenStack cloud is complex; take a look a the OpenStack Admin Guide for a complete reference on how to configure an OpenStack cloud for your requirements.

Useful Cloud URL's

[MidoNet Operational Guide]

Bundle configuration