rvagrant 0.8.7.dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. data/.gitignore +25 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +386 -0
  4. data/Gemfile +21 -0
  5. data/LICENSE +21 -0
  6. data/README.md +61 -0
  7. data/Rakefile +11 -0
  8. data/bin/vagrant +28 -0
  9. data/config/default.rb +38 -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 +44 -0
  18. data/lib/vagrant/action.rb +138 -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 +108 -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 +113 -0
  32. data/lib/vagrant/action/general/validate.rb +19 -0
  33. data/lib/vagrant/action/vm.rb +34 -0
  34. data/lib/vagrant/action/vm/boot.rb +48 -0
  35. data/lib/vagrant/action/vm/check_accessible.rb +23 -0
  36. data/lib/vagrant/action/vm/check_box.rb +28 -0
  37. data/lib/vagrant/action/vm/check_guest_additions.rb +35 -0
  38. data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
  39. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +26 -0
  40. data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
  41. data/lib/vagrant/action/vm/clear_shared_folders.rb +27 -0
  42. data/lib/vagrant/action/vm/customize.rb +26 -0
  43. data/lib/vagrant/action/vm/destroy.rb +19 -0
  44. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
  45. data/lib/vagrant/action/vm/discard_state.rb +22 -0
  46. data/lib/vagrant/action/vm/export.rb +52 -0
  47. data/lib/vagrant/action/vm/forward_ports.rb +133 -0
  48. data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
  49. data/lib/vagrant/action/vm/halt.rb +29 -0
  50. data/lib/vagrant/action/vm/host_name.rb +21 -0
  51. data/lib/vagrant/action/vm/import.rb +40 -0
  52. data/lib/vagrant/action/vm/match_mac_address.rb +26 -0
  53. data/lib/vagrant/action/vm/modify.rb +37 -0
  54. data/lib/vagrant/action/vm/network.rb +146 -0
  55. data/lib/vagrant/action/vm/nfs.rb +160 -0
  56. data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
  57. data/lib/vagrant/action/vm/package.rb +23 -0
  58. data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
  59. data/lib/vagrant/action/vm/provision.rb +34 -0
  60. data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
  61. data/lib/vagrant/action/vm/resume.rb +20 -0
  62. data/lib/vagrant/action/vm/share_folders.rb +78 -0
  63. data/lib/vagrant/action/vm/suspend.rb +20 -0
  64. data/lib/vagrant/action/warden.rb +85 -0
  65. data/lib/vagrant/box.rb +90 -0
  66. data/lib/vagrant/box_collection.rb +53 -0
  67. data/lib/vagrant/cli.rb +55 -0
  68. data/lib/vagrant/command.rb +25 -0
  69. data/lib/vagrant/command/base.rb +106 -0
  70. data/lib/vagrant/command/box.rb +33 -0
  71. data/lib/vagrant/command/destroy.rb +17 -0
  72. data/lib/vagrant/command/group_base.rb +107 -0
  73. data/lib/vagrant/command/halt.rb +18 -0
  74. data/lib/vagrant/command/helpers.rb +33 -0
  75. data/lib/vagrant/command/init.rb +14 -0
  76. data/lib/vagrant/command/named_base.rb +14 -0
  77. data/lib/vagrant/command/package.rb +41 -0
  78. data/lib/vagrant/command/provision.rb +23 -0
  79. data/lib/vagrant/command/reload.rb +17 -0
  80. data/lib/vagrant/command/resume.rb +17 -0
  81. data/lib/vagrant/command/ssh.rb +49 -0
  82. data/lib/vagrant/command/ssh_config.rb +29 -0
  83. data/lib/vagrant/command/status.rb +31 -0
  84. data/lib/vagrant/command/suspend.rb +17 -0
  85. data/lib/vagrant/command/up.rb +19 -0
  86. data/lib/vagrant/command/upgrade_to_060.rb +45 -0
  87. data/lib/vagrant/command/version.rb +13 -0
  88. data/lib/vagrant/config.rb +123 -0
  89. data/lib/vagrant/config/base.rb +85 -0
  90. data/lib/vagrant/config/error_recorder.rb +19 -0
  91. data/lib/vagrant/config/nfs.rb +10 -0
  92. data/lib/vagrant/config/package.rb +9 -0
  93. data/lib/vagrant/config/ssh.rb +38 -0
  94. data/lib/vagrant/config/top.rb +61 -0
  95. data/lib/vagrant/config/vagrant.rb +17 -0
  96. data/lib/vagrant/config/vm.rb +148 -0
  97. data/lib/vagrant/config/vm/provisioner.rb +56 -0
  98. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  99. data/lib/vagrant/data_store.rb +70 -0
  100. data/lib/vagrant/downloaders.rb +7 -0
  101. data/lib/vagrant/downloaders/base.rb +23 -0
  102. data/lib/vagrant/downloaders/file.rb +22 -0
  103. data/lib/vagrant/downloaders/http.rb +70 -0
  104. data/lib/vagrant/environment.rb +516 -0
  105. data/lib/vagrant/errors.rb +352 -0
  106. data/lib/vagrant/hosts.rb +9 -0
  107. data/lib/vagrant/hosts/arch.rb +27 -0
  108. data/lib/vagrant/hosts/base.rb +76 -0
  109. data/lib/vagrant/hosts/bsd.rb +58 -0
  110. data/lib/vagrant/hosts/fedora.rb +11 -0
  111. data/lib/vagrant/hosts/linux.rb +69 -0
  112. data/lib/vagrant/plugin.rb +79 -0
  113. data/lib/vagrant/provisioners.rb +9 -0
  114. data/lib/vagrant/provisioners/base.rb +67 -0
  115. data/lib/vagrant/provisioners/chef.rb +155 -0
  116. data/lib/vagrant/provisioners/chef_client.rb +120 -0
  117. data/lib/vagrant/provisioners/chef_solo.rb +135 -0
  118. data/lib/vagrant/provisioners/puppet.rb +137 -0
  119. data/lib/vagrant/provisioners/puppet_server.rb +55 -0
  120. data/lib/vagrant/provisioners/shell.rb +96 -0
  121. data/lib/vagrant/ssh.rb +224 -0
  122. data/lib/vagrant/ssh/session.rb +136 -0
  123. data/lib/vagrant/systems.rb +13 -0
  124. data/lib/vagrant/systems/arch.rb +34 -0
  125. data/lib/vagrant/systems/base.rb +87 -0
  126. data/lib/vagrant/systems/debian.rb +36 -0
  127. data/lib/vagrant/systems/freebsd.rb +84 -0
  128. data/lib/vagrant/systems/gentoo.rb +27 -0
  129. data/lib/vagrant/systems/linux.rb +82 -0
  130. data/lib/vagrant/systems/linux/config.rb +21 -0
  131. data/lib/vagrant/systems/linux/error.rb +9 -0
  132. data/lib/vagrant/systems/redhat.rb +48 -0
  133. data/lib/vagrant/systems/solaris.rb +67 -0
  134. data/lib/vagrant/systems/suse.rb +9 -0
  135. data/lib/vagrant/systems/ubuntu.rb +17 -0
  136. data/lib/vagrant/test_helpers.rb +128 -0
  137. data/lib/vagrant/ui.rb +81 -0
  138. data/lib/vagrant/util.rb +13 -0
  139. data/lib/vagrant/util/busy.rb +59 -0
  140. data/lib/vagrant/util/counter.rb +24 -0
  141. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  142. data/lib/vagrant/util/platform.rb +57 -0
  143. data/lib/vagrant/util/retryable.rb +25 -0
  144. data/lib/vagrant/util/safe_exec.rb +35 -0
  145. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  146. data/lib/vagrant/util/template_renderer.rb +83 -0
  147. data/lib/vagrant/version.rb +6 -0
  148. data/lib/vagrant/vm.rb +181 -0
  149. data/templates/chef_server_client.erb +32 -0
  150. data/templates/chef_solo_solo.erb +23 -0
  151. data/templates/commands/init/Vagrantfile.erb +86 -0
  152. data/templates/config/validation_failed.erb +7 -0
  153. data/templates/locales/en.yml +556 -0
  154. data/templates/network_entry_arch.erb +9 -0
  155. data/templates/network_entry_debian.erb +8 -0
  156. data/templates/network_entry_gentoo.erb +5 -0
  157. data/templates/network_entry_redhat.erb +9 -0
  158. data/templates/nfs/exports.erb +5 -0
  159. data/templates/nfs/exports_linux.erb +5 -0
  160. data/templates/package_Vagrantfile.erb +11 -0
  161. data/templates/ssh_config.erb +15 -0
  162. data/test/unit/locales/en.yml +8 -0
  163. data/test/unit/test_helper.rb +28 -0
  164. data/test/unit/vagrant/action/box/destroy_test.rb +18 -0
  165. data/test/unit/vagrant/action/box/download_test.rb +125 -0
  166. data/test/unit/vagrant/action/box/package_test.rb +25 -0
  167. data/test/unit/vagrant/action/box/unpackage_test.rb +84 -0
  168. data/test/unit/vagrant/action/box/verify_test.rb +30 -0
  169. data/test/unit/vagrant/action/builder_test.rb +207 -0
  170. data/test/unit/vagrant/action/env/set_test.rb +24 -0
  171. data/test/unit/vagrant/action/environment_test.rb +27 -0
  172. data/test/unit/vagrant/action/general/package_test.rb +268 -0
  173. data/test/unit/vagrant/action/general/validate_test.rb +31 -0
  174. data/test/unit/vagrant/action/vm/boot_test.rb +66 -0
  175. data/test/unit/vagrant/action/vm/check_accessible_test.rb +61 -0
  176. data/test/unit/vagrant/action/vm/check_box_test.rb +56 -0
  177. data/test/unit/vagrant/action/vm/check_guest_additions_test.rb +9 -0
  178. data/test/unit/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
  179. data/test/unit/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
  180. data/test/unit/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
  181. data/test/unit/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
  182. data/test/unit/vagrant/action/vm/customize_test.rb +37 -0
  183. data/test/unit/vagrant/action/vm/destroy_test.rb +25 -0
  184. data/test/unit/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
  185. data/test/unit/vagrant/action/vm/discard_state_test.rb +45 -0
  186. data/test/unit/vagrant/action/vm/export_test.rb +107 -0
  187. data/test/unit/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
  188. data/test/unit/vagrant/action/vm/forward_ports_test.rb +213 -0
  189. data/test/unit/vagrant/action/vm/halt_test.rb +79 -0
  190. data/test/unit/vagrant/action/vm/host_name_test.rb +36 -0
  191. data/test/unit/vagrant/action/vm/import_test.rb +66 -0
  192. data/test/unit/vagrant/action/vm/match_mac_address_test.rb +40 -0
  193. data/test/unit/vagrant/action/vm/modify_test.rb +38 -0
  194. data/test/unit/vagrant/action/vm/network_test.rb +286 -0
  195. data/test/unit/vagrant/action/vm/nfs_helpers_test.rb +26 -0
  196. data/test/unit/vagrant/action/vm/nfs_test.rb +260 -0
  197. data/test/unit/vagrant/action/vm/package_test.rb +25 -0
  198. data/test/unit/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
  199. data/test/unit/vagrant/action/vm/provision_test.rb +65 -0
  200. data/test/unit/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
  201. data/test/unit/vagrant/action/vm/resume_test.rb +35 -0
  202. data/test/unit/vagrant/action/vm/share_folders_test.rb +144 -0
  203. data/test/unit/vagrant/action/vm/suspend_test.rb +35 -0
  204. data/test/unit/vagrant/action/warden_test.rb +125 -0
  205. data/test/unit/vagrant/action_test.rb +89 -0
  206. data/test/unit/vagrant/box_collection_test.rb +45 -0
  207. data/test/unit/vagrant/box_test.rb +74 -0
  208. data/test/unit/vagrant/cli_test.rb +35 -0
  209. data/test/unit/vagrant/command/base_test.rb +23 -0
  210. data/test/unit/vagrant/command/group_base_test.rb +15 -0
  211. data/test/unit/vagrant/command/helpers_test.rb +88 -0
  212. data/test/unit/vagrant/command/package_test.rb +27 -0
  213. data/test/unit/vagrant/config/base_test.rb +52 -0
  214. data/test/unit/vagrant/config/error_recorder_test.rb +18 -0
  215. data/test/unit/vagrant/config/ssh_test.rb +12 -0
  216. data/test/unit/vagrant/config/vagrant_test.rb +35 -0
  217. data/test/unit/vagrant/config/vm/provisioner_test.rb +92 -0
  218. data/test/unit/vagrant/config/vm_test.rb +56 -0
  219. data/test/unit/vagrant/config_test.rb +162 -0
  220. data/test/unit/vagrant/data_store_test.rb +77 -0
  221. data/test/unit/vagrant/downloaders/base_test.rb +28 -0
  222. data/test/unit/vagrant/downloaders/file_test.rb +48 -0
  223. data/test/unit/vagrant/downloaders/http_test.rb +82 -0
  224. data/test/unit/vagrant/environment_test.rb +598 -0
  225. data/test/unit/vagrant/errors_test.rb +42 -0
  226. data/test/unit/vagrant/hosts/base_test.rb +46 -0
  227. data/test/unit/vagrant/hosts/bsd_test.rb +53 -0
  228. data/test/unit/vagrant/hosts/linux_test.rb +54 -0
  229. data/test/unit/vagrant/plugin_test.rb +9 -0
  230. data/test/unit/vagrant/provisioners/base_test.rb +63 -0
  231. data/test/unit/vagrant/provisioners/chef_client_test.rb +190 -0
  232. data/test/unit/vagrant/provisioners/chef_solo_test.rb +114 -0
  233. data/test/unit/vagrant/provisioners/chef_test.rb +202 -0
  234. data/test/unit/vagrant/provisioners/puppet_server_test.rb +68 -0
  235. data/test/unit/vagrant/provisioners/puppet_test.rb +182 -0
  236. data/test/unit/vagrant/provisioners/shell_test.rb +79 -0
  237. data/test/unit/vagrant/ssh/session_test.rb +40 -0
  238. data/test/unit/vagrant/ssh_test.rb +307 -0
  239. data/test/unit/vagrant/systems/base_test.rb +18 -0
  240. data/test/unit/vagrant/systems/linux_test.rb +104 -0
  241. data/test/unit/vagrant/ui_test.rb +29 -0
  242. data/test/unit/vagrant/util/busy_test.rb +106 -0
  243. data/test/unit/vagrant/util/counter_test.rb +29 -0
  244. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
  245. data/test/unit/vagrant/util/platform_test.rb +18 -0
  246. data/test/unit/vagrant/util/retryable_test.rb +50 -0
  247. data/test/unit/vagrant/util/stacked_proc_runner_test.rb +43 -0
  248. data/test/unit/vagrant/util/template_renderer_test.rb +145 -0
  249. data/test/unit/vagrant/vm_test.rb +300 -0
  250. data/vagrant.gemspec +35 -0
  251. metadata +431 -0
@@ -0,0 +1,352 @@
1
+ # This file contains all of the internal errors in Vagrant's core
2
+ # commands, actions, etc.
3
+
4
+ module Vagrant
5
+ # This module contains all of the internal errors in Vagrant's core.
6
+ # These errors are _expected_ errors and as such don't typically represent
7
+ # bugs in Vagrant itself. These are meant as a way to detect errors and
8
+ # display them in a user-friendly way.
9
+ #
10
+ # # Defining a new Error
11
+ #
12
+ # To define a new error, inherit from {VagrantError}, which lets Vagrant
13
+ # know that this is an expected error, and also gives you some helpers for
14
+ # providing exit codes and error messages. An example is shown below, then
15
+ # it is explained:
16
+ #
17
+ # class MyError < Vagrant::Errors::VagrantError
18
+ # error_key "my_error"
19
+ # end
20
+ #
21
+ # This creates an error with an I18n error key of "my_error." {VagrantError}
22
+ # uses I18n to look up error messages, in the "vagrant.errors" namespace. So
23
+ # in the above, the error message would be the translation of "vagrant.errors.my_error"
24
+ #
25
+ # If you don't want to use I18n, you can override the {#initialize} method and
26
+ # set your own error message.
27
+ #
28
+ # # Raising an Error
29
+ #
30
+ # To raise an error, it is nothing special, just raise it like any normal
31
+ # exception:
32
+ #
33
+ # raise MyError.new
34
+ #
35
+ # Eventually this exception will bubble out to the `vagrant` binary which
36
+ # will show a nice error message. And if it is raised in the middle of a
37
+ # middleware sequence, then {Action::Warden} will catch it and begin the
38
+ # recovery process prior to exiting.
39
+ module Errors
40
+ # Main superclass of any errors in Vagrant. This provides some
41
+ # convenience methods for setting the status code and error key.
42
+ # The status code is used by the `vagrant` executable as the
43
+ # error code, and the error key is used as a default message from
44
+ # I18n.
45
+ class VagrantError < StandardError
46
+ @@used_codes = []
47
+
48
+ def self.status_code(code = nil)
49
+ if code
50
+ raise "Status code already in use: #{code}" if @@used_codes.include?(code)
51
+ @@used_codes << code
52
+ end
53
+
54
+ define_method(:status_code) { code }
55
+ end
56
+
57
+ def self.error_key(key=nil, namespace=nil)
58
+ define_method(:error_key) { key }
59
+ error_namespace(namespace) if namespace
60
+ end
61
+
62
+ def self.error_namespace(namespace)
63
+ define_method(:error_namespace) { namespace }
64
+ end
65
+
66
+ def initialize(message=nil, *args)
67
+ message = { :_key => message } if message && !message.is_a?(Hash)
68
+ message = { :_key => error_key, :_namespace => error_namespace }.merge(message || {})
69
+ message = translate_error(message)
70
+
71
+ super
72
+ end
73
+
74
+ # The default error namespace which is used for the error key.
75
+ # This can be overridden here or by calling the "error_namespace"
76
+ # class method.
77
+ def error_namespace; "vagrant.errors"; end
78
+
79
+ # The key for the error message. This should be set using the
80
+ # {error_key} method but can be overridden here if needed.
81
+ def error_key; nil; end
82
+
83
+ protected
84
+
85
+ def translate_error(opts)
86
+ return nil if !opts[:_key]
87
+ I18n.t("#{opts[:_namespace]}.#{opts[:_key]}", opts)
88
+ end
89
+ end
90
+
91
+ class BaseVMNotFound < VagrantError
92
+ status_code(18)
93
+ error_key(:base_vm_not_found)
94
+ end
95
+
96
+ class BoxAlreadyExists < VagrantError
97
+ status_code(14)
98
+ error_key(:already_exists, "vagrant.actions.box.unpackage")
99
+ end
100
+
101
+ class BoxDownloadUnknownType < VagrantError
102
+ status_code(13)
103
+ error_key(:unknown_type, "vagrant.actions.box.download")
104
+ end
105
+
106
+ class BoxNotFound < VagrantError
107
+ status_code(2)
108
+ error_key(:box_not_found)
109
+ end
110
+
111
+ class BoxNotSpecified < VagrantError
112
+ status_code(22)
113
+ error_key(:not_specified, "vagrant.actions.vm.check_box")
114
+ end
115
+
116
+ class BoxSpecifiedDoesntExist < VagrantError
117
+ status_code(23)
118
+ error_key(:does_not_exist, "vagrant.actions.vm.check_box")
119
+ end
120
+
121
+ class BoxVerificationFailed < VagrantError
122
+ status_code(15)
123
+ error_key(:failed, "vagrant.actions.box.verify")
124
+ end
125
+
126
+ class CLIMissingEnvironment < VagrantError
127
+ status_code(1)
128
+ error_key(:cli_missing_env)
129
+ end
130
+
131
+ class ConfigValidationFailed < VagrantError
132
+ status_code(42)
133
+ error_key(:config_validation)
134
+ end
135
+
136
+ class DotfileIsDirectory < VagrantError
137
+ status_code(46)
138
+ error_key(:dotfile_is_directory)
139
+ end
140
+
141
+ class DownloaderFileDoesntExist < VagrantError
142
+ status_code(37)
143
+ error_key(:file_missing, "vagrant.downloaders.file")
144
+ end
145
+
146
+ class DownloaderHTTPSocketError < VagrantError
147
+ status_code(38)
148
+ error_key(:socket_error, "vagrant.downloaders.http")
149
+ end
150
+
151
+ class DownloaderHTTPStatusError < VagrantError
152
+ status_code(51)
153
+ error_key(:status_error, "vagrant.downloaders.http")
154
+ end
155
+
156
+ class EnvironmentLockedError < VagrantError
157
+ status_code(52)
158
+ error_key(:environment_locked)
159
+ end
160
+
161
+ class HomeDirectoryMigrationFailed < VagrantError
162
+ status_code(53)
163
+ error_key(:home_dir_migration_failed)
164
+ end
165
+
166
+ class ForwardPortAutolistEmpty < VagrantError
167
+ status_code(27)
168
+ error_key(:auto_empty, "vagrant.actions.vm.forward_ports")
169
+ end
170
+
171
+ class ForwardPortBelowThreshold < VagrantError
172
+ status_code(25)
173
+ error_key(:below_threshold_error, "vagrant.actions.vm.forward_ports")
174
+ end
175
+
176
+ class ForwardPortCollision < VagrantError
177
+ status_code(26)
178
+ error_key(:collision_error, "vagrant.actions.vm.forward_ports")
179
+ end
180
+
181
+ class MultiVMEnvironmentRequired < VagrantError
182
+ status_code(5)
183
+ error_key(:multi_vm_required)
184
+ end
185
+
186
+ class MultiVMTargetRequired < VagrantError
187
+ status_code(7)
188
+ error_key(:multi_vm_target_required)
189
+ end
190
+
191
+ class NetworkCollision < VagrantError
192
+ status_code(29)
193
+ error_key(:collides, "vagrant.actions.vm.network")
194
+ end
195
+
196
+ class NetworkNotFound < VagrantError
197
+ status_code(30)
198
+ error_key(:not_found, "vagrant.actions.vm.network")
199
+ end
200
+
201
+ # Note: This is a temporary error for Windows users while host-only
202
+ # networking doesn't quite work.
203
+ class NetworkNotImplemented < VagrantError
204
+ status_code(49)
205
+ error_key(:windows_not_implemented, "vagrant.actions.vm.network")
206
+ end
207
+
208
+ class NFSHostRequired < VagrantError
209
+ status_code(31)
210
+ error_key(:host_required, "vagrant.actions.vm.nfs")
211
+ end
212
+
213
+ class NFSNotSupported < VagrantError
214
+ status_code(32)
215
+ error_key(:not_supported, "vagrant.actions.vm.nfs")
216
+ end
217
+
218
+ class NFSNoHostNetwork < VagrantError
219
+ status_code(33)
220
+ error_key(:no_host_network, "vagrant.actions.vm.nfs")
221
+ end
222
+
223
+ class NoEnvironmentError < VagrantError
224
+ status_code(3)
225
+ error_key(:no_env)
226
+ end
227
+
228
+ class PackageIncludeMissing < VagrantError
229
+ status_code(20)
230
+ error_key(:include_file_missing, "vagrant.actions.general.package")
231
+ end
232
+
233
+ class PackageOutputExists < VagrantError
234
+ status_code(16)
235
+ error_key(:output_exists, "vagrant.actions.general.package")
236
+ end
237
+
238
+ class PackageRequiresDirectory < VagrantError
239
+ status_code(19)
240
+ error_key(:requires_directory, "vagrant.actions.general.package")
241
+ end
242
+
243
+ class PersistDotfileExists < VagrantError
244
+ status_code(34)
245
+ error_key(:dotfile_error, "vagrant.actions.vm.persist")
246
+ end
247
+
248
+ class SSHAuthenticationFailed < VagrantError
249
+ status_code(11)
250
+ error_key(:ssh_authentication_failed)
251
+ end
252
+
253
+ class SSHConnectionRefused < VagrantError
254
+ status_code(43)
255
+ error_key(:ssh_connection_refused)
256
+ end
257
+
258
+ class SSHKeyBadPermissions < VagrantError
259
+ status_code(12)
260
+ error_key(:ssh_key_bad_permissions)
261
+ end
262
+
263
+ class SSHPortNotDetected < VagrantError
264
+ status_code(50)
265
+ error_key(:ssh_port_not_detected)
266
+ end
267
+
268
+ class SSHUnavailable < VagrantError
269
+ status_code(45)
270
+ error_key(:ssh_unavailable)
271
+ end
272
+
273
+ class SSHUnavailableWindows < VagrantError
274
+ status_code(10)
275
+ error_key(:ssh_unavailable_windows)
276
+ end
277
+
278
+ class VagrantInterrupt < VagrantError
279
+ status_code(40)
280
+ error_key(:interrupted)
281
+ end
282
+
283
+ class VagrantfileSyntaxError < VagrantError
284
+ status_code(41)
285
+ error_key(:vagrantfile_syntax_error)
286
+ end
287
+
288
+ class VirtualBoxInvalidVersion < VagrantError
289
+ status_code(17)
290
+ error_key(:virtualbox_invalid_version)
291
+ end
292
+
293
+ class VirtualBoxNotDetected < VagrantError
294
+ status_code(8)
295
+ error_key(:virtualbox_not_detected)
296
+ end
297
+
298
+ # Note that this is a subclass of VirtualBoxNotDetected, so developers
299
+ # who script Vagrant or use it as a library in any way can rescue from
300
+ # "VirtualBoxNotDetected" and catch both errors, which represent the
301
+ # same thing. This subclass simply has a specialized error message.
302
+ class VirtualBoxNotDetected_Win64 < VirtualBoxNotDetected
303
+ status_code(48)
304
+ error_key(:virtualbox_not_detected_win64)
305
+ end
306
+
307
+ class VMBaseMacNotSpecified < VagrantError
308
+ status_code(47)
309
+ error_key(:no_base_mac, "vagrant.actions.vm.match_mac")
310
+ end
311
+
312
+ class VMFailedToBoot < VagrantError
313
+ status_code(21)
314
+ error_key(:failed_to_boot, "vagrant.actions.vm.boot")
315
+ end
316
+
317
+ class VMImportFailure < VagrantError
318
+ status_code(28)
319
+ error_key(:failure, "vagrant.actions.vm.import")
320
+ end
321
+
322
+ class VMInaccessible < VagrantError
323
+ status_code(54)
324
+ error_key(:vm_inaccessible)
325
+ end
326
+
327
+ class VMNotCreatedError < VagrantError
328
+ status_code(6)
329
+ error_key(:vm_creation_required)
330
+ end
331
+
332
+ class VMNotFoundError < VagrantError
333
+ status_code(4)
334
+ error_key(:vm_not_found)
335
+ end
336
+
337
+ class VMNotRunningError < VagrantError
338
+ status_code(44)
339
+ error_key(:vm_not_running)
340
+ end
341
+
342
+ class VMPowerOffToPackage < VagrantError
343
+ status_code(24)
344
+ error_key(:power_off, "vagrant.actions.vm.export")
345
+ end
346
+
347
+ class VMSystemError < VagrantError
348
+ status_code(39)
349
+ error_namespace("vagrant.errors.system")
350
+ end
351
+ end
352
+ end
@@ -0,0 +1,9 @@
1
+ module Vagrant
2
+ module Hosts
3
+ autoload :Base, 'vagrant/hosts/base'
4
+ autoload :Arch, 'vagrant/hosts/arch'
5
+ autoload :BSD, 'vagrant/hosts/bsd'
6
+ autoload :Fedora, 'vagrant/hosts/fedora'
7
+ autoload :Linux, 'vagrant/hosts/linux'
8
+ end
9
+ end
@@ -0,0 +1,27 @@
1
+ module Vagrant
2
+ module Hosts
3
+ class Arch < Linux
4
+ def nfs_export(ip, folders)
5
+ output = TemplateRenderer.render('nfs/exports_linux',
6
+ :uuid => env.vm.uuid,
7
+ :ip => ip,
8
+ :folders => folders)
9
+
10
+ env.ui.info I18n.t("vagrant.hosts.arch.nfs_export.prepare")
11
+ sleep 0.5
12
+
13
+ output.split("\n").each do |line|
14
+ # This should only ask for administrative permission once, even
15
+ # though its executed in multiple subshells.
16
+ system(%Q[sudo su root -c "echo '#{line}' >> /etc/exports"])
17
+ end
18
+
19
+ # We run restart here instead of "update" just in case nfsd
20
+ # is not starting
21
+ system("sudo /etc/rc.d/rpcbind restart")
22
+ system("sudo /etc/rc.d/nfs-common restart")
23
+ system("sudo /etc/rc.d/nfs-server restart")
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,76 @@
1
+ module Vagrant
2
+ module Hosts
3
+ # Base class representing a host machine. These classes
4
+ # define methods which may have host-specific (Mac OS X, Windows,
5
+ # Linux, etc) behavior. The class is automatically determined by
6
+ # default but may be explicitly set via `config.vagrant.host`.
7
+ class Base
8
+ # The {Environment} which this host belongs to.
9
+ attr_reader :env
10
+
11
+ # Loads the proper host for the given value. If the value is nil
12
+ # or is the symbol `:detect`, then the host class will be detected
13
+ # using the `RUBY_PLATFORM` constant.
14
+ #
15
+ # @param [Environment] env
16
+ # @param [String] klass
17
+ # @return [Base]
18
+ def self.load(env, klass)
19
+ klass = detect if klass.nil? || klass == :detect
20
+ return nil if !klass
21
+ return klass.new(env)
22
+ end
23
+
24
+ # Detects the proper host class for current platform and returns
25
+ # the class.
26
+ #
27
+ # @return [Class]
28
+ def self.detect
29
+ [BSD, Linux].each do |type|
30
+ result = type.distro_dispatch
31
+ return result if result
32
+ end
33
+
34
+ nil
35
+ rescue Exception
36
+ nil
37
+ end
38
+
39
+ # This must be implemented by subclasses to dispatch to the proper
40
+ # distro-specific class for the host. If this returns nil then it is
41
+ # an invalid host class.
42
+ def self.distro_dispatch
43
+ nil
44
+ end
45
+
46
+ # Initialzes a new host. This method shouldn't be called directly,
47
+ # typically, since it will be called by {Environment#load!}.
48
+ #
49
+ # @param [Environment] env
50
+ def initialize(env)
51
+ @env = env
52
+ end
53
+
54
+ # Returns true of false denoting whether or not this host supports
55
+ # NFS shared folder setup. This method ideally should verify that
56
+ # NFS is installed.
57
+ #
58
+ # @return [Boolean]
59
+ def nfs?
60
+ false
61
+ end
62
+
63
+ # Exports the given hash of folders via NFS. This method will raise
64
+ # an {Vagrant::Action::ActionException} if anything goes wrong.
65
+ #
66
+ # @param [String] ip IP of the guest machine.
67
+ # @param [Hash] folders Shared folders to sync.
68
+ def nfs_export(ip, folders)
69
+ end
70
+
71
+ # Cleans up the exports for the current VM.
72
+ def nfs_cleanup
73
+ end
74
+ end
75
+ end
76
+ end