vagrant 1.5.0 → 2.4.4

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 (1101) hide show
  1. checksums.yaml +5 -5
  2. data/.copywrite.hcl +15 -0
  3. data/.gitignore +79 -14
  4. data/.gitmodules +0 -0
  5. data/.vimrc +5 -0
  6. data/.yardopts +1 -0
  7. data/CHANGELOG.md +4512 -0
  8. data/Gemfile +10 -2
  9. data/LICENSE +92 -0
  10. data/README.md +55 -3
  11. data/RELEASE.md +11 -0
  12. data/Rakefile +22 -1
  13. data/Vagrantfile +31 -0
  14. data/bin/vagrant +268 -2
  15. data/contrib/README.md +17 -0
  16. data/contrib/bash/completion.sh +190 -0
  17. data/contrib/emacs/vagrant.el +11 -0
  18. data/contrib/st/Ruby.sublime-settings +6 -0
  19. data/contrib/sudoers/linux-fedora +7 -0
  20. data/contrib/sudoers/linux-suse +6 -0
  21. data/contrib/sudoers/linux-ubuntu +8 -0
  22. data/contrib/sudoers/osx +10 -0
  23. data/contrib/vim/vagrantfile.vim +9 -0
  24. data/contrib/zsh/_vagrant +738 -0
  25. data/contrib/zsh/generate_zsh_completion.rb +168 -0
  26. data/ext/vagrant/vagrant_ssl/extconf.rb +24 -0
  27. data/ext/vagrant/vagrant_ssl/vagrant_ssl.c +37 -0
  28. data/ext/vagrant/vagrant_ssl/vagrant_ssl.h +19 -0
  29. data/keys/README.md +23 -0
  30. data/keys/vagrant +27 -0
  31. data/keys/vagrant.key.ed25519 +7 -0
  32. data/keys/vagrant.key.rsa +27 -0
  33. data/keys/vagrant.pub +2 -0
  34. data/keys/vagrant.pub.ed25519 +1 -0
  35. data/keys/vagrant.pub.rsa +1 -0
  36. data/lib/vagrant/action/builder.rb +356 -0
  37. data/lib/vagrant/action/builtin/box_add.rb +638 -0
  38. data/lib/vagrant/action/builtin/box_check_outdated.rb +116 -0
  39. data/lib/vagrant/action/builtin/box_remove.rb +181 -0
  40. data/lib/vagrant/action/builtin/box_update.rb +23 -0
  41. data/lib/vagrant/action/builtin/call.rb +69 -0
  42. data/lib/vagrant/action/builtin/cleanup_disks.rb +59 -0
  43. data/lib/vagrant/action/builtin/cloud_init_setup.rb +125 -0
  44. data/lib/vagrant/action/builtin/cloud_init_wait.rb +35 -0
  45. data/lib/vagrant/action/builtin/config_validate.rb +33 -0
  46. data/lib/vagrant/action/builtin/confirm.rb +51 -0
  47. data/lib/vagrant/action/builtin/delayed.rb +29 -0
  48. data/lib/vagrant/action/builtin/destroy_confirm.rb +24 -0
  49. data/lib/vagrant/action/builtin/disk.rb +55 -0
  50. data/lib/vagrant/action/builtin/env_set.rb +27 -0
  51. data/lib/vagrant/action/builtin/graceful_halt.rb +88 -0
  52. data/lib/vagrant/action/builtin/handle_box.rb +111 -0
  53. data/lib/vagrant/action/builtin/handle_box_url.rb +17 -0
  54. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +300 -0
  55. data/lib/vagrant/action/builtin/has_provisioner.rb +39 -0
  56. data/lib/vagrant/action/builtin/is_env_set.rb +25 -0
  57. data/lib/vagrant/action/builtin/is_state.rb +35 -0
  58. data/lib/vagrant/action/builtin/lock.rb +60 -0
  59. data/lib/vagrant/action/builtin/message.rb +29 -0
  60. data/lib/vagrant/action/builtin/mixin_provisioners.rb +159 -0
  61. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +267 -0
  62. data/lib/vagrant/action/builtin/prepare_clone.rb +41 -0
  63. data/lib/vagrant/action/builtin/provision.rb +146 -0
  64. data/lib/vagrant/action/builtin/provisioner_cleanup.rb +57 -0
  65. data/lib/vagrant/action/builtin/set_hostname.rb +34 -0
  66. data/lib/vagrant/action/builtin/ssh_exec.rb +47 -0
  67. data/lib/vagrant/action/builtin/ssh_run.rb +88 -0
  68. data/lib/vagrant/action/builtin/synced_folder_cleanup.rb +36 -0
  69. data/lib/vagrant/action/builtin/synced_folders.rb +154 -0
  70. data/lib/vagrant/action/builtin/trigger.rb +40 -0
  71. data/lib/vagrant/action/builtin/wait_for_communicator.rb +82 -0
  72. data/lib/vagrant/action/general/package.rb +248 -0
  73. data/lib/vagrant/action/general/package_setup_files.rb +54 -0
  74. data/lib/vagrant/action/general/package_setup_folders.rb +40 -0
  75. data/lib/vagrant/action/hook.rb +163 -0
  76. data/lib/vagrant/action/primary_runner.rb +18 -0
  77. data/lib/vagrant/action/runner.rb +112 -0
  78. data/lib/vagrant/action/warden.rb +126 -0
  79. data/lib/vagrant/action.rb +88 -0
  80. data/lib/vagrant/alias.rb +59 -0
  81. data/lib/vagrant/batch_action.rb +181 -0
  82. data/lib/vagrant/box.rb +260 -0
  83. data/lib/vagrant/box_collection.rb +563 -0
  84. data/lib/vagrant/box_metadata.rb +275 -0
  85. data/lib/vagrant/bundler.rb +936 -0
  86. data/lib/vagrant/capability_host.rb +180 -0
  87. data/lib/vagrant/cli.rb +122 -0
  88. data/lib/vagrant/config/loader.rb +323 -0
  89. data/lib/vagrant/config/v1/dummy_config.rb +16 -0
  90. data/lib/vagrant/config/v1/loader.rb +108 -0
  91. data/lib/vagrant/config/v1/root.rb +63 -0
  92. data/lib/vagrant/config/v1.rb +12 -0
  93. data/lib/vagrant/config/v2/dummy_config.rb +60 -0
  94. data/lib/vagrant/config/v2/loader.rb +154 -0
  95. data/lib/vagrant/config/v2/root.rb +122 -0
  96. data/lib/vagrant/config/v2/util.rb +24 -0
  97. data/lib/vagrant/config/v2.rb +13 -0
  98. data/lib/vagrant/config/version_base.rb +83 -0
  99. data/lib/vagrant/config.rb +64 -0
  100. data/lib/vagrant/environment.rb +1230 -0
  101. data/lib/vagrant/errors.rb +1158 -0
  102. data/lib/vagrant/guest.rb +72 -0
  103. data/lib/vagrant/host.rb +19 -0
  104. data/lib/vagrant/machine.rb +672 -0
  105. data/lib/vagrant/machine_index.rb +527 -0
  106. data/lib/vagrant/machine_state.rb +54 -0
  107. data/lib/vagrant/patches/builder/mkmf.rb +116 -0
  108. data/lib/vagrant/patches/fake_ftp.rb +28 -0
  109. data/lib/vagrant/patches/log4r.rb +54 -0
  110. data/lib/vagrant/patches/net-ssh.rb +76 -0
  111. data/lib/vagrant/patches/rubygems.rb +23 -0
  112. data/lib/vagrant/patches/timeout_error.rb +5 -0
  113. data/lib/vagrant/plugin/manager.rb +406 -0
  114. data/lib/vagrant/plugin/state_file.rb +136 -0
  115. data/lib/vagrant/plugin/v1/command.rb +171 -0
  116. data/lib/vagrant/plugin/v1/communicator.rb +101 -0
  117. data/lib/vagrant/plugin/v1/config.rb +115 -0
  118. data/lib/vagrant/plugin/v1/errors.rb +18 -0
  119. data/lib/vagrant/plugin/v1/guest.rb +95 -0
  120. data/lib/vagrant/plugin/v1/host.rb +69 -0
  121. data/lib/vagrant/plugin/v1/manager.rb +134 -0
  122. data/lib/vagrant/plugin/v1/plugin.rb +231 -0
  123. data/lib/vagrant/plugin/v1/provider.rb +71 -0
  124. data/lib/vagrant/plugin/v1/provisioner.rb +53 -0
  125. data/lib/vagrant/plugin/v1.rb +25 -0
  126. data/lib/vagrant/plugin/v2/command.rb +309 -0
  127. data/lib/vagrant/plugin/v2/communicator.rb +133 -0
  128. data/lib/vagrant/plugin/v2/components.rb +94 -0
  129. data/lib/vagrant/plugin/v2/config.rb +167 -0
  130. data/lib/vagrant/plugin/v2/errors.rb +18 -0
  131. data/lib/vagrant/plugin/v2/guest.rb +26 -0
  132. data/lib/vagrant/plugin/v2/host.rb +22 -0
  133. data/lib/vagrant/plugin/v2/manager.rb +306 -0
  134. data/lib/vagrant/plugin/v2/plugin.rb +296 -0
  135. data/lib/vagrant/plugin/v2/provider.rb +118 -0
  136. data/lib/vagrant/plugin/v2/provisioner.rb +56 -0
  137. data/lib/vagrant/plugin/v2/push.rb +30 -0
  138. data/lib/vagrant/plugin/v2/synced_folder.rb +113 -0
  139. data/lib/vagrant/plugin/v2/trigger.rb +367 -0
  140. data/lib/vagrant/plugin/v2.rb +33 -0
  141. data/lib/vagrant/plugin.rb +11 -0
  142. data/lib/vagrant/registry.rb +113 -0
  143. data/lib/vagrant/shared_helpers.rb +238 -0
  144. data/lib/vagrant/ui.rb +449 -0
  145. data/lib/vagrant/util/ansi_escape_code_remover.rb +37 -0
  146. data/lib/vagrant/util/busy.rb +62 -0
  147. data/lib/vagrant/util/caps.rb +51 -0
  148. data/lib/vagrant/util/checkpoint_client.rb +186 -0
  149. data/lib/vagrant/util/command_deprecation.rb +59 -0
  150. data/lib/vagrant/util/counter.rb +27 -0
  151. data/lib/vagrant/util/credential_scrubber.rb +74 -0
  152. data/lib/vagrant/util/curl_helper.rb +104 -0
  153. data/lib/vagrant/util/deep_merge.rb +23 -0
  154. data/lib/vagrant/util/directory.rb +22 -0
  155. data/lib/vagrant/util/downloader.rb +278 -0
  156. data/lib/vagrant/util/env.rb +56 -0
  157. data/lib/vagrant/util/experimental.rb +79 -0
  158. data/lib/vagrant/util/file_checksum.rb +77 -0
  159. data/lib/vagrant/util/file_mode.rb +15 -0
  160. data/lib/vagrant/util/file_mutex.rb +50 -0
  161. data/lib/vagrant/util/guest_hosts.rb +71 -0
  162. data/lib/vagrant/util/guest_inspection.rb +118 -0
  163. data/lib/vagrant/util/guest_networks.rb +107 -0
  164. data/lib/vagrant/util/hash_with_indifferent_access.rb +66 -0
  165. data/lib/vagrant/util/install_cli_autocomplete.rb +121 -0
  166. data/lib/vagrant/util/io.rb +53 -0
  167. data/lib/vagrant/util/ipv4_interfaces.rb +18 -0
  168. data/lib/vagrant/util/is_port_open.rb +31 -0
  169. data/lib/vagrant/util/keypair.rb +293 -0
  170. data/lib/vagrant/util/line_buffer.rb +63 -0
  171. data/lib/vagrant/util/line_ending_helpers.rb +17 -0
  172. data/lib/vagrant/util/logging_formatter.rb +70 -0
  173. data/lib/vagrant/util/map_command_options.rb +36 -0
  174. data/lib/vagrant/util/mime.rb +95 -0
  175. data/lib/vagrant/util/network_ip.rb +27 -0
  176. data/lib/vagrant/util/numeric.rb +92 -0
  177. data/lib/vagrant/util/platform.rb +737 -0
  178. data/lib/vagrant/util/powershell.rb +316 -0
  179. data/lib/vagrant/util/presence.rb +48 -0
  180. data/lib/vagrant/util/retryable.rb +34 -0
  181. data/lib/vagrant/util/safe_chdir.rb +36 -0
  182. data/lib/vagrant/util/safe_env.rb +17 -0
  183. data/lib/vagrant/util/safe_exec.rb +78 -0
  184. data/lib/vagrant/util/safe_puts.rb +34 -0
  185. data/lib/vagrant/util/scoped_hash_override.rb +47 -0
  186. data/lib/vagrant/util/shell_quote.rb +18 -0
  187. data/lib/vagrant/util/silence_warnings.rb +17 -0
  188. data/lib/vagrant/util/ssh.rb +267 -0
  189. data/lib/vagrant/util/stacked_proc_runner.rb +38 -0
  190. data/lib/vagrant/util/string_block_editor.rb +80 -0
  191. data/lib/vagrant/util/subprocess.rb +365 -0
  192. data/lib/vagrant/util/template_renderer.rb +91 -0
  193. data/lib/vagrant/util/uploader.rb +109 -0
  194. data/lib/vagrant/util/which.rb +56 -0
  195. data/lib/vagrant/util/windows_path.rb +41 -0
  196. data/lib/vagrant/util.rb +63 -0
  197. data/lib/vagrant/vagrantfile.rb +320 -0
  198. data/lib/vagrant/version.rb +10 -0
  199. data/lib/vagrant.rb +380 -0
  200. data/plugins/README.md +11 -0
  201. data/plugins/commands/autocomplete/command/install.rb +52 -0
  202. data/plugins/commands/autocomplete/command/root.rb +69 -0
  203. data/plugins/commands/autocomplete/plugin.rb +21 -0
  204. data/plugins/commands/box/command/add.rb +111 -0
  205. data/plugins/commands/box/command/download_mixins.rb +32 -0
  206. data/plugins/commands/box/command/list.rb +82 -0
  207. data/plugins/commands/box/command/outdated.rb +109 -0
  208. data/plugins/commands/box/command/prune.rb +136 -0
  209. data/plugins/commands/box/command/remove.rb +83 -0
  210. data/plugins/commands/box/command/repackage.rb +46 -0
  211. data/plugins/commands/box/command/root.rb +98 -0
  212. data/plugins/commands/box/command/update.rb +206 -0
  213. data/plugins/commands/box/plugin.rb +18 -0
  214. data/plugins/commands/cap/command.rb +83 -0
  215. data/plugins/commands/cap/plugin.rb +20 -0
  216. data/plugins/commands/cloud/auth/login.rb +90 -0
  217. data/plugins/commands/cloud/auth/logout.rb +37 -0
  218. data/plugins/commands/cloud/auth/middleware/add_authentication.rb +116 -0
  219. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +68 -0
  220. data/plugins/commands/cloud/auth/plugin.rb +23 -0
  221. data/plugins/commands/cloud/auth/root.rb +77 -0
  222. data/plugins/commands/cloud/auth/whoami.rb +63 -0
  223. data/plugins/commands/cloud/box/create.rb +82 -0
  224. data/plugins/commands/cloud/box/delete.rb +74 -0
  225. data/plugins/commands/cloud/box/plugin.rb +22 -0
  226. data/plugins/commands/cloud/box/root.rb +81 -0
  227. data/plugins/commands/cloud/box/show.rb +133 -0
  228. data/plugins/commands/cloud/box/update.rb +82 -0
  229. data/plugins/commands/cloud/client/client.rb +257 -0
  230. data/plugins/commands/cloud/errors.rb +31 -0
  231. data/plugins/commands/cloud/list.rb +54 -0
  232. data/plugins/commands/cloud/locales/en.yml +197 -0
  233. data/plugins/commands/cloud/plugin.rb +48 -0
  234. data/plugins/commands/cloud/provider/create.rb +105 -0
  235. data/plugins/commands/cloud/provider/delete.rb +109 -0
  236. data/plugins/commands/cloud/provider/plugin.rb +22 -0
  237. data/plugins/commands/cloud/provider/root.rb +81 -0
  238. data/plugins/commands/cloud/provider/update.rb +102 -0
  239. data/plugins/commands/cloud/provider/upload.rb +100 -0
  240. data/plugins/commands/cloud/publish.rb +297 -0
  241. data/plugins/commands/cloud/root.rb +108 -0
  242. data/plugins/commands/cloud/search.rb +102 -0
  243. data/plugins/commands/cloud/util.rb +371 -0
  244. data/plugins/commands/cloud/version/create.rb +77 -0
  245. data/plugins/commands/cloud/version/delete.rb +78 -0
  246. data/plugins/commands/cloud/version/plugin.rb +22 -0
  247. data/plugins/commands/cloud/version/release.rb +78 -0
  248. data/plugins/commands/cloud/version/revoke.rb +79 -0
  249. data/plugins/commands/cloud/version/root.rb +85 -0
  250. data/plugins/commands/cloud/version/update.rb +76 -0
  251. data/plugins/commands/destroy/command.rb +79 -0
  252. data/plugins/commands/destroy/plugin.rb +21 -0
  253. data/plugins/commands/global-status/command.rb +114 -0
  254. data/plugins/commands/global-status/plugin.rb +21 -0
  255. data/plugins/commands/halt/command.rb +42 -0
  256. data/plugins/commands/halt/plugin.rb +21 -0
  257. data/plugins/commands/help/command.rb +19 -0
  258. data/plugins/commands/help/plugin.rb +20 -0
  259. data/plugins/commands/init/command.rb +110 -0
  260. data/plugins/commands/init/plugin.rb +21 -0
  261. data/plugins/commands/list-commands/command.rb +46 -0
  262. data/plugins/commands/list-commands/plugin.rb +21 -0
  263. data/plugins/commands/login/plugin.rb +20 -0
  264. data/plugins/commands/package/command.rb +104 -0
  265. data/plugins/commands/package/plugin.rb +21 -0
  266. data/plugins/commands/plugin/action/expunge_plugins.rb +77 -0
  267. data/plugins/commands/plugin/action/install_gem.rb +80 -0
  268. data/plugins/commands/plugin/action/license_plugin.rb +48 -0
  269. data/plugins/commands/plugin/action/list_plugins.rb +79 -0
  270. data/plugins/commands/plugin/action/plugin_exists_check.rb +28 -0
  271. data/plugins/commands/plugin/action/repair_plugins.rb +67 -0
  272. data/plugins/commands/plugin/action/uninstall_plugin.rb +28 -0
  273. data/plugins/commands/plugin/action/update_gems.rb +52 -0
  274. data/plugins/commands/plugin/action.rb +82 -0
  275. data/plugins/commands/plugin/command/base.rb +22 -0
  276. data/plugins/commands/plugin/command/expunge.rb +95 -0
  277. data/plugins/commands/plugin/command/install.rb +90 -0
  278. data/plugins/commands/plugin/command/license.rb +34 -0
  279. data/plugins/commands/plugin/command/list.rb +34 -0
  280. data/plugins/commands/plugin/command/mixin_install_opts.rb +34 -0
  281. data/plugins/commands/plugin/command/repair.rb +41 -0
  282. data/plugins/commands/plugin/command/root.rb +98 -0
  283. data/plugins/commands/plugin/command/uninstall.rb +38 -0
  284. data/plugins/commands/plugin/command/update.rb +42 -0
  285. data/plugins/commands/plugin/gem_helper.rb +89 -0
  286. data/plugins/commands/plugin/plugin.rb +23 -0
  287. data/plugins/commands/port/command.rb +91 -0
  288. data/plugins/commands/port/locales/en.yml +23 -0
  289. data/plugins/commands/port/plugin.rb +30 -0
  290. data/plugins/commands/powershell/command.rb +132 -0
  291. data/plugins/commands/powershell/errors.rb +29 -0
  292. data/plugins/commands/powershell/plugin.rb +34 -0
  293. data/plugins/commands/powershell/scripts/enable_psremoting.ps1 +63 -0
  294. data/plugins/commands/powershell/scripts/reset_trustedhosts.ps1 +15 -0
  295. data/plugins/commands/provider/command.rb +77 -0
  296. data/plugins/commands/provider/plugin.rb +21 -0
  297. data/plugins/commands/provision/command.rb +41 -0
  298. data/plugins/commands/provision/plugin.rb +21 -0
  299. data/plugins/commands/push/command.rb +78 -0
  300. data/plugins/commands/push/plugin.rb +20 -0
  301. data/plugins/commands/rdp/command.rb +114 -0
  302. data/plugins/commands/rdp/config.rb +29 -0
  303. data/plugins/commands/rdp/errors.rb +21 -0
  304. data/plugins/commands/rdp/plugin.rb +39 -0
  305. data/plugins/commands/reload/command.rb +67 -0
  306. data/plugins/commands/reload/plugin.rb +21 -0
  307. data/plugins/commands/resume/command.rb +46 -0
  308. data/plugins/commands/resume/plugin.rb +20 -0
  309. data/plugins/commands/snapshot/command/delete.rb +50 -0
  310. data/plugins/commands/snapshot/command/list.rb +50 -0
  311. data/plugins/commands/snapshot/command/pop.rb +52 -0
  312. data/plugins/commands/snapshot/command/push.rb +36 -0
  313. data/plugins/commands/snapshot/command/push_shared.rb +58 -0
  314. data/plugins/commands/snapshot/command/restore.rb +67 -0
  315. data/plugins/commands/snapshot/command/root.rb +95 -0
  316. data/plugins/commands/snapshot/command/save.rb +75 -0
  317. data/plugins/commands/snapshot/plugin.rb +18 -0
  318. data/plugins/commands/ssh/command.rb +80 -0
  319. data/plugins/commands/ssh/plugin.rb +20 -0
  320. data/plugins/commands/ssh_config/command.rb +78 -0
  321. data/plugins/commands/ssh_config/plugin.rb +21 -0
  322. data/plugins/commands/status/command.rb +59 -0
  323. data/plugins/commands/status/plugin.rb +21 -0
  324. data/plugins/commands/suspend/command.rb +49 -0
  325. data/plugins/commands/suspend/plugin.rb +21 -0
  326. data/plugins/commands/up/command.rb +194 -0
  327. data/plugins/commands/up/middleware/store_box_metadata.rb +40 -0
  328. data/plugins/commands/up/plugin.rb +25 -0
  329. data/plugins/commands/up/start_mixins.rb +58 -0
  330. data/plugins/commands/upload/command.rb +239 -0
  331. data/plugins/commands/upload/plugin.rb +20 -0
  332. data/plugins/commands/validate/command.rb +107 -0
  333. data/plugins/commands/validate/plugin.rb +20 -0
  334. data/plugins/commands/version/command.rb +60 -0
  335. data/plugins/commands/version/plugin.rb +21 -0
  336. data/plugins/commands/winrm/command.rb +71 -0
  337. data/plugins/commands/winrm/plugin.rb +20 -0
  338. data/plugins/commands/winrm_config/command.rb +129 -0
  339. data/plugins/commands/winrm_config/plugin.rb +20 -0
  340. data/plugins/communicators/ssh/communicator.rb +898 -0
  341. data/plugins/communicators/ssh/plugin.rb +22 -0
  342. data/plugins/communicators/winrm/command_filter.rb +49 -0
  343. data/plugins/communicators/winrm/command_filters/cat.rb +26 -0
  344. data/plugins/communicators/winrm/command_filters/chmod.rb +20 -0
  345. data/plugins/communicators/winrm/command_filters/chown.rb +20 -0
  346. data/plugins/communicators/winrm/command_filters/grep.rb +26 -0
  347. data/plugins/communicators/winrm/command_filters/mkdir.rb +30 -0
  348. data/plugins/communicators/winrm/command_filters/rm.rb +50 -0
  349. data/plugins/communicators/winrm/command_filters/test.rb +68 -0
  350. data/plugins/communicators/winrm/command_filters/uname.rb +30 -0
  351. data/plugins/communicators/winrm/command_filters/which.rb +27 -0
  352. data/plugins/communicators/winrm/communicator.rb +230 -0
  353. data/plugins/communicators/winrm/config.rb +76 -0
  354. data/plugins/communicators/winrm/errors.rb +72 -0
  355. data/plugins/communicators/winrm/helper.rb +91 -0
  356. data/plugins/communicators/winrm/plugin.rb +69 -0
  357. data/plugins/communicators/winrm/shell.rb +267 -0
  358. data/plugins/communicators/winssh/communicator.rb +252 -0
  359. data/plugins/communicators/winssh/config.rb +37 -0
  360. data/plugins/communicators/winssh/plugin.rb +24 -0
  361. data/plugins/guests/alma/cap/flavor.rb +26 -0
  362. data/plugins/guests/alma/guest.rb +13 -0
  363. data/plugins/guests/alma/plugin.rb +23 -0
  364. data/plugins/guests/alpine/cap/change_host_name.rb +85 -0
  365. data/plugins/guests/alpine/cap/configure_networks.rb +67 -0
  366. data/plugins/guests/alpine/cap/halt.rb +24 -0
  367. data/plugins/guests/alpine/cap/nfs_client.rb +17 -0
  368. data/plugins/guests/alpine/cap/rsync.rb +20 -0
  369. data/plugins/guests/alpine/cap/smb.rb +16 -0
  370. data/plugins/guests/alpine/guest.rb +14 -0
  371. data/plugins/guests/alpine/plugin.rb +69 -0
  372. data/plugins/guests/alt/cap/change_host_name.rb +55 -0
  373. data/plugins/guests/alt/cap/configure_networks.rb +132 -0
  374. data/plugins/guests/alt/cap/flavor.rb +66 -0
  375. data/plugins/guests/alt/cap/network_scripts_dir.rb +14 -0
  376. data/plugins/guests/alt/cap/rsync.rb +16 -0
  377. data/plugins/guests/alt/guest.rb +12 -0
  378. data/plugins/guests/alt/plugin.rb +43 -0
  379. data/plugins/guests/amazon/cap/configure_networks.rb +26 -0
  380. data/plugins/guests/amazon/cap/flavor.rb +17 -0
  381. data/plugins/guests/amazon/guest.rb +12 -0
  382. data/plugins/guests/amazon/plugin.rb +28 -0
  383. data/plugins/guests/arch/cap/change_host_name.rb +18 -0
  384. data/plugins/guests/arch/cap/configure_networks.rb +81 -0
  385. data/plugins/guests/arch/cap/nfs.rb +36 -0
  386. data/plugins/guests/arch/cap/rsync.rb +19 -0
  387. data/plugins/guests/arch/cap/smb.rb +20 -0
  388. data/plugins/guests/arch/guest.rb +14 -0
  389. data/plugins/guests/arch/plugin.rb +53 -0
  390. data/plugins/guests/atomic/cap/change_host_name.rb +18 -0
  391. data/plugins/guests/atomic/cap/docker.rb +14 -0
  392. data/plugins/guests/atomic/guest.rb +14 -0
  393. data/plugins/guests/atomic/plugin.rb +28 -0
  394. data/plugins/guests/bsd/cap/file_system.rb +80 -0
  395. data/plugins/guests/bsd/cap/halt.rb +19 -0
  396. data/plugins/guests/bsd/cap/mount_virtualbox_shared_folder.rb +19 -0
  397. data/plugins/guests/bsd/cap/nfs.rb +50 -0
  398. data/plugins/guests/bsd/cap/public_key.rb +69 -0
  399. data/plugins/guests/bsd/guest.rb +12 -0
  400. data/plugins/guests/bsd/plugin.rb +58 -0
  401. data/plugins/guests/centos/cap/flavor.rb +32 -0
  402. data/plugins/guests/centos/guest.rb +14 -0
  403. data/plugins/guests/centos/plugin.rb +23 -0
  404. data/plugins/guests/coreos/cap/change_host_name.rb +41 -0
  405. data/plugins/guests/coreos/cap/configure_networks.rb +138 -0
  406. data/plugins/guests/coreos/cap/docker.rb +14 -0
  407. data/plugins/guests/coreos/guest.rb +14 -0
  408. data/plugins/guests/coreos/plugin.rb +33 -0
  409. data/plugins/guests/darwin/cap/change_host_name.rb +43 -0
  410. data/plugins/guests/darwin/cap/choose_addressable_ip_addr.rb +23 -0
  411. data/plugins/guests/darwin/cap/configure_networks.rb +126 -0
  412. data/plugins/guests/darwin/cap/darwin_version.rb +43 -0
  413. data/plugins/guests/darwin/cap/halt.rb +21 -0
  414. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +46 -0
  415. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +135 -0
  416. data/plugins/guests/darwin/cap/rsync.rb +14 -0
  417. data/plugins/guests/darwin/cap/shell_expand_guest_path.rb +30 -0
  418. data/plugins/guests/darwin/cap/verify_vmware_hgfs.rb +15 -0
  419. data/plugins/guests/darwin/guest.rb +18 -0
  420. data/plugins/guests/darwin/plugin.rb +93 -0
  421. data/plugins/guests/debian/cap/change_host_name.rb +110 -0
  422. data/plugins/guests/debian/cap/configure_networks.rb +205 -0
  423. data/plugins/guests/debian/cap/nfs.rb +19 -0
  424. data/plugins/guests/debian/cap/rsync.rb +18 -0
  425. data/plugins/guests/debian/cap/smb.rb +20 -0
  426. data/plugins/guests/debian/guest.rb +13 -0
  427. data/plugins/guests/debian/plugin.rb +43 -0
  428. data/plugins/guests/dragonflybsd/guest.rb +12 -0
  429. data/plugins/guests/dragonflybsd/plugin.rb +18 -0
  430. data/plugins/guests/elementary/guest.rb +13 -0
  431. data/plugins/guests/elementary/plugin.rb +18 -0
  432. data/plugins/guests/esxi/cap/change_host_name.rb +16 -0
  433. data/plugins/guests/esxi/cap/configure_networks.rb +41 -0
  434. data/plugins/guests/esxi/cap/halt.rb +19 -0
  435. data/plugins/guests/esxi/cap/mount_nfs_folder.rb +43 -0
  436. data/plugins/guests/esxi/cap/public_key.rb +68 -0
  437. data/plugins/guests/esxi/guest.rb +14 -0
  438. data/plugins/guests/esxi/plugin.rb +49 -0
  439. data/plugins/guests/fedora/cap/flavor.rb +26 -0
  440. data/plugins/guests/fedora/guest.rb +14 -0
  441. data/plugins/guests/fedora/plugin.rb +23 -0
  442. data/plugins/guests/freebsd/cap/change_host_name.rb +34 -0
  443. data/plugins/guests/freebsd/cap/configure_networks.rb +70 -0
  444. data/plugins/guests/freebsd/cap/mount_virtualbox_shared_folder.rb +79 -0
  445. data/plugins/guests/freebsd/cap/rsync.rb +18 -0
  446. data/plugins/guests/freebsd/cap/shell_expand_guest_path.rb +31 -0
  447. data/plugins/guests/freebsd/guest.rb +17 -0
  448. data/plugins/guests/freebsd/plugin.rb +68 -0
  449. data/plugins/guests/funtoo/cap/configure_networks.rb +50 -0
  450. data/plugins/guests/funtoo/guest.rb +12 -0
  451. data/plugins/guests/funtoo/plugin.rb +23 -0
  452. data/plugins/guests/gentoo/cap/change_host_name.rb +27 -0
  453. data/plugins/guests/gentoo/cap/configure_networks.rb +92 -0
  454. data/plugins/guests/gentoo/guest.rb +12 -0
  455. data/plugins/guests/gentoo/plugin.rb +28 -0
  456. data/plugins/guests/haiku/cap/change_host_name.rb +36 -0
  457. data/plugins/guests/haiku/cap/halt.rb +19 -0
  458. data/plugins/guests/haiku/cap/insert_public_key.rb +24 -0
  459. data/plugins/guests/haiku/cap/remove_public_key.rb +24 -0
  460. data/plugins/guests/haiku/cap/rsync.rb +22 -0
  461. data/plugins/guests/haiku/guest.rb +14 -0
  462. data/plugins/guests/haiku/plugin.rb +53 -0
  463. data/plugins/guests/kali/guest.rb +13 -0
  464. data/plugins/guests/kali/plugin.rb +18 -0
  465. data/plugins/guests/linux/cap/change_host_name.rb +49 -0
  466. data/plugins/guests/linux/cap/choose_addressable_ip_addr.rb +22 -0
  467. data/plugins/guests/linux/cap/file_system.rb +82 -0
  468. data/plugins/guests/linux/cap/halt.rb +27 -0
  469. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +95 -0
  470. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +78 -0
  471. data/plugins/guests/linux/cap/network_interfaces.rb +89 -0
  472. data/plugins/guests/linux/cap/nfs.rb +51 -0
  473. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +77 -0
  474. data/plugins/guests/linux/cap/port.rb +14 -0
  475. data/plugins/guests/linux/cap/public_key.rb +65 -0
  476. data/plugins/guests/linux/cap/read_ip_address.rb +28 -0
  477. data/plugins/guests/linux/cap/reboot.rb +74 -0
  478. data/plugins/guests/linux/cap/rsync.rb +14 -0
  479. data/plugins/guests/linux/cap/shell_expand_guest_path.rb +35 -0
  480. data/plugins/guests/linux/guest.rb +26 -0
  481. data/plugins/guests/linux/plugin.rb +139 -0
  482. data/plugins/guests/mint/guest.rb +13 -0
  483. data/plugins/guests/mint/plugin.rb +18 -0
  484. data/plugins/guests/netbsd/cap/change_host_name.rb +20 -0
  485. data/plugins/guests/netbsd/cap/configure_networks.rb +56 -0
  486. data/plugins/guests/netbsd/cap/rsync.rb +23 -0
  487. data/plugins/guests/netbsd/cap/shell_expand_guest_path.rb +30 -0
  488. data/plugins/guests/netbsd/guest.rb +14 -0
  489. data/plugins/guests/netbsd/plugin.rb +58 -0
  490. data/plugins/guests/nixos/cap/change_host_name.rb +47 -0
  491. data/plugins/guests/nixos/cap/configure_networks.rb +135 -0
  492. data/plugins/guests/nixos/cap/nfs_client.rb +14 -0
  493. data/plugins/guests/nixos/guest.rb +20 -0
  494. data/plugins/guests/nixos/plugin.rb +33 -0
  495. data/plugins/guests/omnios/cap/change_host_name.rb +23 -0
  496. data/plugins/guests/omnios/cap/mount_nfs_folder.rb +24 -0
  497. data/plugins/guests/omnios/cap/rsync.rb +14 -0
  498. data/plugins/guests/omnios/guest.rb +12 -0
  499. data/plugins/guests/omnios/plugin.rb +33 -0
  500. data/plugins/guests/openbsd/cap/change_host_name.rb +35 -0
  501. data/plugins/guests/openbsd/cap/configure_networks.rb +49 -0
  502. data/plugins/guests/openbsd/cap/halt.rb +22 -0
  503. data/plugins/guests/openbsd/cap/rsync.rb +32 -0
  504. data/plugins/guests/openbsd/cap/shell_expand_guest_path.rb +30 -0
  505. data/plugins/guests/openbsd/guest.rb +14 -0
  506. data/plugins/guests/openbsd/plugin.rb +63 -0
  507. data/plugins/guests/openwrt/cap/change_host_name.rb +22 -0
  508. data/plugins/guests/openwrt/cap/halt.rb +19 -0
  509. data/plugins/guests/openwrt/cap/insert_public_key.rb +23 -0
  510. data/plugins/guests/openwrt/cap/remove_public_key.rb +25 -0
  511. data/plugins/guests/openwrt/cap/rsync.rb +38 -0
  512. data/plugins/guests/openwrt/guest.rb +26 -0
  513. data/plugins/guests/openwrt/plugin.rb +64 -0
  514. data/plugins/guests/photon/cap/change_host_name.rb +22 -0
  515. data/plugins/guests/photon/cap/configure_networks.rb +33 -0
  516. data/plugins/guests/photon/cap/docker.rb +14 -0
  517. data/plugins/guests/photon/guest.rb +12 -0
  518. data/plugins/guests/photon/plugin.rb +33 -0
  519. data/plugins/guests/pld/cap/change_host_name.rb +26 -0
  520. data/plugins/guests/pld/cap/flavor.rb +14 -0
  521. data/plugins/guests/pld/cap/network_scripts_dir.rb +14 -0
  522. data/plugins/guests/pld/guest.rb +12 -0
  523. data/plugins/guests/pld/plugin.rb +33 -0
  524. data/plugins/guests/redhat/cap/change_host_name.rb +59 -0
  525. data/plugins/guests/redhat/cap/configure_networks.rb +113 -0
  526. data/plugins/guests/redhat/cap/flavor.rb +32 -0
  527. data/plugins/guests/redhat/cap/network_scripts_dir.rb +18 -0
  528. data/plugins/guests/redhat/cap/nfs_client.rb +33 -0
  529. data/plugins/guests/redhat/cap/rsync.rb +20 -0
  530. data/plugins/guests/redhat/cap/smb.rb +23 -0
  531. data/plugins/guests/redhat/guest.rb +12 -0
  532. data/plugins/guests/redhat/plugin.rb +53 -0
  533. data/plugins/guests/rocky/cap/flavor.rb +26 -0
  534. data/plugins/guests/rocky/guest.rb +13 -0
  535. data/plugins/guests/rocky/plugin.rb +23 -0
  536. data/plugins/guests/slackware/cap/change_host_name.rb +24 -0
  537. data/plugins/guests/slackware/cap/configure_networks.rb +51 -0
  538. data/plugins/guests/slackware/guest.rb +12 -0
  539. data/plugins/guests/slackware/plugin.rb +28 -0
  540. data/plugins/guests/smartos/cap/change_host_name.rb +29 -0
  541. data/plugins/guests/smartos/cap/configure_networks.rb +30 -0
  542. data/plugins/guests/smartos/cap/halt.rb +25 -0
  543. data/plugins/guests/smartos/cap/insert_public_key.rb +31 -0
  544. data/plugins/guests/smartos/cap/mount_nfs.rb +31 -0
  545. data/plugins/guests/smartos/cap/remove_public_key.rb +28 -0
  546. data/plugins/guests/smartos/cap/rsync.rb +36 -0
  547. data/plugins/guests/smartos/config.rb +18 -0
  548. data/plugins/guests/smartos/guest.rb +14 -0
  549. data/plugins/guests/smartos/plugin.rb +74 -0
  550. data/plugins/guests/solaris/cap/change_host_name.rb +20 -0
  551. data/plugins/guests/solaris/cap/configure_networks.rb +28 -0
  552. data/plugins/guests/solaris/cap/file_system.rb +80 -0
  553. data/plugins/guests/solaris/cap/halt.rb +25 -0
  554. data/plugins/guests/solaris/cap/insert_public_key.rb +25 -0
  555. data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +44 -0
  556. data/plugins/guests/solaris/cap/remove_public_key.rb +25 -0
  557. data/plugins/guests/solaris/cap/rsync.rb +36 -0
  558. data/plugins/guests/solaris/config.rb +34 -0
  559. data/plugins/guests/solaris/guest.rb +17 -0
  560. data/plugins/guests/solaris/plugin.rb +88 -0
  561. data/plugins/guests/solaris11/cap/change_host_name.rb +26 -0
  562. data/plugins/guests/solaris11/cap/configure_networks.rb +37 -0
  563. data/plugins/guests/solaris11/config.rb +37 -0
  564. data/plugins/guests/solaris11/guest.rb +22 -0
  565. data/plugins/guests/solaris11/plugin.rb +42 -0
  566. data/plugins/guests/suse/cap/change_host_name.rb +48 -0
  567. data/plugins/guests/suse/cap/configure_networks.rb +53 -0
  568. data/plugins/guests/suse/cap/halt.rb +23 -0
  569. data/plugins/guests/suse/cap/network_scripts_dir.rb +14 -0
  570. data/plugins/guests/suse/cap/nfs_client.rb +18 -0
  571. data/plugins/guests/suse/cap/rsync.rb +18 -0
  572. data/plugins/guests/suse/guest.rb +12 -0
  573. data/plugins/guests/suse/plugin.rb +53 -0
  574. data/plugins/guests/tinycore/cap/change_host_name.rb +16 -0
  575. data/plugins/guests/tinycore/cap/configure_networks.rb +29 -0
  576. data/plugins/guests/tinycore/cap/halt.rb +19 -0
  577. data/plugins/guests/tinycore/cap/mount_nfs.rb +44 -0
  578. data/plugins/guests/tinycore/cap/rsync.rb +20 -0
  579. data/plugins/guests/tinycore/guest.rb +13 -0
  580. data/plugins/guests/tinycore/plugin.rb +43 -0
  581. data/plugins/guests/trisquel/guest.rb +12 -0
  582. data/plugins/guests/trisquel/plugin.rb +18 -0
  583. data/plugins/guests/ubuntu/guest.rb +13 -0
  584. data/plugins/guests/ubuntu/plugin.rb +18 -0
  585. data/plugins/guests/windows/cap/change_host_name.rb +36 -0
  586. data/plugins/guests/windows/cap/choose_addressable_ip_addr.rb +23 -0
  587. data/plugins/guests/windows/cap/configure_networks.rb +83 -0
  588. data/plugins/guests/windows/cap/file_system.rb +68 -0
  589. data/plugins/guests/windows/cap/halt.rb +19 -0
  590. data/plugins/guests/windows/cap/mount_shared_folder.rb +60 -0
  591. data/plugins/guests/windows/cap/public_key.rb +87 -0
  592. data/plugins/guests/windows/cap/reboot.rb +63 -0
  593. data/plugins/guests/windows/cap/rsync.rb +29 -0
  594. data/plugins/guests/windows/config.rb +26 -0
  595. data/plugins/guests/windows/errors.rb +25 -0
  596. data/plugins/guests/windows/guest.rb +13 -0
  597. data/plugins/guests/windows/guest_network.rb +128 -0
  598. data/plugins/guests/windows/plugin.rb +116 -0
  599. data/plugins/guests/windows/scripts/mount_volume.ps1.erb +48 -0
  600. data/plugins/guests/windows/scripts/reboot_detect.ps1 +50 -0
  601. data/plugins/guests/windows/scripts/set_work_network.ps1 +9 -0
  602. data/plugins/guests/windows/scripts/winrs_v3_get_adapters.ps1 +14 -0
  603. data/plugins/hosts/alt/cap/nfs.rb +46 -0
  604. data/plugins/hosts/alt/host.rb +14 -0
  605. data/plugins/hosts/alt/plugin.rb +35 -0
  606. data/plugins/hosts/arch/cap/nfs.rb +22 -0
  607. data/plugins/hosts/arch/host.rb +14 -0
  608. data/plugins/hosts/arch/plugin.rb +35 -0
  609. data/plugins/hosts/bsd/cap/nfs.rb +218 -0
  610. data/plugins/hosts/bsd/cap/path.rb +14 -0
  611. data/plugins/hosts/bsd/cap/ssh.rb +19 -0
  612. data/plugins/hosts/bsd/host.rb +15 -0
  613. data/plugins/hosts/bsd/plugin.rb +63 -0
  614. data/plugins/hosts/darwin/cap/configured_ip_addresses.rb +21 -0
  615. data/plugins/hosts/darwin/cap/fs_iso.rb +52 -0
  616. data/plugins/hosts/darwin/cap/nfs.rb +14 -0
  617. data/plugins/hosts/darwin/cap/path.rb +66 -0
  618. data/plugins/hosts/darwin/cap/provider_install_virtualbox.rb +64 -0
  619. data/plugins/hosts/darwin/cap/rdp.rb +64 -0
  620. data/plugins/hosts/darwin/cap/smb.rb +128 -0
  621. data/plugins/hosts/darwin/cap/version.rb +26 -0
  622. data/plugins/hosts/darwin/host.rb +14 -0
  623. data/plugins/hosts/darwin/plugin.rb +83 -0
  624. data/plugins/hosts/darwin/scripts/install_virtualbox.sh +18 -0
  625. data/plugins/hosts/freebsd/cap/nfs.rb +34 -0
  626. data/plugins/hosts/freebsd/host.rb +15 -0
  627. data/plugins/hosts/freebsd/plugin.rb +34 -0
  628. data/plugins/hosts/gentoo/cap/nfs.rb +42 -0
  629. data/plugins/hosts/gentoo/host.rb +14 -0
  630. data/plugins/hosts/gentoo/plugin.rb +31 -0
  631. data/plugins/hosts/linux/cap/fs_iso.rb +52 -0
  632. data/plugins/hosts/linux/cap/nfs.rb +296 -0
  633. data/plugins/hosts/linux/cap/rdp.rb +59 -0
  634. data/plugins/hosts/linux/cap/ssh.rb +19 -0
  635. data/plugins/hosts/linux/host.rb +15 -0
  636. data/plugins/hosts/linux/plugin.rb +70 -0
  637. data/plugins/hosts/null/host.rb +15 -0
  638. data/plugins/hosts/null/plugin.rb +18 -0
  639. data/plugins/hosts/redhat/cap/nfs.rb +58 -0
  640. data/plugins/hosts/redhat/host.rb +31 -0
  641. data/plugins/hosts/redhat/plugin.rb +30 -0
  642. data/plugins/hosts/slackware/cap/nfs.rb +18 -0
  643. data/plugins/hosts/slackware/host.rb +15 -0
  644. data/plugins/hosts/slackware/plugin.rb +30 -0
  645. data/plugins/hosts/suse/cap/nfs.rb +22 -0
  646. data/plugins/hosts/suse/host.rb +30 -0
  647. data/plugins/hosts/suse/plugin.rb +33 -0
  648. data/plugins/hosts/void/cap/nfs.rb +27 -0
  649. data/plugins/hosts/void/host.rb +23 -0
  650. data/plugins/hosts/void/plugin.rb +33 -0
  651. data/plugins/hosts/windows/cap/configured_ip_addresses.rb +32 -0
  652. data/plugins/hosts/windows/cap/fs_iso.rb +51 -0
  653. data/plugins/hosts/windows/cap/nfs.rb +14 -0
  654. data/plugins/hosts/windows/cap/provider_install_virtualbox.rb +65 -0
  655. data/plugins/hosts/windows/cap/ps.rb +50 -0
  656. data/plugins/hosts/windows/cap/rdp.rb +33 -0
  657. data/plugins/hosts/windows/cap/smb.rb +203 -0
  658. data/plugins/hosts/windows/cap/ssh.rb +29 -0
  659. data/plugins/hosts/windows/host.rb +26 -0
  660. data/plugins/hosts/windows/plugin.rb +83 -0
  661. data/plugins/hosts/windows/scripts/check_credentials.ps1 +37 -0
  662. data/plugins/hosts/windows/scripts/host_info.ps1 +24 -0
  663. data/plugins/hosts/windows/scripts/install_virtualbox.ps1 +40 -0
  664. data/plugins/hosts/windows/scripts/set_share.ps1 +40 -0
  665. data/plugins/hosts/windows/scripts/set_ssh_key_permissions.ps1 +20 -0
  666. data/plugins/hosts/windows/scripts/unset_share.ps1 +13 -0
  667. data/plugins/hosts/windows/scripts/utils/VagrantSSH/VagrantSSH.psm1 +29 -0
  668. data/plugins/kernel_v1/config/nfs.rb +23 -0
  669. data/plugins/kernel_v1/config/package.rb +20 -0
  670. data/plugins/kernel_v1/config/ssh.rb +50 -0
  671. data/plugins/kernel_v1/config/vagrant.rb +34 -0
  672. data/plugins/kernel_v1/config/vm.rb +191 -0
  673. data/plugins/kernel_v1/plugin.rb +47 -0
  674. data/plugins/kernel_v2/config/cloud_init.rb +136 -0
  675. data/plugins/kernel_v2/config/disk.rb +224 -0
  676. data/plugins/kernel_v2/config/package.rb +24 -0
  677. data/plugins/kernel_v2/config/push.rb +155 -0
  678. data/plugins/kernel_v2/config/ssh.rb +93 -0
  679. data/plugins/kernel_v2/config/ssh_connect.rb +194 -0
  680. data/plugins/kernel_v2/config/trigger.rb +214 -0
  681. data/plugins/kernel_v2/config/vagrant.rb +99 -0
  682. data/plugins/kernel_v2/config/vm.rb +1062 -0
  683. data/plugins/kernel_v2/config/vm_provisioner.rb +202 -0
  684. data/plugins/kernel_v2/config/vm_subvm.rb +33 -0
  685. data/plugins/kernel_v2/config/vm_trigger.rb +297 -0
  686. data/plugins/kernel_v2/plugin.rb +71 -0
  687. data/plugins/providers/docker/action/build.rb +99 -0
  688. data/plugins/providers/docker/action/compare_synced_folders.rb +65 -0
  689. data/plugins/providers/docker/action/connect_networks.rb +80 -0
  690. data/plugins/providers/docker/action/create.rb +162 -0
  691. data/plugins/providers/docker/action/destroy.rb +34 -0
  692. data/plugins/providers/docker/action/destroy_build_image.rb +51 -0
  693. data/plugins/providers/docker/action/destroy_network.rb +53 -0
  694. data/plugins/providers/docker/action/forwarded_ports.rb +36 -0
  695. data/plugins/providers/docker/action/has_ssh.rb +21 -0
  696. data/plugins/providers/docker/action/host_machine.rb +75 -0
  697. data/plugins/providers/docker/action/host_machine_build_dir.rb +48 -0
  698. data/plugins/providers/docker/action/host_machine_port_checker.rb +34 -0
  699. data/plugins/providers/docker/action/host_machine_port_warning.rb +40 -0
  700. data/plugins/providers/docker/action/host_machine_required.rb +20 -0
  701. data/plugins/providers/docker/action/host_machine_sync_folders.rb +175 -0
  702. data/plugins/providers/docker/action/host_machine_sync_folders_disable.rb +91 -0
  703. data/plugins/providers/docker/action/init_state.rb +23 -0
  704. data/plugins/providers/docker/action/is_build.rb +19 -0
  705. data/plugins/providers/docker/action/is_host_machine_created.rb +32 -0
  706. data/plugins/providers/docker/action/login.rb +51 -0
  707. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +64 -0
  708. data/plugins/providers/docker/action/prepare_networks.rb +372 -0
  709. data/plugins/providers/docker/action/prepare_nfs_settings.rb +60 -0
  710. data/plugins/providers/docker/action/prepare_nfs_valid_ids.rb +22 -0
  711. data/plugins/providers/docker/action/prepare_ssh.rb +48 -0
  712. data/plugins/providers/docker/action/pull.rb +30 -0
  713. data/plugins/providers/docker/action/start.rb +24 -0
  714. data/plugins/providers/docker/action/stop.rb +24 -0
  715. data/plugins/providers/docker/action/wait_for_running.rb +70 -0
  716. data/plugins/providers/docker/action.rb +319 -0
  717. data/plugins/providers/docker/cap/has_communicator.rb +14 -0
  718. data/plugins/providers/docker/cap/proxy_machine.rb +15 -0
  719. data/plugins/providers/docker/cap/public_address.rb +26 -0
  720. data/plugins/providers/docker/command/exec.rb +112 -0
  721. data/plugins/providers/docker/command/logs.rb +111 -0
  722. data/plugins/providers/docker/command/run.rb +76 -0
  723. data/plugins/providers/docker/communicator.rb +199 -0
  724. data/plugins/providers/docker/config.rb +362 -0
  725. data/plugins/providers/docker/driver/compose.rb +315 -0
  726. data/plugins/providers/docker/driver.rb +416 -0
  727. data/plugins/providers/docker/errors.rb +108 -0
  728. data/plugins/providers/docker/executor/local.rb +48 -0
  729. data/plugins/providers/docker/executor/vagrant.rb +88 -0
  730. data/plugins/providers/docker/hostmachine/Vagrantfile +3 -0
  731. data/plugins/providers/docker/plugin.rb +89 -0
  732. data/plugins/providers/docker/provider.rb +215 -0
  733. data/plugins/providers/docker/synced_folder.rb +35 -0
  734. data/plugins/providers/hyperv/action/check_access.rb +27 -0
  735. data/plugins/providers/hyperv/action/check_enabled.rb +25 -0
  736. data/plugins/providers/hyperv/action/configure.rb +115 -0
  737. data/plugins/providers/hyperv/action/delete_vm.rb +28 -0
  738. data/plugins/providers/hyperv/action/export.rb +45 -0
  739. data/plugins/providers/hyperv/action/import.rb +86 -0
  740. data/plugins/providers/hyperv/action/is_windows.rb +19 -0
  741. data/plugins/providers/hyperv/action/message_will_not_destroy.rb +20 -0
  742. data/plugins/providers/hyperv/action/net_set_mac.rb +23 -0
  743. data/plugins/providers/hyperv/action/net_set_vlan.rb +23 -0
  744. data/plugins/providers/hyperv/action/package.rb +19 -0
  745. data/plugins/providers/hyperv/action/package_metadata_json.rb +37 -0
  746. data/plugins/providers/hyperv/action/package_setup_files.rb +19 -0
  747. data/plugins/providers/hyperv/action/package_setup_folders.rb +21 -0
  748. data/plugins/providers/hyperv/action/package_vagrantfile.rb +37 -0
  749. data/plugins/providers/hyperv/action/read_guest_ip.rb +45 -0
  750. data/plugins/providers/hyperv/action/read_state.rb +33 -0
  751. data/plugins/providers/hyperv/action/resume_vm.rb +20 -0
  752. data/plugins/providers/hyperv/action/set_name.rb +46 -0
  753. data/plugins/providers/hyperv/action/snapshot_delete.rb +30 -0
  754. data/plugins/providers/hyperv/action/snapshot_restore.rb +26 -0
  755. data/plugins/providers/hyperv/action/snapshot_save.rb +30 -0
  756. data/plugins/providers/hyperv/action/start_instance.rb +20 -0
  757. data/plugins/providers/hyperv/action/stop_instance.rb +20 -0
  758. data/plugins/providers/hyperv/action/suspend_vm.rb +20 -0
  759. data/plugins/providers/hyperv/action/wait_for_ip_address.rb +62 -0
  760. data/plugins/providers/hyperv/action.rb +326 -0
  761. data/plugins/providers/hyperv/cap/cleanup_disks.rb +92 -0
  762. data/plugins/providers/hyperv/cap/configure_disks.rb +248 -0
  763. data/plugins/providers/hyperv/cap/public_address.rb +18 -0
  764. data/plugins/providers/hyperv/cap/snapshot_list.rb +14 -0
  765. data/plugins/providers/hyperv/cap/validate_disk_ext.rb +37 -0
  766. data/plugins/providers/hyperv/config.rb +148 -0
  767. data/plugins/providers/hyperv/driver.rb +368 -0
  768. data/plugins/providers/hyperv/errors.rb +49 -0
  769. data/plugins/providers/hyperv/plugin.rb +74 -0
  770. data/plugins/providers/hyperv/provider.rb +116 -0
  771. data/plugins/providers/hyperv/scripts/add_dvd.ps1 +18 -0
  772. data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +31 -0
  773. data/plugins/providers/hyperv/scripts/check_hyperv.ps1 +11 -0
  774. data/plugins/providers/hyperv/scripts/check_hyperv_access.ps1 +17 -0
  775. data/plugins/providers/hyperv/scripts/clone_vhd.ps1 +21 -0
  776. data/plugins/providers/hyperv/scripts/configure_vm.ps1 +130 -0
  777. data/plugins/providers/hyperv/scripts/create_snapshot.ps1 +27 -0
  778. data/plugins/providers/hyperv/scripts/delete_snapshot.ps1 +19 -0
  779. data/plugins/providers/hyperv/scripts/delete_vm.ps1 +22 -0
  780. data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +16 -0
  781. data/plugins/providers/hyperv/scripts/export_vm.ps1 +32 -0
  782. data/plugins/providers/hyperv/scripts/file_sync.ps1 +123 -0
  783. data/plugins/providers/hyperv/scripts/get_network_config.ps1 +68 -0
  784. data/plugins/providers/hyperv/scripts/get_network_mac.ps1 +35 -0
  785. data/plugins/providers/hyperv/scripts/get_scsi_controller.ps1 +19 -0
  786. data/plugins/providers/hyperv/scripts/get_switches.ps1 +13 -0
  787. data/plugins/providers/hyperv/scripts/get_vhd.ps1 +19 -0
  788. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +52 -0
  789. data/plugins/providers/hyperv/scripts/has_vmcx_support.ps1 +12 -0
  790. data/plugins/providers/hyperv/scripts/import_vm.ps1 +40 -0
  791. data/plugins/providers/hyperv/scripts/list_hdds.ps1 +20 -0
  792. data/plugins/providers/hyperv/scripts/list_snapshots.ps1 +22 -0
  793. data/plugins/providers/hyperv/scripts/new_vhd.ps1 +34 -0
  794. data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +28 -0
  795. data/plugins/providers/hyperv/scripts/remove_dvd.ps1 +21 -0
  796. data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +21 -0
  797. data/plugins/providers/hyperv/scripts/restore_snapshot.ps1 +20 -0
  798. data/plugins/providers/hyperv/scripts/resume_vm.ps1 +19 -0
  799. data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +36 -0
  800. data/plugins/providers/hyperv/scripts/set_name.ps1 +27 -0
  801. data/plugins/providers/hyperv/scripts/set_network_mac.ps1 +21 -0
  802. data/plugins/providers/hyperv/scripts/set_network_vlan.ps1 +19 -0
  803. data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +30 -0
  804. data/plugins/providers/hyperv/scripts/start_vm.ps1 +29 -0
  805. data/plugins/providers/hyperv/scripts/stop_vm.ps1 +20 -0
  806. data/plugins/providers/hyperv/scripts/suspend_vm.ps1 +19 -0
  807. data/plugins/providers/hyperv/scripts/utils/VagrantMessages/VagrantMessages.psm1 +27 -0
  808. data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +776 -0
  809. data/plugins/providers/virtualbox/action/boot.rb +26 -0
  810. data/plugins/providers/virtualbox/action/check_accessible.rb +26 -0
  811. data/plugins/providers/virtualbox/action/check_created.rb +24 -0
  812. data/plugins/providers/virtualbox/action/check_guest_additions.rb +58 -0
  813. data/plugins/providers/virtualbox/action/check_running.rb +24 -0
  814. data/plugins/providers/virtualbox/action/check_virtualbox.rb +28 -0
  815. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +55 -0
  816. data/plugins/providers/virtualbox/action/clear_forwarded_ports.rb +23 -0
  817. data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +34 -0
  818. data/plugins/providers/virtualbox/action/created.rb +23 -0
  819. data/plugins/providers/virtualbox/action/customize.rb +48 -0
  820. data/plugins/providers/virtualbox/action/destroy.rb +22 -0
  821. data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +26 -0
  822. data/plugins/providers/virtualbox/action/discard_state.rb +23 -0
  823. data/plugins/providers/virtualbox/action/export.rb +54 -0
  824. data/plugins/providers/virtualbox/action/forced_halt.rb +28 -0
  825. data/plugins/providers/virtualbox/action/forward_ports.rb +92 -0
  826. data/plugins/providers/virtualbox/action/import.rb +110 -0
  827. data/plugins/providers/virtualbox/action/import_master.rb +83 -0
  828. data/plugins/providers/virtualbox/action/is_paused.rb +23 -0
  829. data/plugins/providers/virtualbox/action/is_running.rb +23 -0
  830. data/plugins/providers/virtualbox/action/is_saved.rb +23 -0
  831. data/plugins/providers/virtualbox/action/match_mac_address.rb +30 -0
  832. data/plugins/providers/virtualbox/action/message_already_running.rb +19 -0
  833. data/plugins/providers/virtualbox/action/message_not_created.rb +19 -0
  834. data/plugins/providers/virtualbox/action/message_not_running.rb +19 -0
  835. data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +20 -0
  836. data/plugins/providers/virtualbox/action/network.rb +638 -0
  837. data/plugins/providers/virtualbox/action/network_fix_ipv6.rb +87 -0
  838. data/plugins/providers/virtualbox/action/package.rb +19 -0
  839. data/plugins/providers/virtualbox/action/package_setup_files.rb +19 -0
  840. data/plugins/providers/virtualbox/action/package_setup_folders.rb +21 -0
  841. data/plugins/providers/virtualbox/action/package_vagrantfile.rb +36 -0
  842. data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +69 -0
  843. data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +38 -0
  844. data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +162 -0
  845. data/plugins/providers/virtualbox/action/prepare_nfs_valid_ids.rb +20 -0
  846. data/plugins/providers/virtualbox/action/resume.rb +28 -0
  847. data/plugins/providers/virtualbox/action/sane_defaults.rb +92 -0
  848. data/plugins/providers/virtualbox/action/set_default_nic_type.rb +72 -0
  849. data/plugins/providers/virtualbox/action/set_name.rb +58 -0
  850. data/plugins/providers/virtualbox/action/setup_package_files.rb +20 -0
  851. data/plugins/providers/virtualbox/action/snapshot_delete.rb +37 -0
  852. data/plugins/providers/virtualbox/action/snapshot_restore.rb +33 -0
  853. data/plugins/providers/virtualbox/action/snapshot_save.rb +28 -0
  854. data/plugins/providers/virtualbox/action/suspend.rb +23 -0
  855. data/plugins/providers/virtualbox/action.rb +433 -0
  856. data/plugins/providers/virtualbox/cap/cleanup_disks.rb +86 -0
  857. data/plugins/providers/virtualbox/cap/configure_disks.rb +441 -0
  858. data/plugins/providers/virtualbox/cap/mount_options.rb +43 -0
  859. data/plugins/providers/virtualbox/cap/public_address.rb +18 -0
  860. data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +37 -0
  861. data/plugins/providers/virtualbox/cap.rb +40 -0
  862. data/plugins/providers/virtualbox/config.rb +211 -0
  863. data/plugins/providers/virtualbox/driver/base.rb +530 -0
  864. data/plugins/providers/virtualbox/driver/meta.rb +212 -0
  865. data/plugins/providers/virtualbox/driver/version_4_0.rb +574 -0
  866. data/plugins/providers/virtualbox/driver/version_4_1.rb +699 -0
  867. data/plugins/providers/virtualbox/driver/version_4_2.rb +713 -0
  868. data/plugins/providers/virtualbox/driver/version_4_3.rb +757 -0
  869. data/plugins/providers/virtualbox/driver/version_5_0.rb +1022 -0
  870. data/plugins/providers/virtualbox/driver/version_5_1.rb +19 -0
  871. data/plugins/providers/virtualbox/driver/version_5_2.rb +19 -0
  872. data/plugins/providers/virtualbox/driver/version_6_0.rb +105 -0
  873. data/plugins/providers/virtualbox/driver/version_6_1.rb +42 -0
  874. data/plugins/providers/virtualbox/driver/version_7_0.rb +306 -0
  875. data/plugins/providers/virtualbox/driver/version_7_1.rb +19 -0
  876. data/plugins/providers/virtualbox/model/forwarded_port.rb +73 -0
  877. data/plugins/providers/virtualbox/model/storage_controller.rb +138 -0
  878. data/plugins/providers/virtualbox/model/storage_controller_array.rb +101 -0
  879. data/plugins/providers/virtualbox/plugin.rb +120 -0
  880. data/plugins/providers/virtualbox/provider.rb +133 -0
  881. data/plugins/providers/virtualbox/synced_folder.rb +153 -0
  882. data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +40 -0
  883. data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +47 -0
  884. data/plugins/provisioners/ansible/cap/guest/arch/ansible_install.rb +44 -0
  885. data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +56 -0
  886. data/plugins/provisioners/ansible/cap/guest/facts.rb +27 -0
  887. data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +43 -0
  888. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +26 -0
  889. data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +49 -0
  890. data/plugins/provisioners/ansible/cap/guest/posix/ansible_installed.rb +28 -0
  891. data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +75 -0
  892. data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +26 -0
  893. data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +42 -0
  894. data/plugins/provisioners/ansible/config/base.rb +157 -0
  895. data/plugins/provisioners/ansible/config/guest.rb +59 -0
  896. data/plugins/provisioners/ansible/config/host.rb +66 -0
  897. data/plugins/provisioners/ansible/constants.rb +17 -0
  898. data/plugins/provisioners/ansible/errors.rb +43 -0
  899. data/plugins/provisioners/ansible/helpers.rb +20 -0
  900. data/plugins/provisioners/ansible/plugin.rb +88 -0
  901. data/plugins/provisioners/ansible/provisioner/base.rb +405 -0
  902. data/plugins/provisioners/ansible/provisioner/guest.rb +197 -0
  903. data/plugins/provisioners/ansible/provisioner/host.rb +352 -0
  904. data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +24 -0
  905. data/plugins/provisioners/cfengine/cap/linux/cfengine_installed.rb +17 -0
  906. data/plugins/provisioners/cfengine/cap/linux/cfengine_needs_bootstrap.rb +37 -0
  907. data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +37 -0
  908. data/plugins/provisioners/cfengine/cap/suse/cfengine_install.rb +21 -0
  909. data/plugins/provisioners/cfengine/config.rb +127 -0
  910. data/plugins/provisioners/cfengine/plugin.rb +50 -0
  911. data/plugins/provisioners/cfengine/provisioner.rb +142 -0
  912. data/plugins/provisioners/chef/cap/debian/chef_install.rb +22 -0
  913. data/plugins/provisioners/chef/cap/freebsd/chef_install.rb +21 -0
  914. data/plugins/provisioners/chef/cap/freebsd/chef_installed.rb +27 -0
  915. data/plugins/provisioners/chef/cap/linux/chef_installed.rb +27 -0
  916. data/plugins/provisioners/chef/cap/omnios/chef_install.rb +23 -0
  917. data/plugins/provisioners/chef/cap/omnios/chef_installed.rb +28 -0
  918. data/plugins/provisioners/chef/cap/redhat/chef_install.rb +27 -0
  919. data/plugins/provisioners/chef/cap/suse/chef_install.rb +30 -0
  920. data/plugins/provisioners/chef/cap/windows/chef_install.rb +19 -0
  921. data/plugins/provisioners/chef/cap/windows/chef_installed.rb +24 -0
  922. data/plugins/provisioners/chef/command_builder.rb +87 -0
  923. data/plugins/provisioners/chef/config/base.rb +139 -0
  924. data/plugins/provisioners/chef/config/base_runner.rb +131 -0
  925. data/plugins/provisioners/chef/config/chef_apply.rb +53 -0
  926. data/plugins/provisioners/chef/config/chef_client.rb +77 -0
  927. data/plugins/provisioners/chef/config/chef_solo.rb +141 -0
  928. data/plugins/provisioners/chef/config/chef_zero.rb +133 -0
  929. data/plugins/provisioners/chef/installer.rb +51 -0
  930. data/plugins/provisioners/chef/omnibus.rb +40 -0
  931. data/plugins/provisioners/chef/plugin.rb +108 -0
  932. data/plugins/provisioners/chef/provisioner/base.rb +258 -0
  933. data/plugins/provisioners/chef/provisioner/chef_apply.rb +74 -0
  934. data/plugins/provisioners/chef/provisioner/chef_client.rb +179 -0
  935. data/plugins/provisioners/chef/provisioner/chef_solo.rb +244 -0
  936. data/plugins/provisioners/chef/provisioner/chef_zero.rb +123 -0
  937. data/plugins/provisioners/container/client.rb +206 -0
  938. data/plugins/provisioners/container/config.rb +86 -0
  939. data/plugins/provisioners/container/installer.rb +16 -0
  940. data/plugins/provisioners/container/plugin.rb +26 -0
  941. data/plugins/provisioners/container/provisioner.rb +31 -0
  942. data/plugins/provisioners/docker/cap/centos/docker_install.rb +44 -0
  943. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +27 -0
  944. data/plugins/provisioners/docker/cap/debian/docker_install.rb +21 -0
  945. data/plugins/provisioners/docker/cap/debian/docker_start_service.rb +16 -0
  946. data/plugins/provisioners/docker/cap/fedora/docker_install.rb +30 -0
  947. data/plugins/provisioners/docker/cap/linux/docker_configure_vagrant_user.rb +23 -0
  948. data/plugins/provisioners/docker/cap/linux/docker_daemon_running.rb +16 -0
  949. data/plugins/provisioners/docker/cap/linux/docker_installed.rb +29 -0
  950. data/plugins/provisioners/docker/cap/windows/docker_daemon_running.rb +16 -0
  951. data/plugins/provisioners/docker/client.rb +26 -0
  952. data/plugins/provisioners/docker/config.rb +19 -0
  953. data/plugins/provisioners/docker/installer.rb +37 -0
  954. data/plugins/provisioners/docker/plugin.rb +71 -0
  955. data/plugins/provisioners/docker/provisioner.rb +59 -0
  956. data/plugins/provisioners/file/config.rb +32 -0
  957. data/plugins/provisioners/file/plugin.rb +26 -0
  958. data/plugins/provisioners/file/provisioner.rb +46 -0
  959. data/plugins/provisioners/podman/cap/centos/podman_install.rb +38 -0
  960. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +16 -0
  961. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +29 -0
  962. data/plugins/provisioners/podman/client.rb +15 -0
  963. data/plugins/provisioners/podman/config.rb +31 -0
  964. data/plugins/provisioners/podman/installer.rb +36 -0
  965. data/plugins/provisioners/podman/plugin.rb +41 -0
  966. data/plugins/provisioners/podman/provisioner.rb +55 -0
  967. data/plugins/provisioners/puppet/config/puppet.rb +178 -0
  968. data/plugins/provisioners/puppet/config/puppet_server.rb +84 -0
  969. data/plugins/provisioners/puppet/plugin.rb +36 -0
  970. data/plugins/provisioners/puppet/provisioner/puppet.rb +336 -0
  971. data/plugins/provisioners/puppet/provisioner/puppet_server.rb +114 -0
  972. data/plugins/provisioners/salt/bootstrap_downloader.rb +62 -0
  973. data/plugins/provisioners/salt/config.rb +194 -0
  974. data/plugins/provisioners/salt/errors.rb +18 -0
  975. data/plugins/provisioners/salt/plugin.rb +25 -0
  976. data/plugins/provisioners/salt/provisioner.rb +499 -0
  977. data/plugins/provisioners/shell/config.rb +146 -0
  978. data/plugins/provisioners/shell/plugin.rb +26 -0
  979. data/plugins/provisioners/shell/provisioner.rb +368 -0
  980. data/plugins/pushes/atlas/config.rb +151 -0
  981. data/plugins/pushes/atlas/errors.rb +16 -0
  982. data/plugins/pushes/atlas/locales/en.yml +25 -0
  983. data/plugins/pushes/atlas/plugin.rb +38 -0
  984. data/plugins/pushes/atlas/push.rb +87 -0
  985. data/plugins/pushes/ftp/adapter.rb +147 -0
  986. data/plugins/pushes/ftp/config.rb +133 -0
  987. data/plugins/pushes/ftp/errors.rb +16 -0
  988. data/plugins/pushes/ftp/locales/en.yml +19 -0
  989. data/plugins/pushes/ftp/plugin.rb +36 -0
  990. data/plugins/pushes/ftp/push.rb +137 -0
  991. data/plugins/pushes/heroku/config.rb +77 -0
  992. data/plugins/pushes/heroku/errors.rb +24 -0
  993. data/plugins/pushes/heroku/locales/en.yml +33 -0
  994. data/plugins/pushes/heroku/plugin.rb +36 -0
  995. data/plugins/pushes/heroku/push.rb +147 -0
  996. data/plugins/pushes/local-exec/config.rb +80 -0
  997. data/plugins/pushes/local-exec/errors.rb +16 -0
  998. data/plugins/pushes/local-exec/locales/en.yml +26 -0
  999. data/plugins/pushes/local-exec/plugin.rb +36 -0
  1000. data/plugins/pushes/local-exec/push.rb +91 -0
  1001. data/plugins/pushes/noop/config.rb +19 -0
  1002. data/plugins/pushes/noop/plugin.rb +25 -0
  1003. data/plugins/pushes/noop/push.rb +12 -0
  1004. data/plugins/synced_folders/nfs/action_cleanup.rb +32 -0
  1005. data/plugins/synced_folders/nfs/config.rb +35 -0
  1006. data/plugins/synced_folders/nfs/plugin.rb +49 -0
  1007. data/plugins/synced_folders/nfs/synced_folder.rb +171 -0
  1008. data/plugins/synced_folders/rsync/command/rsync.rb +81 -0
  1009. data/plugins/synced_folders/rsync/command/rsync_auto.rb +244 -0
  1010. data/plugins/synced_folders/rsync/default_unix_cap.rb +49 -0
  1011. data/plugins/synced_folders/rsync/helper.rb +296 -0
  1012. data/plugins/synced_folders/rsync/plugin.rb +31 -0
  1013. data/plugins/synced_folders/rsync/synced_folder.rb +62 -0
  1014. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +14 -0
  1015. data/plugins/synced_folders/smb/cap/mount_options.rb +59 -0
  1016. data/plugins/synced_folders/smb/config.rb +26 -0
  1017. data/plugins/synced_folders/smb/errors.rb +65 -0
  1018. data/plugins/synced_folders/smb/plugin.rb +60 -0
  1019. data/plugins/synced_folders/smb/synced_folder.rb +189 -0
  1020. data/plugins/synced_folders/unix_mount_helpers.rb +122 -0
  1021. data/scripts/install_rvm +19 -0
  1022. data/scripts/setup_tests +49 -0
  1023. data/scripts/sign.sh +29 -0
  1024. data/scripts/website_push_www.sh +43 -0
  1025. data/tasks/acceptance.rake +22 -0
  1026. data/tasks/bundler.rake +3 -0
  1027. data/tasks/test.rake +8 -0
  1028. data/templates/commands/init/Vagrantfile.erb +86 -0
  1029. data/templates/commands/init/Vagrantfile.min.erb +12 -0
  1030. data/templates/commands/ssh_config/config.erb +42 -0
  1031. data/templates/commands/winrm_config/config.erb +11 -0
  1032. data/templates/config/messages.erb +14 -0
  1033. data/templates/config/validation_failed.erb +7 -0
  1034. data/templates/guests/alpine/network_dhcp.erb +13 -0
  1035. data/templates/guests/alpine/network_static.erb +7 -0
  1036. data/templates/guests/alt/network_dhcp.erb +7 -0
  1037. data/templates/guests/alt/network_ipv4address.erb +3 -0
  1038. data/templates/guests/alt/network_ipv4route.erb +5 -0
  1039. data/templates/guests/alt/network_static.erb +7 -0
  1040. data/templates/guests/arch/default_network/network_dhcp.erb +4 -0
  1041. data/templates/guests/arch/default_network/network_static.erb +8 -0
  1042. data/templates/guests/arch/default_network/network_static6.erb +8 -0
  1043. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  1044. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  1045. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  1046. data/templates/guests/coreos/etcd.service.erb +10 -0
  1047. data/templates/guests/debian/network_dhcp.erb +13 -0
  1048. data/templates/guests/debian/network_static.erb +10 -0
  1049. data/templates/guests/debian/network_static6.erb +10 -0
  1050. data/templates/guests/freebsd/network_dhcp.erb +4 -0
  1051. data/templates/guests/freebsd/network_static.erb +6 -0
  1052. data/templates/guests/freebsd/network_static6.erb +6 -0
  1053. data/templates/guests/funtoo/network_dhcp.erb +4 -0
  1054. data/templates/guests/funtoo/network_static.erb +10 -0
  1055. data/templates/guests/funtoo/network_static6.erb +9 -0
  1056. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  1057. data/templates/guests/gentoo/network_static.erb +8 -0
  1058. data/templates/guests/gentoo/network_static6.erb +8 -0
  1059. data/templates/guests/gentoo/network_systemd.erb +16 -0
  1060. data/templates/guests/linux/etc_fstab.erb +6 -0
  1061. data/templates/guests/netbsd/network_dhcp.erb +3 -0
  1062. data/templates/guests/netbsd/network_static.erb +3 -0
  1063. data/templates/guests/nixos/hostname.erb +6 -0
  1064. data/templates/guests/nixos/network.erb +15 -0
  1065. data/templates/guests/openbsd/network_dhcp.erb +1 -0
  1066. data/templates/guests/openbsd/network_static.erb +1 -0
  1067. data/templates/guests/openbsd/network_static6.erb +1 -0
  1068. data/templates/guests/redhat/network_dhcp.erb +7 -0
  1069. data/templates/guests/redhat/network_static.erb +16 -0
  1070. data/templates/guests/redhat/network_static6.erb +12 -0
  1071. data/templates/guests/slackware/network_dhcp.erb +11 -0
  1072. data/templates/guests/slackware/network_static.erb +13 -0
  1073. data/templates/guests/suse/network_dhcp.erb +6 -0
  1074. data/templates/guests/suse/network_static.erb +13 -0
  1075. data/templates/guests/suse/network_static6.erb +16 -0
  1076. data/templates/license/license.html.tmpl +127 -0
  1077. data/templates/license/license.rtf.tmpl +0 -0
  1078. data/templates/license/license.tmpl +92 -0
  1079. data/templates/locales/comm_winrm.yml +85 -0
  1080. data/templates/locales/command_ps.yml +35 -0
  1081. data/templates/locales/command_rdp.yml +28 -0
  1082. data/templates/locales/en.yml +3149 -0
  1083. data/templates/locales/guest_windows.yml +26 -0
  1084. data/templates/locales/providers_docker.yml +321 -0
  1085. data/templates/locales/providers_hyperv.yml +111 -0
  1086. data/templates/locales/synced_folder_smb.yml +98 -0
  1087. data/templates/networking/network_manager/network_manager_device.erb +41 -0
  1088. data/templates/nfs/exports_bsd.erb +5 -0
  1089. data/templates/nfs/exports_darwin.erb +7 -0
  1090. data/templates/nfs/exports_linux.erb +7 -0
  1091. data/templates/package_Vagrantfile.erb +11 -0
  1092. data/templates/provisioners/chef_client/client.erb +41 -0
  1093. data/templates/provisioners/chef_solo/solo.erb +52 -0
  1094. data/templates/provisioners/chef_zero/zero.erb +45 -0
  1095. data/templates/rgloader.rb +12 -0
  1096. data/vagrant-spec.config.example.rb +13 -0
  1097. data/vagrant.gemspec +113 -20
  1098. data/version.txt +1 -0
  1099. metadata +1621 -43
  1100. data/LICENSE.txt +0 -22
  1101. data/message.txt +0 -17
@@ -0,0 +1,1022 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: BUSL-1.1
3
+
4
+ require 'log4r'
5
+
6
+ require "vagrant/util/platform"
7
+
8
+ require File.expand_path("../base", __FILE__)
9
+
10
+ module VagrantPlugins
11
+ module ProviderVirtualBox
12
+ module Driver
13
+ # Driver for VirtualBox 5.0.x
14
+ class Version_5_0 < Base
15
+ def initialize(uuid)
16
+ super()
17
+
18
+ @logger = Log4r::Logger.new("vagrant::provider::virtualbox_5_0")
19
+ @uuid = uuid
20
+ end
21
+
22
+ # Controller-Port-Device looks like:
23
+ # SATA Controller-ImageUUID-0-0 (sub out ImageUUID)
24
+ # - Controller: SATA Controller
25
+ # - Port: 0
26
+ # - Device: 0
27
+ #
28
+ # @param [String] controller_name - name of storage controller to attach disk to
29
+ # @param [String] port - port on device to attach disk to
30
+ # @param [String] device - device on controller for disk
31
+ # @param [String] type - type of disk to attach
32
+ # @param [String] file - disk file path
33
+ # @param [Hash] opts - additional options
34
+ def attach_disk(controller_name, port, device, type, file, **opts)
35
+ comment = "This disk is managed externally by Vagrant. Removing or adjusting settings could potentially cause issues with Vagrant."
36
+
37
+ execute('storageattach', @uuid,
38
+ '--storagectl', controller_name,
39
+ '--port', port.to_s,
40
+ '--device', device.to_s,
41
+ '--type', type,
42
+ '--medium', file,
43
+ '--comment', comment)
44
+ end
45
+
46
+ def clear_forwarded_ports
47
+ retryable(on: Vagrant::Errors::VBoxManageError, tries: 3, sleep: 1) do
48
+ args = []
49
+ read_forwarded_ports(@uuid).each do |nic, name, _, _|
50
+ args.concat(["--natpf#{nic}", "delete", name])
51
+ end
52
+
53
+ execute("modifyvm", @uuid, *args) if !args.empty?
54
+ end
55
+ end
56
+
57
+ def clear_shared_folders
58
+ retryable(on: Vagrant::Errors::VBoxManageError, tries: 3, sleep: 1) do
59
+ info = execute("showvminfo", @uuid, "--machinereadable", retryable: true)
60
+ info.split("\n").each do |line|
61
+ if line =~ /^SharedFolderNameMachineMapping\d+="(.+?)"$/
62
+ execute("sharedfolder", "remove", @uuid, "--name", $1.to_s)
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ # @param [String] source
69
+ # @param [String] destination
70
+ # @param [String] disk_format
71
+ def clone_disk(source, destination, disk_format, **opts)
72
+ execute("clonemedium", source, destination, '--format', disk_format)
73
+ end
74
+
75
+ def clonevm(master_id, snapshot_name)
76
+ machine_name = "temp_clone_#{(Time.now.to_f * 1000.0).to_i}_#{rand(100000)}"
77
+ args = ["--register", "--name", machine_name]
78
+ if snapshot_name
79
+ args += ["--snapshot", snapshot_name, "--options", "link"]
80
+ end
81
+
82
+ execute("clonevm", master_id, *args, retryable: true)
83
+ return get_machine_id(machine_name)
84
+ end
85
+
86
+ # Removes a disk from the given virtual machine
87
+ #
88
+ # @param [String] disk_uuid or file path
89
+ # @param [Hash] opts - additional options
90
+ def close_medium(disk_uuid)
91
+ execute("closemedium", disk_uuid, '--delete')
92
+ end
93
+
94
+ def create_dhcp_server(network, options)
95
+ retryable(on: Vagrant::Errors::VBoxManageError, tries: 3, sleep: 1) do
96
+ begin
97
+ execute("dhcpserver", "add", "--ifname", network,
98
+ "--ip", options[:dhcp_ip],
99
+ "--netmask", options[:netmask],
100
+ "--lowerip", options[:dhcp_lower],
101
+ "--upperip", options[:dhcp_upper],
102
+ "--enable")
103
+ rescue Vagrant::Errors::VBoxManageError => e
104
+ return if e.extra_data[:stderr] == 'VBoxManage: error: DHCP server already exists'
105
+ raise
106
+ end
107
+ end
108
+ end
109
+
110
+ # Creates a disk. Default format is VDI unless overridden
111
+ #
112
+ # @param [String] disk_file
113
+ # @param [Integer] disk_size - size in bytes
114
+ # @param [String] disk_format - format of disk, defaults to "VDI"
115
+ # @param [Hash] opts - additional options
116
+ def create_disk(disk_file, disk_size, disk_format="VDI", **opts)
117
+ execute("createmedium", '--filename', disk_file, '--sizebyte', disk_size.to_i.to_s, '--format', disk_format)
118
+ end
119
+
120
+
121
+ def create_host_only_network(options)
122
+ # Create the interface
123
+ execute("hostonlyif", "create", retryable: true) =~ /^Interface '(.+?)' was successfully created$/
124
+ name = $1.to_s
125
+
126
+ # Get the IP so we can determine v4 vs v6
127
+ ip = IPAddr.new(options[:adapter_ip])
128
+
129
+ # Configure
130
+ if ip.ipv4?
131
+ execute("hostonlyif", "ipconfig", name,
132
+ "--ip", options[:adapter_ip],
133
+ "--netmask", options[:netmask],
134
+ retryable: true)
135
+ elsif ip.ipv6?
136
+ execute("hostonlyif", "ipconfig", name,
137
+ "--ipv6", options[:adapter_ip],
138
+ "--netmasklengthv6", options[:netmask].to_s,
139
+ retryable: true)
140
+ else
141
+ raise "BUG: Unknown IP type: #{ip.inspect}"
142
+ end
143
+
144
+ # Return the details
145
+ return {
146
+ name: name,
147
+ ip: options[:adapter_ip],
148
+ netmask: options[:netmask],
149
+ dhcp: nil
150
+ }
151
+ end
152
+
153
+ def create_snapshot(machine_id, snapshot_name)
154
+ execute("snapshot", machine_id, "take", snapshot_name, retryable: true)
155
+ end
156
+
157
+ def delete_snapshot(machine_id, snapshot_name)
158
+ # Start with 0%
159
+ last = 0
160
+ total = ""
161
+ yield 0 if block_given?
162
+
163
+ # Snapshot and report the % progress
164
+ execute("snapshot", machine_id, "delete", snapshot_name, retryable: true) do |type, data|
165
+ if type == :stderr
166
+ # Append the data so we can see the full view
167
+ total << data.gsub("\r", "")
168
+
169
+ # Break up the lines. We can't get the progress until we see an "OK"
170
+ lines = total.split("\n")
171
+
172
+ # The progress of the import will be in the last line. Do a greedy
173
+ # regular expression to find what we're looking for.
174
+ match = /.+(\d{2})%/.match(lines.last)
175
+ if match
176
+ current = match[1].to_i
177
+ if current > last
178
+ last = current
179
+ yield current if block_given?
180
+ end
181
+ end
182
+ end
183
+ end
184
+ end
185
+
186
+ # Lists all attached harddisks from a given virtual machine. Additionally,
187
+ # this method adds a new key "Disk Name" based on the disks file path from "Location"
188
+ #
189
+ # @return [Array] hdds An array of hashes of harddrive info for a guest
190
+ def list_hdds
191
+ hdds = []
192
+ tmp_drive = {}
193
+ execute('list', 'hdds', retryable: true).split("\n").each do |line|
194
+ if line == "" # separator between disks
195
+ hdds << tmp_drive
196
+ tmp_drive = {}
197
+ next
198
+ end
199
+ parts = line.partition(":")
200
+ key = parts.first.strip
201
+ value = parts.last.strip
202
+ tmp_drive[key] = value
203
+
204
+ if key == "Location"
205
+ tmp_drive["Disk Name"] = File.basename(value, ".*")
206
+ end
207
+ end
208
+ hdds << tmp_drive unless tmp_drive.empty?
209
+
210
+ hdds
211
+ end
212
+
213
+ def list_snapshots(machine_id)
214
+ output = execute(
215
+ "snapshot", machine_id, "list", "--machinereadable",
216
+ retryable: true)
217
+
218
+ result = []
219
+ output.split("\n").each do |line|
220
+ if line =~ /^SnapshotName.*?="(.+?)"$/i
221
+ result << $1.to_s
222
+ end
223
+ end
224
+
225
+ result.sort
226
+ rescue Vagrant::Errors::VBoxManageError => e
227
+ d = e.extra_data
228
+ return [] if d[:stderr].include?("does not have") || d[:stdout].include?("does not have")
229
+ raise
230
+ end
231
+
232
+ # @param [String] controller_name - controller name to remove disk from
233
+ # @param [String] port - port on device to attach disk to
234
+ # @param [String] device - device on controller for disk
235
+ def remove_disk(controller_name, port, device)
236
+ execute('storageattach', @uuid,
237
+ '--storagectl', controller_name,
238
+ '--port', port.to_s,
239
+ '--device', device.to_s,
240
+ '--medium', "none")
241
+ end
242
+
243
+ # @param [String] disk_file
244
+ # @param [Integer] disk_size in bytes
245
+ # @param [Hash] opts - additional options
246
+ def resize_disk(disk_file, disk_size, **opts)
247
+ execute("modifymedium", disk_file, '--resizebyte', disk_size.to_i.to_s)
248
+ end
249
+
250
+ def restore_snapshot(machine_id, snapshot_name)
251
+ # Start with 0%
252
+ last = 0
253
+ total = ""
254
+ yield 0 if block_given?
255
+
256
+ execute("snapshot", machine_id, "restore", snapshot_name, retryable: true) do |type, data|
257
+ if type == :stderr
258
+ # Append the data so we can see the full view
259
+ total << data.gsub("\r", "")
260
+
261
+ # Break up the lines. We can't get the progress until we see an "OK"
262
+ lines = total.split("\n")
263
+
264
+ # The progress of the import will be in the last line. Do a greedy
265
+ # regular expression to find what we're looking for.
266
+ match = /.+(\d{2})%/.match(lines.last)
267
+ if match
268
+ current = match[1].to_i
269
+ if current > last
270
+ last = current
271
+ yield current if block_given?
272
+ end
273
+ end
274
+ end
275
+ end
276
+ end
277
+
278
+ def delete
279
+ execute("unregistervm", @uuid, "--delete", retryable: true)
280
+ end
281
+
282
+ def delete_unused_host_only_networks
283
+ networks = []
284
+ execute("list", "hostonlyifs", retryable: true).split("\n").each do |line|
285
+ networks << $1.to_s if line =~ /^Name:\s+(.+?)$/
286
+ end
287
+
288
+ execute("list", "vms", retryable: true).split("\n").each do |line|
289
+ if line =~ /^".+?"\s+\{(.+?)\}$/
290
+ begin
291
+ info = execute("showvminfo", $1.to_s, "--machinereadable", retryable: true)
292
+ info.split("\n").each do |inner_line|
293
+ if inner_line =~ /^hostonlyadapter\d+="(.+?)"$/
294
+ networks.delete($1.to_s)
295
+ end
296
+ end
297
+ rescue Vagrant::Errors::VBoxManageError => e
298
+ raise if !e.extra_data[:stderr].include?("VBOX_E_OBJECT_NOT_FOUND")
299
+
300
+ # VirtualBox could not find the vm. It may have been deleted
301
+ # by another process after we called 'vboxmanage list vms'? Ignore this error.
302
+ end
303
+ end
304
+ end
305
+
306
+ networks.each do |name|
307
+ # First try to remove any DHCP servers attached. We use `raw` because
308
+ # it is okay if this fails. It usually means that a DHCP server was
309
+ # never attached.
310
+ raw("dhcpserver", "remove", "--ifname", name)
311
+
312
+ # Delete the actual host only network interface.
313
+ execute("hostonlyif", "remove", name, retryable: true)
314
+ end
315
+ end
316
+
317
+ def discard_saved_state
318
+ execute("discardstate", @uuid, retryable: true)
319
+ end
320
+
321
+ def enable_adapters(adapters)
322
+ args = []
323
+ adapters.each do |adapter|
324
+ args.concat(["--nic#{adapter[:adapter]}", adapter[:type].to_s])
325
+
326
+ if adapter[:bridge]
327
+ args.concat(["--bridgeadapter#{adapter[:adapter]}",
328
+ adapter[:bridge], "--cableconnected#{adapter[:adapter]}", "on"])
329
+ end
330
+
331
+ if adapter[:hostonly]
332
+ args.concat(["--hostonlyadapter#{adapter[:adapter]}",
333
+ adapter[:hostonly], "--cableconnected#{adapter[:adapter]}", "on"])
334
+ end
335
+
336
+ if adapter[:intnet]
337
+ args.concat(["--intnet#{adapter[:adapter]}",
338
+ adapter[:intnet], "--cableconnected#{adapter[:adapter]}", "on"])
339
+ end
340
+
341
+ if adapter[:mac_address]
342
+ args.concat(["--macaddress#{adapter[:adapter]}",
343
+ adapter[:mac_address]])
344
+ end
345
+
346
+ if adapter[:nic_type]
347
+ args.concat(["--nictype#{adapter[:adapter]}", adapter[:nic_type].to_s])
348
+ end
349
+ end
350
+
351
+ execute("modifyvm", @uuid, *args, retryable: true)
352
+ end
353
+
354
+ def execute_command(command)
355
+ execute(*command)
356
+ end
357
+
358
+ def export(path)
359
+ retryable(on: Vagrant::Errors::VBoxManageError, tries: 3, sleep: 1) do
360
+ begin
361
+ execute("export", @uuid, "--output", path.to_s)
362
+ rescue Vagrant::Errors::VBoxManageError => e
363
+ raise if !e.extra_data[:stderr].include?("VERR_E_FILE_ERROR")
364
+
365
+ # If the file already exists we'll throw a custom error
366
+ raise Vagrant::Errors::VirtualBoxFileExists,
367
+ stderr: e.extra_data[:stderr]
368
+ end
369
+ end
370
+ end
371
+
372
+ def forward_ports(ports)
373
+ args = []
374
+ ports.each do |options|
375
+ pf_builder = [options[:name],
376
+ options[:protocol] || "tcp",
377
+ options[:hostip] || "",
378
+ options[:hostport],
379
+ options[:guestip] || "",
380
+ options[:guestport]]
381
+
382
+ args.concat(["--natpf#{options[:adapter] || 1}",
383
+ pf_builder.join(",")])
384
+ end
385
+
386
+ execute("modifyvm", @uuid, *args, retryable: true) if !args.empty?
387
+ end
388
+
389
+ def get_machine_id(machine_name)
390
+ output = execute("list", "vms", retryable: true)
391
+ match = /^"#{Regexp.escape(machine_name)}" \{(.+?)\}$/.match(output)
392
+ return match[1].to_s if match
393
+ nil
394
+ end
395
+
396
+ # Returns port and device for an attached disk given a disk uuid. Returns
397
+ # empty hash if disk is not attachd to guest
398
+ #
399
+ # @param [String] disk_uuid - the UUID for the disk we are searching for
400
+ # @return [Hash] disk_info - Contains a device and port number
401
+ def get_port_and_device(disk_uuid)
402
+ disk = {}
403
+
404
+ storage_controllers = read_storage_controllers
405
+ storage_controllers.each do |controller|
406
+ controller.attachments.each do |attachment|
407
+ if disk_uuid == attachment[:uuid]
408
+ disk[:port] = attachment[:port]
409
+ disk[:device] = attachment[:device]
410
+ return disk
411
+ end
412
+ end
413
+ end
414
+
415
+ return disk
416
+ end
417
+
418
+ def halt
419
+ execute("controlvm", @uuid, "poweroff", retryable: true)
420
+ end
421
+
422
+ def import(ovf)
423
+ ovf = Vagrant::Util::Platform.windows_path(ovf)
424
+
425
+ output = ""
426
+ total = ""
427
+ last = 0
428
+
429
+ # Dry-run the import to get the suggested name and path
430
+ @logger.debug("Doing dry-run import to determine parallel-safe name...")
431
+ output = execute("import", "-n", ovf)
432
+ result = /Suggested VM name "(.+?)"/.match(output)
433
+ if !result
434
+ raise Vagrant::Errors::VirtualBoxNoName, output: output
435
+ end
436
+ suggested_name = result[1].to_s
437
+
438
+ # Append millisecond plus a random to the path in case we're
439
+ # importing the same box elsewhere.
440
+ specified_name = "#{suggested_name}_#{(Time.now.to_f * 1000.0).to_i}_#{rand(100000)}"
441
+ @logger.debug("-- Parallel safe name: #{specified_name}")
442
+
443
+ # Build the specified name param list
444
+ name_params = [
445
+ "--vsys", "0",
446
+ "--vmname", specified_name,
447
+ ]
448
+
449
+ # Extract the disks list and build the disk target params
450
+ disk_params = []
451
+ disks = output.scan(/(\d+): Hard disk image: source image=.+, target path=(.+),/)
452
+ disks.each do |unit_num, path|
453
+ disk_params << "--vsys"
454
+ disk_params << "0"
455
+ disk_params << "--unit"
456
+ disk_params << unit_num
457
+ disk_params << "--disk"
458
+ if Vagrant::Util::Platform.windows?
459
+ # we use the block form of sub here to ensure that if the specified_name happens to end with a number (which is fairly likely) then
460
+ # we won't end up having the character sequence of a \ followed by a number be interpreted as a back reference. For example, if
461
+ # specified_name were "abc123", then "\\abc123\\".reverse would be "\\321cba\\", and the \3 would be treated as a back reference by the sub
462
+ disk_params << path.reverse.sub("\\#{suggested_name}\\".reverse) { "\\#{specified_name}\\".reverse }.reverse # Replace only last occurrence
463
+ else
464
+ disk_params << path.reverse.sub("/#{suggested_name}/".reverse, "/#{specified_name}/".reverse).reverse # Replace only last occurrence
465
+ end
466
+ end
467
+
468
+ execute("import", ovf , *name_params, *disk_params, retryable: true) do |type, data|
469
+ if type == :stdout
470
+ # Keep track of the stdout so that we can get the VM name
471
+ output << data
472
+ elsif type == :stderr
473
+ # Append the data so we can see the full view
474
+ total << data.gsub("\r", "")
475
+
476
+ # Break up the lines. We can't get the progress until we see an "OK"
477
+ lines = total.split("\n")
478
+ if lines.include?("OK.")
479
+ # The progress of the import will be in the last line. Do a greedy
480
+ # regular expression to find what we're looking for.
481
+ match = /.+(\d{2})%/.match(lines.last)
482
+ if match
483
+ current = match[1].to_i
484
+ if current > last
485
+ last = current
486
+ yield current if block_given?
487
+ end
488
+ end
489
+ end
490
+ end
491
+ end
492
+
493
+ return get_machine_id(specified_name)
494
+ end
495
+
496
+ def max_network_adapters
497
+ 8
498
+ end
499
+
500
+ def read_forwarded_ports(uuid=nil, active_only=false)
501
+ uuid ||= @uuid
502
+
503
+ @logger.debug("read_forward_ports: uuid=#{uuid} active_only=#{active_only}")
504
+
505
+ results = []
506
+ current_nic = nil
507
+ info = execute("showvminfo", uuid, "--machinereadable", retryable: true)
508
+ info.split("\n").each do |line|
509
+ # This is how we find the nic that a FP is attached to,
510
+ # since this comes first.
511
+ current_nic = $1.to_i if line =~ /^nic(\d+)=".+?"$/
512
+
513
+ # If we care about active VMs only, then we check the state
514
+ # to verify the VM is running.
515
+ if active_only && line =~ /^VMState="(.+?)"$/ && $1.to_s != "running"
516
+ return []
517
+ end
518
+
519
+ # Parse out the forwarded port information
520
+ # Forwarding(1)="172.22.8.201tcp32977,tcp,172.22.8.201,32977,,3777"
521
+ # Forwarding(2)="tcp32978,tcp,,32978,,3777"
522
+ if line =~ /^Forwarding.+?="(.+?),.+?,(.*?),(.+?),.*?,(.+?)"$/
523
+ result = [current_nic, $1.to_s, $3.to_i, $4.to_i, $2]
524
+ @logger.debug(" - #{result.inspect}")
525
+ results << result
526
+ end
527
+ end
528
+
529
+ results
530
+ end
531
+
532
+ def read_bridged_interfaces
533
+ execute("list", "bridgedifs").split("\n\n").collect do |block|
534
+ info = {}
535
+
536
+ block.split("\n").each do |line|
537
+ if line =~ /^Name:\s+(.+?)$/
538
+ info[:name] = $1.to_s
539
+ elsif line =~ /^IPAddress:\s+(.+?)$/
540
+ info[:ip] = $1.to_s
541
+ elsif line =~ /^NetworkMask:\s+(.+?)$/
542
+ info[:netmask] = $1.to_s
543
+ elsif line =~ /^Status:\s+(.+?)$/
544
+ info[:status] = $1.to_s
545
+ end
546
+ end
547
+
548
+ # Return the info to build up the results
549
+ info
550
+ end
551
+ end
552
+
553
+ def read_dhcp_servers
554
+ execute("list", "dhcpservers", retryable: true).split("\n\n").collect do |block|
555
+ info = {}
556
+
557
+ block.split("\n").each do |line|
558
+ if network = line[/^NetworkName:\s+HostInterfaceNetworking-(.+?)$/, 1]
559
+ info[:network] = network
560
+ info[:network_name] = "HostInterfaceNetworking-#{network}"
561
+ elsif ip = line[/^IP:\s+(.+?)$/, 1]
562
+ info[:ip] = ip
563
+ elsif netmask = line[/^NetworkMask:\s+(.+?)$/, 1]
564
+ info[:netmask] = netmask
565
+ elsif lower = line[/^lowerIPAddress:\s+(.+?)$/, 1]
566
+ info[:lower] = lower
567
+ elsif upper = line[/^upperIPAddress:\s+(.+?)$/, 1]
568
+ info[:upper] = upper
569
+ end
570
+ end
571
+
572
+ info
573
+ end
574
+ end
575
+
576
+ def read_guest_additions_version
577
+ output = execute("guestproperty", "get", @uuid, "/VirtualBox/GuestAdd/Version",
578
+ retryable: true)
579
+ if output =~ /^Value: (.+?)$/
580
+ # Split the version by _ since some distro versions modify it
581
+ # to look like this: 4.1.2_ubuntu, and the distro part isn't
582
+ # too important.
583
+ value = $1.to_s
584
+ return value.split("_").first
585
+ end
586
+
587
+ # If we can't get the guest additions version by guest property, try
588
+ # to get it from the VM info itself.
589
+ info = execute("showvminfo", @uuid, "--machinereadable", retryable: true)
590
+ info.split("\n").each do |line|
591
+ return $1.to_s if line =~ /^GuestAdditionsVersion="(.+?)"$/
592
+ end
593
+
594
+ return nil
595
+ end
596
+
597
+ def read_guest_ip(adapter_number)
598
+ ip = read_guest_property("/VirtualBox/GuestInfo/Net/#{adapter_number}/V4/IP")
599
+ if ip.end_with?(".1")
600
+ @logger.warn("VBoxManage guest property returned: #{ip}. Result resembles IP of DHCP server and is being ignored.")
601
+ ip = nil
602
+ end
603
+
604
+ if !valid_ip_address?(ip)
605
+ raise Vagrant::Errors::VirtualBoxGuestPropertyNotFound,
606
+ guest_property: "/VirtualBox/GuestInfo/Net/#{adapter_number}/V4/IP"
607
+ end
608
+
609
+ return ip
610
+ end
611
+
612
+ def read_guest_property(property)
613
+ output = execute("guestproperty", "get", @uuid, property)
614
+ if output =~ /^Value: (.+?)$/
615
+ $1.to_s
616
+ else
617
+ raise Vagrant::Errors::VirtualBoxGuestPropertyNotFound, guest_property: property
618
+ end
619
+ end
620
+
621
+ def read_host_only_interfaces
622
+ execute("list", "hostonlyifs", retryable: true).split("\n\n").collect do |block|
623
+ info = {}
624
+
625
+ block.split("\n").each do |line|
626
+ if line =~ /^Name:\s+(.+?)$/
627
+ info[:name] = $1.to_s
628
+ elsif line =~ /^IPAddress:\s+(.+?)$/
629
+ info[:ip] = $1.to_s
630
+ elsif line =~ /^NetworkMask:\s+(.+?)$/
631
+ info[:netmask] = $1.to_s
632
+ elsif line =~ /^IPV6Address:\s+(.+?)$/
633
+ info[:ipv6] = $1.to_s.strip
634
+ elsif line =~ /^IPV6NetworkMaskPrefixLength:\s+(.+?)$/
635
+ info[:ipv6_prefix] = $1.to_s.strip
636
+ elsif line =~ /^Status:\s+(.+?)$/
637
+ info[:status] = $1.to_s
638
+ end
639
+ end
640
+
641
+ info
642
+ end
643
+ end
644
+
645
+ def read_mac_address
646
+ info = execute("showvminfo", @uuid, "--machinereadable", retryable: true)
647
+ info.split("\n").each do |line|
648
+ return $1.to_s if line =~ /^macaddress1="(.+?)"$/
649
+ end
650
+
651
+ nil
652
+ end
653
+
654
+ def read_mac_addresses
655
+ macs = {}
656
+ info = execute("showvminfo", @uuid, "--machinereadable", retryable: true)
657
+ info.split("\n").each do |line|
658
+ if matcher = /^macaddress(\d+)="(.+?)"$/.match(line)
659
+ adapter = matcher[1].to_i
660
+ mac = matcher[2].to_s
661
+ macs[adapter] = mac
662
+ end
663
+ end
664
+ macs
665
+ end
666
+
667
+ def read_machine_folder
668
+ info = execute("list", "systemproperties", retryable: true)
669
+ info.each_line do |line|
670
+ match = line.match(/Default machine folder:\s+(?<folder>.+?)$/i)
671
+ next if match.nil?
672
+ return match[:folder]
673
+ end
674
+
675
+ @logger.warn("failed to determine machine folder from system properties")
676
+ @logger.debug("processed output for machine folder lookup:\n#{info}")
677
+
678
+ raise Vagrant::Errors::VirtualBoxMachineFolderNotFound
679
+ end
680
+
681
+ def read_network_interfaces
682
+ nics = {}
683
+ info = execute("showvminfo", @uuid, "--machinereadable", retryable: true)
684
+ info.split("\n").each do |line|
685
+ if line =~ /^nic(\d+)="(.+?)"$/
686
+ adapter = $1.to_i
687
+ type = $2.to_sym
688
+
689
+ nics[adapter] ||= {}
690
+ nics[adapter][:type] = type
691
+ elsif line =~ /^hostonlyadapter(\d+)="(.+?)"$/
692
+ adapter = $1.to_i
693
+ network = $2.to_s
694
+
695
+ nics[adapter] ||= {}
696
+ nics[adapter][:hostonly] = network
697
+ elsif line =~ /^bridgeadapter(\d+)="(.+?)"$/
698
+ adapter = $1.to_i
699
+ network = $2.to_s
700
+
701
+ nics[adapter] ||= {}
702
+ nics[adapter][:bridge] = network
703
+ end
704
+ end
705
+
706
+ nics
707
+ end
708
+
709
+ def read_state
710
+ output = execute("showvminfo", @uuid, "--machinereadable", retryable: true)
711
+ if output =~ /^name="<inaccessible>"$/
712
+ return :inaccessible
713
+ elsif output =~ /^VMState="(.+?)"$/
714
+ return $1.to_sym
715
+ end
716
+
717
+ nil
718
+ end
719
+
720
+ def read_used_ports
721
+ used_ports = Hash.new{|hash, key| hash[key] = Set.new}
722
+ execute("list", "vms", retryable: true).split("\n").each do |line|
723
+ if line =~ /^".+?" \{(.+?)\}$/
724
+ uuid = $1.to_s
725
+
726
+ # Ignore our own used ports
727
+ next if uuid == @uuid
728
+
729
+ begin
730
+ read_forwarded_ports(uuid, true).each do |_, _, hostport, _, hostip|
731
+ hostip = '*' if hostip.nil? || hostip.empty?
732
+ used_ports[hostport].add?(hostip)
733
+ end
734
+ rescue Vagrant::Errors::VBoxManageError => e
735
+ raise if !e.extra_data[:stderr].include?("VBOX_E_OBJECT_NOT_FOUND")
736
+
737
+ # VirtualBox could not find the vm. It may have been deleted
738
+ # by another process after we called 'vboxmanage list vms'? Ignore this error.
739
+ end
740
+ end
741
+ end
742
+
743
+ used_ports
744
+ end
745
+
746
+ def read_vms
747
+ results = {}
748
+ execute("list", "vms", retryable: true).split("\n").each do |line|
749
+ if line =~ /^"(.+?)" \{(.+?)\}$/
750
+ results[$1.to_s] = $2.to_s
751
+ end
752
+ end
753
+
754
+ results
755
+ end
756
+
757
+ def reconfig_host_only(interface)
758
+ execute("hostonlyif", "ipconfig", interface[:name],
759
+ "--ipv6", interface[:ipv6], retryable: true)
760
+ end
761
+
762
+ def remove_dhcp_server(network_name)
763
+ execute("dhcpserver", "remove", "--netname", network_name, retryable: true)
764
+ end
765
+
766
+ def set_mac_address(mac)
767
+ mac = "auto" if !mac
768
+ execute("modifyvm", @uuid, "--macaddress1", mac, retryable: true)
769
+ end
770
+
771
+ def set_name(name)
772
+ retryable(on: Vagrant::Errors::VBoxManageError, tries: 3, sleep: 1) do
773
+ begin
774
+ execute("modifyvm", @uuid, "--name", name)
775
+ rescue Vagrant::Errors::VBoxManageError => e
776
+ raise if !e.extra_data[:stderr].include?("VERR_ALREADY_EXISTS")
777
+
778
+ # We got VERR_ALREADY_EXISTS. This means that we're renaming to
779
+ # a VM name that already exists. Raise a custom error.
780
+ raise Vagrant::Errors::VirtualBoxNameExists,
781
+ stderr: e.extra_data[:stderr]
782
+ end
783
+ end
784
+ end
785
+
786
+ def share_folders(folders)
787
+ is_solaris = begin
788
+ "SunOS" == read_guest_property("/VirtualBox/GuestInfo/OS/Product")
789
+ rescue
790
+ false
791
+ end
792
+ folders.each do |folder|
793
+ # NOTE: Guest additions on Solaris guests do not properly handle
794
+ # UNC style paths so prevent conversion (See GH-7264)
795
+ if is_solaris
796
+ hostpath = folder[:hostpath]
797
+ else
798
+ hostpath = Vagrant::Util::Platform.windows_path(folder[:hostpath])
799
+ end
800
+ args = ["--name",
801
+ folder[:name],
802
+ "--hostpath",
803
+ hostpath]
804
+ args << "--transient" if folder.key?(:transient) && folder[:transient]
805
+
806
+ args << "--automount" if folder.key?(:automount) && folder[:automount]
807
+
808
+ if folder[:SharedFoldersEnableSymlinksCreate]
809
+ # Enable symlinks on the shared folder
810
+ execute("setextradata", @uuid, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/#{folder[:name]}", "1", retryable: true)
811
+ end
812
+
813
+ # Add the shared folder
814
+ execute("sharedfolder", "add", @uuid, *args, retryable: true)
815
+ end
816
+ end
817
+
818
+ # Returns information for a given disk
819
+ #
820
+ # @param [String] disk_type - can be "disk", "dvd", or "floppy"
821
+ # @param [String] disk_uuid_or_file
822
+ # @return [Hash] disk
823
+ def show_medium_info(disk_type, disk_uuid_or_file)
824
+ disk = {}
825
+ execute('showmediuminfo', disk_type, disk_uuid_or_file, retryable: true).split("\n").each do |line|
826
+ parts = line.partition(":")
827
+ key = parts.first.strip
828
+ value = parts.last.strip
829
+ disk[key] = value
830
+
831
+ if key == "Location"
832
+ disk["Disk Name"] = File.basename(value, ".*")
833
+ end
834
+ end
835
+ disk
836
+ end
837
+
838
+ def ssh_port(expected_port)
839
+ @logger.debug("Searching for SSH port: #{expected_port.inspect}")
840
+
841
+ # Look for the forwarded port. Valid based on the guest port, but will do
842
+ # scoring based matching to determine best value when multiple results are
843
+ # available.
844
+ matches = read_forwarded_ports.map do |_, name, hostport, guestport, host_ip|
845
+ next if guestport != expected_port
846
+ match = [0, hostport]
847
+ match[0] += 1 if name == "ssh"
848
+ match[0] += 1 if name.downcase == "ssh"
849
+ match[0] += 1 if host_ip == "127.0.0.1"
850
+ match
851
+ end.compact
852
+
853
+ result = matches.sort_by(&:first).last
854
+
855
+ result.last if result
856
+ end
857
+
858
+ def resume
859
+ @logger.debug("Resuming paused VM...")
860
+ execute("controlvm", @uuid, "resume")
861
+ end
862
+
863
+ def start(mode)
864
+ command = ["startvm", @uuid, "--type", mode.to_s]
865
+ retryable(on: Vagrant::Errors::VBoxManageError, tries: 3, sleep: 1) do
866
+ r = raw(*command)
867
+
868
+ if r.exit_code == 0 || r.stdout =~ /VM ".+?" has been successfully started/
869
+ # Some systems return an exit code 1 for some reason. For that
870
+ # we depend on the output.
871
+ return true
872
+ end
873
+
874
+ # If we reached this point then it didn't work out.
875
+ raise Vagrant::Errors::VBoxManageError,
876
+ command: command.inspect,
877
+ stderr: r.stderr
878
+ end
879
+ end
880
+
881
+ def suspend
882
+ execute("controlvm", @uuid, "savestate", retryable: true)
883
+ end
884
+
885
+ def unshare_folders(names)
886
+ names.each do |name|
887
+ retryable(on: Vagrant::Errors::VBoxManageError, tries: 3, sleep: 1) do
888
+ begin
889
+ execute(
890
+ "sharedfolder", "remove", @uuid,
891
+ "--name", name,
892
+ "--transient")
893
+
894
+ execute(
895
+ "setextradata", @uuid,
896
+ "VBoxInternal2/SharedFoldersEnableSymlinksCreate/#{name}")
897
+ rescue Vagrant::Errors::VBoxManageError => e
898
+ raise if !e.extra_data[:stderr].include?("VBOX_E_FILE_ERROR")
899
+ end
900
+ end
901
+ end
902
+ end
903
+
904
+ def verify!
905
+ # This command sometimes fails if kernel drivers aren't properly loaded
906
+ # so we just run the command and verify that it succeeded.
907
+ execute("list", "hostonlyifs", retryable: true)
908
+ end
909
+
910
+ def verify_image(path)
911
+ r = raw("import", path.to_s, "--dry-run")
912
+ return r.exit_code == 0
913
+ end
914
+
915
+ def vm_exists?(uuid)
916
+ 5.times do |i|
917
+ result = raw("showvminfo", uuid)
918
+ return true if result.exit_code == 0
919
+
920
+ # If vboxmanage returned VBOX_E_OBJECT_NOT_FOUND,
921
+ # then the vm truly does not exist. Any other error might be transient
922
+ return false if result.stderr.include?("VBOX_E_OBJECT_NOT_FOUND")
923
+
924
+ # Sleep a bit though to give VirtualBox time to fix itself
925
+ sleep 2
926
+ end
927
+
928
+ # If we reach this point, it means that we consistently got the
929
+ # failure, do a standard vboxmanage now. This will raise an
930
+ # exception if it fails again.
931
+ execute("showvminfo", uuid)
932
+ return true
933
+ end
934
+
935
+ # @param [VagrantPlugins::VirtualboxProvider::Driver] driver
936
+ # @param [String] defined_disk_path
937
+ # @return [String] destination - The cloned disk
938
+ def vmdk_to_vdi(defined_disk_path)
939
+ source = defined_disk_path
940
+ destination = File.join(File.dirname(source), File.basename(source, ".*")) + ".vdi"
941
+
942
+ clone_disk(source, destination, 'VDI')
943
+
944
+ destination
945
+ end
946
+
947
+ # @param [VagrantPlugins::VirtualboxProvider::Driver] driver
948
+ # @param [String] defined_disk_path
949
+ # @return [String] destination - The cloned disk
950
+ def vdi_to_vmdk(defined_disk_path)
951
+ source = defined_disk_path
952
+ destination = File.join(File.dirname(source), File.basename(source, ".*")) + ".vmdk"
953
+
954
+ clone_disk(source, destination, 'VMDK')
955
+
956
+ destination
957
+ end
958
+
959
+ # Helper method to get a list of storage controllers added to the
960
+ # current VM
961
+ #
962
+ # @return [VagrantPlugins::ProviderVirtualBox::Model::StorageControllerArray]
963
+ def read_storage_controllers
964
+ vm_info = show_vm_info
965
+ count = vm_info.count { |key, value| key.match(/^storagecontrollername\d+$/) }
966
+ all_disks = list_hdds
967
+
968
+ storage_controllers = Model::StorageControllerArray.new
969
+
970
+ (0..count - 1).each do |n|
971
+ # basic controller metadata
972
+ name = vm_info["storagecontrollername#{n}"]
973
+ type = vm_info["storagecontrollertype#{n}"]
974
+ maxportcount = vm_info["storagecontrollermaxportcount#{n}"].to_i
975
+
976
+ # build attachments array
977
+ attachments = []
978
+ vm_info.each do |k, v|
979
+ if /^#{name}-ImageUUID-(\d+)-(\d+)$/ =~ k
980
+ port = $1.to_s
981
+ device = $2.to_s
982
+ uuid = v
983
+ location = vm_info["#{name}-#{port}-#{device}"]
984
+
985
+ extra_disk_data = all_disks.detect { |d| d["UUID"] == uuid }
986
+
987
+ attachment = { port: port,
988
+ device: device,
989
+ uuid: uuid,
990
+ location: location }
991
+
992
+ extra_disk_data&.each do |dk,dv|
993
+ # NOTE: We convert the keys from VirtualBox to symbols
994
+ # to be consistent with the other keys
995
+ attachment[dk.downcase.gsub(' ', '_').to_sym] = dv
996
+ end
997
+
998
+ attachments << attachment
999
+ end
1000
+ end
1001
+
1002
+ storage_controllers << Model::StorageController.new(name, type, maxportcount, attachments)
1003
+ end
1004
+
1005
+ storage_controllers
1006
+ end
1007
+
1008
+ protected
1009
+
1010
+ def valid_ip_address?(ip)
1011
+ # Filter out invalid IP addresses
1012
+ # GH-4658 VirtualBox can report an IP address of 0.0.0.0 for FreeBSD guests.
1013
+ if ip == "0.0.0.0" || ip.nil?
1014
+ return false
1015
+ else
1016
+ return true
1017
+ end
1018
+ end
1019
+ end
1020
+ end
1021
+ end
1022
+ end