Skip to content

oscar-stack/vagrant-config_builder

Repository files navigation

Vagrant Config Builder

Configure and manage your Vagrant environments with data.

Build Status

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-config_builder 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 'config_builder'
Vagrant.configure('2', &ConfigBuilder.load(
  :yaml,
  :yamldir,
  File.expand_path('../config', __FILE__)
))

For yaml erb configurations, use yaml_erb loader:

require 'config_builder'
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' %>
        hiera_config_path: "hiera.yaml"

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-config_builder

Installation from source

Build the gem:

  • gem build vagrant-config_builder.gemspec

Install the gem:

  • gem install vagrant-config_builder-<version>.gem