A Vagrant plugin that helps building complex scenarios with many VMs.
Each VM is a node in the cluster. Typically, in a cluster nodes are grouped by type, and each group of nodes has different characteristic, software stacks and configuration.
For instance, if you are setting up an environment for testing Consul, your cluster will be composed by:
- consul server nodes
- consul agent nodes
Vagrant-compose streamline the definition of complex multi-VMs scenarios, providing also support for a straight forward provisioning of nodes with Ansible.
Install the plugin following the typical Vagrant procedure:
$ vagrant plugin install vagrant-compose
The declarative approach (see below) additionally requires the vagrant-playbook python package, that can be installed with
$ pip install vagrant-playbook
Vagrant-compose supports two appraches for definining a cluster of VMs.
-
Programmatic Approach
Cluster are defined by using the some ruby knowledge that is required for writing Vagrantfiles.
see Programmatic Approach for more details.
-
Declarative Approach
By using the declarative approach also people with limited programming background can use vagrant-compose to easily define a cluster composed by many VMs; with declarative approach, the definition of the cluster is done in yaml, and the ruby programming part within the Vagrantfile is reduced to the minimum.
see Declarative Approach for more details.
Vagrant compose will play nicely with all vagrant commands.
For instance, When using vagrant tageting a single machine, like f.i. vagrant up mesos-master1
, the cluster.ansible_groups
variable will include only the given machine.
Happy vagrant-compose!