Vagrant Masonry - Config Builder
Configure and manage your Vagrant environments using structured data.
Masonry is the craft of shaping rough pieces of rock into accurate geometrical shapes, at times simple, but some of considerable complexity, and then arranging the resulting stones to form structures.
Synopsis
This plugin provides an interface to the Vagrant configuration constructs in a
logic free manner. You can format your input data to fit your needs and use
vagrant-masonry
to transform that into the needed Vagrant config.
Example
This example loads all yaml files in the config directory and generates a Vagrant config based on that information. File names are arbitrary and chosen for clarity.
Directory structure
.
├── config
│ ├── roles.yaml
│ └── vms.yaml
└── Vagrantfile
Vagrantfile
For pure yaml configurations, use yaml loader:
require 'masonry'
Vagrant.configure('2', &ConfigBuilder.load(
:yaml,
:yamldir,
File.expand_path('../config', __FILE__)
))
For yaml erb configurations, use yaml_erb loader:
require 'masonry'
Vagrant.configure('2', &ConfigBuilder.load(
:yaml_erb,
:yamldir,
File.expand_path('../config', __FILE__)
))
The yaml_erb loader would allow configuration such as:
---
roles:
puppet_apply:
provisioners:
- type: puppet
manifests_path: 'tests'
module_path: 'spec/fixtures/modules'
manifest_file: <%= ENV['VAGRANT_MANIFEST'] || 'init.pp' %>
config/roles.yaml
---
boxes:
centos-65-x64: http://puppet-vagrant-boxes.puppetlabs.com/centos-65-x64-virtualbox-puppet.box
debian-73-x64: http://puppet-vagrant-boxes.puppetlabs.com/debian-73-x64-virtualbox-puppet.box
roles:
bigvm:
provider:
type: virtualbox
customize: [[modifyvm, !ruby/sym id, '--memory', 1024]]
synced_folders:
- host_path: '.'
guest_path: '/vagrant'
disabled: true
smallvm:
provider:
type: vmware
vmx:
memsize: 512
numvcpus: 1
config/vms.yaml
---
vms:
-
name: db
private_networks: [ {ip: '10.20.1.2'} ]
box: centos-65-x64
hostname: db.puppetlabs.vm
roles: bigvm
-
name: web
private_networks: [ {ip: '10.20.1.3'} ]
box: debian-73-x64
Installation
Installation into the Vagrant internal gems:
vagrant plugin install vagrant-masonry
Installation from source
Build the gem:
gem build vagrant-masonry.gemspec
Install the gem:
gem install vagrant-masonry-<version>.gem
License
Vagrant Masonry plugin is based on vagrant-config_builder plugin.
Vagrant Masonry is licensed under Apache 2.0 license.