Skip to content

Instantly share code, notes, and snippets.

@Im0rtality
Created January 29, 2014 20:01
Show Gist options
  • Select an option

  • Save Im0rtality/8695794 to your computer and use it in GitHub Desktop.

Select an option

Save Im0rtality/8695794 to your computer and use it in GitHub Desktop.
require 'yaml'
dir = File.dirname(File.expand_path(__FILE__))
configValues = YAML.load_file("#{dir}/.vagrant/config.yaml")
data = configValues['vagrantfile']
Vagrant.configure("2") do |config|
# Box setup
config.vm.box = "#{data['vm']['box']}"
config.vm.box_url = "#{data['vm']['box_url']}"
config.vm.box_url = "#{data['vm']['box_url']}"
config.vm.network :private_network, ip: data['vm']['network']['address']
if data['vm']['hostname'].to_s != ''
config.vm.hostname = "#{data['vm']['hostname']}"
end
config.vm.usable_port_range = (10200..10500)
# Customize box
if !data['vm']['customize'].empty?
config.vm.provider :virtualbox do |virtualbox|
data['vm']['customize'].each do |command, options|
options.each do |key, value|
virtualbox.customize [command, :id, "--#{key}", value]
end
end
end
end
# Make sure that during initial install we have up to date repositories
config.vm.provision :shell, :inline => "if [[ ! -f /apt-get-run ]]; then sudo apt-get update && sudo touch /apt-get-run; fi"
# TODO: move initial-setup.sh to :inline
config.vm.provision :shell, :path => ".vagrant/shell/initial-setup.sh", :args => "/vagrant/.vagrant"
# Run always-execute scripts
if !data['scripts']['always'].empty?
data['scripts']['always'].each do |value|
config.vm.provision :shell, :path => value
end
end
# Puppet config
config.vm.provision :puppet do |puppet|
# fallback to "vagrant" if no username given
ssh_username = !data['ssh']['username'].nil? ? data['ssh']['username'] : "vagrant"
puppet.facter = {
"ssh_username" => "#{ssh_username}"
}
puppet.manifests_path = "#{data['vm']['provision']['puppet']['manifests']}"
puppet.module_path = "#{data['vm']['provision']['puppet']['modules']}"
if !data['vm']['provision']['puppet']['options'].empty?
puppet.options = data['vm']['provision']['puppet']['options']
end
end
# SSH config
if !data['ssh']['username'].nil?
config.ssh.username = "#{data['ssh']['username']}"
end
if !data['ssh']['shell'].nil?
config.ssh.shell = "#{data['ssh']['shell']}"
end
config.ssh.forward_agent = true
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment