libcloud-vagrant
is a compute provider for Apache Libcloud which uses Vagrant to create VirtualBox nodes.
With libcloud-vagrant
installed, you could prototype a small cluster on your laptop, for instance, and then deploy it later on to Amazon, Rackspace, or any of the other clouds supported by Libcloud.
The following snippet spins up a virtual machine running on your host:
from libcloud.compute.providers import get_driver
from libcloudvagrant.driver import VAGRANT
driver = get_driver(VAGRANT)()
pub = driver.ex_create_network(name="pub", cidr="172.16.0.0/16", public=True)
node = driver.create_node(name="n1",
image=driver.get_image("hashicorp/precise64"),
size=driver.list_sizes()[0],
networks=[pub])
print "Node '%s' running!" % (node.name,)
print ("Connect to it with 'ssh vagrant@%s' (password: 'vagrant')" %
(node.public_ips[0],))
libcloud-vagrant
uses Vagrant to create boxes, networks and volumes. It creates a Vagrant environment under ~/.libcloudvagrant
, which is used to run as many Vagrant boxes as you define.
Nodes created by libcloud-vagrant
may be connected to public networks or to private networks. Public networks are implemented as VirtualBox host-only networks, and private networks are implemented as VirtualBox internal networks.
libcloud-vagrant
also lets you create VDI disks, and attach them to the SATA controllers of your nodes.
Deployment scripts are run through Vagrant's NAT interface, using Vagrant's SSH credentials. Therefore they also work for non-networked nodes.
libcloud-vagrant
requires:
- VirtualBox (tested with version 4.3.12 under 64-bit Linux).
- Vagrant (tested with version 1.6.3 under 64-bit Linux).
- Python 2.7.
Once you have installed VirtualBox and Vagrant, do the usual:
$ pip install libcloud-vagrant
That will install libcloud-vagrant
and its Python dependencies. You might want to do that within a virtualenv.
Have a look at the samples subdirectory of the source distribution. You wil find there a few scripts to create a single node, to show you how to provision it, and a script which creates a two-node cluster.