vagrant 0.7.8 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/CHANGELOG.md +39 -0
  2. data/Gemfile +1 -7
  3. data/Rakefile +0 -11
  4. data/bin/vagrant +4 -0
  5. data/config/default.rb +1 -2
  6. data/lib/vagrant.rb +7 -5
  7. data/lib/vagrant/action.rb +5 -1
  8. data/lib/vagrant/action/builtin.rb +4 -1
  9. data/lib/vagrant/action/general/package.rb +6 -2
  10. data/lib/vagrant/action/vm.rb +2 -0
  11. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +9 -22
  12. data/lib/vagrant/action/vm/clear_shared_folders.rb +9 -14
  13. data/lib/vagrant/action/vm/customize.rb +9 -4
  14. data/lib/vagrant/action/vm/forward_ports.rb +10 -11
  15. data/lib/vagrant/action/vm/match_mac_address.rb +8 -3
  16. data/lib/vagrant/action/vm/modify.rb +37 -0
  17. data/lib/vagrant/action/vm/network.rb +9 -2
  18. data/lib/vagrant/action/vm/provision.rb +10 -17
  19. data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
  20. data/lib/vagrant/action/vm/share_folders.rb +16 -8
  21. data/lib/vagrant/action/warden.rb +8 -2
  22. data/lib/vagrant/command/ssh.rb +4 -4
  23. data/lib/vagrant/command/ssh_config.rb +4 -2
  24. data/lib/vagrant/config/ssh.rb +3 -0
  25. data/lib/vagrant/config/vm.rb +16 -12
  26. data/lib/vagrant/downloaders/http.rb +2 -0
  27. data/lib/vagrant/environment.rb +136 -12
  28. data/lib/vagrant/errors.rb +15 -0
  29. data/lib/vagrant/provisioners.rb +1 -1
  30. data/lib/vagrant/provisioners/base.rb +4 -0
  31. data/lib/vagrant/provisioners/chef.rb +13 -11
  32. data/lib/vagrant/provisioners/{chef_server.rb → chef_client.rb} +5 -5
  33. data/lib/vagrant/provisioners/chef_solo.rb +48 -89
  34. data/lib/vagrant/provisioners/shell.rb +47 -12
  35. data/lib/vagrant/ssh.rb +61 -27
  36. data/lib/vagrant/systems.rb +1 -0
  37. data/lib/vagrant/systems/base.rb +1 -1
  38. data/lib/vagrant/systems/linux.rb +7 -9
  39. data/lib/vagrant/systems/redhat.rb +12 -4
  40. data/lib/vagrant/systems/solaris.rb +9 -4
  41. data/lib/vagrant/systems/suse.rb +9 -0
  42. data/lib/vagrant/ui.rb +12 -5
  43. data/lib/vagrant/util.rb +2 -2
  44. data/lib/vagrant/util/counter.rb +22 -0
  45. data/lib/vagrant/util/platform.rb +1 -2
  46. data/lib/vagrant/util/safe_exec.rb +28 -0
  47. data/lib/vagrant/version.rb +1 -1
  48. data/lib/vagrant/vm.rb +2 -0
  49. data/templates/chef_solo_solo.erb +4 -4
  50. data/templates/commands/init/Vagrantfile.erb +4 -0
  51. data/templates/locales/en.yml +31 -8
  52. data/templates/ssh_config.erb +6 -0
  53. data/test/test_helper.rb +5 -3
  54. data/test/vagrant/action/builder_test.rb +4 -0
  55. data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +18 -38
  56. data/test/vagrant/action/vm/clear_shared_folders_test.rb +7 -16
  57. data/test/vagrant/action/vm/customize_test.rb +12 -5
  58. data/test/vagrant/action/vm/forward_ports_test.rb +12 -7
  59. data/test/vagrant/action/vm/match_mac_address_test.rb +5 -1
  60. data/test/vagrant/action/vm/modify_test.rb +38 -0
  61. data/test/vagrant/action/vm/provision_test.rb +13 -38
  62. data/test/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
  63. data/test/vagrant/action/vm/share_folders_test.rb +10 -5
  64. data/test/vagrant/action/warden_test.rb +13 -7
  65. data/test/vagrant/config/vm_test.rb +0 -22
  66. data/test/vagrant/downloaders/http_test.rb +2 -0
  67. data/test/vagrant/environment_test.rb +110 -20
  68. data/test/vagrant/provisioners/{chef_server_test.rb → chef_client_test.rb} +2 -2
  69. data/test/vagrant/provisioners/chef_solo_test.rb +16 -173
  70. data/test/vagrant/ssh_test.rb +8 -43
  71. data/test/vagrant/systems/linux_test.rb +9 -19
  72. data/test/vagrant/util/counter_test.rb +29 -0
  73. data/test/vagrant/util/platform_test.rb +2 -2
  74. data/vagrant.gemspec +1 -2
  75. metadata +114 -84
  76. data/lib/vagrant/util/plain_logger.rb +0 -25
  77. data/lib/vagrant/util/resource_logger.rb +0 -63
  78. data/test/vagrant/util/plain_logger_test.rb +0 -17
  79. data/test/vagrant/util/resource_logger_test.rb +0 -78
@@ -8,4 +8,5 @@ require 'vagrant/systems/solaris'
8
8
  require 'vagrant/systems/debian'
9
9
  require 'vagrant/systems/gentoo'
10
10
  require 'vagrant/systems/redhat'
11
+ require 'vagrant/systems/suse'
11
12
  require 'vagrant/systems/ubuntu'
@@ -60,7 +60,7 @@ module Vagrant
60
60
  # @param [String] name The name of the shared folder.
61
61
  # @param [String] guestpath The path on the machine which the user
62
62
  # wants the folder mounted.
63
- def mount_shared_folder(ssh, name, guestpath); end
63
+ def mount_shared_folder(ssh, name, guestpath, owner, group); end
64
64
 
65
65
  # Mounts a shared folder via NFS. This assumes that the exports
66
66
  # via the host are already done.
@@ -13,6 +13,7 @@ module Vagrant
13
13
 
14
14
  return :gentoo if ssh.test?("cat /etc/gentoo-release")
15
15
  return :redhat if ssh.test?("cat /etc/redhat-release")
16
+ return :suse if ssh.test?("cat /etc/SuSE-release")
16
17
  end
17
18
 
18
19
  # Can't detect the distro, assume vanilla linux
@@ -37,10 +38,10 @@ module Vagrant
37
38
  end
38
39
  end
39
40
 
40
- def mount_shared_folder(ssh, name, guestpath)
41
+ def mount_shared_folder(ssh, name, guestpath, owner, group)
41
42
  ssh.exec!("sudo mkdir -p #{guestpath}")
42
- mount_folder(ssh, name, guestpath)
43
- ssh.exec!("sudo chown #{vm.env.config.ssh.username} #{guestpath}")
43
+ mount_folder(ssh, name, guestpath, owner, group)
44
+ ssh.exec!("sudo chown `id -u #{owner}`:`id -g #{group}` #{guestpath}")
44
45
  end
45
46
 
46
47
  def mount_nfs(ip, folders)
@@ -57,16 +58,13 @@ module Vagrant
57
58
  #-------------------------------------------------------------------
58
59
  # "Private" methods which assist above methods
59
60
  #-------------------------------------------------------------------
60
- def mount_folder(ssh, name, guestpath, sleeptime=5)
61
+ def mount_folder(ssh, name, guestpath, owner, group, sleeptime=5)
61
62
  # Determine the permission string to attach to the mount command
62
- perms = []
63
- perms << "uid=`id -u #{vm.env.config.vm.shared_folder_uid}`"
64
- perms << "gid=`id -g #{vm.env.config.vm.shared_folder_gid}`"
65
- perms = " -o #{perms.join(",")}" if !perms.empty?
63
+ options = "-o uid=`id -u #{owner}`,gid=`id -g #{group}`"
66
64
 
67
65
  attempts = 0
68
66
  while true
69
- result = ssh.exec!("sudo mount -t vboxsf#{perms} #{name} #{guestpath}") do |ch, type, data|
67
+ result = ssh.exec!("sudo mount -t vboxsf #{options} #{name} #{guestpath}") do |ch, type, data|
70
68
  # net/ssh returns the value in ch[:result] (based on looking at source)
71
69
  ch[:result] = !!(type == :stderr && data =~ /No such device/i)
72
70
  end
@@ -6,9 +6,9 @@ module Vagrant
6
6
  # interface file.
7
7
  vm.ssh.execute do |ssh|
8
8
  # Clear out any previous entries
9
- ssh.exec!("sudo touch /etc/sysconfig/network-scripts/ifcfg-eth#{net_options[:adapter]}")
10
- ssh.exec!("sudo sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/sysconfig/network-scripts/ifcfg-eth#{net_options[:adapter]} > /tmp/vagrant-ifcfg-eth#{net_options[:adapter]}")
11
- ssh.exec!("sudo su -c 'cat /tmp/vagrant-ifcfg-eth#{net_options[:adapter]} > /etc/sysconfig/network-scripts/ifcfg-eth#{net_options[:adapter]}'")
9
+ ssh.exec!("sudo touch #{network_scripts_dir}/ifcfg-eth#{net_options[:adapter]}")
10
+ ssh.exec!("sudo sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' #{network_scripts_dir}/ifcfg-eth#{net_options[:adapter]} > /tmp/vagrant-ifcfg-eth#{net_options[:adapter]}")
11
+ ssh.exec!("sudo su -c 'cat /tmp/vagrant-ifcfg-eth#{net_options[:adapter]} > #{network_scripts_dir}/ifcfg-eth#{net_options[:adapter]}'")
12
12
  end
13
13
  end
14
14
 
@@ -20,11 +20,19 @@ module Vagrant
20
20
  vm.ssh.execute do |ssh|
21
21
  interface_up = ssh.test?("/sbin/ifconfig eth#{net_options[:adapter]} | grep 'inet addr:'")
22
22
  ssh.exec!("sudo /sbin/ifdown eth#{net_options[:adapter]} 2> /dev/null") if interface_up
23
- ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-entry >> /etc/sysconfig/network-scripts/ifcfg-eth#{net_options[:adapter]}'")
23
+ ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-entry >> #{network_scripts_dir}/ifcfg-eth#{net_options[:adapter]}'")
24
24
  ssh.exec!("sudo /sbin/ifup eth#{net_options[:adapter]}")
25
25
  end
26
26
  end
27
27
 
28
+ # The path to the directory with the network configuration scripts.
29
+ # This is pulled out into its own directory since there are other
30
+ # operationg systems (SuSE) which behave similarly but with a different
31
+ # path to the network scripts.
32
+ def network_scripts_dir
33
+ '/etc/sysconfig/network-scripts/'
34
+ end
35
+
28
36
  def change_host_name(name)
29
37
  vm.ssh.execute do |ssh|
30
38
  # Only do this if the hostname is not already set
@@ -51,11 +51,16 @@ module Vagrant
51
51
  end
52
52
  end
53
53
 
54
- def mount_shared_folder(ssh, name, guestpath)
54
+ def mount_shared_folder(ssh, name, guestpath, owner, group)
55
+ # Create the shared folder
55
56
  ssh.exec!("#{vm.env.config.solaris.suexec_cmd} mkdir -p #{guestpath}")
56
- # Using a custom mount method here; could use improvement.
57
- ssh.exec!("#{vm.env.config.solaris.suexec_cmd} /sbin/mount -F vboxfs #{name} #{guestpath}")
58
- ssh.exec!("#{vm.env.config.solaris.suexec_cmd} chown #{vm.env.config.ssh.username} #{guestpath}")
57
+
58
+ # Mount the folder with the proper owner/group
59
+ options = "-o uid=`id -u #{owner}`,gid=`id -g #{group}`"
60
+ ssh.exec!("#{vm.env.config.solaris.suexec_cmd} /sbin/mount -F vboxfs #{options} #{name} #{guestpath}")
61
+
62
+ # chown the folder to the proper owner/group
63
+ ssh.exec!("#{vm.env.config.solaris.suexec_cmd} chown `id -u #{owner}`:`id -g #{group}` #{guestpath}")
59
64
  end
60
65
  end
61
66
  end
@@ -0,0 +1,9 @@
1
+ module Vagrant
2
+ module Systems
3
+ class Suse < Redhat
4
+ def network_scripts_dir
5
+ '/etc/sysconfig/network/'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,3 @@
1
- require 'mario'
2
-
3
1
  module Vagrant
4
2
  # Vagrant UIs handle communication with the outside world (typically
5
3
  # through a shell). They must respond to the typically logger methods
@@ -11,8 +9,15 @@ module Vagrant
11
9
  @env = env
12
10
  end
13
11
 
14
- [:warn, :error, :info, :confirm, :say_with_vm, :report_progress, :ask, :no?, :yes?].each do |method|
15
- # By default these methods don't do anything. A silent UI.
12
+ [:warn, :error, :info, :confirm].each do |method|
13
+ define_method(method) do |message|
14
+ # Log normal console messages
15
+ env.logger.info("ui") { message }
16
+ end
17
+ end
18
+
19
+ [:report_progress, :ask, :no?, :yes?].each do |method|
20
+ # By default do nothing, these aren't logged
16
21
  define_method(method) { |*args| }
17
22
  end
18
23
 
@@ -28,6 +33,7 @@ module Vagrant
28
33
  [[:warn, :yellow], [:error, :red], [:info, nil], [:confirm, :green]].each do |method, color|
29
34
  class_eval <<-CODE
30
35
  def #{method}(message, opts=nil)
36
+ super(message)
31
37
  @shell.say("\#{line_reset}\#{format_message(message, opts)}", #{color.inspect})
32
38
  end
33
39
  CODE
@@ -36,6 +42,7 @@ module Vagrant
36
42
  [:ask, :no?, :yes?].each do |method|
37
43
  class_eval <<-CODE
38
44
  def #{method}(message, opts=nil)
45
+ super(message)
39
46
  opts ||= {}
40
47
  @shell.send(#{method.inspect}, format_message(message, opts), opts[:color])
41
48
  end
@@ -61,7 +68,7 @@ module Vagrant
61
68
 
62
69
  def line_reset
63
70
  reset = "\r"
64
- reset += "\e[0K" unless Mario::Platform.windows?
71
+ reset += "\e[0K" unless Util::Platform.windows?
65
72
  reset
66
73
  end
67
74
  end
@@ -1,12 +1,12 @@
1
1
  module Vagrant
2
2
  module Util
3
3
  autoload :Busy, 'vagrant/util/busy'
4
+ autoload :Counter, 'vagrant/util/counter'
4
5
  autoload :GlobLoader, 'vagrant/util/glob_loader'
5
6
  autoload :HashWithIndifferentAccess, 'vagrant/util/hash_with_indifferent_access'
6
- autoload :PlainLogger, 'vagrant/util/plain_logger'
7
7
  autoload :Platform, 'vagrant/util/platform'
8
- autoload :ResourceLogger, 'vagrant/util/resource_logger'
9
8
  autoload :Retryable, 'vagrant/util/retryable'
9
+ autoload :SafeExec, 'vagrant/util/safe_exec'
10
10
  autoload :StackedProcRunner, 'vagrant/util/stacked_proc_runner'
11
11
  autoload :TemplateRenderer, 'vagrant/util/template_renderer'
12
12
  end
@@ -0,0 +1,22 @@
1
+ require 'thread'
2
+
3
+ module Vagrant
4
+ module Util
5
+ # Atomic counter implementation. This is useful for incrementing
6
+ # a counter which is guaranteed to only be used once in its class.
7
+ module Counter
8
+ def get_and_update_counter
9
+ mutex.synchronize do
10
+ @__counter ||= 1
11
+ result = @__counter
12
+ @__counter += 1
13
+ result
14
+ end
15
+ end
16
+
17
+ def mutex
18
+ @__counter_mutex ||= Mutex.new
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,4 @@
1
1
  require 'rbconfig'
2
- require 'mario'
3
2
 
4
3
  module Vagrant
5
4
  module Util
@@ -53,7 +52,7 @@ module Vagrant
53
52
 
54
53
  def tar_file_options
55
54
  # create, write only, fail if the file exists, binary if windows
56
- File::WRONLY|File::EXCL|File::CREAT|(Mario::Platform.windows? ? File::BINARY : 0)
55
+ File::WRONLY | File::EXCL | File::CREAT | (windows? ? File::BINARY : 0)
57
56
  end
58
57
 
59
58
  def platform
@@ -0,0 +1,28 @@
1
+ module Vagrant
2
+ module Util
3
+ # This module provies a `safe_exec` method which is a drop-in
4
+ # replacement for `Kernel.exec` which addresses a specific issue
5
+ # which manifests on OS X 10.5 and perhaps other operating systems.
6
+ # This issue causes `exec` to fail if there is more than one system
7
+ # thread. In that case, `safe_exec` automatically falls back to
8
+ # forking.
9
+ module SafeExec
10
+ def safe_exec(command)
11
+ fork_instead = false
12
+ begin
13
+ pid = nil
14
+ pid = fork if fork_instead
15
+ Kernel.exec(command) if pid.nil?
16
+ Process.wait(pid) if pid
17
+ rescue Errno::E045
18
+ # We retried already, raise the issue and be done
19
+ raise if fork_instead
20
+
21
+ # The error manifested itself, retry with a fork.
22
+ fork_instead = true
23
+ retry
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -2,5 +2,5 @@ module Vagrant
2
2
  # This will always be up to date with the current version of Vagrant,
3
3
  # since it is used to generate the gemspec and is also the source of
4
4
  # the version for `vagrant -v`
5
- VERSION = "0.7.8"
5
+ VERSION = "0.8.1"
6
6
  end
@@ -51,6 +51,7 @@ module Vagrant
51
51
  # **This method should never be called manually.**
52
52
  def load_system!(system=nil)
53
53
  system ||= env.config.vm.system
54
+ env.logger.info("vm: #{name}") { "Loading system: #{system}" }
54
55
 
55
56
  if system.is_a?(Class)
56
57
  raise Errors::VMSystemError, :_key => :invalid_class, :system => system.to_s if !(system <= Systems::Base)
@@ -63,6 +64,7 @@ module Vagrant
63
64
  :freebsd => Systems::FreeBSD,
64
65
  :gentoo => Systems::Gentoo,
65
66
  :redhat => Systems::Redhat,
67
+ :suse => Systems::Suse,
66
68
  :linux => Systems::Linux,
67
69
  :solaris => Systems::Solaris
68
70
  }
@@ -2,12 +2,12 @@
2
2
  node_name "<%= node_name %>"
3
3
  <% end %>
4
4
  file_cache_path "<%= provisioning_path %>"
5
- cookbook_path <%= cookbooks_path %>
6
- role_path <%= roles_path %>
5
+ cookbook_path <%= cookbooks_path.inspect %>
6
+ role_path <%= roles_path.inspect %>
7
7
  log_level <%= log_level.inspect %>
8
8
 
9
- <% if data_bags_path %>
10
- data_bag_path <%= data_bags_path %>
9
+ <% if data_bags_path -%>
10
+ data_bag_path <%= data_bags_path.inspect %>
11
11
  <% end %>
12
12
 
13
13
  <% if recipe_url -%>
@@ -33,6 +33,10 @@ Vagrant::Config.run do |config|
33
33
  #
34
34
  # An example Puppet manifest to provision the message of the day:
35
35
  #
36
+ # # group { "puppet":
37
+ # # ensure => "present",
38
+ # # }
39
+ # #
36
40
  # # File { owner => 0, group => 0, mode => 0644 }
37
41
  # #
38
42
  # # file { '/etc/motd':
@@ -2,6 +2,14 @@ en:
2
2
  vagrant:
3
3
  general:
4
4
  creating_home_dir: "Creating home directory since it doesn't exist: %{directory}"
5
+ moving_home_dir: "Moving old Vagrant home directory to new location: %{directory}"
6
+ home_dir_migration_failed: |-
7
+ Both an old and new Vagrant home directory exist. Only the new one will
8
+ be used. Please merge the old directory into the new directory if you'd
9
+ like to use the old data as well.
10
+
11
+ Old: %{old}
12
+ New: %{new}
5
13
 
6
14
  #-------------------------------------------------------------------------------
7
15
  # Translations for exception classes
@@ -31,6 +39,11 @@ en:
31
39
  this command in another directory. If you aren't in a home directory,
32
40
  then please rename ".vagrant" to something else, or configure Vagrant
33
41
  to use another filename by modifying `config.vagrant.dotfile_name`.
42
+ environment_locked: |-
43
+ An instance of Vagrant is already running. Only one instance of Vagrant
44
+ may run at any given time to avoid problems with VirtualBox inconsistencies
45
+ occurring. Please wait for the other instance of Vagrant to end and then
46
+ try again.
34
47
  interrupted: "Vagrant exited after cleanup due to external interrupt."
35
48
  multi_vm_required: "A multi-vm environment is required for name specification to this command."
36
49
  multi_vm_target_required: "`vagrant %{command}` requires a specific VM name to target in a multi-VM environment."
@@ -127,13 +140,15 @@ en:
127
140
  %{file}
128
141
  virtualbox_invalid_version: |-
129
142
  Vagrant has detected that you have VirtualBox version %{version} installed!
130
- Vagrant requires that you use at least VirtualBox version 4.0. Please install
143
+ Vagrant requires that you use at least VirtualBox version 4.1. Please install
131
144
  a more recent version of VirtualBox to continue.
132
145
 
133
- The Vagrant 0.6.x series supports VirtualBox 3.2, so if you're stuck with that
134
- version, then please use the 0.6.x series of Vagrant.
146
+ Early versions of Vagrant support earlier versions of VirtualBox. Specifically,
147
+ the 0.7.x series supports VirtualBox 4.0.x and the 0.6.x series supports VirtualBox
148
+ 3.2.x. Please use the version you need.
135
149
 
136
- Any earlier versions of VirtualBox are completely unsupported. Please upgrade.
150
+ Any newer versions may not be supported yet. Please check the mailing list
151
+ for any announcements of newer versions.
137
152
  virtualbox_not_detected: |-
138
153
  Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed.
139
154
  If VirtualBox is installed, it may be an incorrect version. Vagrant currently
@@ -176,6 +191,9 @@ en:
176
191
  box_missing: "A box must be specified."
177
192
  box_not_found: "The box '%{name}' could not be found."
178
193
  shared_folder_hostpath_missing: "Shared folder host path for '%{name}' doesn't exist: %{path}"
194
+ shared_folder_nfs_owner_group: |-
195
+ Shared folder '%{name}': NFS does not support the owner/group settings.
196
+ provisioner_chef_server_changed: "The provisioner 'chef_server' is now 'chef_client'"
179
197
  provisioner_not_found: "The provisioner '%{shortcut}' doesn't exist."
180
198
  provisioner_invalid_class: "The provisioner '%{shortcut}' must inherit from `Vagrant::Provisioners::Base`."
181
199
 
@@ -188,7 +206,7 @@ en:
188
206
  box:
189
207
  no_installed_boxes: "There are no installed boxes! Use `vagrant box add` to add some."
190
208
  ssh:
191
- execute: "Execute: %{command}"
209
+ command: "Command: %{command}"
192
210
  status:
193
211
  aborted: |-
194
212
  The VM is in an aborted state. This means that it was abruptly
@@ -395,7 +413,6 @@ en:
395
413
  persisting: "Persisting the VM UUID (%{uuid})..."
396
414
  provision:
397
415
  beginning: "Running provisioner: %{provisioner}..."
398
- enabled: "Provisioning enabled with %{provisioner}..."
399
416
  resume:
400
417
  resuming: Resuming suspended VM...
401
418
  share_folders:
@@ -450,6 +467,11 @@ en:
450
467
  An error occurred while trying to download the specified box. This most
451
468
  often happens if there is no internet connection or the address is
452
469
  invalid.
470
+ status_error: |-
471
+ Bad status code: %{status}
472
+
473
+ Please verify that the box exists and is accessible. Also verify that
474
+ this computer is properly connected to the internet.
453
475
 
454
476
  hosts:
455
477
  bsd:
@@ -471,7 +493,7 @@ en:
471
493
  upload_encrypted_data_bag_secret_key: "Uploading chef encrypted data bag secret key..."
472
494
  running_client: "Running chef-client..."
473
495
  running_solo: "Running chef-solo..."
474
- invalid_provisioner: "Vagrant::Provisioners::Chef is not a valid provisioner! Use ChefSolo or ChefServer instead."
496
+ invalid_provisioner: "Vagrant::Provisioners::Chef is not a valid provisioner! Use ChefSolo or ChefClient instead."
475
497
  not_detected: |-
476
498
  The `%{binary}` binary appears to not be in the PATH of the guest. This
477
499
  could be because the PATH is not properly setup or perhaps chef is not
@@ -509,7 +531,8 @@ en:
509
531
  running_puppetd: "Running Puppet agent..."
510
532
 
511
533
  shell:
512
- path_not_set: "`path` parameter pointing to script file to execute for shell provisioner is required"
534
+ path_and_inline_set: "Only one of `path` or `inline` may be set."
535
+ no_path_or_inline: "One of `path` or `inline` must be set."
513
536
  path_invalid: "`path` for shell provisioner does not exist on the host system: %{path}"
514
537
  upload_path_not_set: "`upload_path` must be set for the shell provisioner."
515
538
 
@@ -7,3 +7,9 @@ Host <%= host_key %>
7
7
  PasswordAuthentication no
8
8
  IdentityFile <%= private_key_path %>
9
9
  IdentitiesOnly yes
10
+ <% if forward_agent -%>
11
+ ForwardAgent yes
12
+ <% end -%>
13
+ <% if forward_x11 -%>
14
+ ForwardX11 yes
15
+ <% end -%>
@@ -2,7 +2,6 @@
2
2
  $:.unshift(File.dirname(__FILE__))
3
3
 
4
4
  require 'vagrant'
5
- require 'mario'
6
5
  require 'contest'
7
6
  require 'mocha'
8
7
 
@@ -14,8 +13,11 @@ begin
14
13
  rescue LoadError
15
14
  end
16
15
 
17
- # Silence Mario by sending log output to black hole
18
- Mario::Platform.logger(nil)
16
+ # Set the home directory to some temporary directory
17
+ ENV["HOME"] = Vagrant.source_root.join("test", "tmp", "home").to_s
18
+
19
+ # Set the log output to nothing
20
+ ENV["VAGRANT_LOG"] = "NULL"
19
21
 
20
22
  # Add the I18n locale for tests
21
23
  I18n.load_path << File.expand_path("../locales/en.yml", __FILE__)
@@ -1,4 +1,5 @@
1
1
  require "test_helper"
2
+ require "logger"
2
3
 
3
4
  class ActionBuilderTest < Test::Unit::TestCase
4
5
  setup do
@@ -64,6 +65,7 @@ class ActionBuilderTest < Test::Unit::TestCase
64
65
  context "flatten" do
65
66
  should "return the flattened format of the builder" do
66
67
  env = Vagrant::Action::Environment.new(nil)
68
+ env["logger"] = Logger.new(nil)
67
69
  env.expects(:foo).once
68
70
 
69
71
  func = lambda { |x| x.foo }
@@ -157,6 +159,7 @@ class ActionBuilderTest < Test::Unit::TestCase
157
159
  context "converting to an app" do
158
160
  should "make non-classes lambdas" do
159
161
  env = Vagrant::Action::Environment.new(nil)
162
+ env["logger"] = Logger.new(nil)
160
163
  env.expects(:foo).once
161
164
 
162
165
  func = lambda { |x| x.foo }
@@ -193,6 +196,7 @@ class ActionBuilderTest < Test::Unit::TestCase
193
196
  end
194
197
 
195
198
  env = Vagrant::Action::Environment.new(nil)
199
+ env["logger"] = Logger.new(nil)
196
200
  env[:key] = :value
197
201
 
198
202
  @instance.use(mw)