Specify remote cookbook paths which exist only the VM in cookbook_paths config. [closes GH-130]

This commit is contained in:
Mitchell Hashimoto 2010-07-31 10:46:22 -07:00
parent 6522a2f6e5
commit e63cd71673
3 changed files with 41 additions and 9 deletions

View File

@ -1,5 +1,8 @@
## 0.5.1 (unreleased)
- Allow specifying cookbook paths which exist only on the VM in `config.chef.cookbooks_path`.
This is used for specifying cookbook paths when `config.chef.recipe_url` is used. [GH-130]
See updated chef solo documentation for more information on this.
- No longer show "Disabling host only networks..." if no host only networks
are destroyed. Quiets `destroy`, `halt`, etc output a bit.
- Updated getting started guide to be more up to date and generic. [GH-125]

View File

@ -50,17 +50,37 @@ module Vagrant
end
def host_folder_paths(paths)
[paths].flatten.collect { |path| File.expand_path(path, env.root_path) }
# Convert single cookbook paths such as "cookbooks" or [:vm, "cookbooks"]
# into a proper array representation.
paths = [paths] if paths.is_a?(String) || paths.first.is_a?(Symbol)
paths.inject([]) do |acc, path|
path = [:host, path] if !path.is_a?(Array)
type, path = path
acc << File.expand_path(path, env.root_path) if type == :host
acc
end
end
def folder_path(folder, i)
File.join(env.config.chef.provisioning_path, "#{folder}-#{i}")
def folder_path(*args)
File.expand_path(args.join("-"), env.config.chef.provisioning_path)
end
def folders_path(folders, folder)
# Convert single cookbook paths such as "cookbooks" or [:vm, "cookbooks"]
# into a proper array representation.
folders = [folders] if folders.is_a?(String) || folders.first.is_a?(Symbol)
# Convert each path to the proper absolute path depending on if the path
# is a host path or a VM path
result = []
folders.each_with_index do |host_path, i|
result << folder_path(folder, i)
folders.each_with_index do |path, i|
path = [:host, path] if !path.is_a?(Array)
type, path = path
result << folder_path(folder, i) if type == :host
result << folder_path(path) if type == :vm
end
# We're lucky that ruby's string and array syntax for strings is the
@ -86,14 +106,14 @@ module Vagrant
end
def cookbooks_path
result = folders_path(host_cookbook_paths, "cookbooks")
result = folders_path(env.config.chef.cookbooks_path, "cookbooks")
result = [result, File.join(env.config.chef.provisioning_path, "cookbooks")].flatten if env.config.chef.recipe_url
result.to_json
end
def roles_path
folders_path(host_role_paths, "roles").to_json
folders_path(env.config.chef.roles_path, "roles").to_json
end
end
end

View File

@ -66,6 +66,10 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
end
context "host folder paths" do
should "ignore VM paths" do
assert @action.host_folder_paths([:vm, "foo"]).empty?
end
should "return as an array if was originally a string" do
folder = "foo"
File.stubs(:expand_path).returns("bar")
@ -120,6 +124,11 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
assert_equal @cookbooks, @action.folders_path([0], @folder)
end
should "properly format VM folder paths" do
@env.config.chef.provisioning_path = "/foo"
assert_equal "/foo/bar", @action.folders_path([:vm, "bar"], nil)
end
end
context "cookbooks path" do
@ -130,7 +139,7 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
should "properly call folders path and return result" do
result = [:a, :b, :c]
@action.expects(:folders_path).with(@action.host_cookbook_paths, "cookbooks").once.returns(result)
@action.expects(:folders_path).with(@env.config.chef.cookbooks_path, "cookbooks").once.returns(result)
assert_equal result.to_json, @action.cookbooks_path
end
@ -151,7 +160,7 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
should "properly call folders path and return result" do
result = [:a, :b, :c]
@action.expects(:folders_path).with(@action.host_role_paths, "roles").once.returns(result)
@action.expects(:folders_path).with(@env.config.chef.roles_path, "roles").once.returns(result)
assert_equal result.to_json, @action.roles_path
end
end