A libcloud compute provider for local Vagrant boxes
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 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(), ex_networks=[pub]) print "Node '%s' running!" % (node.name,) print ("Connect to it with 'ssh vagrant@%s' (password: 'vagrant')" % (node.public_ips,))
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.
Deployment scripts are run through Vagrant’s NAT interface, using Vagrant’s SSH credentials. Therefore they also work for non-networked nodes.
libcloud-vagrant includes a command-line tool to do simple operations with Vagrant nodes created by Libcloud:
$ libcloud-vagrant -h usage: libcloud-vagrant [-h] <cmd> Manage your Vagrant libcloud environment. positional arguments: <cmd> command to execute optional arguments: -h, --help show this help message and exit Available commands: destroy Destroys all nodes, networks and volumes in your Vagrant environment. list Lists all nodes, networks and volumes in your Vagrant environment. screen Opens a screen(1) session to all nodes in your Vagrant environment. $
libcloud-vagrant is not thread- or multiprocess-safe. Interactions with Vagrant and with the Virtualbox command-line tools are protected with a filesystem-based lock, which (hopefully) serializes things, so even if they worked, concurrent operations would not give you much benefit.
VirtualBox (tested with version 4.3.14 under 64-bit Linux).
Vagrant (tested with version 1.6.3 under 64-bit Linux).
If you want to attach storage volumes to nodes, you’ll need the vagrant-libcloud-helper Vagrant plugin. Install it with:
$ vagrant plugin install vagrant-libcloud-helper
The following are optional:
If you’re behind an HTTP/FTP proxy, the Vagrant plugin vagrant-proxyconf will modify the nodes created by libcloud-vagrant to use it.
You don’t need to configure vagrant-proxyconf. Install it with:
$ vagrant plugin install vagrant-proxyconf
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.