rvagrant 0.8.7.dev
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/.gitignore +25 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +386 -0
- data/Gemfile +21 -0
- data/LICENSE +21 -0
- data/README.md +61 -0
- data/Rakefile +11 -0
- data/bin/vagrant +28 -0
- data/config/default.rb +38 -0
- data/contrib/README.md +12 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/keys/README.md +17 -0
- data/keys/vagrant +27 -0
- data/keys/vagrant.ppk +26 -0
- data/keys/vagrant.pub +1 -0
- data/lib/vagrant.rb +44 -0
- data/lib/vagrant/action.rb +138 -0
- data/lib/vagrant/action/box.rb +11 -0
- data/lib/vagrant/action/box/destroy.rb +21 -0
- data/lib/vagrant/action/box/download.rb +72 -0
- data/lib/vagrant/action/box/package.rb +19 -0
- data/lib/vagrant/action/box/unpackage.rb +55 -0
- data/lib/vagrant/action/box/verify.rb +23 -0
- data/lib/vagrant/action/builder.rb +124 -0
- data/lib/vagrant/action/builtin.rb +108 -0
- data/lib/vagrant/action/env.rb +7 -0
- data/lib/vagrant/action/env/set.rb +18 -0
- data/lib/vagrant/action/environment.rb +50 -0
- data/lib/vagrant/action/general.rb +8 -0
- data/lib/vagrant/action/general/package.rb +113 -0
- data/lib/vagrant/action/general/validate.rb +19 -0
- data/lib/vagrant/action/vm.rb +34 -0
- data/lib/vagrant/action/vm/boot.rb +48 -0
- data/lib/vagrant/action/vm/check_accessible.rb +23 -0
- data/lib/vagrant/action/vm/check_box.rb +28 -0
- data/lib/vagrant/action/vm/check_guest_additions.rb +35 -0
- data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +26 -0
- data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
- data/lib/vagrant/action/vm/clear_shared_folders.rb +27 -0
- data/lib/vagrant/action/vm/customize.rb +26 -0
- data/lib/vagrant/action/vm/destroy.rb +19 -0
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
- data/lib/vagrant/action/vm/discard_state.rb +22 -0
- data/lib/vagrant/action/vm/export.rb +52 -0
- data/lib/vagrant/action/vm/forward_ports.rb +133 -0
- data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
- data/lib/vagrant/action/vm/halt.rb +29 -0
- data/lib/vagrant/action/vm/host_name.rb +21 -0
- data/lib/vagrant/action/vm/import.rb +40 -0
- data/lib/vagrant/action/vm/match_mac_address.rb +26 -0
- data/lib/vagrant/action/vm/modify.rb +37 -0
- data/lib/vagrant/action/vm/network.rb +146 -0
- data/lib/vagrant/action/vm/nfs.rb +160 -0
- data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
- data/lib/vagrant/action/vm/package.rb +23 -0
- data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
- data/lib/vagrant/action/vm/provision.rb +34 -0
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
- data/lib/vagrant/action/vm/resume.rb +20 -0
- data/lib/vagrant/action/vm/share_folders.rb +78 -0
- data/lib/vagrant/action/vm/suspend.rb +20 -0
- data/lib/vagrant/action/warden.rb +85 -0
- data/lib/vagrant/box.rb +90 -0
- data/lib/vagrant/box_collection.rb +53 -0
- data/lib/vagrant/cli.rb +55 -0
- data/lib/vagrant/command.rb +25 -0
- data/lib/vagrant/command/base.rb +106 -0
- data/lib/vagrant/command/box.rb +33 -0
- data/lib/vagrant/command/destroy.rb +17 -0
- data/lib/vagrant/command/group_base.rb +107 -0
- data/lib/vagrant/command/halt.rb +18 -0
- data/lib/vagrant/command/helpers.rb +33 -0
- data/lib/vagrant/command/init.rb +14 -0
- data/lib/vagrant/command/named_base.rb +14 -0
- data/lib/vagrant/command/package.rb +41 -0
- data/lib/vagrant/command/provision.rb +23 -0
- data/lib/vagrant/command/reload.rb +17 -0
- data/lib/vagrant/command/resume.rb +17 -0
- data/lib/vagrant/command/ssh.rb +49 -0
- data/lib/vagrant/command/ssh_config.rb +29 -0
- data/lib/vagrant/command/status.rb +31 -0
- data/lib/vagrant/command/suspend.rb +17 -0
- data/lib/vagrant/command/up.rb +19 -0
- data/lib/vagrant/command/upgrade_to_060.rb +45 -0
- data/lib/vagrant/command/version.rb +13 -0
- data/lib/vagrant/config.rb +123 -0
- data/lib/vagrant/config/base.rb +85 -0
- data/lib/vagrant/config/error_recorder.rb +19 -0
- data/lib/vagrant/config/nfs.rb +10 -0
- data/lib/vagrant/config/package.rb +9 -0
- data/lib/vagrant/config/ssh.rb +38 -0
- data/lib/vagrant/config/top.rb +61 -0
- data/lib/vagrant/config/vagrant.rb +17 -0
- data/lib/vagrant/config/vm.rb +148 -0
- data/lib/vagrant/config/vm/provisioner.rb +56 -0
- data/lib/vagrant/config/vm/sub_vm.rb +17 -0
- data/lib/vagrant/data_store.rb +70 -0
- data/lib/vagrant/downloaders.rb +7 -0
- data/lib/vagrant/downloaders/base.rb +23 -0
- data/lib/vagrant/downloaders/file.rb +22 -0
- data/lib/vagrant/downloaders/http.rb +70 -0
- data/lib/vagrant/environment.rb +516 -0
- data/lib/vagrant/errors.rb +352 -0
- data/lib/vagrant/hosts.rb +9 -0
- data/lib/vagrant/hosts/arch.rb +27 -0
- data/lib/vagrant/hosts/base.rb +76 -0
- data/lib/vagrant/hosts/bsd.rb +58 -0
- data/lib/vagrant/hosts/fedora.rb +11 -0
- data/lib/vagrant/hosts/linux.rb +69 -0
- data/lib/vagrant/plugin.rb +79 -0
- data/lib/vagrant/provisioners.rb +9 -0
- data/lib/vagrant/provisioners/base.rb +67 -0
- data/lib/vagrant/provisioners/chef.rb +155 -0
- data/lib/vagrant/provisioners/chef_client.rb +120 -0
- data/lib/vagrant/provisioners/chef_solo.rb +135 -0
- data/lib/vagrant/provisioners/puppet.rb +137 -0
- data/lib/vagrant/provisioners/puppet_server.rb +55 -0
- data/lib/vagrant/provisioners/shell.rb +96 -0
- data/lib/vagrant/ssh.rb +224 -0
- data/lib/vagrant/ssh/session.rb +136 -0
- data/lib/vagrant/systems.rb +13 -0
- data/lib/vagrant/systems/arch.rb +34 -0
- data/lib/vagrant/systems/base.rb +87 -0
- data/lib/vagrant/systems/debian.rb +36 -0
- data/lib/vagrant/systems/freebsd.rb +84 -0
- data/lib/vagrant/systems/gentoo.rb +27 -0
- data/lib/vagrant/systems/linux.rb +82 -0
- data/lib/vagrant/systems/linux/config.rb +21 -0
- data/lib/vagrant/systems/linux/error.rb +9 -0
- data/lib/vagrant/systems/redhat.rb +48 -0
- data/lib/vagrant/systems/solaris.rb +67 -0
- data/lib/vagrant/systems/suse.rb +9 -0
- data/lib/vagrant/systems/ubuntu.rb +17 -0
- data/lib/vagrant/test_helpers.rb +128 -0
- data/lib/vagrant/ui.rb +81 -0
- data/lib/vagrant/util.rb +13 -0
- data/lib/vagrant/util/busy.rb +59 -0
- data/lib/vagrant/util/counter.rb +24 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/platform.rb +57 -0
- data/lib/vagrant/util/retryable.rb +25 -0
- data/lib/vagrant/util/safe_exec.rb +35 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/version.rb +6 -0
- data/lib/vagrant/vm.rb +181 -0
- data/templates/chef_server_client.erb +32 -0
- data/templates/chef_solo_solo.erb +23 -0
- data/templates/commands/init/Vagrantfile.erb +86 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/locales/en.yml +556 -0
- data/templates/network_entry_arch.erb +9 -0
- data/templates/network_entry_debian.erb +8 -0
- data/templates/network_entry_gentoo.erb +5 -0
- data/templates/network_entry_redhat.erb +9 -0
- data/templates/nfs/exports.erb +5 -0
- data/templates/nfs/exports_linux.erb +5 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/ssh_config.erb +15 -0
- data/test/unit/locales/en.yml +8 -0
- data/test/unit/test_helper.rb +28 -0
- data/test/unit/vagrant/action/box/destroy_test.rb +18 -0
- data/test/unit/vagrant/action/box/download_test.rb +125 -0
- data/test/unit/vagrant/action/box/package_test.rb +25 -0
- data/test/unit/vagrant/action/box/unpackage_test.rb +84 -0
- data/test/unit/vagrant/action/box/verify_test.rb +30 -0
- data/test/unit/vagrant/action/builder_test.rb +207 -0
- data/test/unit/vagrant/action/env/set_test.rb +24 -0
- data/test/unit/vagrant/action/environment_test.rb +27 -0
- data/test/unit/vagrant/action/general/package_test.rb +268 -0
- data/test/unit/vagrant/action/general/validate_test.rb +31 -0
- data/test/unit/vagrant/action/vm/boot_test.rb +66 -0
- data/test/unit/vagrant/action/vm/check_accessible_test.rb +61 -0
- data/test/unit/vagrant/action/vm/check_box_test.rb +56 -0
- data/test/unit/vagrant/action/vm/check_guest_additions_test.rb +9 -0
- data/test/unit/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
- data/test/unit/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
- data/test/unit/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
- data/test/unit/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
- data/test/unit/vagrant/action/vm/customize_test.rb +37 -0
- data/test/unit/vagrant/action/vm/destroy_test.rb +25 -0
- data/test/unit/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
- data/test/unit/vagrant/action/vm/discard_state_test.rb +45 -0
- data/test/unit/vagrant/action/vm/export_test.rb +107 -0
- data/test/unit/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
- data/test/unit/vagrant/action/vm/forward_ports_test.rb +213 -0
- data/test/unit/vagrant/action/vm/halt_test.rb +79 -0
- data/test/unit/vagrant/action/vm/host_name_test.rb +36 -0
- data/test/unit/vagrant/action/vm/import_test.rb +66 -0
- data/test/unit/vagrant/action/vm/match_mac_address_test.rb +40 -0
- data/test/unit/vagrant/action/vm/modify_test.rb +38 -0
- data/test/unit/vagrant/action/vm/network_test.rb +286 -0
- data/test/unit/vagrant/action/vm/nfs_helpers_test.rb +26 -0
- data/test/unit/vagrant/action/vm/nfs_test.rb +260 -0
- data/test/unit/vagrant/action/vm/package_test.rb +25 -0
- data/test/unit/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
- data/test/unit/vagrant/action/vm/provision_test.rb +65 -0
- data/test/unit/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
- data/test/unit/vagrant/action/vm/resume_test.rb +35 -0
- data/test/unit/vagrant/action/vm/share_folders_test.rb +144 -0
- data/test/unit/vagrant/action/vm/suspend_test.rb +35 -0
- data/test/unit/vagrant/action/warden_test.rb +125 -0
- data/test/unit/vagrant/action_test.rb +89 -0
- data/test/unit/vagrant/box_collection_test.rb +45 -0
- data/test/unit/vagrant/box_test.rb +74 -0
- data/test/unit/vagrant/cli_test.rb +35 -0
- data/test/unit/vagrant/command/base_test.rb +23 -0
- data/test/unit/vagrant/command/group_base_test.rb +15 -0
- data/test/unit/vagrant/command/helpers_test.rb +88 -0
- data/test/unit/vagrant/command/package_test.rb +27 -0
- data/test/unit/vagrant/config/base_test.rb +52 -0
- data/test/unit/vagrant/config/error_recorder_test.rb +18 -0
- data/test/unit/vagrant/config/ssh_test.rb +12 -0
- data/test/unit/vagrant/config/vagrant_test.rb +35 -0
- data/test/unit/vagrant/config/vm/provisioner_test.rb +92 -0
- data/test/unit/vagrant/config/vm_test.rb +56 -0
- data/test/unit/vagrant/config_test.rb +162 -0
- data/test/unit/vagrant/data_store_test.rb +77 -0
- data/test/unit/vagrant/downloaders/base_test.rb +28 -0
- data/test/unit/vagrant/downloaders/file_test.rb +48 -0
- data/test/unit/vagrant/downloaders/http_test.rb +82 -0
- data/test/unit/vagrant/environment_test.rb +598 -0
- data/test/unit/vagrant/errors_test.rb +42 -0
- data/test/unit/vagrant/hosts/base_test.rb +46 -0
- data/test/unit/vagrant/hosts/bsd_test.rb +53 -0
- data/test/unit/vagrant/hosts/linux_test.rb +54 -0
- data/test/unit/vagrant/plugin_test.rb +9 -0
- data/test/unit/vagrant/provisioners/base_test.rb +63 -0
- data/test/unit/vagrant/provisioners/chef_client_test.rb +190 -0
- data/test/unit/vagrant/provisioners/chef_solo_test.rb +114 -0
- data/test/unit/vagrant/provisioners/chef_test.rb +202 -0
- data/test/unit/vagrant/provisioners/puppet_server_test.rb +68 -0
- data/test/unit/vagrant/provisioners/puppet_test.rb +182 -0
- data/test/unit/vagrant/provisioners/shell_test.rb +79 -0
- data/test/unit/vagrant/ssh/session_test.rb +40 -0
- data/test/unit/vagrant/ssh_test.rb +307 -0
- data/test/unit/vagrant/systems/base_test.rb +18 -0
- data/test/unit/vagrant/systems/linux_test.rb +104 -0
- data/test/unit/vagrant/ui_test.rb +29 -0
- data/test/unit/vagrant/util/busy_test.rb +106 -0
- data/test/unit/vagrant/util/counter_test.rb +29 -0
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
- data/test/unit/vagrant/util/platform_test.rb +18 -0
- data/test/unit/vagrant/util/retryable_test.rb +50 -0
- data/test/unit/vagrant/util/stacked_proc_runner_test.rb +43 -0
- data/test/unit/vagrant/util/template_renderer_test.rb +145 -0
- data/test/unit/vagrant/vm_test.rb +300 -0
- data/vagrant.gemspec +35 -0
- metadata +431 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class ChefSoloProvisionerTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Provisioners::ChefSolo
|
|
6
|
+
|
|
7
|
+
@action_env = Vagrant::Action::Environment.new(vagrant_env.vms[:default].env)
|
|
8
|
+
|
|
9
|
+
@config = @klass::Config.new
|
|
10
|
+
@action = @klass.new(@action_env, @config)
|
|
11
|
+
@env = @action.env
|
|
12
|
+
@vm = @action.vm
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context "config validation" do
|
|
16
|
+
setup do
|
|
17
|
+
@errors = Vagrant::Config::ErrorRecorder.new
|
|
18
|
+
@config.run_list = ["foo"]
|
|
19
|
+
@config.cookbooks_path = "cookbooks"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
should "be invalid if run list is empty" do
|
|
23
|
+
@config.run_list = []
|
|
24
|
+
@config.validate(@errors)
|
|
25
|
+
assert !@errors.errors.empty?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
should "be invalid if cookbooks path is empty" do
|
|
29
|
+
@config.cookbooks_path = nil
|
|
30
|
+
@config.validate(@errors)
|
|
31
|
+
assert !@errors.errors.empty?
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context "provisioning" do
|
|
36
|
+
should "run the proper sequence of methods in order" do
|
|
37
|
+
prov_seq = sequence("prov_seq")
|
|
38
|
+
@action.expects(:verify_binary).with("chef-solo").once.in_sequence(prov_seq)
|
|
39
|
+
@action.expects(:chown_provisioning_folder).once.in_sequence(prov_seq)
|
|
40
|
+
@action.expects(:setup_json).once.in_sequence(prov_seq)
|
|
41
|
+
@action.expects(:setup_solo_config).once.in_sequence(prov_seq)
|
|
42
|
+
@action.expects(:run_chef_solo).once.in_sequence(prov_seq)
|
|
43
|
+
@action.provision!
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context "creating expanded folder sets" do
|
|
48
|
+
should "expand VM folders properly" do
|
|
49
|
+
assert_equal [[:vm, nil, "/foo"]], @action.expanded_folders([:vm, "/foo"])
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
should "expand host folders properly" do
|
|
53
|
+
path = "foo"
|
|
54
|
+
local_path = File.expand_path(path, @env.root_path)
|
|
55
|
+
remote_path = "#{@action.config.provisioning_path}/chef-solo-1"
|
|
56
|
+
assert_equal [[:host, local_path, remote_path]], @action.expanded_folders([:host, path])
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
should "share roles and cookbooks in different folders" do
|
|
60
|
+
local_roles_path = File.expand_path('roles',@env.root_path)
|
|
61
|
+
local_cookbooks_path = File.expand_path('cookbooks',@env.root_path)
|
|
62
|
+
remote_roles_path = @action.expanded_folders([:host,local_roles_path])[0][2]
|
|
63
|
+
remote_cookbooks_path = @action.expanded_folders([:host,local_cookbooks_path])[0][2]
|
|
64
|
+
assert_not_equal remote_roles_path, remote_cookbooks_path
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context "guest paths" do
|
|
69
|
+
should "extract the parts properly" do
|
|
70
|
+
structure = [[1,2,3],[1,2,3]]
|
|
71
|
+
assert_equal [3,3], @action.guest_paths(structure)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
context "generating and uploading chef solo configuration file" do
|
|
76
|
+
setup do
|
|
77
|
+
@vm.ssh.stubs(:upload!)
|
|
78
|
+
|
|
79
|
+
@config.recipe_url = "foo/bar/baz"
|
|
80
|
+
@action.prepare
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
should "call setup_config with proper variables" do
|
|
84
|
+
@action.expects(:setup_config).with("chef_solo_solo", "solo.rb", {
|
|
85
|
+
:node_name => @config.node_name,
|
|
86
|
+
:provisioning_path => @config.provisioning_path,
|
|
87
|
+
:cookbooks_path => @action.guest_paths(@action.cookbook_folders),
|
|
88
|
+
:recipe_url => @config.recipe_url,
|
|
89
|
+
:roles_path => @action.guest_paths(@action.role_folders).first,
|
|
90
|
+
:data_bags_path => @action.guest_paths(@action.data_bags_folders).first
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
@action.setup_solo_config
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context "running chef solo" do
|
|
98
|
+
setup do
|
|
99
|
+
@ssh = mock("ssh")
|
|
100
|
+
@vm.ssh.stubs(:execute).yields(@ssh)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
should "run chef solo" do
|
|
104
|
+
@ssh.expects(:sudo!).with("chef-solo -c #{@config.provisioning_path}/solo.rb -j #{@config.provisioning_path}/dna.json").once
|
|
105
|
+
@action.run_chef_solo
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
should "check the exit status if that is given" do
|
|
109
|
+
@ssh.stubs(:sudo!).yields(nil, :exit_status, :foo)
|
|
110
|
+
@ssh.expects(:check_exit_status).with(:foo, anything).once
|
|
111
|
+
@action.run_chef_solo
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class ChefProvisionerTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@action_env = Vagrant::Action::Environment.new(vagrant_env.vms[:default].env)
|
|
6
|
+
|
|
7
|
+
@klass = Vagrant::Provisioners::Chef
|
|
8
|
+
@config = @klass::Config.new
|
|
9
|
+
@action = @klass.new(@action_env, @config)
|
|
10
|
+
@env = @action.env
|
|
11
|
+
@vm = @action.vm
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "preparing" do
|
|
15
|
+
should "error the environment" do
|
|
16
|
+
assert_raises(@klass::ChefError) {
|
|
17
|
+
@action.prepare
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context "config" do
|
|
23
|
+
should "not include the 'json' key in the config dump" do
|
|
24
|
+
result = @config.to_json
|
|
25
|
+
assert result !~ /"json":/
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
should "not include the 'run_list' key in json if not accessed" do
|
|
29
|
+
result = @config.merged_json
|
|
30
|
+
assert !result.has_key?(:run_list)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
should "include the 'run_list' key in json if it is set" do
|
|
34
|
+
@config.run_list << "foo"
|
|
35
|
+
result = @config.merged_json
|
|
36
|
+
assert result.has_key?(:run_list)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
should "provide accessors to the run list" do
|
|
40
|
+
@config.run_list << "foo"
|
|
41
|
+
assert !@config.run_list.empty?
|
|
42
|
+
assert_equal ["foo"], @config.run_list
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
should "provide a writer for the run list" do
|
|
46
|
+
data = mock("data")
|
|
47
|
+
|
|
48
|
+
assert_nothing_raised {
|
|
49
|
+
@config.run_list = data
|
|
50
|
+
assert_equal data, @config.run_list
|
|
51
|
+
}
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
should "have an empty run list to begin with" do
|
|
55
|
+
assert @config.run_list.empty?
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
should "add a recipe to the run list" do
|
|
59
|
+
@config.add_recipe("foo")
|
|
60
|
+
assert_equal "recipe[foo]", @config.run_list[0]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
should "not wrap the recipe in 'recipe[]' if it was in the name" do
|
|
64
|
+
@config.add_recipe("recipe[foo]")
|
|
65
|
+
assert_equal "recipe[foo]", @config.run_list[0]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
should "add a role to the run list" do
|
|
69
|
+
@config.add_role("user")
|
|
70
|
+
assert_equal "role[user]", @config.run_list[0]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
should "not wrap the role in 'role[]' if it was in the name" do
|
|
74
|
+
@config.add_role("role[user]")
|
|
75
|
+
assert_equal "role[user]", @config.run_list[0]
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
context "verifying binary" do
|
|
80
|
+
setup do
|
|
81
|
+
@ssh = mock("ssh")
|
|
82
|
+
@vm.ssh.stubs(:execute).yields(@ssh)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
should "verify binary exists" do
|
|
86
|
+
binary = "foo"
|
|
87
|
+
@ssh.expects(:sudo!).with("which #{binary}", anything)
|
|
88
|
+
@action.verify_binary(binary)
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
context "chef binary path" do
|
|
93
|
+
should "return just the binary if no binary path is set" do
|
|
94
|
+
@config.binary_path = nil
|
|
95
|
+
assert_equal "foo", @action.chef_binary_path("foo")
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
should "return the joined binary path and binary if set" do
|
|
99
|
+
@config.binary_path = "/foo"
|
|
100
|
+
assert_equal File.join(@config.binary_path, "bar"), @action.chef_binary_path("bar")
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
context "permissions on provisioning folder" do
|
|
105
|
+
should "create and chown the folder to the ssh user" do
|
|
106
|
+
ssh_seq = sequence("ssh_seq")
|
|
107
|
+
ssh = mock("ssh")
|
|
108
|
+
ssh.expects(:sudo!).with("mkdir -p #{@config.provisioning_path}").once.in_sequence(ssh_seq)
|
|
109
|
+
ssh.expects(:sudo!).with("chown #{@env.config.ssh.username} #{@config.provisioning_path}").once.in_sequence(ssh_seq)
|
|
110
|
+
@vm.ssh.expects(:execute).yields(ssh)
|
|
111
|
+
@action.chown_provisioning_folder
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
context "generating and uploading chef configuration file" do
|
|
116
|
+
setup do
|
|
117
|
+
@vm.ssh.stubs(:upload!)
|
|
118
|
+
|
|
119
|
+
@template = "template"
|
|
120
|
+
@filename = "foo.rb"
|
|
121
|
+
|
|
122
|
+
Vagrant::Util::TemplateRenderer.stubs(:render).returns("foo")
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
should "render and upload file" do
|
|
126
|
+
template_data = mock("data")
|
|
127
|
+
string_io = mock("string_io")
|
|
128
|
+
Vagrant::Util::TemplateRenderer.expects(:render).with(@template, anything).returns(template_data)
|
|
129
|
+
StringIO.expects(:new).with(template_data).returns(string_io)
|
|
130
|
+
File.expects(:join).with(@config.provisioning_path, @filename).once.returns("bar")
|
|
131
|
+
@vm.ssh.expects(:upload!).with(string_io, "bar")
|
|
132
|
+
|
|
133
|
+
@action.setup_config(@template, @filename, {})
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
should "provide log level by default" do
|
|
137
|
+
Vagrant::Util::TemplateRenderer.expects(:render).returns("foo").with() do |template, vars|
|
|
138
|
+
assert vars.has_key?(:log_level)
|
|
139
|
+
assert_equal @config.log_level.to_sym, vars[:log_level]
|
|
140
|
+
true
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
@action.setup_config(@template, @filename, {})
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
should "allow custom template variables" do
|
|
147
|
+
custom = {
|
|
148
|
+
:foo => "bar",
|
|
149
|
+
:int => 7
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
Vagrant::Util::TemplateRenderer.expects(:render).returns("foo").with() do |template, vars|
|
|
153
|
+
custom.each do |key, value|
|
|
154
|
+
assert vars.has_key?(key)
|
|
155
|
+
assert_equal value, vars[key]
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
true
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
@action.setup_config(@template, @filename, custom)
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
context "generating and uploading json" do
|
|
166
|
+
def assert_json
|
|
167
|
+
@vm.ssh.expects(:upload!).with do |json, path|
|
|
168
|
+
data = JSON.parse(json.read)
|
|
169
|
+
yield data
|
|
170
|
+
true
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
@action.setup_json
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
should "merge in the extra json specified in the config" do
|
|
177
|
+
@config.json = { :foo => "BAR" }
|
|
178
|
+
assert_json do |data|
|
|
179
|
+
assert_equal "BAR", data["foo"]
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
should "add the directory as a special case to the JSON" do
|
|
184
|
+
assert_json do |data|
|
|
185
|
+
assert_equal @env.config.vm.shared_folders["v-root"][:guestpath], data["vagrant"]["directory"]
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
should "add the config to the JSON" do
|
|
190
|
+
assert_json do |data|
|
|
191
|
+
assert_equal @env.config.ssh.username, data["vagrant"]["config"]["ssh"]["username"]
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
should "upload a StringIO to dna.json" do
|
|
196
|
+
StringIO.expects(:new).with(anything).returns("bar")
|
|
197
|
+
File.expects(:join).with(@config.provisioning_path, "dna.json").once.returns("baz")
|
|
198
|
+
@vm.ssh.expects(:upload!).with("bar", "baz").once
|
|
199
|
+
@action.setup_json
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class PuppetServerProvisionerTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Provisioners::PuppetServer
|
|
6
|
+
|
|
7
|
+
@action_env = Vagrant::Action::Environment.new(vagrant_env.vms[:default].env)
|
|
8
|
+
|
|
9
|
+
@config = @klass::Config.new
|
|
10
|
+
@action = @klass.new(@action_env, @config)
|
|
11
|
+
@env = @action.env
|
|
12
|
+
@vm = @action.vm
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context "provisioning" do
|
|
16
|
+
should "run the proper sequence of methods in order" do
|
|
17
|
+
prov_seq = sequence("prov_seq")
|
|
18
|
+
@action.expects(:verify_binary).with("puppetd").once.in_sequence(prov_seq)
|
|
19
|
+
@action.expects(:run_puppetd_client).once.in_sequence(prov_seq)
|
|
20
|
+
@action.provision!
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "verifying binary" do
|
|
25
|
+
setup do
|
|
26
|
+
@ssh = mock("ssh")
|
|
27
|
+
@shell = mock("shell")
|
|
28
|
+
@vm.ssh.stubs(:execute).yields(@ssh)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
should "verify binary exists" do
|
|
32
|
+
binary = "foo"
|
|
33
|
+
@ssh.expects(:sudo!).with("which #{binary}", anything)
|
|
34
|
+
@action.verify_binary(binary)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
context "running puppetd client" do
|
|
39
|
+
setup do
|
|
40
|
+
@cn = "puppet_node"
|
|
41
|
+
@ssh = mock("ssh")
|
|
42
|
+
@vm.ssh.stubs(:execute).yields(@ssh)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
should "run the puppetd client" do
|
|
46
|
+
@ssh.expects(:sudo!).with("puppetd --server #{@config.puppet_server} --certname #{@cn}").once
|
|
47
|
+
@action.run_puppetd_client
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
should "run puppetd with given options when given as an array" do
|
|
51
|
+
@config.options = ["--modulepath", "modules", "--verbose"]
|
|
52
|
+
@ssh.expects(:sudo!).with("puppetd --modulepath modules --verbose --server #{@config.puppet_server} --certname #{@cn}").once
|
|
53
|
+
@action.run_puppetd_client
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
should "run puppetd with the options when given as a string" do
|
|
57
|
+
@config.options = "--modulepath modules --verbose"
|
|
58
|
+
@ssh.expects(:sudo!).with("puppetd --modulepath modules --verbose --server #{@config.puppet_server} --certname #{@cn}").once
|
|
59
|
+
@action.run_puppetd_client
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
should "check the exit status if that is given" do
|
|
63
|
+
@ssh.stubs(:sudo!).yields(nil, :exit_status, :foo)
|
|
64
|
+
@ssh.expects(:check_exit_status).with(:foo, anything).once
|
|
65
|
+
@action.run_puppetd_client
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class PuppetProvisionerTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
clean_paths
|
|
6
|
+
|
|
7
|
+
@klass = Vagrant::Provisioners::Puppet
|
|
8
|
+
|
|
9
|
+
@action_env = Vagrant::Action::Environment.new(vagrant_env.vms[:default].env)
|
|
10
|
+
|
|
11
|
+
@config = @klass::Config.new
|
|
12
|
+
@config.top = Vagrant::Config::Top.new(@action_env.env)
|
|
13
|
+
@config.top.vm.box = "foo"
|
|
14
|
+
@action = @klass.new(@action_env, @config)
|
|
15
|
+
@env = @action.env
|
|
16
|
+
@vm = @action.vm
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context "config" do
|
|
20
|
+
setup do
|
|
21
|
+
@errors = Vagrant::Config::ErrorRecorder.new
|
|
22
|
+
|
|
23
|
+
# Set a box
|
|
24
|
+
@config.top.vm.box = "foo"
|
|
25
|
+
|
|
26
|
+
# Start in a valid state (verified by the first test)
|
|
27
|
+
@config.expanded_manifests_path.mkdir
|
|
28
|
+
File.open(@config.expanded_manifests_path.join(@config.computed_manifest_file), "w") { |f| f.puts "HELLO" }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
should "expand the manifest path relative to the root path" do
|
|
32
|
+
assert_equal File.expand_path(@config.manifests_path, @env.root_path), @config.expanded_manifests_path.to_s
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
should "default the manifest file to the box name" do
|
|
36
|
+
assert_equal "#{@config.top.vm.box}.pp", @config.computed_manifest_file
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
should "use the custom manifest file if set" do
|
|
40
|
+
@config.manifest_file = "woot.pp"
|
|
41
|
+
assert_equal "woot.pp", @config.computed_manifest_file
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
should "return an empty array if no module path is set" do
|
|
45
|
+
@config.module_path = nil
|
|
46
|
+
assert_equal [], @config.expanded_module_paths
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
should "return array of module paths expanded relative to root path" do
|
|
50
|
+
@config.module_path = "foo"
|
|
51
|
+
|
|
52
|
+
result = @config.expanded_module_paths
|
|
53
|
+
assert result.is_a?(Array)
|
|
54
|
+
assert_equal 1, result.length
|
|
55
|
+
assert_equal File.expand_path(@config.module_path, @env.root_path), result[0].to_s
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
should "be valid" do
|
|
59
|
+
@config.validate(@errors)
|
|
60
|
+
assert @errors.errors.empty?
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
should "be invalid if the manifests path doesn't exist" do
|
|
64
|
+
@config.expanded_manifests_path.rmtree
|
|
65
|
+
@config.validate(@errors)
|
|
66
|
+
assert !@errors.errors.empty?
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
should "be invalid if a custom manifests path doesn't exist" do
|
|
70
|
+
@config.manifests_path = "dont_exist"
|
|
71
|
+
@config.validate(@errors)
|
|
72
|
+
assert !@errors.errors.empty?
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
should "be invalid if the manifest file doesn't exist" do
|
|
76
|
+
@config.expanded_manifests_path.join(@config.computed_manifest_file).unlink
|
|
77
|
+
@config.validate(@errors)
|
|
78
|
+
assert !@errors.errors.empty?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
should "be invalid if a specified module path doesn't exist" do
|
|
82
|
+
@config.module_path = "foo"
|
|
83
|
+
@config.validate(@errors)
|
|
84
|
+
assert !@errors.errors.empty?
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
should "be valid if all module paths exist" do
|
|
88
|
+
@config.module_path = "foo"
|
|
89
|
+
@config.expanded_module_paths.first.mkdir
|
|
90
|
+
@config.validate(@errors)
|
|
91
|
+
assert @errors.errors.empty?
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
context "preparing" do
|
|
96
|
+
should "share manifests" do
|
|
97
|
+
pre_seq = sequence("prepare")
|
|
98
|
+
@action.expects(:set_module_paths).once.in_sequence(pre_seq)
|
|
99
|
+
@action.expects(:share_manifests).once.in_sequence(pre_seq)
|
|
100
|
+
@action.expects(:share_module_paths).once.in_sequence(pre_seq)
|
|
101
|
+
@action.prepare
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context "provisioning" do
|
|
106
|
+
should "run the proper sequence of methods in order" do
|
|
107
|
+
prov_seq = sequence("prov_seq")
|
|
108
|
+
@action.expects(:verify_binary).with("puppet").once.in_sequence(prov_seq)
|
|
109
|
+
@action.expects(:run_puppet_client).once.in_sequence(prov_seq)
|
|
110
|
+
@action.provision!
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
context "share manifests folder" do
|
|
115
|
+
should "share manifest folder" do
|
|
116
|
+
@env.config.vm.expects(:share_folder).with("manifests", @action.manifests_guest_path, @config.expanded_manifests_path)
|
|
117
|
+
@action.share_manifests
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context "sharing module paths" do
|
|
122
|
+
should "share all the module paths" do
|
|
123
|
+
@config.module_path = ["foo", "bar"]
|
|
124
|
+
@config.expanded_module_paths.each_with_index do |path, i|
|
|
125
|
+
@env.config.vm.expects(:share_folder).with("v-pp-m#{i}", File.join(@config.pp_path, "modules-#{i}"), path)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
@action.set_module_paths
|
|
129
|
+
@action.share_module_paths
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context "verifying binary" do
|
|
134
|
+
setup do
|
|
135
|
+
@ssh = mock("ssh")
|
|
136
|
+
@vm.ssh.stubs(:execute).yields(@ssh)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
should "verify binary exists" do
|
|
140
|
+
binary = "foo"
|
|
141
|
+
@ssh.expects(:sudo!).with("which #{binary}", anything)
|
|
142
|
+
@action.verify_binary(binary)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
context "running puppet client" do
|
|
147
|
+
setup do
|
|
148
|
+
@ssh = mock("ssh")
|
|
149
|
+
@vm.ssh.stubs(:execute).yields(@ssh)
|
|
150
|
+
@action.set_module_paths
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def expect_puppet_command(command)
|
|
154
|
+
@ssh.expects(:sudo!).with(["cd #{@action.manifests_guest_path}", command])
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
should "cd into the pp_path directory and run puppet" do
|
|
158
|
+
expect_puppet_command("puppet apply #{@config.computed_manifest_file}")
|
|
159
|
+
@action.run_puppet_client
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
should "cd into the pp_path directory and run puppet with given options when given as an array" do
|
|
163
|
+
@config.options = ["--modulepath", "modules", "--verbose"]
|
|
164
|
+
expect_puppet_command("puppet apply --modulepath modules --verbose #{@config.computed_manifest_file}")
|
|
165
|
+
@action.run_puppet_client
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
should "cd into the pp_path directory and run puppet with the options when given as a string" do
|
|
169
|
+
@config.options = "--modulepath modules --verbose"
|
|
170
|
+
expect_puppet_command("puppet apply --modulepath modules --verbose #{@config.computed_manifest_file}")
|
|
171
|
+
@action.run_puppet_client
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
should "cd into the pp_path and run puppet with module paths if set" do
|
|
175
|
+
@config.module_path = "foo"
|
|
176
|
+
expect_puppet_command("puppet apply --modulepath '#{File.join(@config.pp_path, 'modules-0')}' #{@config.computed_manifest_file}")
|
|
177
|
+
|
|
178
|
+
@action.set_module_paths
|
|
179
|
+
@action.run_puppet_client
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|