vagrant 0.8.2 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,19 @@
1
+ ## 0.8.4 (August 15, 2011)
2
+
3
+ Note: 0.8.3 was yanked due to RubyGems encoding issue.
4
+
5
+ - Fix SSH `exec!` to inherit proper `$PATH`. [GH-426]
6
+ - Chef client now accepts an empty (`nil`) run list again. [GH-429]
7
+ - Fix incorrect error message when running `provision` on halted VM. [GH-447]
8
+ - Checking guest addition versions now ignores OSE. [GH-438]
9
+ - Chef solo from a remote URL fixed. [GH-431]
10
+ - Arch linux support: host only networks and changing the host name. [GH-439] [GH-448]
11
+ - Chef solo `roles_path` and `data_bags_path` can only be be single paths. [GH-446]
12
+ - Fix `virtualbox_not_detected` error message to require 4.1.x. [GH-458]
13
+ - Add shortname (`hostname -s`) for hostname setting on RHEL systems. [GH-456]
14
+ - `vagrant ssh -c` output no longer has a prefix and respects newlines
15
+ from the output. [GH-462]
16
+
1
17
  ## 0.8.2 (July 22, 2011)
2
18
 
3
19
  - Fix issue with SSH disconnects not reconnecting.
data/Gemfile CHANGED
@@ -6,8 +6,6 @@ gem "vagrant", :path => '.'
6
6
  # typically coincides with it
7
7
  gem "virtualbox", :git => "git://github.com/mitchellh/virtualbox.git"
8
8
 
9
- # Gems required for testing only. To install run
10
- # gem bundle test
11
9
  group :test do
12
10
  gem "rake"
13
11
  gem "contest", ">= 0.1.2"
@@ -15,10 +15,15 @@ module Vagrant
15
15
  version = env["vm"].vm.interface.get_guest_property_value("/VirtualBox/GuestAdd/Version")
16
16
  if version.empty?
17
17
  env.ui.warn I18n.t("vagrant.actions.vm.check_guest_additions.not_detected")
18
- elsif version != VirtualBox.version
19
- env.ui.warn(I18n.t("vagrant.actions.vm.check_guest_additions.version_mismatch",
20
- :guest_version => version,
21
- :virtualbox_version => VirtualBox.version))
18
+ else
19
+ # Strip the -OSE/_OSE off from the guest additions
20
+ version = version.gsub(/[-_]ose/i, '')
21
+
22
+ if version != VirtualBox.version
23
+ env.ui.warn(I18n.t("vagrant.actions.vm.check_guest_additions.version_mismatch",
24
+ :guest_version => version,
25
+ :virtualbox_version => VirtualBox.version))
26
+ end
22
27
  end
23
28
 
24
29
  # Continue
@@ -11,9 +11,14 @@ module Vagrant
11
11
 
12
12
  # Import the virtual machine
13
13
  env.env.vm.vm = VirtualBox::VM.import(env.env.box.ovf_file.to_s) do |progress|
14
+ env.ui.clear_line
14
15
  env.ui.report_progress(progress.percent, 100, false)
15
16
  end
16
17
 
18
+ # Clear the line one last time since the progress meter doesn't disappear
19
+ # immediately.
20
+ env.ui.clear_line
21
+
17
22
  # Flag as erroneous and return if import failed
18
23
  raise Errors::VMImportFailure if !env["vm"].vm
19
24
 
@@ -5,8 +5,12 @@ module Vagrant
5
5
 
6
6
  def execute
7
7
  target_vms.each do |vm|
8
- if vm.created? && vm.vm.running?
9
- vm.provision
8
+ if vm.created?
9
+ if vm.vm.running?
10
+ vm.provision
11
+ else
12
+ vm.env.ui.info I18n.t("vagrant.commands.common.vm_not_running")
13
+ end
10
14
  else
11
15
  vm.env.ui.info I18n.t("vagrant.commands.common.vm_not_created")
12
16
  end
@@ -16,9 +16,12 @@ module Vagrant
16
16
 
17
17
  def ssh_execute
18
18
  ssh_vm.ssh.execute do |ssh|
19
- ssh_vm.env.ui.info I18n.t("vagrant.commands.ssh.command", :command => options[:command])
20
19
  ssh.exec!(options[:command]) do |channel, type, data|
21
- ssh_vm.env.ui.info "#{data}"
20
+ if type != :exit_status
21
+ # Print the SSH output as it comes in, but don't prefix it and don't
22
+ # force a new line so that the output is properly preserved
23
+ ssh_vm.env.ui.info(data.to_s, :prefix => false, :new_line => false)
24
+ end
22
25
  end
23
26
  end
24
27
  end
@@ -12,11 +12,11 @@ module Vagrant
12
12
  attr_writer :private_key_path
13
13
  attr_accessor :forward_agent
14
14
  attr_accessor :forward_x11
15
- attr_accessor :sudo_shell
15
+ attr_accessor :shell
16
16
  attr_accessor :port
17
17
 
18
18
  def initialize
19
- @sudo_shell = "bash"
19
+ @shell = "bash"
20
20
  @port = nil
21
21
  @forward_agent = false
22
22
  @forward_x11 = false
@@ -4,6 +4,14 @@ module Vagrant
4
4
  # chef-solo and chef-client provisioning are stored. This is **not an actual
5
5
  # provisioner**. Instead, {ChefSolo} or {ChefServer} should be used.
6
6
  class Chef < Base
7
+ include Util::Counter
8
+
9
+ def initialize(env, config)
10
+ super
11
+
12
+ config.provisioning_path ||= "/tmp/vagrant-chef-#{get_and_update_counter(:provisioning_path)}"
13
+ end
14
+
7
15
  def prepare
8
16
  raise ChefError, :invalid_provisioner
9
17
  end
@@ -76,8 +84,6 @@ module Vagrant
76
84
  class Chef < Base
77
85
  # This is the configuration which is available through `config.chef`
78
86
  class Config < Vagrant::Config::Base
79
- extend Util::Counter
80
-
81
87
  # Shared config
82
88
  attr_accessor :node_name
83
89
  attr_accessor :provisioning_path
@@ -92,10 +98,10 @@ module Vagrant
92
98
  attr_accessor :no_proxy
93
99
  attr_accessor :binary_path
94
100
  attr_accessor :binary_env
95
- attr_accessor :run_list
101
+ attr_writer :run_list
96
102
 
97
103
  def initialize
98
- @provisioning_path = "/tmp/vagrant-chef-#{self.class.get_and_update_counter}"
104
+ @provisioning_path = nil
99
105
  @log_level = :info
100
106
  @json = {}
101
107
  @http_proxy = nil
@@ -107,15 +113,21 @@ module Vagrant
107
113
  @no_proxy = nil
108
114
  @binary_path = nil
109
115
  @binary_env = nil
110
- @run_list = []
116
+ @run_list = nil
111
117
  end
112
118
 
113
119
  # This returns the json that is merged with the defaults and the
114
120
  # user set data.
115
121
  def merged_json
116
- { :instance_role => "vagrant",
117
- :run_list => run_list
118
- }.merge(json || {})
122
+ original = { :instance_role => "vagrant" }
123
+ original[:run_list] = @run_list if @run_list
124
+ original.merge(json || {})
125
+ end
126
+
127
+ # Returns the run list, but also sets it up to be empty if it
128
+ # hasn't been defined already.
129
+ def run_list
130
+ @run_list ||= []
119
131
  end
120
132
 
121
133
  # Adds a recipe to the run list
@@ -34,7 +34,7 @@ module Vagrant
34
34
 
35
35
  errors.add(I18n.t("vagrant.config.chef.server_url_empty")) if !chef_server_url || chef_server_url.strip == ""
36
36
  errors.add(I18n.t("vagrant.config.chef.validation_key_path")) if !validation_key_path
37
- errors.add(I18n.t("vagrant.config.chef.run_list_empty")) if run_list && run_list.empty?
37
+ errors.add(I18n.t("vagrant.config.chef.run_list_empty")) if @run_list && @run_list.empty?
38
38
  end
39
39
  end
40
40
 
@@ -5,6 +5,7 @@ module Vagrant
5
5
  register :chef_solo
6
6
 
7
7
  extend Util::Counter
8
+ include Util::Counter
8
9
 
9
10
  class Config < Chef::Config
10
11
  attr_accessor :cookbooks_path
@@ -17,8 +18,8 @@ module Vagrant
17
18
  super
18
19
 
19
20
  @cookbooks_path = ["cookbooks", [:vm, "cookbooks"]]
20
- @roles_path = []
21
- @data_bags_path = []
21
+ @roles_path = nil
22
+ @data_bags_path = nil
22
23
  @nfs = false
23
24
  end
24
25
 
@@ -54,6 +55,8 @@ module Vagrant
54
55
 
55
56
  # Converts paths to a list of properly expanded paths with types.
56
57
  def expanded_folders(paths)
58
+ return [] if paths.nil?
59
+
57
60
  # Convert the path to an array if it is a string or just a single
58
61
  # path element which contains the folder location (:host or :vm)
59
62
  paths = [paths] if paths.is_a?(String) || paths.first.is_a?(Symbol)
@@ -66,7 +69,15 @@ module Vagrant
66
69
  # or VM path.
67
70
  local_path = nil
68
71
  local_path = File.expand_path(path, env.root_path) if type == :host
69
- remote_path = type == :host ? "#{config.provisioning_path}/chef-solo-#{self.class.get_and_update_counter}" : path
72
+ remote_path = nil
73
+ if type == :host
74
+ # Path exists on the host, setup the remote path
75
+ remote_path = "#{config.provisioning_path}/chef-solo-#{get_and_update_counter(:cookbooks_path)}"
76
+ else
77
+ # Path already exists on the virtual machine. Expand it
78
+ # relative to where we're provisioning.
79
+ remote_path = File.expand_path(path, config.provisioning_path)
80
+ end
70
81
 
71
82
  # Return the result
72
83
  [type, local_path, remote_path]
@@ -78,7 +89,7 @@ module Vagrant
78
89
  def share_folders(prefix, folders)
79
90
  folders.each do |type, local_path, remote_path|
80
91
  if type == :host
81
- env.config.vm.share_folder("v-#{prefix}-#{self.class.get_and_update_counter}",
92
+ env.config.vm.share_folder("v-#{prefix}-#{self.class.get_and_update_counter(:shared_folder)}",
82
93
  remote_path, local_path, :nfs => config.nfs)
83
94
  end
84
95
  end
@@ -86,8 +97,8 @@ module Vagrant
86
97
 
87
98
  def setup_solo_config
88
99
  cookbooks_path = guest_paths(@cookbook_folders)
89
- roles_path = guest_paths(@role_folders)
90
- data_bags_path = guest_paths(@data_bags_folders)
100
+ roles_path = guest_paths(@role_folders).first
101
+ data_bags_path = guest_paths(@data_bags_folders).first
91
102
 
92
103
  setup_config("chef_solo_solo", "solo.rb", {
93
104
  :node_name => config.node_name,
@@ -34,7 +34,7 @@ module Vagrant
34
34
  # of `sudo`.
35
35
  def sudo!(commands, options=nil, &block)
36
36
  channel = session.open_channel do |ch|
37
- ch.exec("sudo -H #{env.config.ssh.sudo_shell} -l") do |ch2, success|
37
+ ch.exec("sudo -H #{env.config.ssh.shell} -l") do |ch2, success|
38
38
  # Set the terminal
39
39
  ch2.send_data "export TERM=vt100\n"
40
40
 
@@ -60,12 +60,23 @@ module Vagrant
60
60
  # the command completes. This is an almost line for line copy of
61
61
  # the actual `exec!` implementation, except that this
62
62
  # implementation also reports `:exit_status` to the block if given.
63
- def exec!(command, options=nil, &block)
63
+ def exec!(commands, options=nil, &block)
64
64
  retryable(:tries => 5, :on => [IOError, Net::SSH::Disconnect], :sleep => 1.0) do
65
- metach = session.open_channel do |channel|
66
- channel.exec(command) do |ch, success|
67
- raise "could not execute command: #{command.inspect}" unless success
68
- setup_channel_callbacks(ch, command, options, block)
65
+ metach = session.open_channel do |ch|
66
+ ch.exec("#{env.config.ssh.shell} -l") do |ch2, success|
67
+ # Set the terminal
68
+ ch2.send_data "export TERM=vt100\n"
69
+
70
+ # Output the commands as if they were entered on the command line
71
+ [commands].flatten.each do |command|
72
+ ch2.send_data "#{command}\n"
73
+ end
74
+
75
+ # Remember to exit
76
+ ch2.send_data "exit\n"
77
+
78
+ # Setup the callbacks
79
+ setup_channel_callbacks(ch2, commands, options, block)
69
80
  end
70
81
  end
71
82
 
@@ -10,3 +10,4 @@ require 'vagrant/systems/gentoo'
10
10
  require 'vagrant/systems/redhat'
11
11
  require 'vagrant/systems/suse'
12
12
  require 'vagrant/systems/ubuntu'
13
+ require 'vagrant/systems/arch'
@@ -0,0 +1,34 @@
1
+ module Vagrant
2
+ module Systems
3
+ class Arch < Linux
4
+ def change_host_name(name)
5
+ vm.ssh.execute do |ssh|
6
+ # Only do this if the hostname is not already set
7
+ if !ssh.test?("sudo hostname | grep '#{name}'")
8
+ ssh.exec!("sudo sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/rc.conf")
9
+ ssh.exec!("sudo hostname #{name}")
10
+ ssh.exec!("sudo sed -i 's@^\\(127[.]0[.]0[.]1[[:space:]]\\+\\)@\\1#{name} @' /etc/hosts")
11
+ end
12
+ end
13
+ end
14
+
15
+ def prepare_host_only_network(net_options=nil)
16
+ vm.ssh.execute do |ssh|
17
+ ssh.exec!("sudo sed -e '/^#VAGRANT-BEGIN/,/^#VAGRANT-END/ d' /etc/rc.conf > /tmp/vagrant-network-interfaces")
18
+ ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-interfaces > /etc/rc.conf'")
19
+ end
20
+ end
21
+
22
+ def enable_host_only_network(net_options)
23
+ entry = TemplateRenderer.render('network_entry_arch', :net_options => net_options)
24
+ vm.ssh.upload!(StringIO.new(entry), "/tmp/vagrant-network-entry")
25
+
26
+ vm.ssh.execute do |ssh|
27
+ ssh.exec!("sudo su -c 'cat /tmp/vagrant-network-entry >> /etc/rc.conf'")
28
+ ssh.exec!("sudo /etc/rc.d/network restart")
29
+ ssh.exec!("sudo su -c 'dhcpcd -k eth0 && dhcpcd eth0 & sleep 3'")
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -14,6 +14,7 @@ module Vagrant
14
14
  return :gentoo if ssh.test?("cat /etc/gentoo-release")
15
15
  return :redhat if ssh.test?("cat /etc/redhat-release")
16
16
  return :suse if ssh.test?("cat /etc/SuSE-release")
17
+ return :arch if ssh.test?("cat /etc/arch-release")
17
18
  end
18
19
 
19
20
  # Can't detect the distro, assume vanilla linux
@@ -39,7 +39,7 @@ module Vagrant
39
39
  if !ssh.test?("sudo hostname | grep '#{name}'")
40
40
  ssh.exec!("sudo sed -i 's/\\(HOSTNAME=\\).*/\\1#{name}/' /etc/sysconfig/network")
41
41
  ssh.exec!("sudo hostname #{name}")
42
- ssh.exec!("sudo sed -i 's@^\\(127[.]0[.]0[.]1[[:space:]]\\+\\)@\\1#{name} @' /etc/hosts")
42
+ ssh.exec!("sudo sed -i 's@^\\(127[.]0[.]0[.]1[[:space:]]\\+\\)@\\1#{name} #{name.split('.')[0]} @' /etc/hosts")
43
43
  end
44
44
  end
45
45
  end
@@ -16,7 +16,7 @@ module Vagrant
16
16
  end
17
17
  end
18
18
 
19
- [:report_progress, :ask, :no?, :yes?].each do |method|
19
+ [:clear_line, :report_progress, :ask, :no?, :yes?].each do |method|
20
20
  # By default do nothing, these aren't logged
21
21
  define_method(method) { |*args| }
22
22
  end
@@ -34,7 +34,9 @@ module Vagrant
34
34
  class_eval <<-CODE
35
35
  def #{method}(message, opts=nil)
36
36
  super(message)
37
- @shell.say("\#{line_reset}\#{format_message(message, opts)}", #{color.inspect})
37
+ opts ||= {}
38
+ opts[:new_line] = true if !opts.has_key?(:new_line)
39
+ @shell.say("\#{format_message(message, opts)}", #{color.inspect}, opts[:new_line])
38
40
  end
39
41
  CODE
40
42
  end
@@ -53,11 +55,14 @@ module Vagrant
53
55
  percent = (progress.to_f / total.to_f) * 100
54
56
  line = "Progress: #{percent.to_i}%"
55
57
  line << " (#{progress} / #{total})" if show_parts
56
- line = "#{line_reset}#{line}"
57
58
 
58
59
  @shell.say(line, nil, false)
59
60
  end
60
61
 
62
+ def clear_line
63
+ @shell.say(line_reset, nil, false)
64
+ end
65
+
61
66
  protected
62
67
 
63
68
  def format_message(message, opts=nil)
@@ -5,11 +5,13 @@ module Vagrant
5
5
  # Atomic counter implementation. This is useful for incrementing
6
6
  # a counter which is guaranteed to only be used once in its class.
7
7
  module Counter
8
- def get_and_update_counter
8
+ def get_and_update_counter(name=nil)
9
+ name ||= :global
10
+
9
11
  mutex.synchronize do
10
- @__counter ||= 1
11
- result = @__counter
12
- @__counter += 1
12
+ @__counter ||= Hash.new(1)
13
+ result = @__counter[name]
14
+ @__counter[name] += 1
13
15
  result
14
16
  end
15
17
  end
@@ -8,13 +8,20 @@ module Vagrant
8
8
  # forking.
9
9
  module SafeExec
10
10
  def safe_exec(command)
11
+ # Create a list of things to rescue from. Since this is OS
12
+ # specific, we need to do some defined? checks here to make
13
+ # sure they exist.
14
+ rescue_from = []
15
+ rescue_from << Errno::EOPNOTSUPP if defined?(Errno::EOPNOTSUPP)
16
+ rescue_from << Errno::E045 if defined?(Errno::E045)
17
+
11
18
  fork_instead = false
12
19
  begin
13
20
  pid = nil
14
21
  pid = fork if fork_instead
15
22
  Kernel.exec(command) if pid.nil?
16
23
  Process.wait(pid) if pid
17
- rescue Errno::E045
24
+ rescue *rescue_from
18
25
  # We retried already, raise the issue and be done
19
26
  raise if fork_instead
20
27
 
@@ -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.8.2"
5
+ VERSION = "0.8.5"
6
6
  end
@@ -66,7 +66,8 @@ module Vagrant
66
66
  :redhat => Systems::Redhat,
67
67
  :suse => Systems::Suse,
68
68
  :linux => Systems::Linux,
69
- :solaris => Systems::Solaris
69
+ :solaris => Systems::Solaris,
70
+ :arch => Systems::Arch
70
71
  }
71
72
 
72
73
  raise Errors::VMSystemError, :_key => :unknown_type, :system => system.to_s if !mapping.has_key?(system)
@@ -58,7 +58,7 @@ Vagrant::Config.run do |config|
58
58
  # chef.add_role "web"
59
59
  #
60
60
  # # You may also specify custom JSON attributes:
61
- # chef.json.merge!({ :mysql_password => "foo" })
61
+ # chef.json = { :mysql_password => "foo" }
62
62
  # end
63
63
 
64
64
  # Enable provisioning with chef server, specifying the chef server URL,
@@ -71,7 +71,7 @@ Vagrant::Config.run do |config|
71
71
  # HTTP instead of HTTPS depending on your configuration. Also change the
72
72
  # validation key to validation.pem.
73
73
  #
74
- # config.vm.provision :chef_server do |chef|
74
+ # config.vm.provision :chef_client do |chef|
75
75
  # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
76
76
  # chef.validation_key_path = "ORGNAME-validator.pem"
77
77
  # end
@@ -127,7 +127,7 @@ en:
127
127
  virtualbox_not_detected: |-
128
128
  Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed.
129
129
  If VirtualBox is installed, it may be an incorrect version. Vagrant currently
130
- requires VirtualBox 4.0.x. Please install the proper version to continue.
130
+ requires VirtualBox 4.1.x. Please install the proper version to continue.
131
131
 
132
132
  If you have an older or newer version of VirtualBox, please make sure you're
133
133
  using the proper version of Vagrant. Ask the mailing list if you have questions.
@@ -182,10 +182,9 @@ en:
182
182
  commands:
183
183
  common:
184
184
  vm_not_created: "VM not created. Moving on..."
185
+ vm_not_running: "VM is not currently running. Please bring it up to run this command."
185
186
  box:
186
187
  no_installed_boxes: "There are no installed boxes! Use `vagrant box add` to add some."
187
- ssh:
188
- command: "Command: %{command}"
189
188
  status:
190
189
  aborted: |-
191
190
  The VM is in an aborted state. This means that it was abruptly
@@ -0,0 +1,9 @@
1
+
2
+ #VAGRANT-BEGIN
3
+ # The contents below are automatically generated by Vagrant.
4
+ # Please do not modify any of these contents.
5
+ interface=eth<%= net_options[:adapter] %>
6
+ address=<%= net_options[:ip]%>
7
+ netmask=<%= net_options[:netmask] %>
8
+ gateway=
9
+ #VAGRANT-END
@@ -86,8 +86,8 @@ class ChefSoloProvisionerTest < Test::Unit::TestCase
86
86
  :provisioning_path => @config.provisioning_path,
87
87
  :cookbooks_path => @action.guest_paths(@action.cookbook_folders),
88
88
  :recipe_url => @config.recipe_url,
89
- :roles_path => @action.guest_paths(@action.role_folders),
90
- :data_bags_path => @action.guest_paths(@action.data_bags_folders)
89
+ :roles_path => @action.guest_paths(@action.role_folders).first,
90
+ :data_bags_path => @action.guest_paths(@action.data_bags_folders).first
91
91
  })
92
92
 
93
93
  @action.setup_solo_config
@@ -25,6 +25,17 @@ class ChefProvisionerTest < Test::Unit::TestCase
25
25
  assert result !~ /"json":/
26
26
  end
27
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
+
28
39
  should "provide accessors to the run list" do
29
40
  @config.run_list << "foo"
30
41
  assert !@config.run_list.empty?
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 53
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 8
8
- - 2
9
- version: 0.8.2
9
+ - 5
10
+ version: 0.8.5
10
11
  platform: ruby
11
12
  authors:
12
13
  - Mitchell Hashimoto
@@ -15,171 +16,194 @@ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2011-07-22 00:00:00 -07:00
19
- default_executable:
19
+ date: 2011-08-16 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
23
24
  requirements:
24
25
  - - "="
25
26
  - !ruby/object:Gem::Version
27
+ hash: 15
26
28
  segments:
27
29
  - 0
28
30
  - 5
29
31
  - 2
30
32
  version: 0.5.2
31
- requirement: *id001
32
33
  name: archive-tar-minitar
33
34
  prerelease: false
34
35
  type: :runtime
36
+ requirement: *id001
35
37
  - !ruby/object:Gem::Dependency
36
38
  version_requirements: &id002 !ruby/object:Gem::Requirement
39
+ none: false
37
40
  requirements:
38
41
  - - ~>
39
42
  - !ruby/object:Gem::Version
43
+ hash: 19
40
44
  segments:
41
45
  - 2
42
46
  - 7
43
47
  - 0
44
48
  version: 2.7.0
45
- requirement: *id002
46
49
  name: erubis
47
50
  prerelease: false
48
51
  type: :runtime
52
+ requirement: *id002
49
53
  - !ruby/object:Gem::Dependency
50
54
  version_requirements: &id003 !ruby/object:Gem::Requirement
55
+ none: false
51
56
  requirements:
52
57
  - - ~>
53
58
  - !ruby/object:Gem::Version
59
+ hash: 1
54
60
  segments:
55
61
  - 1
56
62
  - 5
57
63
  - 1
58
64
  version: 1.5.1
59
- requirement: *id003
60
65
  name: json
61
66
  prerelease: false
62
67
  type: :runtime
68
+ requirement: *id003
63
69
  - !ruby/object:Gem::Dependency
64
70
  version_requirements: &id004 !ruby/object:Gem::Requirement
71
+ none: false
65
72
  requirements:
66
73
  - - ~>
67
74
  - !ruby/object:Gem::Version
75
+ hash: 3
68
76
  segments:
69
77
  - 2
70
78
  - 1
71
79
  - 4
72
80
  version: 2.1.4
73
- requirement: *id004
74
81
  name: net-ssh
75
82
  prerelease: false
76
83
  type: :runtime
84
+ requirement: *id004
77
85
  - !ruby/object:Gem::Dependency
78
86
  version_requirements: &id005 !ruby/object:Gem::Requirement
87
+ none: false
79
88
  requirements:
80
89
  - - ~>
81
90
  - !ruby/object:Gem::Version
91
+ hash: 31
82
92
  segments:
83
93
  - 1
84
94
  - 0
85
95
  - 4
86
96
  version: 1.0.4
87
- requirement: *id005
88
97
  name: net-scp
89
98
  prerelease: false
90
99
  type: :runtime
100
+ requirement: *id005
91
101
  - !ruby/object:Gem::Dependency
92
102
  version_requirements: &id006 !ruby/object:Gem::Requirement
103
+ none: false
93
104
  requirements:
94
105
  - - ~>
95
106
  - !ruby/object:Gem::Version
107
+ hash: 11
96
108
  segments:
97
109
  - 0
98
110
  - 5
99
111
  - 0
100
112
  version: 0.5.0
101
- requirement: *id006
102
113
  name: i18n
103
114
  prerelease: false
104
115
  type: :runtime
116
+ requirement: *id006
105
117
  - !ruby/object:Gem::Dependency
106
118
  version_requirements: &id007 !ruby/object:Gem::Requirement
119
+ none: false
107
120
  requirements:
108
121
  - - ~>
109
122
  - !ruby/object:Gem::Version
123
+ hash: 43
110
124
  segments:
111
125
  - 0
112
126
  - 14
113
127
  - 6
114
128
  version: 0.14.6
115
- requirement: *id007
116
129
  name: thor
117
130
  prerelease: false
118
131
  type: :runtime
132
+ requirement: *id007
119
133
  - !ruby/object:Gem::Dependency
120
134
  version_requirements: &id008 !ruby/object:Gem::Requirement
135
+ none: false
121
136
  requirements:
122
137
  - - ~>
123
138
  - !ruby/object:Gem::Version
139
+ hash: 57
124
140
  segments:
125
141
  - 0
126
142
  - 9
127
143
  - 1
128
144
  version: 0.9.1
129
- requirement: *id008
130
145
  name: virtualbox
131
146
  prerelease: false
132
147
  type: :runtime
148
+ requirement: *id008
133
149
  - !ruby/object:Gem::Dependency
134
150
  version_requirements: &id009 !ruby/object:Gem::Requirement
151
+ none: false
135
152
  requirements:
136
153
  - - ">="
137
154
  - !ruby/object:Gem::Version
155
+ hash: 3
138
156
  segments:
139
157
  - 0
140
158
  version: "0"
141
- requirement: *id009
142
159
  name: rake
143
160
  prerelease: false
144
161
  type: :development
162
+ requirement: *id009
145
163
  - !ruby/object:Gem::Dependency
146
164
  version_requirements: &id010 !ruby/object:Gem::Requirement
165
+ none: false
147
166
  requirements:
148
167
  - - ">="
149
168
  - !ruby/object:Gem::Version
169
+ hash: 31
150
170
  segments:
151
171
  - 0
152
172
  - 1
153
173
  - 2
154
174
  version: 0.1.2
155
- requirement: *id010
156
175
  name: contest
157
176
  prerelease: false
158
177
  type: :development
178
+ requirement: *id010
159
179
  - !ruby/object:Gem::Dependency
160
180
  version_requirements: &id011 !ruby/object:Gem::Requirement
181
+ none: false
161
182
  requirements:
162
183
  - - ">="
163
184
  - !ruby/object:Gem::Version
185
+ hash: 3
164
186
  segments:
165
187
  - 0
166
188
  version: "0"
167
- requirement: *id011
168
189
  name: mocha
169
190
  prerelease: false
170
191
  type: :development
192
+ requirement: *id011
171
193
  - !ruby/object:Gem::Dependency
172
194
  version_requirements: &id012 !ruby/object:Gem::Requirement
195
+ none: false
173
196
  requirements:
174
197
  - - ">="
175
198
  - !ruby/object:Gem::Version
199
+ hash: 3
176
200
  segments:
177
201
  - 0
178
202
  version: "0"
179
- requirement: *id012
180
203
  name: ruby-debug
181
204
  prerelease: false
182
205
  type: :development
206
+ requirement: *id012
183
207
  description: Vagrant is a tool for building and distributing virtualized development environments.
184
208
  email:
185
209
  - mitchell.hashimoto@gmail.com
@@ -312,6 +336,7 @@ files:
312
336
  - lib/vagrant/ssh.rb
313
337
  - lib/vagrant/ssh/session.rb
314
338
  - lib/vagrant/systems.rb
339
+ - lib/vagrant/systems/arch.rb
315
340
  - lib/vagrant/systems/base.rb
316
341
  - lib/vagrant/systems/debian.rb
317
342
  - lib/vagrant/systems/freebsd.rb
@@ -341,6 +366,7 @@ files:
341
366
  - templates/commands/init/Vagrantfile.erb
342
367
  - templates/config/validation_failed.erb
343
368
  - templates/locales/en.yml
369
+ - templates/network_entry_arch.erb
344
370
  - templates/network_entry_debian.erb
345
371
  - templates/network_entry_gentoo.erb
346
372
  - templates/network_entry_redhat.erb
@@ -436,7 +462,6 @@ files:
436
462
  - test/vagrant/util/template_renderer_test.rb
437
463
  - test/vagrant/vm_test.rb
438
464
  - vagrant.gemspec
439
- has_rdoc: true
440
465
  homepage: http://vagrantup.com
441
466
  licenses: []
442
467
 
@@ -446,16 +471,20 @@ rdoc_options: []
446
471
  require_paths:
447
472
  - lib
448
473
  required_ruby_version: !ruby/object:Gem::Requirement
474
+ none: false
449
475
  requirements:
450
476
  - - ">="
451
477
  - !ruby/object:Gem::Version
478
+ hash: 3
452
479
  segments:
453
480
  - 0
454
481
  version: "0"
455
482
  required_rubygems_version: !ruby/object:Gem::Requirement
483
+ none: false
456
484
  requirements:
457
485
  - - ">="
458
486
  - !ruby/object:Gem::Version
487
+ hash: 23
459
488
  segments:
460
489
  - 1
461
490
  - 3
@@ -464,7 +493,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
464
493
  requirements: []
465
494
 
466
495
  rubyforge_project: vagrant
467
- rubygems_version: 1.3.6
496
+ rubygems_version: 1.8.5
468
497
  signing_key:
469
498
  specification_version: 3
470
499
  summary: Build and distribute virtualized development environments.