/
vagrantbox.rb
51 lines (43 loc) · 1.17 KB
/
vagrantbox.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
require 'rubygems'
require 'vagrant'
require 'sahara'
class VagrantBox
def initialize(basebox)
#brittle code...
@name=basebox
@cwd=File.join("/scratch/vagrant-boxen",@name)
@env=Vagrant::Environment.new(:cwd =>@cwd)
Dir.mkdir(@cwd) unless File::directory?(@cwd)
File.open(File.join(@cwd,"Vagrantfile"),"w+") do |conf_file|
conf_file.write """Vagrant::Config.run do |config|
config.vm.box = \'#{@name}\'
end """
end
end
def up
# We might be created but suspended too, need to handle more cases
if @env.primary_vm.state != :running
print "Booting #{@name} patience..."
@env.cli("up")
puts "frezzing mv state..."
self.freeze
puts "done"
end
raise "Failed to start vm #{@name} " if @env.primary_vm.state != :running
end
def freeze
@env.cli("sandbox","on")
end
def rollback
@env.cli("sandbox","rollback")
end
def execute(cmd)
@env.primary_vm.channel.execute(cmd)
end
def sudo(cmd)
@env.primary_vm.channel.sudo(cmd)
end
def join_cwd(file)
File.join(@cwd,file)
end
end