fixed-vagrant 0.7.4.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.
Files changed (242) hide show
  1. data/.gitignore +15 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +272 -0
  4. data/Gemfile +21 -0
  5. data/LICENSE +21 -0
  6. data/README.md +75 -0
  7. data/Rakefile +22 -0
  8. data/bin/vagrant +22 -0
  9. data/config/default.rb +39 -0
  10. data/contrib/README.md +12 -0
  11. data/contrib/emacs/vagrant.el +8 -0
  12. data/contrib/vim/vagrantfile.vim +9 -0
  13. data/keys/README.md +17 -0
  14. data/keys/vagrant +27 -0
  15. data/keys/vagrant.ppk +26 -0
  16. data/keys/vagrant.pub +1 -0
  17. data/lib/vagrant.rb +42 -0
  18. data/lib/vagrant/action.rb +134 -0
  19. data/lib/vagrant/action/box.rb +11 -0
  20. data/lib/vagrant/action/box/destroy.rb +21 -0
  21. data/lib/vagrant/action/box/download.rb +72 -0
  22. data/lib/vagrant/action/box/package.rb +19 -0
  23. data/lib/vagrant/action/box/unpackage.rb +55 -0
  24. data/lib/vagrant/action/box/verify.rb +23 -0
  25. data/lib/vagrant/action/builder.rb +124 -0
  26. data/lib/vagrant/action/builtin.rb +104 -0
  27. data/lib/vagrant/action/env.rb +7 -0
  28. data/lib/vagrant/action/env/set.rb +18 -0
  29. data/lib/vagrant/action/environment.rb +50 -0
  30. data/lib/vagrant/action/general.rb +8 -0
  31. data/lib/vagrant/action/general/package.rb +109 -0
  32. data/lib/vagrant/action/general/validate.rb +19 -0
  33. data/lib/vagrant/action/vm.rb +31 -0
  34. data/lib/vagrant/action/vm/boot.rb +48 -0
  35. data/lib/vagrant/action/vm/check_box.rb +28 -0
  36. data/lib/vagrant/action/vm/check_guest_additions.rb +30 -0
  37. data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
  38. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +39 -0
  39. data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
  40. data/lib/vagrant/action/vm/clear_shared_folders.rb +32 -0
  41. data/lib/vagrant/action/vm/customize.rb +21 -0
  42. data/lib/vagrant/action/vm/destroy.rb +19 -0
  43. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
  44. data/lib/vagrant/action/vm/discard_state.rb +22 -0
  45. data/lib/vagrant/action/vm/export.rb +52 -0
  46. data/lib/vagrant/action/vm/forward_ports.rb +134 -0
  47. data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
  48. data/lib/vagrant/action/vm/halt.rb +29 -0
  49. data/lib/vagrant/action/vm/host_name.rb +21 -0
  50. data/lib/vagrant/action/vm/import.rb +35 -0
  51. data/lib/vagrant/action/vm/match_mac_address.rb +21 -0
  52. data/lib/vagrant/action/vm/network.rb +139 -0
  53. data/lib/vagrant/action/vm/nfs.rb +159 -0
  54. data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
  55. data/lib/vagrant/action/vm/package.rb +23 -0
  56. data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
  57. data/lib/vagrant/action/vm/provision.rb +41 -0
  58. data/lib/vagrant/action/vm/resume.rb +20 -0
  59. data/lib/vagrant/action/vm/share_folders.rb +70 -0
  60. data/lib/vagrant/action/vm/suspend.rb +20 -0
  61. data/lib/vagrant/action/warden.rb +79 -0
  62. data/lib/vagrant/box.rb +90 -0
  63. data/lib/vagrant/box_collection.rb +53 -0
  64. data/lib/vagrant/cli.rb +55 -0
  65. data/lib/vagrant/command.rb +25 -0
  66. data/lib/vagrant/command/base.rb +106 -0
  67. data/lib/vagrant/command/box.rb +33 -0
  68. data/lib/vagrant/command/destroy.rb +17 -0
  69. data/lib/vagrant/command/group_base.rb +107 -0
  70. data/lib/vagrant/command/halt.rb +18 -0
  71. data/lib/vagrant/command/helpers.rb +33 -0
  72. data/lib/vagrant/command/init.rb +14 -0
  73. data/lib/vagrant/command/named_base.rb +14 -0
  74. data/lib/vagrant/command/package.rb +41 -0
  75. data/lib/vagrant/command/provision.rb +17 -0
  76. data/lib/vagrant/command/reload.rb +17 -0
  77. data/lib/vagrant/command/resume.rb +17 -0
  78. data/lib/vagrant/command/ssh.rb +42 -0
  79. data/lib/vagrant/command/ssh_config.rb +26 -0
  80. data/lib/vagrant/command/status.rb +22 -0
  81. data/lib/vagrant/command/suspend.rb +17 -0
  82. data/lib/vagrant/command/up.rb +19 -0
  83. data/lib/vagrant/command/upgrade_to_060.rb +45 -0
  84. data/lib/vagrant/command/version.rb +13 -0
  85. data/lib/vagrant/config.rb +123 -0
  86. data/lib/vagrant/config/base.rb +85 -0
  87. data/lib/vagrant/config/error_recorder.rb +19 -0
  88. data/lib/vagrant/config/nfs.rb +10 -0
  89. data/lib/vagrant/config/package.rb +9 -0
  90. data/lib/vagrant/config/ssh.rb +33 -0
  91. data/lib/vagrant/config/top.rb +61 -0
  92. data/lib/vagrant/config/vagrant.rb +16 -0
  93. data/lib/vagrant/config/vm.rb +137 -0
  94. data/lib/vagrant/config/vm/provisioner.rb +56 -0
  95. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  96. data/lib/vagrant/data_store.rb +70 -0
  97. data/lib/vagrant/downloaders.rb +7 -0
  98. data/lib/vagrant/downloaders/base.rb +23 -0
  99. data/lib/vagrant/downloaders/file.rb +22 -0
  100. data/lib/vagrant/downloaders/http.rb +64 -0
  101. data/lib/vagrant/environment.rb +392 -0
  102. data/lib/vagrant/errors.rb +332 -0
  103. data/lib/vagrant/hosts.rb +8 -0
  104. data/lib/vagrant/hosts/arch.rb +27 -0
  105. data/lib/vagrant/hosts/base.rb +78 -0
  106. data/lib/vagrant/hosts/bsd.rb +52 -0
  107. data/lib/vagrant/hosts/linux.rb +47 -0
  108. data/lib/vagrant/plugin.rb +57 -0
  109. data/lib/vagrant/provisioners.rb +9 -0
  110. data/lib/vagrant/provisioners/base.rb +63 -0
  111. data/lib/vagrant/provisioners/chef.rb +130 -0
  112. data/lib/vagrant/provisioners/chef_server.rb +103 -0
  113. data/lib/vagrant/provisioners/chef_solo.rb +142 -0
  114. data/lib/vagrant/provisioners/puppet.rb +137 -0
  115. data/lib/vagrant/provisioners/puppet_server.rb +55 -0
  116. data/lib/vagrant/provisioners/shell.rb +52 -0
  117. data/lib/vagrant/ssh.rb +173 -0
  118. data/lib/vagrant/ssh/session.rb +125 -0
  119. data/lib/vagrant/systems.rb +11 -0
  120. data/lib/vagrant/systems/base.rb +87 -0
  121. data/lib/vagrant/systems/debian.rb +36 -0
  122. data/lib/vagrant/systems/freebsd.rb +84 -0
  123. data/lib/vagrant/systems/gentoo.rb +27 -0
  124. data/lib/vagrant/systems/linux.rb +83 -0
  125. data/lib/vagrant/systems/linux/config.rb +21 -0
  126. data/lib/vagrant/systems/linux/error.rb +9 -0
  127. data/lib/vagrant/systems/redhat.rb +39 -0
  128. data/lib/vagrant/systems/solaris.rb +62 -0
  129. data/lib/vagrant/systems/ubuntu.rb +17 -0
  130. data/lib/vagrant/test_helpers.rb +128 -0
  131. data/lib/vagrant/ui.rb +69 -0
  132. data/lib/vagrant/util.rb +13 -0
  133. data/lib/vagrant/util/busy.rb +59 -0
  134. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  135. data/lib/vagrant/util/plain_logger.rb +25 -0
  136. data/lib/vagrant/util/platform.rb +65 -0
  137. data/lib/vagrant/util/resource_logger.rb +63 -0
  138. data/lib/vagrant/util/retryable.rb +25 -0
  139. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  140. data/lib/vagrant/util/template_renderer.rb +83 -0
  141. data/lib/vagrant/version.rb +6 -0
  142. data/lib/vagrant/vm.rb +177 -0
  143. data/templates/chef_server_client.erb +18 -0
  144. data/templates/chef_solo_solo.erb +19 -0
  145. data/templates/commands/init/Vagrantfile.erb +82 -0
  146. data/templates/config/validation_failed.erb +7 -0
  147. data/templates/locales/en.yml +535 -0
  148. data/templates/network_entry_debian.erb +8 -0
  149. data/templates/network_entry_gentoo.erb +5 -0
  150. data/templates/network_entry_redhat.erb +8 -0
  151. data/templates/nfs/exports.erb +5 -0
  152. data/templates/nfs/exports_linux.erb +5 -0
  153. data/templates/package_Vagrantfile.erb +11 -0
  154. data/templates/ssh_config.erb +9 -0
  155. data/test/locales/en.yml +8 -0
  156. data/test/test_helper.rb +26 -0
  157. data/test/vagrant/action/box/destroy_test.rb +18 -0
  158. data/test/vagrant/action/box/download_test.rb +125 -0
  159. data/test/vagrant/action/box/package_test.rb +25 -0
  160. data/test/vagrant/action/box/unpackage_test.rb +84 -0
  161. data/test/vagrant/action/box/verify_test.rb +30 -0
  162. data/test/vagrant/action/builder_test.rb +203 -0
  163. data/test/vagrant/action/env/set_test.rb +24 -0
  164. data/test/vagrant/action/environment_test.rb +27 -0
  165. data/test/vagrant/action/general/package_test.rb +268 -0
  166. data/test/vagrant/action/general/validate_test.rb +31 -0
  167. data/test/vagrant/action/vm/boot_test.rb +66 -0
  168. data/test/vagrant/action/vm/check_box_test.rb +56 -0
  169. data/test/vagrant/action/vm/check_guest_additions_test.rb +9 -0
  170. data/test/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
  171. data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +72 -0
  172. data/test/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
  173. data/test/vagrant/action/vm/clear_shared_folders_test.rb +49 -0
  174. data/test/vagrant/action/vm/customize_test.rb +30 -0
  175. data/test/vagrant/action/vm/destroy_test.rb +25 -0
  176. data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
  177. data/test/vagrant/action/vm/discard_state_test.rb +45 -0
  178. data/test/vagrant/action/vm/export_test.rb +107 -0
  179. data/test/vagrant/action/vm/forward_ports_helpers_test.rb +70 -0
  180. data/test/vagrant/action/vm/forward_ports_test.rb +194 -0
  181. data/test/vagrant/action/vm/halt_test.rb +79 -0
  182. data/test/vagrant/action/vm/host_name_test.rb +36 -0
  183. data/test/vagrant/action/vm/import_test.rb +66 -0
  184. data/test/vagrant/action/vm/match_mac_address_test.rb +36 -0
  185. data/test/vagrant/action/vm/network_test.rb +286 -0
  186. data/test/vagrant/action/vm/nfs_helpers_test.rb +26 -0
  187. data/test/vagrant/action/vm/nfs_test.rb +260 -0
  188. data/test/vagrant/action/vm/package_test.rb +25 -0
  189. data/test/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
  190. data/test/vagrant/action/vm/provision_test.rb +90 -0
  191. data/test/vagrant/action/vm/resume_test.rb +35 -0
  192. data/test/vagrant/action/vm/share_folders_test.rb +139 -0
  193. data/test/vagrant/action/vm/suspend_test.rb +35 -0
  194. data/test/vagrant/action/warden_test.rb +119 -0
  195. data/test/vagrant/action_test.rb +89 -0
  196. data/test/vagrant/box_collection_test.rb +45 -0
  197. data/test/vagrant/box_test.rb +74 -0
  198. data/test/vagrant/cli_test.rb +35 -0
  199. data/test/vagrant/command/base_test.rb +23 -0
  200. data/test/vagrant/command/group_base_test.rb +15 -0
  201. data/test/vagrant/command/helpers_test.rb +88 -0
  202. data/test/vagrant/command/package_test.rb +27 -0
  203. data/test/vagrant/config/base_test.rb +52 -0
  204. data/test/vagrant/config/error_recorder_test.rb +18 -0
  205. data/test/vagrant/config/ssh_test.rb +12 -0
  206. data/test/vagrant/config/vagrant_test.rb +35 -0
  207. data/test/vagrant/config/vm/provisioner_test.rb +92 -0
  208. data/test/vagrant/config/vm_test.rb +86 -0
  209. data/test/vagrant/config_test.rb +162 -0
  210. data/test/vagrant/data_store_test.rb +77 -0
  211. data/test/vagrant/downloaders/base_test.rb +28 -0
  212. data/test/vagrant/downloaders/file_test.rb +48 -0
  213. data/test/vagrant/downloaders/http_test.rb +80 -0
  214. data/test/vagrant/environment_test.rb +508 -0
  215. data/test/vagrant/errors_test.rb +42 -0
  216. data/test/vagrant/hosts/base_test.rb +46 -0
  217. data/test/vagrant/hosts/bsd_test.rb +53 -0
  218. data/test/vagrant/hosts/linux_test.rb +54 -0
  219. data/test/vagrant/plugin_test.rb +9 -0
  220. data/test/vagrant/provisioners/base_test.rb +63 -0
  221. data/test/vagrant/provisioners/chef_server_test.rb +188 -0
  222. data/test/vagrant/provisioners/chef_solo_test.rb +219 -0
  223. data/test/vagrant/provisioners/chef_test.rb +179 -0
  224. data/test/vagrant/provisioners/puppet_server_test.rb +68 -0
  225. data/test/vagrant/provisioners/puppet_test.rb +182 -0
  226. data/test/vagrant/provisioners/shell_test.rb +68 -0
  227. data/test/vagrant/ssh/session_test.rb +40 -0
  228. data/test/vagrant/ssh_test.rb +342 -0
  229. data/test/vagrant/systems/base_test.rb +18 -0
  230. data/test/vagrant/systems/linux_test.rb +114 -0
  231. data/test/vagrant/ui_test.rb +29 -0
  232. data/test/vagrant/util/busy_test.rb +106 -0
  233. data/test/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
  234. data/test/vagrant/util/plain_logger_test.rb +17 -0
  235. data/test/vagrant/util/platform_test.rb +18 -0
  236. data/test/vagrant/util/resource_logger_test.rb +78 -0
  237. data/test/vagrant/util/retryable_test.rb +50 -0
  238. data/test/vagrant/util/stacked_proc_runner_test.rb +43 -0
  239. data/test/vagrant/util/template_renderer_test.rb +145 -0
  240. data/test/vagrant/vm_test.rb +291 -0
  241. data/vagrant.gemspec +36 -0
  242. metadata +514 -0
@@ -0,0 +1,19 @@
1
+ module Vagrant
2
+ class Action
3
+ module General
4
+ # Simply validates the configuration of the current Vagrant
5
+ # environment.
6
+ class Validate
7
+ def initialize(app, env)
8
+ @app = app
9
+ @env = env
10
+ end
11
+
12
+ def call(env)
13
+ @env["config"].validate! if !@env.has_key?("validate") || @env["validate"]
14
+ @app.call(@env)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,31 @@
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 :HostName, 'vagrant/action/vm/host_name'
19
+ autoload :Import, 'vagrant/action/vm/import'
20
+ autoload :MatchMACAddress, 'vagrant/action/vm/match_mac_address'
21
+ autoload :Network, 'vagrant/action/vm/network'
22
+ autoload :NFS, 'vagrant/action/vm/nfs'
23
+ autoload :Package, 'vagrant/action/vm/package'
24
+ autoload :PackageVagrantfile, 'vagrant/action/vm/package_vagrantfile'
25
+ autoload :Provision, 'vagrant/action/vm/provision'
26
+ autoload :Resume, 'vagrant/action/vm/resume'
27
+ autoload :ShareFolders, 'vagrant/action/vm/share_folders'
28
+ autoload :Suspend, 'vagrant/action/vm/suspend'
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,48 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ class Boot
5
+ def initialize(app, env)
6
+ @app = app
7
+ @env = env
8
+ end
9
+
10
+ def call(env)
11
+ @env = env
12
+
13
+ # Start up the VM and wait for it to boot.
14
+ boot
15
+ raise Errors::VMFailedToBoot if !wait_for_boot
16
+
17
+ @app.call(env)
18
+ end
19
+
20
+ def boot
21
+ @env.ui.info I18n.t("vagrant.actions.vm.boot.booting")
22
+ @env["vm"].vm.start(@env.env.config.vm.boot_mode)
23
+ end
24
+
25
+ def wait_for_boot
26
+ @env.ui.info I18n.t("vagrant.actions.vm.boot.waiting")
27
+
28
+ @env["config"].ssh.max_tries.to_i.times do |i|
29
+ if @env["vm"].ssh.up?
30
+ @env.ui.info I18n.t("vagrant.actions.vm.boot.ready")
31
+ return true
32
+ end
33
+
34
+ # Return true so that the vm_failed_to_boot error doesn't
35
+ # get shown
36
+ return true if @env.interrupted?
37
+
38
+ sleep 2 if !@env["vagrant.test"]
39
+ end
40
+
41
+ @env.ui.error I18n.t("vagrant.actions.vm.boot.failed")
42
+ false
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
@@ -0,0 +1,28 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ class CheckBox
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ box_name = env["config"].vm.box
11
+ raise Errors::BoxNotSpecified if !box_name
12
+
13
+ if !env.env.boxes.find(box_name)
14
+ box_url = env["config"].vm.box_url
15
+ raise Errors::BoxSpecifiedDoesntExist, :name => box_name if !box_url
16
+
17
+ env.ui.info I18n.t("vagrant.actions.vm.check_box.not_found", :name => box_name)
18
+ Vagrant::Box.add(env.env, box_name, box_url)
19
+ env["boxes"].reload!
20
+ env.env.reload_config!
21
+ end
22
+
23
+ @app.call(env)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,30 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ # Middleware which verifies that the VM has the proper guest additions
5
+ # installed and prints a warning if they're not detected or if the
6
+ # version does not match the installed VirtualBox version.
7
+ class CheckGuestAdditions
8
+ def initialize(app, env)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ # Use the raw interface for now, while the virtualbox gem
14
+ # doesn't support guest properties (due to cross platform issues)
15
+ version = env["vm"].vm.interface.get_guest_property_value("/VirtualBox/GuestAdd/Version")
16
+ if version.empty?
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))
22
+ end
23
+
24
+ # Continue
25
+ @app.call(env)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,43 @@
1
+ require 'fileutils'
2
+
3
+ module Vagrant
4
+ class Action
5
+ module VM
6
+ # Cleans up the VirtualBox machine folder for any ".xml-prev"
7
+ # files which VirtualBox may have left over. This is a bug in
8
+ # VirtualBox. As soon as this is fixed, this middleware can and
9
+ # will be removed.
10
+ class CleanMachineFolder
11
+ def initialize(app, env)
12
+ @app = app
13
+ end
14
+
15
+ def call(env)
16
+ clean_machine_folder
17
+ @app.call(env)
18
+ end
19
+
20
+ def clean_machine_folder
21
+ folder = File.join(VirtualBox::Global.global.system_properties.default_machine_folder, "*")
22
+
23
+ # Small safeguard against potentially unwanted rm-rf, since the default
24
+ # machine folder will typically always be greater than 10 characters long.
25
+ # For users with it < 10, out of luck?
26
+ return if folder.length < 10
27
+
28
+ Dir[folder].each do |f|
29
+ next unless File.directory?(f)
30
+
31
+ keep = Dir["#{f}/**/*"].find do |d|
32
+ # Find a file that doesn't have ".xml-prev" as the suffix,
33
+ # which signals that we want to keep this folder
34
+ File.file?(d) && !(File.basename(d) =~ /\.vbox-prev$/)
35
+ end
36
+
37
+ FileUtils.rm_rf(f) if !keep
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path("../forward_ports_helpers", __FILE__)
2
+
3
+ module Vagrant
4
+ class Action
5
+ module VM
6
+ class ClearForwardedPorts
7
+ include ForwardPortsHelpers
8
+
9
+ def initialize(app, env)
10
+ @app = app
11
+ @env = env
12
+ end
13
+
14
+ def call(env)
15
+ @env = env
16
+ clear
17
+ @app.call(env)
18
+ end
19
+
20
+ def clear
21
+ if used_ports.length > 0
22
+ @env.ui.info I18n.t("vagrant.actions.vm.clear_forward_ports.deleting")
23
+ clear_ports
24
+ @env["vm"].reload!
25
+ end
26
+ end
27
+
28
+ # Deletes existing forwarded ports.
29
+ def clear_ports
30
+ @env["vm"].vm.network_adapters.each do |na|
31
+ na.nat_driver.forwarded_ports.dup.each do |fp|
32
+ fp.destroy
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path("../nfs_helpers", __FILE__)
2
+
3
+ module Vagrant
4
+ class Action
5
+ module VM
6
+ class ClearNFSExports
7
+ include NFSHelpers
8
+
9
+ def initialize(app, env)
10
+ @app = app
11
+ end
12
+
13
+ def call(env)
14
+ clear_nfs_exports(env)
15
+ @app.call(env)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,32 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ class ClearSharedFolders
5
+ def initialize(app, env)
6
+ @app = app
7
+ @env = env
8
+ end
9
+
10
+ def call(env)
11
+ @env = env
12
+
13
+ clear_shared_folders
14
+ @app.call(env)
15
+ end
16
+
17
+ def clear_shared_folders
18
+ if @env["vm"].vm.shared_folders.length > 0
19
+ @env.ui.info I18n.t("vagrant.actions.vm.clear_shared_folders.deleting")
20
+
21
+ folders = @env["vm"].vm.shared_folders.dup
22
+ folders.each do |shared_folder|
23
+ shared_folder.destroy
24
+ end
25
+
26
+ @env["vm"].reload!
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,21 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ class Customize
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ if !env.env.config.vm.proc_stack.empty?
11
+ env.ui.info I18n.t("vagrant.actions.vm.customize.running")
12
+ env.env.config.vm.run_procs!(env["vm"].vm)
13
+ env["vm"].vm.save
14
+ end
15
+
16
+ @app.call(env)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ class Destroy
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ env.ui.info I18n.t("vagrant.actions.vm.destroy.destroying")
11
+ env["vm"].vm.destroy
12
+ env["vm"].vm = nil
13
+
14
+ @app.call(env)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ # Destroys the unused host only interfaces. This middleware cleans
5
+ # up any created host only networks.
6
+ class DestroyUnusedNetworkInterfaces
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
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
16
+
17
+ # Destroy it if there is nothing attached
18
+ if iface.attached_vms.empty?
19
+ env.ui.info I18n.t("vagrant.actions.vm.destroy_network.destroying")
20
+ iface.destroy
21
+ end
22
+ end
23
+
24
+ # Continue along
25
+ @app.call(env)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ module Vagrant
2
+ class Action
3
+ module VM
4
+ # Discards the saved state of the VM if its saved. If its
5
+ # not saved, does nothing.
6
+ class DiscardState
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ if env["vm"].created? && env["vm"].vm.saved?
13
+ env.ui.info I18n.t("vagrant.actions.vm.discard_state.discarding")
14
+ env["vm"].vm.discard_state
15
+ end
16
+
17
+ @app.call(env)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,52 @@
1
+ require 'fileutils'
2
+
3
+ module Vagrant
4
+ class Action
5
+ module VM
6
+ class Export
7
+ attr_reader :temp_dir
8
+
9
+ def initialize(app, env)
10
+ @app = app
11
+ @env = env
12
+ end
13
+
14
+ def call(env)
15
+ @env = env
16
+
17
+ raise Errors::VMPowerOffToPackage if !@env["vm"].vm.powered_off?
18
+
19
+ setup_temp_dir
20
+ export
21
+
22
+ @app.call(env)
23
+
24
+ recover(env) # called to cleanup temp directory
25
+ end
26
+
27
+ def recover(env)
28
+ if temp_dir && File.exist?(temp_dir)
29
+ FileUtils.rm_rf(temp_dir)
30
+ end
31
+ end
32
+
33
+ def setup_temp_dir
34
+ @env.ui.info I18n.t("vagrant.actions.vm.export.create_dir")
35
+ @temp_dir = @env["export.temp_dir"] = @env.env.tmp_path.join(Time.now.to_i.to_s)
36
+ FileUtils.mkpath(@env["export.temp_dir"])
37
+ end
38
+
39
+ def export
40
+ @env.ui.info I18n.t("vagrant.actions.vm.export.exporting")
41
+ @env["vm"].vm.export(ovf_path) do |progress|
42
+ @env.ui.report_progress(progress.percent, 100, false)
43
+ end
44
+ end
45
+
46
+ def ovf_path
47
+ File.join(@env["export.temp_dir"], @env.env.config.vm.box_ovf)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end