vagrant 0.7.4 → 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +10 -0
- data/lib/vagrant/config/ssh.rb +2 -0
- data/lib/vagrant/plugin.rb +16 -3
- data/lib/vagrant/provisioners/chef.rb +11 -0
- data/lib/vagrant/provisioners/chef_server.rb +3 -2
- data/lib/vagrant/provisioners/chef_solo.rb +25 -2
- data/lib/vagrant/ssh.rb +3 -0
- data/lib/vagrant/version.rb +1 -1
- data/templates/chef_solo_solo.erb +4 -0
- data/test/vagrant/provisioners/chef_solo_test.rb +45 -1
- data/test/vagrant/provisioners/chef_test.rb +12 -0
- metadata +4 -6
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 0.7.5 (May 16, 2011)
|
2
|
+
|
3
|
+
- `config.ssh.port` can be specified and takes highest precedence if specified.
|
4
|
+
Otherwise, Vagrant will still attempt to auto-detect the port. [GH-363]
|
5
|
+
- Get rid of RubyGems deprecations introduced with RubyGems 1.8.x
|
6
|
+
- Search in pre-release gems for plugins as well as release gems.
|
7
|
+
- Support for Chef-solo `data_bags_path` [GH-362]
|
8
|
+
- Can specify path to Chef binary using `binary_path` [GH-342]
|
9
|
+
- Can specify additional environment data for Chef using `binary_env` [GH-342]
|
10
|
+
|
1
11
|
## 0.7.4 (May 12, 2011)
|
2
12
|
|
3
13
|
- Chef environments support (for Chef 0.10) [GH-358]
|
data/lib/vagrant/config/ssh.rb
CHANGED
data/lib/vagrant/plugin.rb
CHANGED
@@ -21,18 +21,31 @@ module Vagrant
|
|
21
21
|
# load path. This file is loaded to kick off the load sequence
|
22
22
|
# for that plugin.
|
23
23
|
def self.load!
|
24
|
+
# RubyGems 1.8.0 deprecated `source_index`. Gem::Specification is the
|
25
|
+
# new replacement. For now, we support both, but special-case 1.8.x
|
26
|
+
# so that we avoid deprecation messages.
|
27
|
+
index = Gem::VERSION >= "1.8.0" ? Gem::Specification : Gem.source_index
|
28
|
+
|
24
29
|
# Stupid hack since Rails 2.3.x overrides Gem.source_index with their
|
25
30
|
# own incomplete replacement which causes issues.
|
26
|
-
index = Gem.source_index
|
27
31
|
index = [index.installed_source_index, index.vendor_source_index] if defined?(Rails::VendorGemSourceIndex) && index.is_a?(Rails::VendorGemSourceIndex)
|
28
32
|
|
29
33
|
# Look for a vagrant_init.rb in all the gems, but only the
|
30
34
|
# latest version of the gems.
|
31
35
|
[index].flatten.each do |source|
|
36
|
+
# In 1.6.0, added the option of including prerelease gems, which is
|
37
|
+
# useful for developers.
|
38
|
+
specs = Gem::VERSION >= "1.6.0" ? source.latest_specs(true) : source.latest_specs
|
39
|
+
|
32
40
|
source.latest_specs.each do |spec|
|
33
|
-
file =
|
34
|
-
|
41
|
+
file = nil
|
42
|
+
if Gem::VERSION >= "1.8.0"
|
43
|
+
file = spec.matches_for_glob("**/vagrant_init.rb").first
|
44
|
+
else
|
45
|
+
file = Gem.searcher.matching_files(spec, "vagrant_init.rb").first
|
46
|
+
end
|
35
47
|
|
48
|
+
next if !file
|
36
49
|
@@plugins << new(spec, file)
|
37
50
|
end
|
38
51
|
end
|
@@ -16,6 +16,13 @@ module Vagrant
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
# Returns the path to the Chef binary, taking into account the
|
20
|
+
# `binary_path` configuration option.
|
21
|
+
def chef_binary_path(binary)
|
22
|
+
return binary if !config.binary_path
|
23
|
+
return File.join(config.binary_path, binary)
|
24
|
+
end
|
25
|
+
|
19
26
|
def chown_provisioning_folder
|
20
27
|
vm.ssh.execute do |ssh|
|
21
28
|
ssh.sudo!("mkdir -p #{config.provisioning_path}")
|
@@ -81,6 +88,8 @@ module Vagrant
|
|
81
88
|
attr_accessor :https_proxy_user
|
82
89
|
attr_accessor :https_proxy_pass
|
83
90
|
attr_accessor :no_proxy
|
91
|
+
attr_accessor :binary_path
|
92
|
+
attr_accessor :binary_env
|
84
93
|
|
85
94
|
def initialize
|
86
95
|
@provisioning_path = "/tmp/vagrant-chef"
|
@@ -93,6 +102,8 @@ module Vagrant
|
|
93
102
|
@https_proxy_user = nil
|
94
103
|
@https_proxy_pass = nil
|
95
104
|
@no_proxy = nil
|
105
|
+
@binary_path = nil
|
106
|
+
@binary_env = nil
|
96
107
|
end
|
97
108
|
|
98
109
|
# Returns the run list for the provisioning
|
@@ -41,7 +41,7 @@ module Vagrant
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def provision!
|
44
|
-
verify_binary("chef-client")
|
44
|
+
verify_binary(chef_binary_path("chef-client"))
|
45
45
|
chown_provisioning_folder
|
46
46
|
create_client_key_folder
|
47
47
|
upload_validation_key
|
@@ -78,8 +78,9 @@ module Vagrant
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def run_chef_client
|
81
|
+
command_env = config.binary_env ? "#{config.binary_env} " : ""
|
81
82
|
commands = ["cd #{config.provisioning_path}",
|
82
|
-
"chef-client -c client.rb -j dna.json"]
|
83
|
+
"#{command_env}#{chef_binary_path("chef-client")} -c client.rb -j dna.json"]
|
83
84
|
|
84
85
|
env.ui.info I18n.t("vagrant.provisioners.chef.running_client")
|
85
86
|
vm.ssh.execute do |ssh|
|
@@ -7,6 +7,7 @@ module Vagrant
|
|
7
7
|
class Config < Chef::Config
|
8
8
|
attr_accessor :cookbooks_path
|
9
9
|
attr_accessor :roles_path
|
10
|
+
attr_accessor :data_bags_path
|
10
11
|
attr_accessor :recipe_url
|
11
12
|
|
12
13
|
def initialize
|
@@ -14,6 +15,7 @@ module Vagrant
|
|
14
15
|
|
15
16
|
@cookbooks_path = ["cookbooks", [:vm, "cookbooks"]]
|
16
17
|
@roles_path = []
|
18
|
+
@data_bags_path = []
|
17
19
|
end
|
18
20
|
|
19
21
|
def validate(errors)
|
@@ -27,10 +29,11 @@ module Vagrant
|
|
27
29
|
def prepare
|
28
30
|
share_cookbook_folders
|
29
31
|
share_role_folders
|
32
|
+
share_data_bags_folders
|
30
33
|
end
|
31
34
|
|
32
35
|
def provision!
|
33
|
-
verify_binary("chef-solo")
|
36
|
+
verify_binary(chef_binary_path("chef-solo"))
|
34
37
|
chown_provisioning_folder
|
35
38
|
setup_json
|
36
39
|
setup_solo_config
|
@@ -49,6 +52,12 @@ module Vagrant
|
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
55
|
+
def share_data_bags_folders
|
56
|
+
host_data_bag_paths.each_with_index do |data_bag, i|
|
57
|
+
env.config.vm.share_folder("v-csdb-#{i}", data_bag_path(i), data_bag)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
52
61
|
def setup_solo_config
|
53
62
|
setup_config("chef_solo_solo", "solo.rb", {
|
54
63
|
:node_name => config.node_name,
|
@@ -56,11 +65,13 @@ module Vagrant
|
|
56
65
|
:cookbooks_path => cookbooks_path,
|
57
66
|
:recipe_url => config.recipe_url,
|
58
67
|
:roles_path => roles_path,
|
68
|
+
:data_bags_path => data_bags_path,
|
59
69
|
})
|
60
70
|
end
|
61
71
|
|
62
72
|
def run_chef_solo
|
63
|
-
|
73
|
+
command_env = config.binary_env ? "#{config.binary_env} " : ""
|
74
|
+
commands = ["cd #{config.provisioning_path}", "#{command_env}#{chef_binary_path("chef-solo")} -c solo.rb -j dna.json"]
|
64
75
|
|
65
76
|
env.ui.info I18n.t("vagrant.provisioners.chef.running_solo")
|
66
77
|
vm.ssh.execute do |ssh|
|
@@ -122,6 +133,10 @@ module Vagrant
|
|
122
133
|
host_folder_paths(config.roles_path)
|
123
134
|
end
|
124
135
|
|
136
|
+
def host_data_bag_paths
|
137
|
+
host_folder_paths(config.data_bags_path)
|
138
|
+
end
|
139
|
+
|
125
140
|
def cookbook_path(i)
|
126
141
|
folder_path("cookbooks", i)
|
127
142
|
end
|
@@ -130,6 +145,10 @@ module Vagrant
|
|
130
145
|
folder_path("roles", i)
|
131
146
|
end
|
132
147
|
|
148
|
+
def data_bag_path(i)
|
149
|
+
folder_path("data_bags", i)
|
150
|
+
end
|
151
|
+
|
133
152
|
def cookbooks_path
|
134
153
|
folders_path(config.cookbooks_path, "cookbooks").to_json
|
135
154
|
end
|
@@ -137,6 +156,10 @@ module Vagrant
|
|
137
156
|
def roles_path
|
138
157
|
folders_path(config.roles_path, "roles").to_json
|
139
158
|
end
|
159
|
+
|
160
|
+
def data_bags_path
|
161
|
+
folders_path(config.data_bags_path, "data_bags").to_json
|
162
|
+
end
|
140
163
|
end
|
141
164
|
end
|
142
165
|
end
|
data/lib/vagrant/ssh.rb
CHANGED
@@ -154,6 +154,9 @@ module Vagrant
|
|
154
154
|
pnum = opts[:port]
|
155
155
|
return pnum if pnum
|
156
156
|
|
157
|
+
# Check if a port was specified in the config
|
158
|
+
return env.config.ssh.port if env.config.ssh.port
|
159
|
+
|
157
160
|
# Check if we have an SSH forwarded port
|
158
161
|
pnum = nil
|
159
162
|
env.vm.vm.network_adapters.each do |na|
|
data/lib/vagrant/version.rb
CHANGED
@@ -42,6 +42,11 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
|
|
42
42
|
@action.expects(:share_role_folders).once
|
43
43
|
@action.prepare
|
44
44
|
end
|
45
|
+
|
46
|
+
should "share data bag folders" do
|
47
|
+
@action.expects(:share_data_bags_folders).once
|
48
|
+
@action.prepare
|
49
|
+
end
|
45
50
|
end
|
46
51
|
|
47
52
|
context "provisioning" do
|
@@ -86,6 +91,22 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
|
|
86
91
|
@action.share_role_folders
|
87
92
|
end
|
88
93
|
end
|
94
|
+
|
95
|
+
context "sharing data bag folders" do
|
96
|
+
setup do
|
97
|
+
@host_data_bag_paths = ["foo", "bar"]
|
98
|
+
@action.stubs(:host_data_bag_paths).returns(@host_data_bag_paths)
|
99
|
+
end
|
100
|
+
|
101
|
+
should "share each data bag folder" do
|
102
|
+
share_seq = sequence("share_seq")
|
103
|
+
@host_data_bag_paths.each_with_index do |data_bag, i|
|
104
|
+
@env.config.vm.expects(:share_folder).with("v-csdb-#{i}", @action.data_bag_path(i), data_bag).in_sequence(share_seq)
|
105
|
+
end
|
106
|
+
|
107
|
+
@action.share_data_bags_folders
|
108
|
+
end
|
109
|
+
end
|
89
110
|
|
90
111
|
context "host folder paths" do
|
91
112
|
should "ignore VM paths" do
|
@@ -124,6 +145,15 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
|
|
124
145
|
assert_equal result, @action.host_role_paths
|
125
146
|
end
|
126
147
|
end
|
148
|
+
|
149
|
+
context "host data bags paths" do
|
150
|
+
should "get folders path for configured data bag path" do
|
151
|
+
result = mock("result")
|
152
|
+
@config.stubs(:data_bags_path).returns("foo")
|
153
|
+
@action.expects(:host_folder_paths).with(@config.data_bags_path).returns(result)
|
154
|
+
assert_equal result, @action.host_data_bag_paths
|
155
|
+
end
|
156
|
+
end
|
127
157
|
|
128
158
|
context "folder path" do
|
129
159
|
should "return a proper path to a single folder" do
|
@@ -179,6 +209,19 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
|
|
179
209
|
end
|
180
210
|
end
|
181
211
|
|
212
|
+
context "data bags path" do
|
213
|
+
should "return a proper path to a single data bag" do
|
214
|
+
expected = File.join(@config.provisioning_path, "data_bags-5")
|
215
|
+
assert_equal expected, @action.data_bag_path(5)
|
216
|
+
end
|
217
|
+
|
218
|
+
should "properly call folders path and return result" do
|
219
|
+
result = [:a, :b, :c]
|
220
|
+
@action.expects(:folders_path).with(@config.data_bags_path, "data_bags").once.returns(result)
|
221
|
+
assert_equal result.to_json, @action.data_bags_path
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
182
225
|
context "generating and uploading chef solo configuration file" do
|
183
226
|
setup do
|
184
227
|
@vm.ssh.stubs(:upload!)
|
@@ -192,7 +235,8 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
|
|
192
235
|
:provisioning_path => @config.provisioning_path,
|
193
236
|
:cookbooks_path => @action.cookbooks_path,
|
194
237
|
:recipe_url => @config.recipe_url,
|
195
|
-
:roles_path => @action.roles_path
|
238
|
+
:roles_path => @action.roles_path,
|
239
|
+
:data_bags_path => @action.data_bags_path
|
196
240
|
})
|
197
241
|
|
198
242
|
@action.setup_solo_config
|
@@ -78,6 +78,18 @@ class ChefProvisionerTest < Test::Unit::TestCase
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
+
context "chef binary path" do
|
82
|
+
should "return just the binary if no binary path is set" do
|
83
|
+
@config.binary_path = nil
|
84
|
+
assert_equal "foo", @action.chef_binary_path("foo")
|
85
|
+
end
|
86
|
+
|
87
|
+
should "return the joined binary path and binary if set" do
|
88
|
+
@config.binary_path = "/foo"
|
89
|
+
assert_equal File.join(@config.binary_path, "bar"), @action.chef_binary_path("bar")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
81
93
|
context "permissions on provisioning folder" do
|
82
94
|
should "create and chown the folder to the ssh user" do
|
83
95
|
ssh_seq = sequence("ssh_seq")
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: vagrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.7.
|
5
|
+
version: 0.7.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Mitchell Hashimoto
|
@@ -11,8 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-05-
|
15
|
-
default_executable:
|
14
|
+
date: 2011-05-16 00:00:00 Z
|
16
15
|
dependencies:
|
17
16
|
- !ruby/object:Gem::Dependency
|
18
17
|
name: archive-tar-minitar
|
@@ -409,7 +408,6 @@ files:
|
|
409
408
|
- test/vagrant/util/template_renderer_test.rb
|
410
409
|
- test/vagrant/vm_test.rb
|
411
410
|
- vagrant.gemspec
|
412
|
-
has_rdoc: true
|
413
411
|
homepage: http://vagrantup.com
|
414
412
|
licenses: []
|
415
413
|
|
@@ -423,7 +421,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
423
421
|
requirements:
|
424
422
|
- - ">="
|
425
423
|
- !ruby/object:Gem::Version
|
426
|
-
hash:
|
424
|
+
hash: 3225636291366202094
|
427
425
|
segments:
|
428
426
|
- 0
|
429
427
|
version: "0"
|
@@ -436,7 +434,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
436
434
|
requirements: []
|
437
435
|
|
438
436
|
rubyforge_project: vagrant
|
439
|
-
rubygems_version: 1.
|
437
|
+
rubygems_version: 1.8.2
|
440
438
|
signing_key:
|
441
439
|
specification_version: 3
|
442
440
|
summary: Build and distribute virtualized development environments.
|