vagrantup 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/Gemfile +17 -0
- data/README.md +45 -0
- data/Rakefile +41 -0
- data/VERSION +1 -0
- data/bin/.gitignore +0 -0
- data/bin/vagrant +15 -0
- data/bin/vagrant-box +35 -0
- data/bin/vagrant-down +28 -0
- data/bin/vagrant-halt +29 -0
- data/bin/vagrant-init +28 -0
- data/bin/vagrant-package +30 -0
- data/bin/vagrant-reload +30 -0
- data/bin/vagrant-resume +28 -0
- data/bin/vagrant-ssh +28 -0
- data/bin/vagrant-suspend +28 -0
- data/bin/vagrant-up +30 -0
- data/config/default.rb +29 -0
- data/lib/vagrant.rb +14 -0
- data/lib/vagrant/actions/base.rb +93 -0
- data/lib/vagrant/actions/box/add.rb +22 -0
- data/lib/vagrant/actions/box/destroy.rb +14 -0
- data/lib/vagrant/actions/box/download.rb +63 -0
- data/lib/vagrant/actions/box/unpackage.rb +49 -0
- data/lib/vagrant/actions/runner.rb +128 -0
- data/lib/vagrant/actions/vm/destroy.rb +14 -0
- data/lib/vagrant/actions/vm/down.rb +12 -0
- data/lib/vagrant/actions/vm/export.rb +41 -0
- data/lib/vagrant/actions/vm/forward_ports.rb +32 -0
- data/lib/vagrant/actions/vm/halt.rb +14 -0
- data/lib/vagrant/actions/vm/import.rb +17 -0
- data/lib/vagrant/actions/vm/move_hard_drive.rb +53 -0
- data/lib/vagrant/actions/vm/package.rb +61 -0
- data/lib/vagrant/actions/vm/provision.rb +71 -0
- data/lib/vagrant/actions/vm/reload.rb +17 -0
- data/lib/vagrant/actions/vm/resume.rb +16 -0
- data/lib/vagrant/actions/vm/shared_folders.rb +69 -0
- data/lib/vagrant/actions/vm/start.rb +50 -0
- data/lib/vagrant/actions/vm/suspend.rb +16 -0
- data/lib/vagrant/actions/vm/up.rb +35 -0
- data/lib/vagrant/box.rb +129 -0
- data/lib/vagrant/busy.rb +73 -0
- data/lib/vagrant/commands.rb +174 -0
- data/lib/vagrant/config.rb +156 -0
- data/lib/vagrant/downloaders/base.rb +13 -0
- data/lib/vagrant/downloaders/file.rb +21 -0
- data/lib/vagrant/downloaders/http.rb +47 -0
- data/lib/vagrant/env.rb +140 -0
- data/lib/vagrant/ssh.rb +43 -0
- data/lib/vagrant/util.rb +45 -0
- data/lib/vagrant/vm.rb +57 -0
- data/script/vagrant-ssh-expect.sh +22 -0
- data/templates/Vagrantfile +8 -0
- data/test/test_helper.rb +91 -0
- data/test/vagrant/actions/base_test.rb +32 -0
- data/test/vagrant/actions/box/add_test.rb +37 -0
- data/test/vagrant/actions/box/destroy_test.rb +18 -0
- data/test/vagrant/actions/box/download_test.rb +118 -0
- data/test/vagrant/actions/box/unpackage_test.rb +101 -0
- data/test/vagrant/actions/runner_test.rb +236 -0
- data/test/vagrant/actions/vm/destroy_test.rb +24 -0
- data/test/vagrant/actions/vm/down_test.rb +32 -0
- data/test/vagrant/actions/vm/export_test.rb +88 -0
- data/test/vagrant/actions/vm/forward_ports_test.rb +50 -0
- data/test/vagrant/actions/vm/halt_test.rb +27 -0
- data/test/vagrant/actions/vm/import_test.rb +36 -0
- data/test/vagrant/actions/vm/move_hard_drive_test.rb +108 -0
- data/test/vagrant/actions/vm/package_test.rb +155 -0
- data/test/vagrant/actions/vm/provision_test.rb +103 -0
- data/test/vagrant/actions/vm/reload_test.rb +44 -0
- data/test/vagrant/actions/vm/resume_test.rb +27 -0
- data/test/vagrant/actions/vm/shared_folders_test.rb +117 -0
- data/test/vagrant/actions/vm/start_test.rb +55 -0
- data/test/vagrant/actions/vm/suspend_test.rb +27 -0
- data/test/vagrant/actions/vm/up_test.rb +76 -0
- data/test/vagrant/box_test.rb +92 -0
- data/test/vagrant/busy_test.rb +81 -0
- data/test/vagrant/commands_test.rb +252 -0
- data/test/vagrant/config_test.rb +123 -0
- data/test/vagrant/downloaders/base_test.rb +20 -0
- data/test/vagrant/downloaders/file_test.rb +32 -0
- data/test/vagrant/downloaders/http_test.rb +40 -0
- data/test/vagrant/env_test.rb +293 -0
- data/test/vagrant/ssh_test.rb +95 -0
- data/test/vagrant/util_test.rb +64 -0
- data/test/vagrant/vm_test.rb +96 -0
- metadata +263 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Downloaders
|
3
|
+
# Represents a base class for a downloader. A downloader handles
|
4
|
+
# downloading a box file to a temporary file.
|
5
|
+
class Base
|
6
|
+
include Vagrant::Util
|
7
|
+
|
8
|
+
# Downloads the source file to the destination file. It is up to
|
9
|
+
# implementors of this class to handle the logic.
|
10
|
+
def download!(source_url, destination_file); end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Downloaders
|
3
|
+
# "Downloads" a file to a temporary file. Basically, this downloader
|
4
|
+
# simply does a file copy.
|
5
|
+
class File < Base
|
6
|
+
BUFFERSIZE = 1048576 # 1 MB
|
7
|
+
|
8
|
+
def download!(source_url, destination_file)
|
9
|
+
# For now we read the contents of one into a buffer
|
10
|
+
# and copy it into the other. In the future, we should do
|
11
|
+
# a system-level file copy (FileUtils.cp).
|
12
|
+
open(source_url) do |f|
|
13
|
+
loop do
|
14
|
+
break if f.eof?
|
15
|
+
destination_file.write(f.read(BUFFERSIZE))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Downloaders
|
3
|
+
# Downloads a file from an HTTP URL to a temporary file. This
|
4
|
+
# downloader reports its progress to stdout while downloading.
|
5
|
+
class HTTP < Base
|
6
|
+
# ANSI escape code to clear lines from cursor to end of line
|
7
|
+
CL_RESET = "\r\e[0K"
|
8
|
+
|
9
|
+
def download!(source_url, destination_file)
|
10
|
+
Net::HTTP.get_response(URI.parse(source_url)) do |response|
|
11
|
+
total = response.content_length
|
12
|
+
progress = 0
|
13
|
+
segment_count = 0
|
14
|
+
|
15
|
+
response.read_body do |segment|
|
16
|
+
# Report the progress out
|
17
|
+
progress += segment.length
|
18
|
+
segment_count += 1
|
19
|
+
|
20
|
+
# Progress reporting is limited to every 25 segments just so
|
21
|
+
# we're not constantly updating
|
22
|
+
if segment_count % 25 == 0
|
23
|
+
report_progress(progress, total)
|
24
|
+
segment_count = 0
|
25
|
+
end
|
26
|
+
|
27
|
+
# Store the segment
|
28
|
+
destination_file.write(segment)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
complete_progress
|
33
|
+
end
|
34
|
+
|
35
|
+
def report_progress(progress, total)
|
36
|
+
percent = (progress.to_f / total.to_f) * 100
|
37
|
+
print "#{CL_RESET}Download Progress: #{percent.to_i}% (#{progress} / #{total})"
|
38
|
+
$stdout.flush
|
39
|
+
end
|
40
|
+
|
41
|
+
def complete_progress
|
42
|
+
# Just clear the line back out
|
43
|
+
print "#{CL_RESET}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/vagrant/env.rb
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
module Vagrant
|
2
|
+
class Env
|
3
|
+
ROOTFILE_NAME = "Vagrantfile"
|
4
|
+
HOME_SUBDIRS = ["tmp", "boxes"]
|
5
|
+
|
6
|
+
# Initialize class variables used
|
7
|
+
@@persisted_vm = nil
|
8
|
+
@@root_path = nil
|
9
|
+
@@box = nil
|
10
|
+
|
11
|
+
extend Vagrant::Util
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def box; @@box; end
|
15
|
+
def persisted_vm; @@persisted_vm; end
|
16
|
+
def root_path; @@root_path; end
|
17
|
+
def dotfile_path;File.join(root_path, Vagrant.config.vagrant.dotfile_name); end
|
18
|
+
def home_path; File.expand_path(Vagrant.config.vagrant.home); end
|
19
|
+
def tmp_path; File.join(home_path, "tmp"); end
|
20
|
+
def boxes_path; File.join(home_path, "boxes"); end
|
21
|
+
|
22
|
+
def load!(opts={})
|
23
|
+
load_root_path!(Pathname.new(Dir.pwd), opts)
|
24
|
+
load_config!
|
25
|
+
load_home_directory!
|
26
|
+
load_box!
|
27
|
+
load_vm!
|
28
|
+
end
|
29
|
+
|
30
|
+
def load_config!
|
31
|
+
# Prepare load paths for config files
|
32
|
+
load_paths = [File.join(PROJECT_ROOT, "config", "default.rb")]
|
33
|
+
load_paths << File.join(box.directory, ROOTFILE_NAME) if box
|
34
|
+
load_paths << File.join(root_path, ROOTFILE_NAME) if root_path
|
35
|
+
|
36
|
+
# Then clear out the old data
|
37
|
+
Config.reset!
|
38
|
+
|
39
|
+
load_paths.each do |path|
|
40
|
+
logger.info "Loading config from #{path}..."
|
41
|
+
load path if File.exist?(path)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Execute the configurations
|
45
|
+
Config.execute!
|
46
|
+
end
|
47
|
+
|
48
|
+
def load_home_directory!
|
49
|
+
home_dir = File.expand_path(Vagrant.config.vagrant.home)
|
50
|
+
|
51
|
+
dirs = HOME_SUBDIRS.collect { |path| File.join(home_dir, path) }
|
52
|
+
dirs.unshift(home_dir)
|
53
|
+
|
54
|
+
dirs.each do |dir|
|
55
|
+
next if File.directory?(dir)
|
56
|
+
|
57
|
+
logger.info "Creating home directory since it doesn't exist: #{dir}"
|
58
|
+
FileUtils.mkdir_p(dir)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def load_box!
|
63
|
+
@@box = Box.find(Vagrant.config.vm.box) if Vagrant.config.vm.box
|
64
|
+
|
65
|
+
if @@box
|
66
|
+
logger.info("Reloading configuration to account for loaded box...")
|
67
|
+
load_config!
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def load_vm!
|
72
|
+
return unless root_path
|
73
|
+
|
74
|
+
File.open(dotfile_path) do |f|
|
75
|
+
@@persisted_vm = Vagrant::VM.find(f.read)
|
76
|
+
end
|
77
|
+
rescue Errno::ENOENT
|
78
|
+
@@persisted_vm = nil
|
79
|
+
end
|
80
|
+
|
81
|
+
def persist_vm(vm)
|
82
|
+
File.open(dotfile_path, 'w+') do |f|
|
83
|
+
f.write(vm.uuid)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def load_root_path!(path=Pathname.new(Dir.pwd), opts={})
|
88
|
+
if path.to_s == '/'
|
89
|
+
return false if opts[:suppress_errors]
|
90
|
+
error_and_exit(<<-msg)
|
91
|
+
A `#{ROOTFILE_NAME}` was not found! This file is required for vagrant to run
|
92
|
+
since it describes the expected environment that vagrant is supposed
|
93
|
+
to manage. Please create a #{ROOTFILE_NAME} and place it in your project
|
94
|
+
root.
|
95
|
+
msg
|
96
|
+
return
|
97
|
+
end
|
98
|
+
|
99
|
+
file = "#{path}/#{ROOTFILE_NAME}"
|
100
|
+
if File.exist?(file)
|
101
|
+
@@root_path = path.to_s
|
102
|
+
return true
|
103
|
+
end
|
104
|
+
|
105
|
+
load_root_path!(path.parent, opts)
|
106
|
+
end
|
107
|
+
|
108
|
+
def require_box
|
109
|
+
if !box
|
110
|
+
if !Vagrant.config.vm.box
|
111
|
+
error_and_exit(<<-msg)
|
112
|
+
No base box was specified! A base box is required as a staring point
|
113
|
+
for every vagrant virtual machine. Please specify one in your Vagrantfile
|
114
|
+
using `config.vm.box`
|
115
|
+
msg
|
116
|
+
else
|
117
|
+
error_and_exit(<<-msg)
|
118
|
+
Specified box `#{Vagrant.config.vm.box}` does not exist!
|
119
|
+
|
120
|
+
The box must be added through the `vagrant box add` command. Please view
|
121
|
+
the documentation associated with the command for more information.
|
122
|
+
msg
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def require_persisted_vm
|
128
|
+
if !persisted_vm
|
129
|
+
error_and_exit(<<-error)
|
130
|
+
The task you're trying to run requires that the vagrant environment
|
131
|
+
already be created, but unfortunately this vagrant still appears to
|
132
|
+
have no box! You can setup the environment by setting up your
|
133
|
+
#{ROOTFILE_NAME} and running `vagrant up`
|
134
|
+
error
|
135
|
+
return
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
data/lib/vagrant/ssh.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module Vagrant
|
2
|
+
class SSH
|
3
|
+
SCRIPT = File.join(File.dirname(__FILE__), '..', '..', 'script', 'vagrant-ssh-expect.sh')
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def connect(opts={})
|
7
|
+
options = {}
|
8
|
+
[:host, :password, :username].each do |param|
|
9
|
+
options[param] = opts[param] || Vagrant.config.ssh.send(param)
|
10
|
+
end
|
11
|
+
|
12
|
+
Kernel.exec "#{SCRIPT} #{options[:username]} #{options[:password]} #{options[:host]} #{port(opts)}".strip
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute
|
16
|
+
Net::SSH.start(Vagrant.config.ssh.host, Vagrant.config[:ssh][:username], :port => port, :password => Vagrant.config[:ssh][:password]) do |ssh|
|
17
|
+
yield ssh
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def upload!(from, to)
|
22
|
+
execute do |ssh|
|
23
|
+
scp = Net::SCP.new(ssh)
|
24
|
+
scp.upload!(from, to)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def up?
|
29
|
+
Net::SSH.start(Vagrant.config.ssh.host, Vagrant.config.ssh.username, :port => port, :password => Vagrant.config.ssh.password, :timeout => 5) do |ssh|
|
30
|
+
return true
|
31
|
+
end
|
32
|
+
|
33
|
+
false
|
34
|
+
rescue Errno::ECONNREFUSED, Net::SSH::Disconnect
|
35
|
+
false
|
36
|
+
end
|
37
|
+
|
38
|
+
def port(opts={})
|
39
|
+
opts[:port] || Vagrant.config.vm.forwarded_ports[Vagrant.config.ssh.forwarded_port_key][:hostport]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/vagrant/util.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Util
|
3
|
+
def self.included(base)
|
4
|
+
base.extend Vagrant::Util
|
5
|
+
end
|
6
|
+
|
7
|
+
def error_and_exit(error)
|
8
|
+
abort <<-error
|
9
|
+
=====================================================================
|
10
|
+
Vagrant experienced an error!
|
11
|
+
|
12
|
+
#{error.chomp}
|
13
|
+
=====================================================================
|
14
|
+
error
|
15
|
+
end
|
16
|
+
|
17
|
+
def logger
|
18
|
+
Logger.singleton_logger
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Logger < ::Logger
|
23
|
+
@@singleton_logger = nil
|
24
|
+
|
25
|
+
class << self
|
26
|
+
def singleton_logger
|
27
|
+
# TODO: Buffer messages until config is loaded, then output them?
|
28
|
+
if Vagrant.config.loaded?
|
29
|
+
@@singleton_logger ||= Vagrant::Logger.new(Vagrant.config.vagrant.log_output)
|
30
|
+
else
|
31
|
+
Vagrant::Logger.new(nil)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def reset_logger!
|
36
|
+
@@singleton_logger = nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def format_message(level, time, progname, msg)
|
41
|
+
"[#{level} #{time.strftime('%m-%d-%Y %X')}] Vagrant: #{msg}\n"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
data/lib/vagrant/vm.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
module Vagrant
|
2
|
+
class VM < Actions::Runner
|
3
|
+
include Vagrant::Util
|
4
|
+
|
5
|
+
attr_accessor :vm
|
6
|
+
attr_accessor :from
|
7
|
+
|
8
|
+
class << self
|
9
|
+
# Finds a virtual machine by a given UUID and either returns
|
10
|
+
# a Vagrant::VM object or returns nil.
|
11
|
+
def find(uuid)
|
12
|
+
vm = VirtualBox::VM.find(uuid)
|
13
|
+
return nil if vm.nil?
|
14
|
+
new(vm)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(vm=nil)
|
19
|
+
@vm = vm
|
20
|
+
end
|
21
|
+
|
22
|
+
def package(out_path, include_files=[])
|
23
|
+
add_action(Actions::VM::Export)
|
24
|
+
add_action(Actions::VM::Package, out_path, include_files)
|
25
|
+
execute!
|
26
|
+
end
|
27
|
+
|
28
|
+
def start
|
29
|
+
return if @vm.running?
|
30
|
+
|
31
|
+
actions = [Actions::VM::ForwardPorts, Actions::VM::SharedFolders, Actions::VM::Start]
|
32
|
+
actions.each do |action|
|
33
|
+
add_action(action)
|
34
|
+
end
|
35
|
+
|
36
|
+
execute!
|
37
|
+
end
|
38
|
+
|
39
|
+
def destroy
|
40
|
+
execute!(Actions::VM::Down)
|
41
|
+
end
|
42
|
+
|
43
|
+
def suspend
|
44
|
+
execute!(Actions::VM::Suspend)
|
45
|
+
end
|
46
|
+
|
47
|
+
def resume
|
48
|
+
execute!(Actions::VM::Resume)
|
49
|
+
end
|
50
|
+
|
51
|
+
def saved?
|
52
|
+
@vm.saved?
|
53
|
+
end
|
54
|
+
|
55
|
+
def powered_off?; @vm.powered_off? end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/expect
|
2
|
+
|
3
|
+
set uname [lrange $argv 0 0]
|
4
|
+
set password [lrange $argv 1 1]
|
5
|
+
set host [lrange $argv 2 2]
|
6
|
+
set port [lrange $argv 3 3]
|
7
|
+
|
8
|
+
if { $port != "" } {
|
9
|
+
set port_option "-p $port"
|
10
|
+
} else {
|
11
|
+
set port_option ""
|
12
|
+
}
|
13
|
+
|
14
|
+
spawn ssh $port_option -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $uname@$host
|
15
|
+
|
16
|
+
expect "*password: " {
|
17
|
+
send "$password\r"
|
18
|
+
} timeout {
|
19
|
+
send_user "Error connecting"
|
20
|
+
}
|
21
|
+
|
22
|
+
interact
|
@@ -0,0 +1,8 @@
|
|
1
|
+
Vagrant::Config.run do |config|
|
2
|
+
# All Vagrant configuration is done here. For a detailed explanation
|
3
|
+
# and listing of configuration options, please check the documentation
|
4
|
+
# online.
|
5
|
+
|
6
|
+
# Every Vagrant virtual environment requires a box to build off of.
|
7
|
+
config.vm.box = "base"
|
8
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
begin
|
2
|
+
require File.expand_path('../.bundle/environment', __FILE__)
|
3
|
+
rescue LoadError
|
4
|
+
# Fallback on doing the resolve at runtime.
|
5
|
+
require "rubygems"
|
6
|
+
require "bundler"
|
7
|
+
Bundler.setup
|
8
|
+
end
|
9
|
+
|
10
|
+
# ruby-debug, not necessary, but useful if we have it
|
11
|
+
begin
|
12
|
+
require 'ruby-debug'
|
13
|
+
rescue LoadError; end
|
14
|
+
|
15
|
+
|
16
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'vagrant')
|
17
|
+
require 'contest'
|
18
|
+
require 'mocha'
|
19
|
+
|
20
|
+
class Test::Unit::TestCase
|
21
|
+
# Clears the previous config and sets up the new config
|
22
|
+
def mock_config
|
23
|
+
Vagrant::Config.instance_variable_set(:@config_runners, nil)
|
24
|
+
Vagrant::Config.instance_variable_set(:@config, nil)
|
25
|
+
|
26
|
+
Vagrant::Config.run do |config|
|
27
|
+
config.vagrant.dotfile_name = ".hobo"
|
28
|
+
|
29
|
+
config.ssh.username = "foo"
|
30
|
+
config.ssh.password = "bar"
|
31
|
+
config.ssh.host = "baz"
|
32
|
+
config.ssh.forwarded_port_key = "ssh"
|
33
|
+
config.ssh.max_tries = 10
|
34
|
+
|
35
|
+
config.vm.box = "foo"
|
36
|
+
config.vm.box_ovf = "box.ovf"
|
37
|
+
config.vm.base_mac = "42"
|
38
|
+
config.vm.project_directory = "/hobo"
|
39
|
+
config.vm.disk_image_format = 'VMDK'
|
40
|
+
config.vm.forward_port("ssh", 22, 2222)
|
41
|
+
|
42
|
+
config.package.name = 'vagrant'
|
43
|
+
config.package.extension = '.box'
|
44
|
+
|
45
|
+
config.chef.cookbooks_path = "cookbooks"
|
46
|
+
config.chef.provisioning_path = "/tmp/hobo-chef"
|
47
|
+
config.chef.json = {
|
48
|
+
:recipes => ["hobo_main"]
|
49
|
+
}
|
50
|
+
|
51
|
+
config.vagrant.home = '~/.home'
|
52
|
+
end
|
53
|
+
|
54
|
+
if block_given?
|
55
|
+
Vagrant::Config.run do |config|
|
56
|
+
yield config
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
if block_given?
|
61
|
+
Vagrant::Config.run do |config|
|
62
|
+
yield config
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
Vagrant::Config.execute!
|
67
|
+
end
|
68
|
+
|
69
|
+
# Sets up the mocks and instantiates an action for testing
|
70
|
+
def mock_action(action_klass, *args)
|
71
|
+
vm = mock("vboxvm")
|
72
|
+
mock_vm = mock("vm")
|
73
|
+
action = action_klass.new(mock_vm, *args)
|
74
|
+
|
75
|
+
mock_vm.stubs(:vm).returns(vm)
|
76
|
+
mock_vm.stubs(:vm=)
|
77
|
+
mock_vm.stubs(:invoke_callback)
|
78
|
+
mock_vm.stubs(:invoke_around_callback).yields
|
79
|
+
mock_vm.stubs(:actions).returns([action])
|
80
|
+
|
81
|
+
[mock_vm, vm, action]
|
82
|
+
end
|
83
|
+
|
84
|
+
# Sets up the mocks and stubs for a downloader
|
85
|
+
def mock_downloader(downloader_klass)
|
86
|
+
tempfile = mock("tempfile")
|
87
|
+
tempfile.stubs(:write)
|
88
|
+
|
89
|
+
[downloader_klass.new, tempfile]
|
90
|
+
end
|
91
|
+
end
|