vagrant 0.2.0 → 0.3.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.
- data/Gemfile +4 -4
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/bin/vagrant +5 -13
- data/config/default.rb +1 -0
- data/keys/README.md +8 -1
- data/keys/vagrant.ppk +26 -0
- data/lib/vagrant.rb +3 -3
- data/lib/vagrant/actions/base.rb +15 -4
- data/lib/vagrant/actions/box/add.rb +1 -1
- data/lib/vagrant/actions/box/download.rb +72 -66
- data/lib/vagrant/actions/box/unpackage.rb +1 -4
- data/lib/vagrant/actions/runner.rb +1 -1
- data/lib/vagrant/actions/vm/boot.rb +5 -7
- data/lib/vagrant/actions/vm/customize.rb +2 -2
- data/lib/vagrant/actions/vm/destroy.rb +2 -2
- data/lib/vagrant/actions/vm/down.rb +7 -0
- data/lib/vagrant/actions/vm/export.rb +10 -4
- data/lib/vagrant/actions/vm/forward_ports.rb +5 -15
- data/lib/vagrant/actions/vm/halt.rb +5 -3
- data/lib/vagrant/actions/vm/import.rb +10 -3
- data/lib/vagrant/actions/vm/move_hard_drive.rb +1 -3
- data/lib/vagrant/actions/vm/package.rb +33 -10
- data/lib/vagrant/actions/vm/provision.rb +4 -4
- data/lib/vagrant/actions/vm/reload.rb +1 -1
- data/lib/vagrant/actions/vm/resume.rb +1 -1
- data/lib/vagrant/actions/vm/shared_folders.rb +7 -7
- data/lib/vagrant/actions/vm/start.rb +3 -2
- data/lib/vagrant/actions/vm/suspend.rb +2 -2
- data/lib/vagrant/actions/vm/up.rb +7 -17
- data/lib/vagrant/active_list.rb +52 -45
- data/lib/vagrant/box.rb +18 -11
- data/lib/vagrant/busy.rb +7 -0
- data/lib/vagrant/command.rb +27 -0
- data/lib/vagrant/commands/base.rb +163 -0
- data/lib/vagrant/commands/box.rb +16 -0
- data/lib/vagrant/commands/box/add.rb +24 -0
- data/lib/vagrant/commands/box/list.rb +30 -0
- data/lib/vagrant/commands/box/remove.rb +31 -0
- data/lib/vagrant/commands/destroy.rb +23 -0
- data/lib/vagrant/commands/down.rb +16 -0
- data/lib/vagrant/commands/halt.rb +23 -0
- data/lib/vagrant/commands/init.rb +32 -0
- data/lib/vagrant/commands/package.rb +46 -0
- data/lib/vagrant/commands/reload.rb +22 -0
- data/lib/vagrant/commands/resume.rb +22 -0
- data/lib/vagrant/commands/ssh.rb +22 -0
- data/lib/vagrant/commands/ssh_config.rb +30 -0
- data/lib/vagrant/commands/status.rb +58 -0
- data/lib/vagrant/commands/suspend.rb +23 -0
- data/lib/vagrant/commands/up.rb +26 -0
- data/lib/vagrant/config.rb +21 -11
- data/lib/vagrant/downloaders/file.rb +5 -5
- data/lib/vagrant/downloaders/http.rb +10 -15
- data/lib/vagrant/environment.rb +259 -0
- data/lib/vagrant/provisioners/base.rb +7 -0
- data/lib/vagrant/provisioners/chef.rb +24 -9
- data/lib/vagrant/provisioners/chef_server.rb +23 -48
- data/lib/vagrant/provisioners/chef_solo.rb +48 -22
- data/lib/vagrant/ssh.rb +95 -46
- data/lib/vagrant/util.rb +2 -2
- data/lib/vagrant/util/errors.rb +36 -0
- data/lib/vagrant/util/platform.rb +12 -0
- data/lib/vagrant/util/progress_meter.rb +33 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/vm.rb +1 -0
- data/templates/{Vagrantfile → Vagrantfile.erb} +2 -2
- data/templates/chef_server_client.erb +16 -0
- data/templates/chef_solo_solo.erb +4 -0
- data/templates/errors.yml +157 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/ssh_config.erb +7 -0
- data/test/test_helper.rb +12 -15
- data/test/vagrant/actions/box/add_test.rb +1 -2
- data/test/vagrant/actions/box/destroy_test.rb +0 -1
- data/test/vagrant/actions/box/download_test.rb +40 -15
- data/test/vagrant/actions/box/unpackage_test.rb +2 -3
- data/test/vagrant/actions/collection_test.rb +8 -5
- data/test/vagrant/actions/runner_test.rb +8 -6
- data/test/vagrant/actions/vm/boot_test.rb +12 -11
- data/test/vagrant/actions/vm/customize_test.rb +2 -3
- data/test/vagrant/actions/vm/destroy_test.rb +2 -3
- data/test/vagrant/actions/vm/down_test.rb +16 -3
- data/test/vagrant/actions/vm/export_test.rb +4 -5
- data/test/vagrant/actions/vm/forward_ports_test.rb +6 -5
- data/test/vagrant/actions/vm/halt_test.rb +8 -2
- data/test/vagrant/actions/vm/import_test.rb +5 -5
- data/test/vagrant/actions/vm/move_hard_drive_test.rb +4 -6
- data/test/vagrant/actions/vm/package_test.rb +60 -22
- data/test/vagrant/actions/vm/provision_test.rb +7 -16
- data/test/vagrant/actions/vm/reload_test.rb +3 -2
- data/test/vagrant/actions/vm/resume_test.rb +0 -1
- data/test/vagrant/actions/vm/shared_folders_test.rb +17 -12
- data/test/vagrant/actions/vm/start_test.rb +10 -3
- data/test/vagrant/actions/vm/suspend_test.rb +1 -2
- data/test/vagrant/actions/vm/up_test.rb +19 -11
- data/test/vagrant/active_list_test.rb +148 -129
- data/test/vagrant/box_test.rb +26 -14
- data/test/vagrant/busy_test.rb +15 -6
- data/test/vagrant/command_test.rb +53 -0
- data/test/vagrant/commands/base_test.rb +118 -0
- data/test/vagrant/commands/box/add_test.rb +34 -0
- data/test/vagrant/commands/box/list_test.rb +32 -0
- data/test/vagrant/commands/box/remove_test.rb +41 -0
- data/test/vagrant/commands/destroy_test.rb +32 -0
- data/test/vagrant/commands/down_test.rb +17 -0
- data/test/vagrant/commands/halt_test.rb +28 -0
- data/test/vagrant/commands/init_test.rb +55 -0
- data/test/vagrant/commands/package_test.rb +84 -0
- data/test/vagrant/commands/reload_test.rb +28 -0
- data/test/vagrant/commands/resume_test.rb +33 -0
- data/test/vagrant/commands/ssh_config_test.rb +54 -0
- data/test/vagrant/commands/ssh_test.rb +32 -0
- data/test/vagrant/commands/status_test.rb +20 -0
- data/test/vagrant/commands/suspend_test.rb +33 -0
- data/test/vagrant/commands/up_test.rb +41 -0
- data/test/vagrant/config_test.rb +42 -17
- data/test/vagrant/downloaders/file_test.rb +7 -0
- data/test/vagrant/downloaders/http_test.rb +12 -0
- data/test/vagrant/environment_test.rb +595 -0
- data/test/vagrant/provisioners/base_test.rb +7 -1
- data/test/vagrant/provisioners/chef_server_test.rb +41 -51
- data/test/vagrant/provisioners/chef_solo_test.rb +93 -62
- data/test/vagrant/provisioners/chef_test.rb +61 -15
- data/test/vagrant/ssh_test.rb +166 -38
- data/test/vagrant/util/errors_test.rb +57 -0
- data/test/vagrant/util/progress_meter_test.rb +33 -0
- data/test/vagrant/{stacked_proc_runner_test.rb → util/stacked_proc_runner_test.rb} +3 -3
- data/test/vagrant/util/template_renderer_test.rb +138 -0
- data/test/vagrant/vm_test.rb +3 -2
- data/vagrant.gemspec +88 -33
- metadata +94 -51
- data/bin/vagrant-box +0 -34
- data/bin/vagrant-down +0 -27
- data/bin/vagrant-halt +0 -28
- data/bin/vagrant-init +0 -27
- data/bin/vagrant-package +0 -29
- data/bin/vagrant-reload +0 -29
- data/bin/vagrant-resume +0 -27
- data/bin/vagrant-ssh +0 -27
- data/bin/vagrant-status +0 -29
- data/bin/vagrant-suspend +0 -27
- data/bin/vagrant-up +0 -29
- data/lib/vagrant/commands.rb +0 -234
- data/lib/vagrant/env.rb +0 -189
- data/lib/vagrant/stacked_proc_runner.rb +0 -33
- data/test/vagrant/commands_test.rb +0 -269
- data/test/vagrant/env_test.rb +0 -418
@@ -7,7 +7,13 @@ class BaseProvisionerTest < Test::Unit::TestCase
|
|
7
7
|
|
8
8
|
context "base instance" do
|
9
9
|
setup do
|
10
|
-
@
|
10
|
+
@env = mock_environment
|
11
|
+
@base = Vagrant::Provisioners::Base.new(@env)
|
12
|
+
end
|
13
|
+
|
14
|
+
should "set the environment" do
|
15
|
+
base = Vagrant::Provisioners::Base.new(@env)
|
16
|
+
assert_equal @env, base.env
|
11
17
|
end
|
12
18
|
|
13
19
|
should "implement provision! which does nothing" do
|
@@ -2,12 +2,8 @@ require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
|
2
2
|
|
3
3
|
class ChefServerProvisionerTest < Test::Unit::TestCase
|
4
4
|
setup do
|
5
|
-
@
|
6
|
-
|
7
|
-
Vagrant::SSH.stubs(:execute)
|
8
|
-
Vagrant::SSH.stubs(:upload!)
|
9
|
-
|
10
|
-
mock_config
|
5
|
+
@env = mock_environment
|
6
|
+
@action = Vagrant::Provisioners::ChefServer.new(@env)
|
11
7
|
end
|
12
8
|
|
13
9
|
context "provisioning" do
|
@@ -17,7 +13,7 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|
17
13
|
@action.expects(:create_client_key_folder).once.in_sequence(prov_seq)
|
18
14
|
@action.expects(:upload_validation_key).once.in_sequence(prov_seq)
|
19
15
|
@action.expects(:setup_json).once.in_sequence(prov_seq)
|
20
|
-
@action.expects(:
|
16
|
+
@action.expects(:setup_server_config).once.in_sequence(prov_seq)
|
21
17
|
@action.expects(:run_chef_client).once.in_sequence(prov_seq)
|
22
18
|
@action.provision!
|
23
19
|
end
|
@@ -29,56 +25,70 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|
29
25
|
end
|
30
26
|
|
31
27
|
should "not raise an exception if validation_key_path is set" do
|
32
|
-
|
28
|
+
@env = mock_environment do |config|
|
33
29
|
config.chef.validation_key_path = "7"
|
34
30
|
end
|
35
31
|
|
32
|
+
@action.stubs(:env).returns(@env)
|
33
|
+
|
36
34
|
assert_nothing_raised { @action.prepare }
|
37
35
|
end
|
38
36
|
|
39
37
|
should "raise an exception if validation_key_path is nil" do
|
40
|
-
|
38
|
+
@env = mock_environment do |config|
|
41
39
|
config.chef.validation_key_path = nil
|
42
40
|
end
|
43
41
|
|
42
|
+
@action.stubs(:env).returns(@env)
|
43
|
+
|
44
44
|
assert_raises(Vagrant::Actions::ActionException) {
|
45
45
|
@action.prepare
|
46
46
|
}
|
47
47
|
end
|
48
48
|
|
49
49
|
should "not raise an exception if validation_key_path does exist" do
|
50
|
-
|
50
|
+
@env = mock_environment do |config|
|
51
51
|
config.chef.validation_key_path = "7"
|
52
52
|
end
|
53
53
|
|
54
|
-
|
54
|
+
@action.stubs(:env).returns(@env)
|
55
|
+
@action.stubs(:validation_key_path).returns("9")
|
56
|
+
|
57
|
+
File.expects(:file?).with(@action.validation_key_path).returns(true)
|
55
58
|
assert_nothing_raised { @action.prepare }
|
56
59
|
end
|
57
60
|
|
58
61
|
should "raise an exception if validation_key_path doesn't exist" do
|
59
|
-
|
62
|
+
@env = mock_environment do |config|
|
60
63
|
config.chef.validation_key_path = "7"
|
61
64
|
end
|
62
65
|
|
63
|
-
|
66
|
+
@action.stubs(:env).returns(@env)
|
67
|
+
@action.stubs(:validation_key_path).returns("9")
|
68
|
+
|
69
|
+
File.expects(:file?).with(@action.validation_key_path).returns(false)
|
64
70
|
assert_raises(Vagrant::Actions::ActionException) {
|
65
71
|
@action.prepare
|
66
72
|
}
|
67
73
|
end
|
68
74
|
|
69
75
|
should "not raise an exception if chef_server_url is set" do
|
70
|
-
|
76
|
+
@env = mock_environment do |config|
|
71
77
|
config.chef.chef_server_url = "7"
|
72
78
|
end
|
73
79
|
|
80
|
+
@action.stubs(:env).returns(@env)
|
81
|
+
|
74
82
|
assert_nothing_raised { @action.prepare }
|
75
83
|
end
|
76
84
|
|
77
85
|
should "raise an exception if chef_server_url is nil" do
|
78
|
-
|
86
|
+
@env = mock_environment do |config|
|
79
87
|
config.chef.chef_server_url = nil
|
80
88
|
end
|
81
89
|
|
90
|
+
@action.stubs(:env).returns(@env)
|
91
|
+
|
82
92
|
assert_raises(Vagrant::Actions::ActionException) {
|
83
93
|
@action.prepare
|
84
94
|
}
|
@@ -88,9 +98,7 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|
88
98
|
context "creating the client key folder" do
|
89
99
|
setup do
|
90
100
|
@raw_path = "/foo/bar/baz.pem"
|
91
|
-
|
92
|
-
config.chef.client_key_path = @raw_path
|
93
|
-
end
|
101
|
+
@env.config.chef.client_key_path = @raw_path
|
94
102
|
|
95
103
|
@path = Pathname.new(@raw_path)
|
96
104
|
end
|
@@ -98,7 +106,7 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|
98
106
|
should "create the folder using the dirname of the path" do
|
99
107
|
ssh = mock("ssh")
|
100
108
|
ssh.expects(:exec!).with("sudo mkdir -p #{@path.dirname}").once
|
101
|
-
|
109
|
+
@env.ssh.expects(:execute).yields(ssh)
|
102
110
|
@action.create_client_key_folder
|
103
111
|
end
|
104
112
|
end
|
@@ -107,7 +115,7 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|
107
115
|
should "upload the validation key to the provisioning path" do
|
108
116
|
@action.expects(:validation_key_path).once.returns("foo")
|
109
117
|
@action.expects(:guest_validation_key_path).once.returns("bar")
|
110
|
-
|
118
|
+
@env.ssh.expects(:upload!).with("foo", "bar").once
|
111
119
|
@action.upload_validation_key
|
112
120
|
end
|
113
121
|
end
|
@@ -115,7 +123,7 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|
115
123
|
context "the validation key path" do
|
116
124
|
should "expand the configured key path" do
|
117
125
|
result = mock("result")
|
118
|
-
File.expects(:expand_path).with(
|
126
|
+
File.expects(:expand_path).with(@env.config.chef.validation_key_path, @env.root_path).once.returns(result)
|
119
127
|
assert_equal result, @action.validation_key_path
|
120
128
|
end
|
121
129
|
end
|
@@ -123,7 +131,7 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|
123
131
|
context "the guest validation key path" do
|
124
132
|
should "be the provisioning path joined with validation.pem" do
|
125
133
|
result = mock("result")
|
126
|
-
File.expects(:join).with(
|
134
|
+
File.expects(:join).with(@env.config.chef.provisioning_path, "validation.pem").once.returns(result)
|
127
135
|
assert_equal result, @action.guest_validation_key_path
|
128
136
|
end
|
129
137
|
end
|
@@ -133,42 +141,24 @@ class ChefServerProvisionerTest < Test::Unit::TestCase
|
|
133
141
|
@action.stubs(:guest_validation_key_path).returns("foo")
|
134
142
|
end
|
135
143
|
|
136
|
-
should "
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
validation_key "#{@action.guest_validation_key_path}"
|
145
|
-
client_key "#{Vagrant.config.chef.client_key_path}"
|
146
|
-
|
147
|
-
file_store_path "/srv/chef/file_store"
|
148
|
-
file_cache_path "/srv/chef/cache"
|
149
|
-
|
150
|
-
pid_file "/var/run/chef/chef-client.pid"
|
151
|
-
|
152
|
-
Mixlib::Log::Formatter.show_time = true
|
153
|
-
config
|
154
|
-
|
155
|
-
StringIO.expects(:new).with(expected_config).once
|
156
|
-
@action.setup_config
|
157
|
-
end
|
144
|
+
should "call setup_config with proper variables" do
|
145
|
+
@action.expects(:setup_config).with("chef_server_client", "client.rb", {
|
146
|
+
:node_name => @env.config.chef.node_name,
|
147
|
+
:chef_server_url => @env.config.chef.chef_server_url,
|
148
|
+
:validation_client_name => @env.config.chef.validation_client_name,
|
149
|
+
:validation_key => @action.guest_validation_key_path,
|
150
|
+
:client_key => @env.config.chef.client_key_path
|
151
|
+
})
|
158
152
|
|
159
|
-
|
160
|
-
StringIO.expects(:new).returns("foo")
|
161
|
-
File.expects(:join).with(Vagrant.config.chef.provisioning_path, "client.rb").once.returns("bar")
|
162
|
-
Vagrant::SSH.expects(:upload!).with("foo", "bar").once
|
163
|
-
@action.setup_config
|
153
|
+
@action.setup_server_config
|
164
154
|
end
|
165
155
|
end
|
166
156
|
|
167
157
|
context "running chef client" do
|
168
158
|
should "cd into the provisioning directory and run chef client" do
|
169
159
|
ssh = mock("ssh")
|
170
|
-
ssh.expects(:exec!).with("cd #{
|
171
|
-
|
160
|
+
ssh.expects(:exec!).with("cd #{@env.config.chef.provisioning_path} && sudo chef-client -c client.rb -j dna.json").once
|
161
|
+
@env.ssh.expects(:execute).yields(ssh)
|
172
162
|
@action.run_chef_client
|
173
163
|
end
|
174
164
|
end
|
@@ -2,12 +2,8 @@ require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
|
2
2
|
|
3
3
|
class ChefSoloProvisionerTest < Test::Unit::TestCase
|
4
4
|
setup do
|
5
|
-
@
|
6
|
-
|
7
|
-
Vagrant::SSH.stubs(:execute)
|
8
|
-
Vagrant::SSH.stubs(:upload!)
|
9
|
-
|
10
|
-
mock_config
|
5
|
+
@env = mock_environment
|
6
|
+
@action = Vagrant::Provisioners::ChefSolo.new(@env)
|
11
7
|
end
|
12
8
|
|
13
9
|
context "preparing" do
|
@@ -15,6 +11,11 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
|
|
15
11
|
@action.expects(:share_cookbook_folders).once
|
16
12
|
@action.prepare
|
17
13
|
end
|
14
|
+
|
15
|
+
should "share role folders" do
|
16
|
+
@action.expects(:share_role_folders).once
|
17
|
+
@action.prepare
|
18
|
+
end
|
18
19
|
end
|
19
20
|
|
20
21
|
context "provisioning" do
|
@@ -37,96 +38,126 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
|
|
37
38
|
should "share each cookbook folder" do
|
38
39
|
share_seq = sequence("share_seq")
|
39
40
|
@host_cookbook_paths.each_with_index do |cookbook, i|
|
40
|
-
|
41
|
+
@env.config.vm.expects(:share_folder).with("v-csc-#{i}", @action.cookbook_path(i), cookbook).in_sequence(share_seq)
|
41
42
|
end
|
42
43
|
|
43
44
|
@action.share_cookbook_folders
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
|
-
context "
|
48
|
-
|
49
|
-
@
|
50
|
-
@
|
51
|
-
|
48
|
+
context "sharing role folders" do
|
49
|
+
setup do
|
50
|
+
@host_role_paths = ["foo", "bar"]
|
51
|
+
@action.stubs(:host_role_paths).returns(@host_role_paths)
|
52
|
+
end
|
52
53
|
|
53
|
-
|
54
|
-
|
54
|
+
should "share each role folder" do
|
55
|
+
share_seq = sequence("share_seq")
|
56
|
+
@host_role_paths.each_with_index do |role, i|
|
57
|
+
@env.config.vm.expects(:share_folder).with("v-csr-#{i}", @action.role_path(i), role).in_sequence(share_seq)
|
55
58
|
end
|
56
59
|
|
57
|
-
|
60
|
+
@action.share_role_folders
|
58
61
|
end
|
62
|
+
end
|
59
63
|
|
64
|
+
context "host folder paths" do
|
60
65
|
should "return as an array if was originally a string" do
|
61
|
-
|
66
|
+
folder = "foo"
|
67
|
+
File.stubs(:expand_path).returns("bar")
|
68
|
+
assert_equal ["bar"], @action.host_folder_paths(folder)
|
69
|
+
end
|
62
70
|
|
63
|
-
|
64
|
-
|
65
|
-
|
71
|
+
should "return the array of folders if its an array" do
|
72
|
+
folders = ["foo", "bar"]
|
73
|
+
expand_seq = sequence('expand_seq')
|
74
|
+
folders.collect! { |folder| File.expand_path(folder, @env.root_path) }
|
66
75
|
|
67
|
-
assert_equal
|
76
|
+
assert_equal folders, @action.host_folder_paths(folders)
|
68
77
|
end
|
78
|
+
end
|
69
79
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
File.expects(:expand_path).with(cookbook, Vagrant::Env.root_path).returns(cookbook)
|
79
|
-
end
|
80
|
+
context "host cookbooks paths" do
|
81
|
+
should "get folders path for configured cookbooks path" do
|
82
|
+
result = mock("result")
|
83
|
+
@env.config.chef.stubs(:cookbooks_path).returns("foo")
|
84
|
+
@action.expects(:host_folder_paths).with(@env.config.chef.cookbooks_path).returns(result)
|
85
|
+
assert_equal result, @action.host_cookbook_paths
|
86
|
+
end
|
87
|
+
end
|
80
88
|
|
81
|
-
|
89
|
+
context "host roles paths" do
|
90
|
+
should "get folders path for configured roles path" do
|
91
|
+
result = mock("result")
|
92
|
+
@env.config.chef.stubs(:roles_path).returns("foo")
|
93
|
+
@action.expects(:host_folder_paths).with(@env.config.chef.roles_path).returns(result)
|
94
|
+
assert_equal result, @action.host_role_paths
|
82
95
|
end
|
83
96
|
end
|
84
97
|
|
85
|
-
context "
|
86
|
-
should "return a proper path to a single
|
87
|
-
expected = File.join(
|
88
|
-
assert_equal expected, @action.
|
98
|
+
context "folder path" do
|
99
|
+
should "return a proper path to a single folder" do
|
100
|
+
expected = File.join(@env.config.chef.provisioning_path, "cookbooks-5")
|
101
|
+
assert_equal expected, @action.folder_path("cookbooks", 5)
|
89
102
|
end
|
90
103
|
|
91
|
-
should "return array-representation of
|
92
|
-
@
|
104
|
+
should "return array-representation of folder paths if multiple" do
|
105
|
+
@folders = (0..5).to_a
|
106
|
+
@cookbooks = @folders.inject([]) do |acc, i|
|
93
107
|
acc << @action.cookbook_path(i)
|
94
108
|
end
|
95
109
|
|
96
|
-
|
97
|
-
|
98
|
-
end
|
110
|
+
assert_equal @cookbooks.to_json, @action.folders_path(@folders, "cookbooks")
|
111
|
+
end
|
99
112
|
|
100
|
-
|
113
|
+
should "return a single string representation if folder paths is single" do
|
114
|
+
@folder = "cookbooks"
|
115
|
+
@cookbooks = @action.folder_path(@folder, 0)
|
116
|
+
|
117
|
+
assert_equal @cookbooks.to_json, @action.folders_path([0], @folder)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context "cookbooks path" do
|
122
|
+
should "return a proper path to a single cookbook" do
|
123
|
+
expected = File.join(@env.config.chef.provisioning_path, "cookbooks-5")
|
124
|
+
assert_equal expected, @action.cookbook_path(5)
|
101
125
|
end
|
102
126
|
|
103
|
-
should "
|
104
|
-
|
127
|
+
should "properly call folders path and return result" do
|
128
|
+
result = mock("result")
|
129
|
+
@action.stubs(:host_cookbook_paths).returns([])
|
130
|
+
@action.expects(:folders_path).with(@action.host_cookbook_paths, "cookbooks").once.returns(result)
|
131
|
+
assert_equal result, @action.cookbooks_path
|
132
|
+
end
|
133
|
+
end
|
105
134
|
|
106
|
-
|
107
|
-
|
108
|
-
|
135
|
+
context "roles path" do
|
136
|
+
should "return a proper path to a single role" do
|
137
|
+
expected = File.join(@env.config.chef.provisioning_path, "roles-5")
|
138
|
+
assert_equal expected, @action.role_path(5)
|
139
|
+
end
|
109
140
|
|
110
|
-
|
141
|
+
should "properly call folders path and return result" do
|
142
|
+
result = mock("result")
|
143
|
+
@action.stubs(:host_role_paths).returns([])
|
144
|
+
@action.expects(:folders_path).with(@action.host_role_paths, "roles").once.returns(result)
|
145
|
+
assert_equal result, @action.roles_path
|
111
146
|
end
|
112
147
|
end
|
113
148
|
|
114
149
|
context "generating and uploading chef solo configuration file" do
|
115
|
-
|
116
|
-
|
117
|
-
file_cache_path "#{Vagrant.config.chef.provisioning_path}"
|
118
|
-
cookbook_path #{@action.cookbooks_path}
|
119
|
-
config
|
120
|
-
|
121
|
-
StringIO.expects(:new).with(expected_config).once
|
122
|
-
@action.setup_solo_config
|
150
|
+
setup do
|
151
|
+
@env.ssh.stubs(:upload!)
|
123
152
|
end
|
124
153
|
|
125
|
-
should "
|
126
|
-
@action.expects(:
|
127
|
-
|
128
|
-
|
129
|
-
|
154
|
+
should "call setup_config with proper variables" do
|
155
|
+
@action.expects(:setup_config).with("chef_solo_solo", "solo.rb", {
|
156
|
+
:provisioning_path => @env.config.chef.provisioning_path,
|
157
|
+
:cookbooks_path => @action.cookbooks_path,
|
158
|
+
:roles_path => @action.roles_path
|
159
|
+
})
|
160
|
+
|
130
161
|
@action.setup_solo_config
|
131
162
|
end
|
132
163
|
end
|
@@ -134,8 +165,8 @@ config
|
|
134
165
|
context "running chef solo" do
|
135
166
|
should "cd into the provisioning directory and run chef solo" do
|
136
167
|
ssh = mock("ssh")
|
137
|
-
ssh.expects(:exec!).with("cd #{
|
138
|
-
|
168
|
+
ssh.expects(:exec!).with("cd #{@env.config.chef.provisioning_path} && sudo chef-solo -c solo.rb -j dna.json").once
|
169
|
+
@env.ssh.expects(:execute).yields(ssh)
|
139
170
|
@action.run_chef_solo
|
140
171
|
end
|
141
172
|
end
|
@@ -2,12 +2,8 @@ require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
|
2
2
|
|
3
3
|
class ChefProvisionerTest < Test::Unit::TestCase
|
4
4
|
setup do
|
5
|
-
@
|
6
|
-
|
7
|
-
Vagrant::SSH.stubs(:execute)
|
8
|
-
Vagrant::SSH.stubs(:upload!)
|
9
|
-
|
10
|
-
mock_config
|
5
|
+
@env = mock_environment
|
6
|
+
@action = Vagrant::Provisioners::Chef.new(@env)
|
11
7
|
end
|
12
8
|
|
13
9
|
context "preparing" do
|
@@ -69,16 +65,66 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
|
69
65
|
should "create and chown the folder to the ssh user" do
|
70
66
|
ssh_seq = sequence("ssh_seq")
|
71
67
|
ssh = mock("ssh")
|
72
|
-
ssh.expects(:exec!).with("sudo mkdir -p #{
|
73
|
-
ssh.expects(:exec!).with("sudo chown #{
|
74
|
-
|
68
|
+
ssh.expects(:exec!).with("sudo mkdir -p #{@env.config.chef.provisioning_path}").once.in_sequence(ssh_seq)
|
69
|
+
ssh.expects(:exec!).with("sudo chown #{@env.config.ssh.username} #{@env.config.chef.provisioning_path}").once.in_sequence(ssh_seq)
|
70
|
+
@env.ssh.expects(:execute).yields(ssh)
|
75
71
|
@action.chown_provisioning_folder
|
76
72
|
end
|
77
73
|
end
|
78
74
|
|
75
|
+
context "generating and uploading chef configuration file" do
|
76
|
+
setup do
|
77
|
+
@env.ssh.stubs(:upload!)
|
78
|
+
|
79
|
+
@template = "template"
|
80
|
+
@filename = "foo.rb"
|
81
|
+
|
82
|
+
Vagrant::Util::TemplateRenderer.stubs(:render).returns("foo")
|
83
|
+
end
|
84
|
+
|
85
|
+
should "render and upload file" do
|
86
|
+
template_data = mock("data")
|
87
|
+
string_io = mock("string_io")
|
88
|
+
Vagrant::Util::TemplateRenderer.expects(:render).with(@template, anything).returns(template_data)
|
89
|
+
StringIO.expects(:new).with(template_data).returns(string_io)
|
90
|
+
File.expects(:join).with(@env.config.chef.provisioning_path, @filename).once.returns("bar")
|
91
|
+
@env.ssh.expects(:upload!).with(string_io, "bar")
|
92
|
+
|
93
|
+
@action.setup_config(@template, @filename, {})
|
94
|
+
end
|
95
|
+
|
96
|
+
should "provide log level by default" do
|
97
|
+
Vagrant::Util::TemplateRenderer.expects(:render).returns("foo").with() do |template, vars|
|
98
|
+
assert vars.has_key?(:log_level)
|
99
|
+
assert_equal @env.config.chef.log_level.to_sym, vars[:log_level]
|
100
|
+
true
|
101
|
+
end
|
102
|
+
|
103
|
+
@action.setup_config(@template, @filename, {})
|
104
|
+
end
|
105
|
+
|
106
|
+
should "allow custom template variables" do
|
107
|
+
custom = {
|
108
|
+
:foo => "bar",
|
109
|
+
:int => 7
|
110
|
+
}
|
111
|
+
|
112
|
+
Vagrant::Util::TemplateRenderer.expects(:render).returns("foo").with() do |template, vars|
|
113
|
+
custom.each do |key, value|
|
114
|
+
assert vars.has_key?(key)
|
115
|
+
assert_equal value, vars[key]
|
116
|
+
end
|
117
|
+
|
118
|
+
true
|
119
|
+
end
|
120
|
+
|
121
|
+
@action.setup_config(@template, @filename, custom)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
79
125
|
context "generating and uploading json" do
|
80
126
|
def assert_json
|
81
|
-
|
127
|
+
@env.ssh.expects(:upload!).with do |json, path|
|
82
128
|
data = JSON.parse(json.read)
|
83
129
|
yield data
|
84
130
|
true
|
@@ -88,7 +134,7 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
|
88
134
|
end
|
89
135
|
|
90
136
|
should "merge in the extra json specified in the config" do
|
91
|
-
|
137
|
+
@env.config.chef.json = { :foo => "BAR" }
|
92
138
|
assert_json do |data|
|
93
139
|
assert_equal "BAR", data["foo"]
|
94
140
|
end
|
@@ -96,20 +142,20 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
|
96
142
|
|
97
143
|
should "add the directory as a special case to the JSON" do
|
98
144
|
assert_json do |data|
|
99
|
-
assert_equal
|
145
|
+
assert_equal @env.config.vm.project_directory, data["vagrant"]["directory"]
|
100
146
|
end
|
101
147
|
end
|
102
148
|
|
103
149
|
should "add the config to the JSON" do
|
104
150
|
assert_json do |data|
|
105
|
-
assert_equal
|
151
|
+
assert_equal @env.config.vm.project_directory, data["vagrant"]["config"]["vm"]["project_directory"]
|
106
152
|
end
|
107
153
|
end
|
108
154
|
|
109
155
|
should "upload a StringIO to dna.json" do
|
110
156
|
StringIO.expects(:new).with(anything).returns("bar")
|
111
|
-
File.expects(:join).with(
|
112
|
-
|
157
|
+
File.expects(:join).with(@env.config.chef.provisioning_path, "dna.json").once.returns("baz")
|
158
|
+
@env.ssh.expects(:upload!).with("bar", "baz").once
|
113
159
|
@action.setup_json
|
114
160
|
end
|
115
161
|
end
|