class Gonzo::Providers::Vagrant

Attributes

config[R]
global[R]
providerdir[R]

Public Class Methods

new(config, global) click to toggle source
# File lib/gonzo/providers/vagrant.rb, line 8
def initialize(config, global)
  @global = global
  @providerdir = "#{global['statedir']}/provider/vagrant"

  Gonzo.required_command 'vagrant'

  if config.keys.include?('box')
    @config = { 'default' => config }
  else
    @config = config
  end
end

Public Instance Methods

cleanup() click to toggle source
# File lib/gonzo/providers/vagrant.rb, line 21
def cleanup
  FileUtils.rm_rf File.join(global['project'], '.vagrant')
  FileUtils.rm_rf 'Vagrantfile'
end
down(box) click to toggle source
# File lib/gonzo/providers/vagrant.rb, line 68
def down(box)
  system "vagrant destroy -f #{box}"
end
provision(box, box_config) click to toggle source
# File lib/gonzo/providers/vagrant.rb, line 52
def provision(box, box_config)
  FileUtils.mkdir_p(providerdir) unless File.directory?(providerdir)
  local_script = "#{providerdir}/#{box}.sh"
  relative_script = "#{relative_providerdir}/#{box}.sh"
  if box_config['commands']
    File.open(local_script, 'w') do |f|
      f << shellscript(box_config)
    end
    FileUtils.chmod('+x', local_script)
    command = box_config['sudo'] ? "'sudo /gonzo/#{relative_script}'" : "/gonzo/#{relative_script}"
    system "vagrant ssh #{box} -c #{command}"
  else
    fail "No provisioner commands given for #{box}!"
  end
end
run() click to toggle source
# File lib/gonzo/providers/vagrant.rb, line 72
def run
  exit_codes = []
  config.each do |box, box_config|
    up(box)

    begin
      exit_codes << provision(box, box_config)
    rescue Exception => e           # We want to catch all exceptions here so we make sure we don't leave a VM hanging
      puts "Exception caught! Cleaning up."
      down(box)
      puts e
      return false
    end

    down(box)
  end

  return false if exit_codes.include?(false)
  true
end
up(box) click to toggle source
# File lib/gonzo/providers/vagrant.rb, line 45
def up(box)
  File.open('Vagrantfile', 'w') do |f|
    f << vagrantfile
  end
  system "vagrant up #{box}"
end
vagrantfile() click to toggle source
# File lib/gonzo/providers/vagrant.rb, line 26
def vagrantfile
  vf = []

  vf << 'VAGRANTFILE_API_VERSION = "2"'
  vf << 'Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|'

  config.each do |name,conf|
    vf << "  config.vm.define :#{name} do |#{name}|"
    vf << "    #{name}.vm.box = '#{conf['box']}'"
    vf << "    #{name}.vm.box_url = '#{conf['box_url']}'" if conf['box_url']
    vf << "    #{name}.vm.synced_folder '.', '/gonzo'"
    vf << '  end'
  end

  vf << 'end'

  vf.join("\n")
end