vagrantup 0.6.9 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/CHANGELOG.md +37 -0
  4. data/Gemfile +0 -8
  5. data/README.md +5 -0
  6. data/config/default.rb +1 -3
  7. data/contrib/README.md +12 -0
  8. data/contrib/emacs/vagrant.el +8 -0
  9. data/contrib/vim/vagrantfile.vim +9 -0
  10. data/lib/vagrant/action/box/download.rb +0 -1
  11. data/lib/vagrant/action/box.rb +11 -0
  12. data/lib/vagrant/action/builtin.rb +1 -2
  13. data/lib/vagrant/action/env.rb +7 -0
  14. data/lib/vagrant/action/general.rb +8 -0
  15. data/lib/vagrant/action/vm/boot.rb +3 -2
  16. data/lib/vagrant/action/vm/check_box.rb +1 -0
  17. data/lib/vagrant/action/vm/clean_machine_folder.rb +1 -1
  18. data/lib/vagrant/action/vm/destroy.rb +1 -1
  19. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +7 -12
  20. data/lib/vagrant/action/vm/network.rb +1 -1
  21. data/lib/vagrant/action/vm/nfs.rb +3 -1
  22. data/lib/vagrant/action/vm/provision.rb +14 -25
  23. data/lib/vagrant/action/vm/share_folders.rb +11 -4
  24. data/lib/vagrant/action/vm.rb +30 -0
  25. data/lib/vagrant/action.rb +12 -0
  26. data/lib/vagrant/command.rb +25 -0
  27. data/lib/vagrant/config/base.rb +17 -3
  28. data/lib/vagrant/config/ssh.rb +2 -2
  29. data/lib/vagrant/config/top.rb +61 -0
  30. data/lib/vagrant/config/vagrant.rb +1 -6
  31. data/lib/vagrant/config/vm/provisioner.rb +56 -0
  32. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  33. data/lib/vagrant/config/vm.rb +34 -20
  34. data/lib/vagrant/config.rb +78 -128
  35. data/lib/vagrant/downloaders/file.rb +1 -0
  36. data/lib/vagrant/downloaders/http.rb +9 -0
  37. data/lib/vagrant/downloaders.rb +7 -0
  38. data/lib/vagrant/environment.rb +26 -14
  39. data/lib/vagrant/errors.rb +5 -15
  40. data/lib/vagrant/hosts.rb +7 -0
  41. data/lib/vagrant/provisioners/base.rb +19 -1
  42. data/lib/vagrant/provisioners/chef.rb +31 -52
  43. data/lib/vagrant/provisioners/chef_server.rb +34 -10
  44. data/lib/vagrant/provisioners/chef_solo.rb +31 -9
  45. data/lib/vagrant/provisioners/puppet.rb +111 -60
  46. data/lib/vagrant/provisioners/puppet_server.rb +57 -0
  47. data/lib/vagrant/provisioners.rb +8 -0
  48. data/lib/vagrant/ssh/session.rb +81 -0
  49. data/lib/vagrant/ssh.rb +6 -76
  50. data/lib/vagrant/systems/base.rb +16 -1
  51. data/lib/vagrant/systems/debian.rb +26 -0
  52. data/lib/vagrant/systems/gentoo.rb +27 -0
  53. data/lib/vagrant/systems/linux/config.rb +21 -0
  54. data/lib/vagrant/systems/linux/error.rb +9 -0
  55. data/lib/vagrant/systems/linux.rb +14 -56
  56. data/lib/vagrant/systems/redhat.rb +31 -0
  57. data/lib/vagrant/systems.rb +9 -0
  58. data/lib/vagrant/test_helpers.rb +1 -1
  59. data/lib/vagrant/version.rb +1 -1
  60. data/lib/vagrant/vm.rb +25 -5
  61. data/lib/vagrant.rb +14 -18
  62. data/templates/chef_solo_solo.erb +11 -3
  63. data/templates/commands/init/Vagrantfile.erb +13 -11
  64. data/templates/locales/en.yml +76 -26
  65. data/templates/{network_entry.erb → network_entry_debian.erb} +0 -0
  66. data/templates/network_entry_gentoo.erb +7 -0
  67. data/templates/network_entry_redhat.erb +8 -0
  68. data/templates/ssh_config.erb +1 -1
  69. data/test/vagrant/action/vm/check_box_test.rb +1 -0
  70. data/test/vagrant/action/vm/clean_machine_folder_test.rb +6 -4
  71. data/test/vagrant/action/vm/destroy_test.rb +1 -1
  72. data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +10 -7
  73. data/test/vagrant/action/vm/nfs_test.rb +7 -1
  74. data/test/vagrant/action/vm/provision_test.rb +24 -79
  75. data/test/vagrant/action/vm/share_folders_test.rb +6 -1
  76. data/test/vagrant/command/helpers_test.rb +2 -2
  77. data/test/vagrant/config/base_test.rb +0 -6
  78. data/test/vagrant/config/vagrant_test.rb +0 -8
  79. data/test/vagrant/config/vm/provisioner_test.rb +92 -0
  80. data/test/vagrant/config/vm_test.rb +8 -0
  81. data/test/vagrant/config_test.rb +49 -89
  82. data/test/vagrant/downloaders/file_test.rb +18 -4
  83. data/test/vagrant/environment_test.rb +36 -12
  84. data/test/vagrant/provisioners/base_test.rb +28 -1
  85. data/test/vagrant/provisioners/chef_server_test.rb +50 -41
  86. data/test/vagrant/provisioners/chef_solo_test.rb +39 -16
  87. data/test/vagrant/provisioners/chef_test.rb +11 -81
  88. data/test/vagrant/provisioners/puppet_server_test.rb +69 -0
  89. data/test/vagrant/provisioners/puppet_test.rb +116 -69
  90. data/test/vagrant/{ssh_session_test.rb → ssh/session_test.rb} +0 -0
  91. data/test/vagrant/ssh_test.rb +20 -7
  92. data/test/vagrant/systems/base_test.rb +18 -0
  93. data/test/vagrant/systems/linux_test.rb +2 -2
  94. data/test/vagrant/vm_test.rb +33 -5
  95. data/vagrant.gemspec +6 -5
  96. metadata +38 -14
  97. data/lib/vagrant/action/vm/disable_networks.rb +0 -34
  98. data/lib/vagrant/util/glob_loader.rb +0 -24
  99. data/test/vagrant/action/vm/disable_networks_test.rb +0 -48
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c7232347fee6bddc63b9f9869a127edc819e7a4f
4
- data.tar.gz: 260ada61414d8de2b28de0778af29db557e7ec1a
3
+ metadata.gz: da71b97656f3724f4d8d6085e991f250652af507
4
+ data.tar.gz: 7db3b07b682baa725fbcb8b06e421bea4d3259e1
5
5
  SHA512:
6
- metadata.gz: 1140ff3dead7e131debb84d16c7da0f1bee3cc4109c3af3d518cd53275d5ec2050a8883fc3cd5f4f1c76b8bc7bfe9f3ba8ffd9f234bd051ec9fa130c0d05fc0a
7
- data.tar.gz: f4c2492bd991fc8281e5b88a118f91dc13306e88048f5caba25e6cfdfcbce1d4d0ad236047d9c954843f019b888b54f910ea3a40431ad7b27487df7a3f3995ca
6
+ metadata.gz: 370cfe99493f05b73719eab98d9e2c14745bef71416c494c4875de15ca74cd52e8b70635fe081e97ba1c42b8a8d620f12e37b7610c77a7c82272d5eb3218c938
7
+ data.tar.gz: 0cbad4da87837a33015f07aabb07246d529ffb130e0dd74ffff7636fdd7035ccc2f08d591c9f1118c1705f05a030c7ed7696baf0369661809d9ae84937af8926
data/.gitignore CHANGED
@@ -11,3 +11,5 @@ _site/*
11
11
  doc/
12
12
  tags
13
13
  Gemfile.lock
14
+ .idea/*
15
+ *.iml
data/CHANGELOG.md CHANGED
@@ -1,3 +1,40 @@
1
+ ## 0.7.0 (January 19, 2011)
2
+
3
+ - VirtualBox 4.0 support. Support for VirtualBox 3.2 is _dropped_, since
4
+ the API is so different. Stay with the 0.6.x series if you have VirtualBox
5
+ 3.2.x.
6
+ - Puppet server provisioner. [GH-262]
7
+ - Use numeric uid/gid in mounting shared folders to increase portability. [GH-252]
8
+ - HTTP downloading follows redirects. [GH-163]
9
+ - Downloaders have clearer output to note what they're doing.
10
+ - Shared folders with no guest path are not automounted. [GH-184]
11
+ - Boxes downloaded during `vagrant up` reload the Vagrantfile config, which
12
+ fixes a problem with box settings not being properly loaded. [GH-231]
13
+ - `config.ssh.forward_x11` to enable the ForwardX11 SSH option. [GH-255]
14
+ - Vagrant source now has a `contrib` directory where contributions of miscellaneous
15
+ addons for Vagrant will be added.
16
+ - Vagrantfiles are now loaded only once (instead of 4+ times) [GH-238]
17
+ - Ability to move home vagrant dir (~/.vagrant) by setting VAGRANT_HOME
18
+ environmental variable.
19
+ - Removed check and error for the "OSE" version of VirtualBox, since with
20
+ VirtualBox 4 this distinction no longer exists.
21
+ - Ability to specify proxy settings for chef. [GH-169]
22
+ - Helpful error message shown if NFS mounting fails. [GH-135]
23
+ - Gentoo guests now support host only networks. [GH-240]
24
+ - RedHat (CentOS included) guests now support host only networks. [GH-260]
25
+ - New Vagrantfile syntax for enabling and configuring provisioners. This
26
+ change is not backwards compatible. [GH-265]
27
+ - Provisioners are now RVM-friendly, meaning if you installed chef or puppet
28
+ with an RVM managed Ruby, Vagrant now finds then. [GH-254]
29
+ - Changed the unused host only network destroy mechanism to check for
30
+ uselessness after the VM is destroyed. This should result in more accurate
31
+ checks.
32
+ - Networks are no longer disabled upon halt/destroy. With the above
33
+ change, its unnecessary.
34
+ - Puppet supports `module_path` configuration to mount local modules directory
35
+ as a shared folder and configure puppet with it. [GH-270]
36
+ - `ssh-config` now outputs `127.0.0.1` as the host instead of `localhost`.
37
+
1
38
  ## 0.6.9 (December 21, 2010)
2
39
 
3
40
  - Puppet provisioner. [GH-223]
data/Gemfile CHANGED
@@ -16,12 +16,4 @@ group :test do
16
16
  # For documentation
17
17
  gem "yard", "~> 0.6.1"
18
18
  gem "bluecloth"
19
-
20
- platforms :mri_18 do
21
- gem "ruby-debug"
22
- end
23
-
24
- platforms :mri_19 do
25
- gem "ruby-debug19"
26
- end
27
19
  end
data/README.md CHANGED
@@ -54,3 +54,8 @@ be installed with a simple `gem install bundler --pre`. Afterwords, do the follo
54
54
  rake
55
55
 
56
56
  This will run the test suite, which should come back all green! Then you're good to go!
57
+
58
+ If you want to run Vagrant without having to install the gem, you may use `bundle exec`,
59
+ like so:
60
+
61
+ bundle exec bin/vagrant help
data/config/default.rb CHANGED
@@ -1,17 +1,16 @@
1
1
  Vagrant::Config.run do |config|
2
2
  # default config goes here
3
3
  config.vagrant.dotfile_name = ".vagrant"
4
- config.vagrant.home = "~/.vagrant"
5
4
  config.vagrant.host = :detect
6
5
 
7
6
  config.ssh.username = "vagrant"
8
7
  config.ssh.host = "localhost"
9
- config.ssh.port = 22
10
8
  config.ssh.forwarded_port_key = "ssh"
11
9
  config.ssh.max_tries = 10
12
10
  config.ssh.timeout = 30
13
11
  config.ssh.private_key_path = File.expand_path("keys/vagrant", Vagrant.source_root)
14
12
  config.ssh.forward_agent = false
13
+ config.ssh.forward_x11 = false
15
14
 
16
15
  config.vm.auto_port_range = (2200..2250)
17
16
  config.vm.box_ovf = "box.ovf"
@@ -19,7 +18,6 @@ Vagrant::Config.run do |config|
19
18
  config.vm.base_mac = nil
20
19
  config.vm.forward_port("ssh", 22, 2222, :auto => true)
21
20
  config.vm.disk_image_format = 'VMDK'
22
- config.vm.provisioner = nil
23
21
  config.vm.shared_folder_uid = nil
24
22
  config.vm.shared_folder_gid = nil
25
23
  config.vm.boot_mode = "vrdp"
data/contrib/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # Vagrant Contrib
2
+
3
+ Miscellaneous contributions which assist people in using Vagrant will
4
+ make their way into this directory. An up-to-date list of short descriptions
5
+ for each item will be kept below.
6
+
7
+ ## List of Contrib Items
8
+
9
+ * `emacs` - Contains a file showing how to associate `Vagrantfile` with
10
+ Ruby syntax highlighting.
11
+ * `vim` - Contains a `.vim` file for enabling Ruby syntax highlighting
12
+ for `Vagrantfile`s.
@@ -0,0 +1,8 @@
1
+ ;;--------------------------------------------------------------------
2
+ ;; Teach emacs to syntax highlight Vagrantfile as Ruby.
3
+ ;;
4
+ ;; Installation: Copy the line below into your emacs configuration,
5
+ ;; or drop this file anywhere in your "~/.emacs.d" directory and be
6
+ ;; sure to "load" it.
7
+ ;;--------------------------------------------------------------------
8
+ (add-to-list 'auto-mode-alist '("Vagrantfile$" . ruby-mode))
@@ -0,0 +1,9 @@
1
+ " Teach vim to syntax highlight Vagrantfile as ruby
2
+ "
3
+ " Install: $HOME/.vim/plugin/vagrant.vim
4
+ " Author: Brandon Philips <brandon@ifup.org>
5
+
6
+ augroup vagrant
7
+ au!
8
+ au BufRead,BufNewFile Vagrantfile set filetype=ruby
9
+ augroup END
@@ -64,7 +64,6 @@ module Vagrant
64
64
  end
65
65
 
66
66
  def download_to(f)
67
- @env.ui.info I18n.t("vagrant.actions.box.download.copying")
68
67
  @downloader.download!(@env["box"].uri, f)
69
68
  end
70
69
  end
@@ -0,0 +1,11 @@
1
+ module Vagrant
2
+ class Action
3
+ module Box
4
+ autoload :Destroy, 'vagrant/action/box/destroy'
5
+ autoload :Download, 'vagrant/action/box/download'
6
+ autoload :Package, 'vagrant/action/box/package'
7
+ autoload :Unpackage, 'vagrant/action/box/unpackage'
8
+ autoload :Verify, 'vagrant/action/box/verify'
9
+ end
10
+ end
11
+ end
@@ -30,7 +30,6 @@ module Vagrant
30
30
  register(:halt, Builder.new do
31
31
  use VM::DiscardState
32
32
  use VM::Halt
33
- use VM::DisableNetworks
34
33
  end)
35
34
 
36
35
  # suspend - Suspends the VM
@@ -62,9 +61,9 @@ module Vagrant
62
61
  register(:destroy, Builder.new do
63
62
  use Action[:halt], :force => true
64
63
  use VM::ClearNFSExports
65
- use VM::DestroyUnusedNetworkInterfaces
66
64
  use VM::Destroy
67
65
  use VM::CleanMachineFolder
66
+ use VM::DestroyUnusedNetworkInterfaces
68
67
  end)
69
68
 
70
69
  # package - Export and package the VM
@@ -0,0 +1,7 @@
1
+ module Vagrant
2
+ class Action
3
+ module Env
4
+ autoload :Set, 'vagrant/action/env/set'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module Vagrant
2
+ class Action
3
+ module General
4
+ autoload :Package, 'vagrant/action/general/package'
5
+ autoload :Validate, 'vagrant/action/general/validate'
6
+ end
7
+ end
8
+ end
@@ -13,6 +13,7 @@ module Vagrant
13
13
  # Start up the VM and wait for it to boot.
14
14
  boot
15
15
  raise Errors::VMFailedToBoot if !wait_for_boot
16
+
16
17
  @app.call(env)
17
18
  end
18
19
 
@@ -24,7 +25,7 @@ module Vagrant
24
25
  def wait_for_boot
25
26
  @env.ui.info I18n.t("vagrant.actions.vm.boot.waiting")
26
27
 
27
- @env.env.config.ssh.max_tries.to_i.times do |i|
28
+ @env["config"].ssh.max_tries.to_i.times do |i|
28
29
  if @env["vm"].ssh.up?
29
30
  @env.ui.info I18n.t("vagrant.actions.vm.boot.ready")
30
31
  return true
@@ -34,7 +35,7 @@ module Vagrant
34
35
  # get shown
35
36
  return true if @env.interrupted?
36
37
 
37
- sleep 5 if !@env["vagrant.test"]
38
+ sleep 2 if !@env["vagrant.test"]
38
39
  end
39
40
 
40
41
  @env.ui.error I18n.t("vagrant.actions.vm.boot.failed")
@@ -17,6 +17,7 @@ module Vagrant
17
17
  env.ui.info I18n.t("vagrant.actions.vm.check_box.not_found", :name => box_name)
18
18
  Vagrant::Box.add(env.env, box_name, box_url)
19
19
  env["boxes"].reload!
20
+ env.env.reload_config!
20
21
  end
21
22
 
22
23
  @app.call(env)
@@ -31,7 +31,7 @@ module Vagrant
31
31
  keep = Dir["#{f}/**/*"].find do |d|
32
32
  # Find a file that doesn't have ".xml-prev" as the suffix,
33
33
  # which signals that we want to keep this folder
34
- File.file?(d) && !(File.basename(d) =~ /\.xml-prev$/)
34
+ File.file?(d) && !(File.basename(d) =~ /\.vbox-prev$/)
35
35
  end
36
36
 
37
37
  FileUtils.rm_rf(f) if !keep
@@ -8,7 +8,7 @@ module Vagrant
8
8
 
9
9
  def call(env)
10
10
  env.ui.info I18n.t("vagrant.actions.vm.destroy.destroying")
11
- env["vm"].vm.destroy(:destroy_medium => :delete)
11
+ env["vm"].vm.destroy
12
12
  env["vm"].vm = nil
13
13
 
14
14
  @app.call(env)
@@ -9,20 +9,15 @@ module Vagrant
9
9
  end
10
10
 
11
11
  def call(env)
12
- # We need to check if the host only network specified by any
13
- # of the adapters would not have any more clients if it was
14
- # destroyed. And if so, then destroy the host only network
15
- # itself.
16
- interfaces = env["vm"].vm.network_adapters.collect do |adapter|
17
- adapter.host_interface_object
18
- end
12
+ # Destroy all the host only network adapters which are empty.
13
+ VirtualBox::Global.global(true).host.network_interfaces.each do |iface|
14
+ # We only care about host only interfaces
15
+ next if iface.interface_type != :host_only
19
16
 
20
- interfaces.compact.uniq.each do |interface|
21
- # Destroy the network interface if there is only one
22
- # attached VM (which must be this VM)
23
- if interface.attached_vms.length == 1
17
+ # Destroy it if there is nothing attached
18
+ if iface.attached_vms.empty?
24
19
  env.ui.info I18n.t("vagrant.actions.vm.destroy_network.destroying")
25
- interface.destroy
20
+ iface.destroy
26
21
  end
27
22
  end
28
23
 
@@ -25,8 +25,8 @@ module Vagrant
25
25
 
26
26
  if enable_network?
27
27
  @env.ui.info I18n.t("vagrant.actions.vm.network.enabling")
28
- @env["vm"].system.prepare_host_only_network
29
28
  @env.env.config.vm.network_options.compact.each do |network_options|
29
+ @env["vm"].system.prepare_host_only_network(network_options)
30
30
  @env["vm"].system.enable_host_only_network(network_options)
31
31
  end
32
32
  end
@@ -113,7 +113,9 @@ module Vagrant
113
113
  def mount_folders
114
114
  @env.ui.info I18n.t("vagrant.actions.vm.nfs.mounting")
115
115
 
116
- @env["vm"].system.mount_nfs(host_ip, folders)
116
+ # Only mount the folders which have a guest path specified
117
+ am_folders = folders.select { |name, folder| folder[:guestpath] }
118
+ @env["vm"].system.mount_nfs(host_ip, Hash[am_folders])
117
119
  end
118
120
 
119
121
  # Returns the IP address of the first host only network adapter
@@ -2,49 +2,38 @@ module Vagrant
2
2
  class Action
3
3
  module VM
4
4
  class Provision
5
+ attr_reader :provisioners
6
+
5
7
  def initialize(app, env)
6
8
  @app = app
7
9
  @env = env
8
10
  @env["provision.enabled"] = true if !@env.has_key?("provision.enabled")
11
+ @provisioners = []
9
12
 
10
- load_provisioner if provisioning_enabled?
13
+ load_provisioners if provisioning_enabled?
11
14
  end
12
15
 
13
16
  def call(env)
14
17
  @app.call(env)
15
18
 
16
- if provisioning_enabled?
17
- @env.ui.info I18n.t("vagrant.actions.vm.provision.beginning")
18
- @provisioner.provision!
19
+ @provisioners.each do |instance|
20
+ @env.ui.info I18n.t("vagrant.actions.vm.provision.beginning", :provisioner => instance.class)
21
+ instance.provision!
19
22
  end
20
23
  end
21
24
 
22
25
  def provisioning_enabled?
23
- !@env["config"].vm.provisioner.nil? && @env["provision.enabled"]
26
+ !@env["config"].vm.provisioners.empty? && @env["provision.enabled"]
24
27
  end
25
28
 
26
- def load_provisioner
27
- provisioner = @env["config"].vm.provisioner
28
-
29
- if provisioner.is_a?(Class)
30
- @provisioner = provisioner.new(@env)
31
- raise Errors::ProvisionInvalidClass if !@provisioner.is_a?(Provisioners::Base)
32
- elsif provisioner.is_a?(Symbol)
33
- # We have a few hard coded provisioners for built-ins
34
- mapping = {
35
- :chef_solo => Provisioners::ChefSolo,
36
- :chef_server => Provisioners::ChefServer,
37
- :puppet => Provisioners::Puppet
38
- }
29
+ def load_provisioners
30
+ @env["config"].vm.provisioners.each do |provisioner|
31
+ @env.ui.info I18n.t("vagrant.actions.vm.provision.enabled", :provisioner => provisioner.shortcut)
39
32
 
40
- provisioner_klass = mapping[provisioner]
41
- raise Errors::ProvisionUnknownType, :provisioner => provisioner.to_s if provisioner_klass.nil?
42
- @provisioner = provisioner_klass.new(@env)
33
+ instance = provisioner.provisioner.new(@env, provisioner.config)
34
+ instance.prepare
35
+ @provisioners << instance
43
36
  end
44
-
45
- @env.ui.info I18n.t("vagrant.actions.vm.provision.enabled", :provisioner => @provisioner.class.to_s)
46
- @provisioner.prepare
47
- @provisioner
48
37
  end
49
38
  end
50
39
  end
@@ -50,10 +50,17 @@ module Vagrant
50
50
 
51
51
  @env["vm"].ssh.execute do |ssh|
52
52
  shared_folders.each do |name, data|
53
- @env.ui.info(I18n.t("vagrant.actions.vm.share_folders.mounting_entry",
54
- :name => name,
55
- :guest_path => data[:guestpath]))
56
- @env["vm"].system.mount_shared_folder(ssh, name, data[:guestpath])
53
+ if data[:guestpath]
54
+ # Guest path specified, so mount the folder to specified point
55
+ @env.ui.info(I18n.t("vagrant.actions.vm.share_folders.mounting_entry",
56
+ :name => name,
57
+ :guest_path => data[:guestpath]))
58
+ @env["vm"].system.mount_shared_folder(ssh, name, data[:guestpath])
59
+ else
60
+ # If no guest path is specified, then automounting is disabled
61
+ @env.ui.info(I18n.t("vagrant.actions.vm.share_folders.nomount_entry",
62
+ :name => name))
63
+ end
57
64
  end
58
65
  end
59
66
  end
@@ -0,0 +1,30 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ autoload :Boot, 'vagrant/action/vm/boot'
5
+ autoload :CheckBox, 'vagrant/action/vm/check_box'
6
+ autoload :CheckGuestAdditions, 'vagrant/action/vm/check_guest_additions'
7
+ autoload :CleanMachineFolder, 'vagrant/action/vm/clean_machine_folder'
8
+ autoload :ClearForwardedPorts, 'vagrant/action/vm/clear_forwarded_ports'
9
+ autoload :ClearNFSExports, 'vagrant/action/vm/clear_nfs_exports'
10
+ autoload :ClearSharedFolders, 'vagrant/action/vm/clear_shared_folders'
11
+ autoload :Customize, 'vagrant/action/vm/customize'
12
+ autoload :Destroy, 'vagrant/action/vm/destroy'
13
+ autoload :DestroyUnusedNetworkInterfaces, 'vagrant/action/vm/destroy_unused_network_interfaces'
14
+ autoload :DiscardState, 'vagrant/action/vm/discard_state'
15
+ autoload :Export, 'vagrant/action/vm/export'
16
+ autoload :ForwardPorts, 'vagrant/action/vm/forward_ports'
17
+ autoload :Halt, 'vagrant/action/vm/halt'
18
+ autoload :Import, 'vagrant/action/vm/import'
19
+ autoload :MatchMACAddress, 'vagrant/action/vm/match_mac_address'
20
+ autoload :Network, 'vagrant/action/vm/network'
21
+ autoload :NFS, 'vagrant/action/vm/nfs'
22
+ autoload :Package, 'vagrant/action/vm/package'
23
+ autoload :PackageVagrantfile, 'vagrant/action/vm/package_vagrantfile'
24
+ autoload :Provision, 'vagrant/action/vm/provision'
25
+ autoload :Resume, 'vagrant/action/vm/resume'
26
+ autoload :ShareFolders, 'vagrant/action/vm/share_folders'
27
+ autoload :Suspend, 'vagrant/action/vm/suspend'
28
+ end
29
+ end
30
+ end
@@ -1,3 +1,12 @@
1
+ require 'vagrant/action/builder'
2
+ require 'vagrant/action/builtin'
3
+
4
+ # The builtin middlewares
5
+ require 'vagrant/action/box'
6
+ require 'vagrant/action/env'
7
+ require 'vagrant/action/general'
8
+ require 'vagrant/action/vm'
9
+
1
10
  module Vagrant
2
11
  # Manages action running and registration. Every Vagrant environment
3
12
  # has an instance of {Action} to allow for running in the context of
@@ -44,6 +53,9 @@ module Vagrant
44
53
  # Where `:name` is the name of the registered action.
45
54
  #
46
55
  class Action
56
+ autoload :Environment, 'vagrant/action/environment'
57
+ autoload :Warden, 'vagrant/action/warden'
58
+
47
59
  include Util
48
60
  @@reported_interrupt = false
49
61
 
@@ -0,0 +1,25 @@
1
+ module Vagrant
2
+ module Command
3
+ autoload :Base, 'vagrant/command/base'
4
+ autoload :GroupBase, 'vagrant/command/group_base'
5
+ autoload :Helpers, 'vagrant/command/helpers'
6
+ autoload :NamedBase, 'vagrant/command/named_base'
7
+ end
8
+ end
9
+
10
+ # The built-in commands must always be loaded
11
+ require 'vagrant/command/box'
12
+ require 'vagrant/command/destroy'
13
+ require 'vagrant/command/halt'
14
+ require 'vagrant/command/init'
15
+ require 'vagrant/command/package'
16
+ require 'vagrant/command/provision'
17
+ require 'vagrant/command/reload'
18
+ require 'vagrant/command/resume'
19
+ require 'vagrant/command/ssh'
20
+ require 'vagrant/command/ssh_config'
21
+ require 'vagrant/command/status'
22
+ require 'vagrant/command/suspend'
23
+ require 'vagrant/command/up'
24
+ require 'vagrant/command/upgrade_to_060'
25
+ require 'vagrant/command/version'
@@ -4,9 +4,6 @@ module Vagrant
4
4
  # basic things such as the environment instance variable which all
5
5
  # config classes need as well as a basic `to_json` implementation.
6
6
  class Base
7
- # {Environment} that this config belongs to
8
- attr_accessor :env
9
-
10
7
  # {Top} of this configuration stack
11
8
  attr_accessor :top
12
9
 
@@ -32,6 +29,23 @@ module Vagrant
32
29
  end
33
30
  end
34
31
 
32
+ # A helper to access the environment that this configuration is for.
33
+ # This is obtained by getting the env from the {Top}.
34
+ #
35
+ # @return [Vagrant::Envrionment]
36
+ def env
37
+ top.env
38
+ end
39
+
40
+ # Allows setting options from a hash. By default this simply calls
41
+ # the `#{key}=` method on the config class with the value, which is
42
+ # the expected behavior most of the time.
43
+ def set_options(options)
44
+ options.each do |key, value|
45
+ send("#{key}=", value)
46
+ end
47
+ end
48
+
35
49
  # Called by {Top} after the configuration is loaded to validate
36
50
  # the configuaration objects. Subclasses should implement this
37
51
  # method and add any errors to the `errors` object given.
@@ -5,19 +5,19 @@ module Vagrant
5
5
 
6
6
  attr_accessor :username
7
7
  attr_accessor :host
8
- attr_accessor :port
9
8
  attr_accessor :forwarded_port_key
10
9
  attr_accessor :max_tries
11
10
  attr_accessor :timeout
12
11
  attr_writer :private_key_path
13
12
  attr_accessor :forward_agent
13
+ attr_accessor :forward_x11
14
14
 
15
15
  def private_key_path
16
16
  File.expand_path(@private_key_path, env.root_path)
17
17
  end
18
18
 
19
19
  def validate(errors)
20
- [:username, :host, :port, :forwarded_port_key, :max_tries, :timeout, :private_key_path].each do |field|
20
+ [:username, :host, :forwarded_port_key, :max_tries, :timeout, :private_key_path].each do |field|
21
21
  errors.add(I18n.t("vagrant.config.common.error_empty", :field => field)) if !instance_variable_get("@#{field}".to_sym)
22
22
  end
23
23
 
@@ -0,0 +1,61 @@
1
+ module Vagrant
2
+ class Config
3
+ # This class is the "top" configure class, which handles registering
4
+ # other configuration classes as well as validation of all configured
5
+ # classes. This is the object which is returned by {Environment#config}
6
+ # and has accessors to all other configuration classes.
7
+ #
8
+ # If you're looking to create your own configuration class, see {Base}.
9
+ class Top < Base
10
+ @@configures = {} if !defined?(@@configures)
11
+
12
+ # The environment that this configuration is for.
13
+ attr_reader :env
14
+
15
+ class << self
16
+ # The list of registered configuration classes as well as the key
17
+ # they're registered under.
18
+ def configures_list
19
+ @@configures ||= {}
20
+ end
21
+
22
+ # Registers a configuration class with the given key. This method shouldn't
23
+ # be called. Instead, inherit from {Base} and call {Base.configures}.
24
+ def configures(key, klass)
25
+ configures_list[key] = klass
26
+ attr_reader key.to_sym
27
+ end
28
+ end
29
+
30
+ def initialize(env=nil)
31
+ self.class.configures_list.each do |key, klass|
32
+ config = klass.new
33
+ config.top = self
34
+ instance_variable_set("@#{key}".to_sym, config)
35
+ end
36
+
37
+ @env = env
38
+ end
39
+
40
+ # Validates the configuration classes of this instance and raises an
41
+ # exception if they are invalid. If you are implementing a custom configuration
42
+ # class, the method you want to implement is {Base#validate}. This is
43
+ # the method that checks all the validation, not one which defines
44
+ # validation rules.
45
+ def validate!
46
+ # Validate each of the configured classes and store the results into
47
+ # a hash.
48
+ errors = self.class.configures_list.inject({}) do |container, data|
49
+ key, _ = data
50
+ recorder = ErrorRecorder.new
51
+ send(key.to_sym).validate(recorder)
52
+ container[key.to_sym] = recorder if !recorder.errors.empty?
53
+ container
54
+ end
55
+
56
+ return if errors.empty?
57
+ raise Errors::ConfigValidationFailed, :messages => Util::TemplateRenderer.render("config/validation_failed", :errors => errors)
58
+ end
59
+ end
60
+ end
61
+ end
@@ -4,15 +4,10 @@ module Vagrant
4
4
  configures :vagrant
5
5
 
6
6
  attr_accessor :dotfile_name
7
- attr_accessor :home
8
7
  attr_accessor :host
9
8
 
10
- def initialize
11
- @home = nil
12
- end
13
-
14
9
  def validate(errors)
15
- [:dotfile_name, :home, :host].each do |field|
10
+ [:dotfile_name, :host].each do |field|
16
11
  errors.add(I18n.t("vagrant.config.common.error_empty", :field => field)) if !instance_variable_get("@#{field}".to_sym)
17
12
  end
18
13
  end