vagrant 1.5.0 → 2.4.5

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 (1103) 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 +4520 -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 +938 -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/none/communicator.rb +46 -0
  341. data/plugins/communicators/none/plugin.rb +26 -0
  342. data/plugins/communicators/ssh/communicator.rb +898 -0
  343. data/plugins/communicators/ssh/plugin.rb +22 -0
  344. data/plugins/communicators/winrm/command_filter.rb +49 -0
  345. data/plugins/communicators/winrm/command_filters/cat.rb +26 -0
  346. data/plugins/communicators/winrm/command_filters/chmod.rb +20 -0
  347. data/plugins/communicators/winrm/command_filters/chown.rb +20 -0
  348. data/plugins/communicators/winrm/command_filters/grep.rb +26 -0
  349. data/plugins/communicators/winrm/command_filters/mkdir.rb +30 -0
  350. data/plugins/communicators/winrm/command_filters/rm.rb +50 -0
  351. data/plugins/communicators/winrm/command_filters/test.rb +68 -0
  352. data/plugins/communicators/winrm/command_filters/uname.rb +30 -0
  353. data/plugins/communicators/winrm/command_filters/which.rb +27 -0
  354. data/plugins/communicators/winrm/communicator.rb +230 -0
  355. data/plugins/communicators/winrm/config.rb +76 -0
  356. data/plugins/communicators/winrm/errors.rb +72 -0
  357. data/plugins/communicators/winrm/helper.rb +91 -0
  358. data/plugins/communicators/winrm/plugin.rb +69 -0
  359. data/plugins/communicators/winrm/shell.rb +267 -0
  360. data/plugins/communicators/winssh/communicator.rb +252 -0
  361. data/plugins/communicators/winssh/config.rb +37 -0
  362. data/plugins/communicators/winssh/plugin.rb +24 -0
  363. data/plugins/guests/alma/cap/flavor.rb +26 -0
  364. data/plugins/guests/alma/guest.rb +13 -0
  365. data/plugins/guests/alma/plugin.rb +23 -0
  366. data/plugins/guests/alpine/cap/change_host_name.rb +85 -0
  367. data/plugins/guests/alpine/cap/configure_networks.rb +67 -0
  368. data/plugins/guests/alpine/cap/halt.rb +24 -0
  369. data/plugins/guests/alpine/cap/nfs_client.rb +17 -0
  370. data/plugins/guests/alpine/cap/rsync.rb +20 -0
  371. data/plugins/guests/alpine/cap/smb.rb +16 -0
  372. data/plugins/guests/alpine/guest.rb +14 -0
  373. data/plugins/guests/alpine/plugin.rb +69 -0
  374. data/plugins/guests/alt/cap/change_host_name.rb +55 -0
  375. data/plugins/guests/alt/cap/configure_networks.rb +132 -0
  376. data/plugins/guests/alt/cap/flavor.rb +66 -0
  377. data/plugins/guests/alt/cap/network_scripts_dir.rb +14 -0
  378. data/plugins/guests/alt/cap/rsync.rb +16 -0
  379. data/plugins/guests/alt/guest.rb +12 -0
  380. data/plugins/guests/alt/plugin.rb +43 -0
  381. data/plugins/guests/amazon/cap/configure_networks.rb +26 -0
  382. data/plugins/guests/amazon/cap/flavor.rb +17 -0
  383. data/plugins/guests/amazon/guest.rb +12 -0
  384. data/plugins/guests/amazon/plugin.rb +28 -0
  385. data/plugins/guests/arch/cap/change_host_name.rb +18 -0
  386. data/plugins/guests/arch/cap/configure_networks.rb +81 -0
  387. data/plugins/guests/arch/cap/nfs.rb +36 -0
  388. data/plugins/guests/arch/cap/rsync.rb +19 -0
  389. data/plugins/guests/arch/cap/smb.rb +20 -0
  390. data/plugins/guests/arch/guest.rb +14 -0
  391. data/plugins/guests/arch/plugin.rb +53 -0
  392. data/plugins/guests/atomic/cap/change_host_name.rb +18 -0
  393. data/plugins/guests/atomic/cap/docker.rb +14 -0
  394. data/plugins/guests/atomic/guest.rb +14 -0
  395. data/plugins/guests/atomic/plugin.rb +28 -0
  396. data/plugins/guests/bsd/cap/file_system.rb +80 -0
  397. data/plugins/guests/bsd/cap/halt.rb +19 -0
  398. data/plugins/guests/bsd/cap/mount_virtualbox_shared_folder.rb +19 -0
  399. data/plugins/guests/bsd/cap/nfs.rb +50 -0
  400. data/plugins/guests/bsd/cap/public_key.rb +69 -0
  401. data/plugins/guests/bsd/guest.rb +12 -0
  402. data/plugins/guests/bsd/plugin.rb +58 -0
  403. data/plugins/guests/centos/cap/flavor.rb +32 -0
  404. data/plugins/guests/centos/guest.rb +14 -0
  405. data/plugins/guests/centos/plugin.rb +23 -0
  406. data/plugins/guests/coreos/cap/change_host_name.rb +41 -0
  407. data/plugins/guests/coreos/cap/configure_networks.rb +138 -0
  408. data/plugins/guests/coreos/cap/docker.rb +14 -0
  409. data/plugins/guests/coreos/guest.rb +14 -0
  410. data/plugins/guests/coreos/plugin.rb +33 -0
  411. data/plugins/guests/darwin/cap/change_host_name.rb +43 -0
  412. data/plugins/guests/darwin/cap/choose_addressable_ip_addr.rb +23 -0
  413. data/plugins/guests/darwin/cap/configure_networks.rb +126 -0
  414. data/plugins/guests/darwin/cap/darwin_version.rb +43 -0
  415. data/plugins/guests/darwin/cap/halt.rb +21 -0
  416. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +46 -0
  417. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +135 -0
  418. data/plugins/guests/darwin/cap/rsync.rb +14 -0
  419. data/plugins/guests/darwin/cap/shell_expand_guest_path.rb +30 -0
  420. data/plugins/guests/darwin/cap/verify_vmware_hgfs.rb +15 -0
  421. data/plugins/guests/darwin/guest.rb +18 -0
  422. data/plugins/guests/darwin/plugin.rb +93 -0
  423. data/plugins/guests/debian/cap/change_host_name.rb +110 -0
  424. data/plugins/guests/debian/cap/configure_networks.rb +205 -0
  425. data/plugins/guests/debian/cap/nfs.rb +19 -0
  426. data/plugins/guests/debian/cap/rsync.rb +18 -0
  427. data/plugins/guests/debian/cap/smb.rb +20 -0
  428. data/plugins/guests/debian/guest.rb +13 -0
  429. data/plugins/guests/debian/plugin.rb +43 -0
  430. data/plugins/guests/dragonflybsd/guest.rb +12 -0
  431. data/plugins/guests/dragonflybsd/plugin.rb +18 -0
  432. data/plugins/guests/elementary/guest.rb +13 -0
  433. data/plugins/guests/elementary/plugin.rb +18 -0
  434. data/plugins/guests/esxi/cap/change_host_name.rb +16 -0
  435. data/plugins/guests/esxi/cap/configure_networks.rb +41 -0
  436. data/plugins/guests/esxi/cap/halt.rb +19 -0
  437. data/plugins/guests/esxi/cap/mount_nfs_folder.rb +43 -0
  438. data/plugins/guests/esxi/cap/public_key.rb +68 -0
  439. data/plugins/guests/esxi/guest.rb +14 -0
  440. data/plugins/guests/esxi/plugin.rb +49 -0
  441. data/plugins/guests/fedora/cap/flavor.rb +26 -0
  442. data/plugins/guests/fedora/guest.rb +14 -0
  443. data/plugins/guests/fedora/plugin.rb +23 -0
  444. data/plugins/guests/freebsd/cap/change_host_name.rb +34 -0
  445. data/plugins/guests/freebsd/cap/configure_networks.rb +70 -0
  446. data/plugins/guests/freebsd/cap/mount_virtualbox_shared_folder.rb +79 -0
  447. data/plugins/guests/freebsd/cap/rsync.rb +18 -0
  448. data/plugins/guests/freebsd/cap/shell_expand_guest_path.rb +31 -0
  449. data/plugins/guests/freebsd/guest.rb +17 -0
  450. data/plugins/guests/freebsd/plugin.rb +68 -0
  451. data/plugins/guests/funtoo/cap/configure_networks.rb +50 -0
  452. data/plugins/guests/funtoo/guest.rb +12 -0
  453. data/plugins/guests/funtoo/plugin.rb +23 -0
  454. data/plugins/guests/gentoo/cap/change_host_name.rb +27 -0
  455. data/plugins/guests/gentoo/cap/configure_networks.rb +92 -0
  456. data/plugins/guests/gentoo/guest.rb +12 -0
  457. data/plugins/guests/gentoo/plugin.rb +28 -0
  458. data/plugins/guests/haiku/cap/change_host_name.rb +36 -0
  459. data/plugins/guests/haiku/cap/halt.rb +19 -0
  460. data/plugins/guests/haiku/cap/insert_public_key.rb +24 -0
  461. data/plugins/guests/haiku/cap/remove_public_key.rb +24 -0
  462. data/plugins/guests/haiku/cap/rsync.rb +22 -0
  463. data/plugins/guests/haiku/guest.rb +14 -0
  464. data/plugins/guests/haiku/plugin.rb +53 -0
  465. data/plugins/guests/kali/guest.rb +13 -0
  466. data/plugins/guests/kali/plugin.rb +18 -0
  467. data/plugins/guests/linux/cap/change_host_name.rb +49 -0
  468. data/plugins/guests/linux/cap/choose_addressable_ip_addr.rb +22 -0
  469. data/plugins/guests/linux/cap/file_system.rb +82 -0
  470. data/plugins/guests/linux/cap/halt.rb +27 -0
  471. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +95 -0
  472. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +78 -0
  473. data/plugins/guests/linux/cap/network_interfaces.rb +89 -0
  474. data/plugins/guests/linux/cap/nfs.rb +51 -0
  475. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +77 -0
  476. data/plugins/guests/linux/cap/port.rb +14 -0
  477. data/plugins/guests/linux/cap/public_key.rb +65 -0
  478. data/plugins/guests/linux/cap/read_ip_address.rb +28 -0
  479. data/plugins/guests/linux/cap/reboot.rb +74 -0
  480. data/plugins/guests/linux/cap/rsync.rb +14 -0
  481. data/plugins/guests/linux/cap/shell_expand_guest_path.rb +35 -0
  482. data/plugins/guests/linux/guest.rb +26 -0
  483. data/plugins/guests/linux/plugin.rb +139 -0
  484. data/plugins/guests/mint/guest.rb +13 -0
  485. data/plugins/guests/mint/plugin.rb +18 -0
  486. data/plugins/guests/netbsd/cap/change_host_name.rb +20 -0
  487. data/plugins/guests/netbsd/cap/configure_networks.rb +56 -0
  488. data/plugins/guests/netbsd/cap/rsync.rb +23 -0
  489. data/plugins/guests/netbsd/cap/shell_expand_guest_path.rb +30 -0
  490. data/plugins/guests/netbsd/guest.rb +14 -0
  491. data/plugins/guests/netbsd/plugin.rb +58 -0
  492. data/plugins/guests/nixos/cap/change_host_name.rb +47 -0
  493. data/plugins/guests/nixos/cap/configure_networks.rb +135 -0
  494. data/plugins/guests/nixos/cap/nfs_client.rb +14 -0
  495. data/plugins/guests/nixos/guest.rb +20 -0
  496. data/plugins/guests/nixos/plugin.rb +33 -0
  497. data/plugins/guests/omnios/cap/change_host_name.rb +23 -0
  498. data/plugins/guests/omnios/cap/mount_nfs_folder.rb +24 -0
  499. data/plugins/guests/omnios/cap/rsync.rb +14 -0
  500. data/plugins/guests/omnios/guest.rb +12 -0
  501. data/plugins/guests/omnios/plugin.rb +33 -0
  502. data/plugins/guests/openbsd/cap/change_host_name.rb +35 -0
  503. data/plugins/guests/openbsd/cap/configure_networks.rb +49 -0
  504. data/plugins/guests/openbsd/cap/halt.rb +22 -0
  505. data/plugins/guests/openbsd/cap/rsync.rb +32 -0
  506. data/plugins/guests/openbsd/cap/shell_expand_guest_path.rb +30 -0
  507. data/plugins/guests/openbsd/guest.rb +14 -0
  508. data/plugins/guests/openbsd/plugin.rb +63 -0
  509. data/plugins/guests/openwrt/cap/change_host_name.rb +22 -0
  510. data/plugins/guests/openwrt/cap/halt.rb +19 -0
  511. data/plugins/guests/openwrt/cap/insert_public_key.rb +23 -0
  512. data/plugins/guests/openwrt/cap/remove_public_key.rb +25 -0
  513. data/plugins/guests/openwrt/cap/rsync.rb +38 -0
  514. data/plugins/guests/openwrt/guest.rb +26 -0
  515. data/plugins/guests/openwrt/plugin.rb +64 -0
  516. data/plugins/guests/photon/cap/change_host_name.rb +22 -0
  517. data/plugins/guests/photon/cap/configure_networks.rb +33 -0
  518. data/plugins/guests/photon/cap/docker.rb +14 -0
  519. data/plugins/guests/photon/guest.rb +12 -0
  520. data/plugins/guests/photon/plugin.rb +33 -0
  521. data/plugins/guests/pld/cap/change_host_name.rb +26 -0
  522. data/plugins/guests/pld/cap/flavor.rb +14 -0
  523. data/plugins/guests/pld/cap/network_scripts_dir.rb +14 -0
  524. data/plugins/guests/pld/guest.rb +12 -0
  525. data/plugins/guests/pld/plugin.rb +33 -0
  526. data/plugins/guests/redhat/cap/change_host_name.rb +59 -0
  527. data/plugins/guests/redhat/cap/configure_networks.rb +113 -0
  528. data/plugins/guests/redhat/cap/flavor.rb +32 -0
  529. data/plugins/guests/redhat/cap/network_scripts_dir.rb +18 -0
  530. data/plugins/guests/redhat/cap/nfs_client.rb +33 -0
  531. data/plugins/guests/redhat/cap/rsync.rb +20 -0
  532. data/plugins/guests/redhat/cap/smb.rb +23 -0
  533. data/plugins/guests/redhat/guest.rb +12 -0
  534. data/plugins/guests/redhat/plugin.rb +53 -0
  535. data/plugins/guests/rocky/cap/flavor.rb +26 -0
  536. data/plugins/guests/rocky/guest.rb +13 -0
  537. data/plugins/guests/rocky/plugin.rb +23 -0
  538. data/plugins/guests/slackware/cap/change_host_name.rb +24 -0
  539. data/plugins/guests/slackware/cap/configure_networks.rb +51 -0
  540. data/plugins/guests/slackware/guest.rb +12 -0
  541. data/plugins/guests/slackware/plugin.rb +28 -0
  542. data/plugins/guests/smartos/cap/change_host_name.rb +29 -0
  543. data/plugins/guests/smartos/cap/configure_networks.rb +30 -0
  544. data/plugins/guests/smartos/cap/halt.rb +25 -0
  545. data/plugins/guests/smartos/cap/insert_public_key.rb +31 -0
  546. data/plugins/guests/smartos/cap/mount_nfs.rb +31 -0
  547. data/plugins/guests/smartos/cap/remove_public_key.rb +28 -0
  548. data/plugins/guests/smartos/cap/rsync.rb +36 -0
  549. data/plugins/guests/smartos/config.rb +18 -0
  550. data/plugins/guests/smartos/guest.rb +14 -0
  551. data/plugins/guests/smartos/plugin.rb +74 -0
  552. data/plugins/guests/solaris/cap/change_host_name.rb +20 -0
  553. data/plugins/guests/solaris/cap/configure_networks.rb +28 -0
  554. data/plugins/guests/solaris/cap/file_system.rb +80 -0
  555. data/plugins/guests/solaris/cap/halt.rb +25 -0
  556. data/plugins/guests/solaris/cap/insert_public_key.rb +25 -0
  557. data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +44 -0
  558. data/plugins/guests/solaris/cap/remove_public_key.rb +25 -0
  559. data/plugins/guests/solaris/cap/rsync.rb +36 -0
  560. data/plugins/guests/solaris/config.rb +34 -0
  561. data/plugins/guests/solaris/guest.rb +17 -0
  562. data/plugins/guests/solaris/plugin.rb +88 -0
  563. data/plugins/guests/solaris11/cap/change_host_name.rb +26 -0
  564. data/plugins/guests/solaris11/cap/configure_networks.rb +37 -0
  565. data/plugins/guests/solaris11/config.rb +37 -0
  566. data/plugins/guests/solaris11/guest.rb +22 -0
  567. data/plugins/guests/solaris11/plugin.rb +42 -0
  568. data/plugins/guests/suse/cap/change_host_name.rb +48 -0
  569. data/plugins/guests/suse/cap/configure_networks.rb +53 -0
  570. data/plugins/guests/suse/cap/halt.rb +23 -0
  571. data/plugins/guests/suse/cap/network_scripts_dir.rb +14 -0
  572. data/plugins/guests/suse/cap/nfs_client.rb +18 -0
  573. data/plugins/guests/suse/cap/rsync.rb +18 -0
  574. data/plugins/guests/suse/guest.rb +12 -0
  575. data/plugins/guests/suse/plugin.rb +53 -0
  576. data/plugins/guests/tinycore/cap/change_host_name.rb +16 -0
  577. data/plugins/guests/tinycore/cap/configure_networks.rb +29 -0
  578. data/plugins/guests/tinycore/cap/halt.rb +19 -0
  579. data/plugins/guests/tinycore/cap/mount_nfs.rb +44 -0
  580. data/plugins/guests/tinycore/cap/rsync.rb +20 -0
  581. data/plugins/guests/tinycore/guest.rb +13 -0
  582. data/plugins/guests/tinycore/plugin.rb +43 -0
  583. data/plugins/guests/trisquel/guest.rb +12 -0
  584. data/plugins/guests/trisquel/plugin.rb +18 -0
  585. data/plugins/guests/ubuntu/guest.rb +13 -0
  586. data/plugins/guests/ubuntu/plugin.rb +18 -0
  587. data/plugins/guests/windows/cap/change_host_name.rb +36 -0
  588. data/plugins/guests/windows/cap/choose_addressable_ip_addr.rb +23 -0
  589. data/plugins/guests/windows/cap/configure_networks.rb +83 -0
  590. data/plugins/guests/windows/cap/file_system.rb +68 -0
  591. data/plugins/guests/windows/cap/halt.rb +19 -0
  592. data/plugins/guests/windows/cap/mount_shared_folder.rb +60 -0
  593. data/plugins/guests/windows/cap/public_key.rb +87 -0
  594. data/plugins/guests/windows/cap/reboot.rb +63 -0
  595. data/plugins/guests/windows/cap/rsync.rb +29 -0
  596. data/plugins/guests/windows/config.rb +26 -0
  597. data/plugins/guests/windows/errors.rb +25 -0
  598. data/plugins/guests/windows/guest.rb +13 -0
  599. data/plugins/guests/windows/guest_network.rb +128 -0
  600. data/plugins/guests/windows/plugin.rb +116 -0
  601. data/plugins/guests/windows/scripts/mount_volume.ps1.erb +48 -0
  602. data/plugins/guests/windows/scripts/reboot_detect.ps1 +50 -0
  603. data/plugins/guests/windows/scripts/set_work_network.ps1 +9 -0
  604. data/plugins/guests/windows/scripts/winrs_v3_get_adapters.ps1 +14 -0
  605. data/plugins/hosts/alt/cap/nfs.rb +46 -0
  606. data/plugins/hosts/alt/host.rb +14 -0
  607. data/plugins/hosts/alt/plugin.rb +35 -0
  608. data/plugins/hosts/arch/cap/nfs.rb +22 -0
  609. data/plugins/hosts/arch/host.rb +14 -0
  610. data/plugins/hosts/arch/plugin.rb +35 -0
  611. data/plugins/hosts/bsd/cap/nfs.rb +218 -0
  612. data/plugins/hosts/bsd/cap/path.rb +14 -0
  613. data/plugins/hosts/bsd/cap/ssh.rb +19 -0
  614. data/plugins/hosts/bsd/host.rb +15 -0
  615. data/plugins/hosts/bsd/plugin.rb +63 -0
  616. data/plugins/hosts/darwin/cap/configured_ip_addresses.rb +21 -0
  617. data/plugins/hosts/darwin/cap/fs_iso.rb +52 -0
  618. data/plugins/hosts/darwin/cap/nfs.rb +14 -0
  619. data/plugins/hosts/darwin/cap/path.rb +66 -0
  620. data/plugins/hosts/darwin/cap/provider_install_virtualbox.rb +64 -0
  621. data/plugins/hosts/darwin/cap/rdp.rb +64 -0
  622. data/plugins/hosts/darwin/cap/smb.rb +128 -0
  623. data/plugins/hosts/darwin/cap/version.rb +26 -0
  624. data/plugins/hosts/darwin/host.rb +14 -0
  625. data/plugins/hosts/darwin/plugin.rb +83 -0
  626. data/plugins/hosts/darwin/scripts/install_virtualbox.sh +18 -0
  627. data/plugins/hosts/freebsd/cap/nfs.rb +34 -0
  628. data/plugins/hosts/freebsd/host.rb +15 -0
  629. data/plugins/hosts/freebsd/plugin.rb +34 -0
  630. data/plugins/hosts/gentoo/cap/nfs.rb +42 -0
  631. data/plugins/hosts/gentoo/host.rb +14 -0
  632. data/plugins/hosts/gentoo/plugin.rb +31 -0
  633. data/plugins/hosts/linux/cap/fs_iso.rb +52 -0
  634. data/plugins/hosts/linux/cap/nfs.rb +296 -0
  635. data/plugins/hosts/linux/cap/rdp.rb +59 -0
  636. data/plugins/hosts/linux/cap/ssh.rb +19 -0
  637. data/plugins/hosts/linux/host.rb +15 -0
  638. data/plugins/hosts/linux/plugin.rb +70 -0
  639. data/plugins/hosts/null/host.rb +15 -0
  640. data/plugins/hosts/null/plugin.rb +18 -0
  641. data/plugins/hosts/redhat/cap/nfs.rb +58 -0
  642. data/plugins/hosts/redhat/host.rb +31 -0
  643. data/plugins/hosts/redhat/plugin.rb +30 -0
  644. data/plugins/hosts/slackware/cap/nfs.rb +18 -0
  645. data/plugins/hosts/slackware/host.rb +15 -0
  646. data/plugins/hosts/slackware/plugin.rb +30 -0
  647. data/plugins/hosts/suse/cap/nfs.rb +22 -0
  648. data/plugins/hosts/suse/host.rb +30 -0
  649. data/plugins/hosts/suse/plugin.rb +33 -0
  650. data/plugins/hosts/void/cap/nfs.rb +27 -0
  651. data/plugins/hosts/void/host.rb +23 -0
  652. data/plugins/hosts/void/plugin.rb +33 -0
  653. data/plugins/hosts/windows/cap/configured_ip_addresses.rb +32 -0
  654. data/plugins/hosts/windows/cap/fs_iso.rb +51 -0
  655. data/plugins/hosts/windows/cap/nfs.rb +14 -0
  656. data/plugins/hosts/windows/cap/provider_install_virtualbox.rb +65 -0
  657. data/plugins/hosts/windows/cap/ps.rb +50 -0
  658. data/plugins/hosts/windows/cap/rdp.rb +33 -0
  659. data/plugins/hosts/windows/cap/smb.rb +203 -0
  660. data/plugins/hosts/windows/cap/ssh.rb +29 -0
  661. data/plugins/hosts/windows/host.rb +26 -0
  662. data/plugins/hosts/windows/plugin.rb +83 -0
  663. data/plugins/hosts/windows/scripts/check_credentials.ps1 +37 -0
  664. data/plugins/hosts/windows/scripts/host_info.ps1 +24 -0
  665. data/plugins/hosts/windows/scripts/install_virtualbox.ps1 +40 -0
  666. data/plugins/hosts/windows/scripts/set_share.ps1 +40 -0
  667. data/plugins/hosts/windows/scripts/set_ssh_key_permissions.ps1 +20 -0
  668. data/plugins/hosts/windows/scripts/unset_share.ps1 +13 -0
  669. data/plugins/hosts/windows/scripts/utils/VagrantSSH/VagrantSSH.psm1 +29 -0
  670. data/plugins/kernel_v1/config/nfs.rb +23 -0
  671. data/plugins/kernel_v1/config/package.rb +20 -0
  672. data/plugins/kernel_v1/config/ssh.rb +50 -0
  673. data/plugins/kernel_v1/config/vagrant.rb +34 -0
  674. data/plugins/kernel_v1/config/vm.rb +191 -0
  675. data/plugins/kernel_v1/plugin.rb +47 -0
  676. data/plugins/kernel_v2/config/cloud_init.rb +136 -0
  677. data/plugins/kernel_v2/config/disk.rb +224 -0
  678. data/plugins/kernel_v2/config/package.rb +24 -0
  679. data/plugins/kernel_v2/config/push.rb +155 -0
  680. data/plugins/kernel_v2/config/ssh.rb +93 -0
  681. data/plugins/kernel_v2/config/ssh_connect.rb +194 -0
  682. data/plugins/kernel_v2/config/trigger.rb +214 -0
  683. data/plugins/kernel_v2/config/vagrant.rb +99 -0
  684. data/plugins/kernel_v2/config/vm.rb +1062 -0
  685. data/plugins/kernel_v2/config/vm_provisioner.rb +202 -0
  686. data/plugins/kernel_v2/config/vm_subvm.rb +33 -0
  687. data/plugins/kernel_v2/config/vm_trigger.rb +297 -0
  688. data/plugins/kernel_v2/plugin.rb +71 -0
  689. data/plugins/providers/docker/action/build.rb +99 -0
  690. data/plugins/providers/docker/action/compare_synced_folders.rb +65 -0
  691. data/plugins/providers/docker/action/connect_networks.rb +80 -0
  692. data/plugins/providers/docker/action/create.rb +162 -0
  693. data/plugins/providers/docker/action/destroy.rb +34 -0
  694. data/plugins/providers/docker/action/destroy_build_image.rb +51 -0
  695. data/plugins/providers/docker/action/destroy_network.rb +53 -0
  696. data/plugins/providers/docker/action/forwarded_ports.rb +36 -0
  697. data/plugins/providers/docker/action/has_ssh.rb +21 -0
  698. data/plugins/providers/docker/action/host_machine.rb +75 -0
  699. data/plugins/providers/docker/action/host_machine_build_dir.rb +48 -0
  700. data/plugins/providers/docker/action/host_machine_port_checker.rb +34 -0
  701. data/plugins/providers/docker/action/host_machine_port_warning.rb +40 -0
  702. data/plugins/providers/docker/action/host_machine_required.rb +20 -0
  703. data/plugins/providers/docker/action/host_machine_sync_folders.rb +175 -0
  704. data/plugins/providers/docker/action/host_machine_sync_folders_disable.rb +91 -0
  705. data/plugins/providers/docker/action/init_state.rb +23 -0
  706. data/plugins/providers/docker/action/is_build.rb +19 -0
  707. data/plugins/providers/docker/action/is_host_machine_created.rb +32 -0
  708. data/plugins/providers/docker/action/login.rb +51 -0
  709. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +64 -0
  710. data/plugins/providers/docker/action/prepare_networks.rb +372 -0
  711. data/plugins/providers/docker/action/prepare_nfs_settings.rb +60 -0
  712. data/plugins/providers/docker/action/prepare_nfs_valid_ids.rb +22 -0
  713. data/plugins/providers/docker/action/prepare_ssh.rb +48 -0
  714. data/plugins/providers/docker/action/pull.rb +30 -0
  715. data/plugins/providers/docker/action/start.rb +24 -0
  716. data/plugins/providers/docker/action/stop.rb +24 -0
  717. data/plugins/providers/docker/action/wait_for_running.rb +70 -0
  718. data/plugins/providers/docker/action.rb +319 -0
  719. data/plugins/providers/docker/cap/has_communicator.rb +14 -0
  720. data/plugins/providers/docker/cap/proxy_machine.rb +15 -0
  721. data/plugins/providers/docker/cap/public_address.rb +26 -0
  722. data/plugins/providers/docker/command/exec.rb +112 -0
  723. data/plugins/providers/docker/command/logs.rb +111 -0
  724. data/plugins/providers/docker/command/run.rb +76 -0
  725. data/plugins/providers/docker/communicator.rb +199 -0
  726. data/plugins/providers/docker/config.rb +362 -0
  727. data/plugins/providers/docker/driver/compose.rb +315 -0
  728. data/plugins/providers/docker/driver.rb +416 -0
  729. data/plugins/providers/docker/errors.rb +108 -0
  730. data/plugins/providers/docker/executor/local.rb +48 -0
  731. data/plugins/providers/docker/executor/vagrant.rb +88 -0
  732. data/plugins/providers/docker/hostmachine/Vagrantfile +3 -0
  733. data/plugins/providers/docker/plugin.rb +89 -0
  734. data/plugins/providers/docker/provider.rb +215 -0
  735. data/plugins/providers/docker/synced_folder.rb +35 -0
  736. data/plugins/providers/hyperv/action/check_access.rb +27 -0
  737. data/plugins/providers/hyperv/action/check_enabled.rb +25 -0
  738. data/plugins/providers/hyperv/action/configure.rb +115 -0
  739. data/plugins/providers/hyperv/action/delete_vm.rb +28 -0
  740. data/plugins/providers/hyperv/action/export.rb +45 -0
  741. data/plugins/providers/hyperv/action/import.rb +86 -0
  742. data/plugins/providers/hyperv/action/is_windows.rb +19 -0
  743. data/plugins/providers/hyperv/action/message_will_not_destroy.rb +20 -0
  744. data/plugins/providers/hyperv/action/net_set_mac.rb +23 -0
  745. data/plugins/providers/hyperv/action/net_set_vlan.rb +23 -0
  746. data/plugins/providers/hyperv/action/package.rb +19 -0
  747. data/plugins/providers/hyperv/action/package_metadata_json.rb +37 -0
  748. data/plugins/providers/hyperv/action/package_setup_files.rb +19 -0
  749. data/plugins/providers/hyperv/action/package_setup_folders.rb +21 -0
  750. data/plugins/providers/hyperv/action/package_vagrantfile.rb +37 -0
  751. data/plugins/providers/hyperv/action/read_guest_ip.rb +45 -0
  752. data/plugins/providers/hyperv/action/read_state.rb +33 -0
  753. data/plugins/providers/hyperv/action/resume_vm.rb +20 -0
  754. data/plugins/providers/hyperv/action/set_name.rb +46 -0
  755. data/plugins/providers/hyperv/action/snapshot_delete.rb +30 -0
  756. data/plugins/providers/hyperv/action/snapshot_restore.rb +26 -0
  757. data/plugins/providers/hyperv/action/snapshot_save.rb +30 -0
  758. data/plugins/providers/hyperv/action/start_instance.rb +20 -0
  759. data/plugins/providers/hyperv/action/stop_instance.rb +20 -0
  760. data/plugins/providers/hyperv/action/suspend_vm.rb +20 -0
  761. data/plugins/providers/hyperv/action/wait_for_ip_address.rb +62 -0
  762. data/plugins/providers/hyperv/action.rb +326 -0
  763. data/plugins/providers/hyperv/cap/cleanup_disks.rb +92 -0
  764. data/plugins/providers/hyperv/cap/configure_disks.rb +248 -0
  765. data/plugins/providers/hyperv/cap/public_address.rb +18 -0
  766. data/plugins/providers/hyperv/cap/snapshot_list.rb +14 -0
  767. data/plugins/providers/hyperv/cap/validate_disk_ext.rb +37 -0
  768. data/plugins/providers/hyperv/config.rb +148 -0
  769. data/plugins/providers/hyperv/driver.rb +368 -0
  770. data/plugins/providers/hyperv/errors.rb +49 -0
  771. data/plugins/providers/hyperv/plugin.rb +74 -0
  772. data/plugins/providers/hyperv/provider.rb +116 -0
  773. data/plugins/providers/hyperv/scripts/add_dvd.ps1 +18 -0
  774. data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +31 -0
  775. data/plugins/providers/hyperv/scripts/check_hyperv.ps1 +11 -0
  776. data/plugins/providers/hyperv/scripts/check_hyperv_access.ps1 +17 -0
  777. data/plugins/providers/hyperv/scripts/clone_vhd.ps1 +21 -0
  778. data/plugins/providers/hyperv/scripts/configure_vm.ps1 +130 -0
  779. data/plugins/providers/hyperv/scripts/create_snapshot.ps1 +27 -0
  780. data/plugins/providers/hyperv/scripts/delete_snapshot.ps1 +19 -0
  781. data/plugins/providers/hyperv/scripts/delete_vm.ps1 +22 -0
  782. data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +16 -0
  783. data/plugins/providers/hyperv/scripts/export_vm.ps1 +32 -0
  784. data/plugins/providers/hyperv/scripts/file_sync.ps1 +123 -0
  785. data/plugins/providers/hyperv/scripts/get_network_config.ps1 +68 -0
  786. data/plugins/providers/hyperv/scripts/get_network_mac.ps1 +35 -0
  787. data/plugins/providers/hyperv/scripts/get_scsi_controller.ps1 +19 -0
  788. data/plugins/providers/hyperv/scripts/get_switches.ps1 +13 -0
  789. data/plugins/providers/hyperv/scripts/get_vhd.ps1 +19 -0
  790. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +52 -0
  791. data/plugins/providers/hyperv/scripts/has_vmcx_support.ps1 +12 -0
  792. data/plugins/providers/hyperv/scripts/import_vm.ps1 +40 -0
  793. data/plugins/providers/hyperv/scripts/list_hdds.ps1 +20 -0
  794. data/plugins/providers/hyperv/scripts/list_snapshots.ps1 +22 -0
  795. data/plugins/providers/hyperv/scripts/new_vhd.ps1 +34 -0
  796. data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +28 -0
  797. data/plugins/providers/hyperv/scripts/remove_dvd.ps1 +21 -0
  798. data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +21 -0
  799. data/plugins/providers/hyperv/scripts/restore_snapshot.ps1 +20 -0
  800. data/plugins/providers/hyperv/scripts/resume_vm.ps1 +19 -0
  801. data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +36 -0
  802. data/plugins/providers/hyperv/scripts/set_name.ps1 +27 -0
  803. data/plugins/providers/hyperv/scripts/set_network_mac.ps1 +21 -0
  804. data/plugins/providers/hyperv/scripts/set_network_vlan.ps1 +19 -0
  805. data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +30 -0
  806. data/plugins/providers/hyperv/scripts/start_vm.ps1 +29 -0
  807. data/plugins/providers/hyperv/scripts/stop_vm.ps1 +20 -0
  808. data/plugins/providers/hyperv/scripts/suspend_vm.ps1 +19 -0
  809. data/plugins/providers/hyperv/scripts/utils/VagrantMessages/VagrantMessages.psm1 +27 -0
  810. data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +776 -0
  811. data/plugins/providers/virtualbox/action/boot.rb +26 -0
  812. data/plugins/providers/virtualbox/action/check_accessible.rb +26 -0
  813. data/plugins/providers/virtualbox/action/check_created.rb +24 -0
  814. data/plugins/providers/virtualbox/action/check_guest_additions.rb +58 -0
  815. data/plugins/providers/virtualbox/action/check_running.rb +24 -0
  816. data/plugins/providers/virtualbox/action/check_virtualbox.rb +28 -0
  817. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +55 -0
  818. data/plugins/providers/virtualbox/action/clear_forwarded_ports.rb +23 -0
  819. data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +34 -0
  820. data/plugins/providers/virtualbox/action/created.rb +23 -0
  821. data/plugins/providers/virtualbox/action/customize.rb +48 -0
  822. data/plugins/providers/virtualbox/action/destroy.rb +22 -0
  823. data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +26 -0
  824. data/plugins/providers/virtualbox/action/discard_state.rb +23 -0
  825. data/plugins/providers/virtualbox/action/export.rb +54 -0
  826. data/plugins/providers/virtualbox/action/forced_halt.rb +28 -0
  827. data/plugins/providers/virtualbox/action/forward_ports.rb +92 -0
  828. data/plugins/providers/virtualbox/action/import.rb +110 -0
  829. data/plugins/providers/virtualbox/action/import_master.rb +83 -0
  830. data/plugins/providers/virtualbox/action/is_paused.rb +23 -0
  831. data/plugins/providers/virtualbox/action/is_running.rb +23 -0
  832. data/plugins/providers/virtualbox/action/is_saved.rb +23 -0
  833. data/plugins/providers/virtualbox/action/match_mac_address.rb +30 -0
  834. data/plugins/providers/virtualbox/action/message_already_running.rb +19 -0
  835. data/plugins/providers/virtualbox/action/message_not_created.rb +19 -0
  836. data/plugins/providers/virtualbox/action/message_not_running.rb +19 -0
  837. data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +20 -0
  838. data/plugins/providers/virtualbox/action/network.rb +638 -0
  839. data/plugins/providers/virtualbox/action/network_fix_ipv6.rb +87 -0
  840. data/plugins/providers/virtualbox/action/package.rb +19 -0
  841. data/plugins/providers/virtualbox/action/package_setup_files.rb +19 -0
  842. data/plugins/providers/virtualbox/action/package_setup_folders.rb +21 -0
  843. data/plugins/providers/virtualbox/action/package_vagrantfile.rb +36 -0
  844. data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +69 -0
  845. data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +38 -0
  846. data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +162 -0
  847. data/plugins/providers/virtualbox/action/prepare_nfs_valid_ids.rb +20 -0
  848. data/plugins/providers/virtualbox/action/resume.rb +28 -0
  849. data/plugins/providers/virtualbox/action/sane_defaults.rb +92 -0
  850. data/plugins/providers/virtualbox/action/set_default_nic_type.rb +72 -0
  851. data/plugins/providers/virtualbox/action/set_name.rb +58 -0
  852. data/plugins/providers/virtualbox/action/setup_package_files.rb +20 -0
  853. data/plugins/providers/virtualbox/action/snapshot_delete.rb +37 -0
  854. data/plugins/providers/virtualbox/action/snapshot_restore.rb +33 -0
  855. data/plugins/providers/virtualbox/action/snapshot_save.rb +28 -0
  856. data/plugins/providers/virtualbox/action/suspend.rb +23 -0
  857. data/plugins/providers/virtualbox/action.rb +433 -0
  858. data/plugins/providers/virtualbox/cap/cleanup_disks.rb +86 -0
  859. data/plugins/providers/virtualbox/cap/configure_disks.rb +441 -0
  860. data/plugins/providers/virtualbox/cap/mount_options.rb +43 -0
  861. data/plugins/providers/virtualbox/cap/public_address.rb +18 -0
  862. data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +37 -0
  863. data/plugins/providers/virtualbox/cap.rb +40 -0
  864. data/plugins/providers/virtualbox/config.rb +211 -0
  865. data/plugins/providers/virtualbox/driver/base.rb +530 -0
  866. data/plugins/providers/virtualbox/driver/meta.rb +212 -0
  867. data/plugins/providers/virtualbox/driver/version_4_0.rb +574 -0
  868. data/plugins/providers/virtualbox/driver/version_4_1.rb +699 -0
  869. data/plugins/providers/virtualbox/driver/version_4_2.rb +713 -0
  870. data/plugins/providers/virtualbox/driver/version_4_3.rb +757 -0
  871. data/plugins/providers/virtualbox/driver/version_5_0.rb +1022 -0
  872. data/plugins/providers/virtualbox/driver/version_5_1.rb +19 -0
  873. data/plugins/providers/virtualbox/driver/version_5_2.rb +19 -0
  874. data/plugins/providers/virtualbox/driver/version_6_0.rb +105 -0
  875. data/plugins/providers/virtualbox/driver/version_6_1.rb +42 -0
  876. data/plugins/providers/virtualbox/driver/version_7_0.rb +306 -0
  877. data/plugins/providers/virtualbox/driver/version_7_1.rb +19 -0
  878. data/plugins/providers/virtualbox/model/forwarded_port.rb +73 -0
  879. data/plugins/providers/virtualbox/model/storage_controller.rb +138 -0
  880. data/plugins/providers/virtualbox/model/storage_controller_array.rb +101 -0
  881. data/plugins/providers/virtualbox/plugin.rb +120 -0
  882. data/plugins/providers/virtualbox/provider.rb +133 -0
  883. data/plugins/providers/virtualbox/synced_folder.rb +153 -0
  884. data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +40 -0
  885. data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +47 -0
  886. data/plugins/provisioners/ansible/cap/guest/arch/ansible_install.rb +44 -0
  887. data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +56 -0
  888. data/plugins/provisioners/ansible/cap/guest/facts.rb +27 -0
  889. data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +43 -0
  890. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +26 -0
  891. data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +49 -0
  892. data/plugins/provisioners/ansible/cap/guest/posix/ansible_installed.rb +28 -0
  893. data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +75 -0
  894. data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +26 -0
  895. data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +42 -0
  896. data/plugins/provisioners/ansible/config/base.rb +157 -0
  897. data/plugins/provisioners/ansible/config/guest.rb +59 -0
  898. data/plugins/provisioners/ansible/config/host.rb +66 -0
  899. data/plugins/provisioners/ansible/constants.rb +17 -0
  900. data/plugins/provisioners/ansible/errors.rb +43 -0
  901. data/plugins/provisioners/ansible/helpers.rb +20 -0
  902. data/plugins/provisioners/ansible/plugin.rb +88 -0
  903. data/plugins/provisioners/ansible/provisioner/base.rb +405 -0
  904. data/plugins/provisioners/ansible/provisioner/guest.rb +197 -0
  905. data/plugins/provisioners/ansible/provisioner/host.rb +352 -0
  906. data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +24 -0
  907. data/plugins/provisioners/cfengine/cap/linux/cfengine_installed.rb +17 -0
  908. data/plugins/provisioners/cfengine/cap/linux/cfengine_needs_bootstrap.rb +37 -0
  909. data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +37 -0
  910. data/plugins/provisioners/cfengine/cap/suse/cfengine_install.rb +21 -0
  911. data/plugins/provisioners/cfengine/config.rb +127 -0
  912. data/plugins/provisioners/cfengine/plugin.rb +50 -0
  913. data/plugins/provisioners/cfengine/provisioner.rb +142 -0
  914. data/plugins/provisioners/chef/cap/debian/chef_install.rb +22 -0
  915. data/plugins/provisioners/chef/cap/freebsd/chef_install.rb +21 -0
  916. data/plugins/provisioners/chef/cap/freebsd/chef_installed.rb +27 -0
  917. data/plugins/provisioners/chef/cap/linux/chef_installed.rb +27 -0
  918. data/plugins/provisioners/chef/cap/omnios/chef_install.rb +23 -0
  919. data/plugins/provisioners/chef/cap/omnios/chef_installed.rb +28 -0
  920. data/plugins/provisioners/chef/cap/redhat/chef_install.rb +27 -0
  921. data/plugins/provisioners/chef/cap/suse/chef_install.rb +30 -0
  922. data/plugins/provisioners/chef/cap/windows/chef_install.rb +19 -0
  923. data/plugins/provisioners/chef/cap/windows/chef_installed.rb +24 -0
  924. data/plugins/provisioners/chef/command_builder.rb +87 -0
  925. data/plugins/provisioners/chef/config/base.rb +139 -0
  926. data/plugins/provisioners/chef/config/base_runner.rb +131 -0
  927. data/plugins/provisioners/chef/config/chef_apply.rb +53 -0
  928. data/plugins/provisioners/chef/config/chef_client.rb +77 -0
  929. data/plugins/provisioners/chef/config/chef_solo.rb +141 -0
  930. data/plugins/provisioners/chef/config/chef_zero.rb +133 -0
  931. data/plugins/provisioners/chef/installer.rb +51 -0
  932. data/plugins/provisioners/chef/omnibus.rb +40 -0
  933. data/plugins/provisioners/chef/plugin.rb +108 -0
  934. data/plugins/provisioners/chef/provisioner/base.rb +258 -0
  935. data/plugins/provisioners/chef/provisioner/chef_apply.rb +74 -0
  936. data/plugins/provisioners/chef/provisioner/chef_client.rb +179 -0
  937. data/plugins/provisioners/chef/provisioner/chef_solo.rb +244 -0
  938. data/plugins/provisioners/chef/provisioner/chef_zero.rb +123 -0
  939. data/plugins/provisioners/container/client.rb +206 -0
  940. data/plugins/provisioners/container/config.rb +86 -0
  941. data/plugins/provisioners/container/installer.rb +16 -0
  942. data/plugins/provisioners/container/plugin.rb +26 -0
  943. data/plugins/provisioners/container/provisioner.rb +31 -0
  944. data/plugins/provisioners/docker/cap/centos/docker_install.rb +44 -0
  945. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +27 -0
  946. data/plugins/provisioners/docker/cap/debian/docker_install.rb +21 -0
  947. data/plugins/provisioners/docker/cap/debian/docker_start_service.rb +16 -0
  948. data/plugins/provisioners/docker/cap/fedora/docker_install.rb +30 -0
  949. data/plugins/provisioners/docker/cap/linux/docker_configure_vagrant_user.rb +23 -0
  950. data/plugins/provisioners/docker/cap/linux/docker_daemon_running.rb +16 -0
  951. data/plugins/provisioners/docker/cap/linux/docker_installed.rb +29 -0
  952. data/plugins/provisioners/docker/cap/windows/docker_daemon_running.rb +16 -0
  953. data/plugins/provisioners/docker/client.rb +26 -0
  954. data/plugins/provisioners/docker/config.rb +19 -0
  955. data/plugins/provisioners/docker/installer.rb +37 -0
  956. data/plugins/provisioners/docker/plugin.rb +71 -0
  957. data/plugins/provisioners/docker/provisioner.rb +59 -0
  958. data/plugins/provisioners/file/config.rb +32 -0
  959. data/plugins/provisioners/file/plugin.rb +26 -0
  960. data/plugins/provisioners/file/provisioner.rb +46 -0
  961. data/plugins/provisioners/podman/cap/centos/podman_install.rb +38 -0
  962. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +16 -0
  963. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +29 -0
  964. data/plugins/provisioners/podman/client.rb +15 -0
  965. data/plugins/provisioners/podman/config.rb +31 -0
  966. data/plugins/provisioners/podman/installer.rb +36 -0
  967. data/plugins/provisioners/podman/plugin.rb +41 -0
  968. data/plugins/provisioners/podman/provisioner.rb +55 -0
  969. data/plugins/provisioners/puppet/config/puppet.rb +178 -0
  970. data/plugins/provisioners/puppet/config/puppet_server.rb +84 -0
  971. data/plugins/provisioners/puppet/plugin.rb +36 -0
  972. data/plugins/provisioners/puppet/provisioner/puppet.rb +336 -0
  973. data/plugins/provisioners/puppet/provisioner/puppet_server.rb +114 -0
  974. data/plugins/provisioners/salt/bootstrap_downloader.rb +62 -0
  975. data/plugins/provisioners/salt/config.rb +194 -0
  976. data/plugins/provisioners/salt/errors.rb +18 -0
  977. data/plugins/provisioners/salt/plugin.rb +25 -0
  978. data/plugins/provisioners/salt/provisioner.rb +499 -0
  979. data/plugins/provisioners/shell/config.rb +146 -0
  980. data/plugins/provisioners/shell/plugin.rb +26 -0
  981. data/plugins/provisioners/shell/provisioner.rb +368 -0
  982. data/plugins/pushes/atlas/config.rb +151 -0
  983. data/plugins/pushes/atlas/errors.rb +16 -0
  984. data/plugins/pushes/atlas/locales/en.yml +25 -0
  985. data/plugins/pushes/atlas/plugin.rb +38 -0
  986. data/plugins/pushes/atlas/push.rb +87 -0
  987. data/plugins/pushes/ftp/adapter.rb +147 -0
  988. data/plugins/pushes/ftp/config.rb +133 -0
  989. data/plugins/pushes/ftp/errors.rb +16 -0
  990. data/plugins/pushes/ftp/locales/en.yml +19 -0
  991. data/plugins/pushes/ftp/plugin.rb +36 -0
  992. data/plugins/pushes/ftp/push.rb +137 -0
  993. data/plugins/pushes/heroku/config.rb +77 -0
  994. data/plugins/pushes/heroku/errors.rb +24 -0
  995. data/plugins/pushes/heroku/locales/en.yml +33 -0
  996. data/plugins/pushes/heroku/plugin.rb +36 -0
  997. data/plugins/pushes/heroku/push.rb +147 -0
  998. data/plugins/pushes/local-exec/config.rb +80 -0
  999. data/plugins/pushes/local-exec/errors.rb +16 -0
  1000. data/plugins/pushes/local-exec/locales/en.yml +26 -0
  1001. data/plugins/pushes/local-exec/plugin.rb +36 -0
  1002. data/plugins/pushes/local-exec/push.rb +91 -0
  1003. data/plugins/pushes/noop/config.rb +19 -0
  1004. data/plugins/pushes/noop/plugin.rb +25 -0
  1005. data/plugins/pushes/noop/push.rb +12 -0
  1006. data/plugins/synced_folders/nfs/action_cleanup.rb +32 -0
  1007. data/plugins/synced_folders/nfs/config.rb +35 -0
  1008. data/plugins/synced_folders/nfs/plugin.rb +49 -0
  1009. data/plugins/synced_folders/nfs/synced_folder.rb +171 -0
  1010. data/plugins/synced_folders/rsync/command/rsync.rb +81 -0
  1011. data/plugins/synced_folders/rsync/command/rsync_auto.rb +244 -0
  1012. data/plugins/synced_folders/rsync/default_unix_cap.rb +49 -0
  1013. data/plugins/synced_folders/rsync/helper.rb +296 -0
  1014. data/plugins/synced_folders/rsync/plugin.rb +31 -0
  1015. data/plugins/synced_folders/rsync/synced_folder.rb +62 -0
  1016. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +14 -0
  1017. data/plugins/synced_folders/smb/cap/mount_options.rb +59 -0
  1018. data/plugins/synced_folders/smb/config.rb +26 -0
  1019. data/plugins/synced_folders/smb/errors.rb +65 -0
  1020. data/plugins/synced_folders/smb/plugin.rb +60 -0
  1021. data/plugins/synced_folders/smb/synced_folder.rb +189 -0
  1022. data/plugins/synced_folders/unix_mount_helpers.rb +122 -0
  1023. data/scripts/install_rvm +19 -0
  1024. data/scripts/setup_tests +49 -0
  1025. data/scripts/sign.sh +29 -0
  1026. data/scripts/website_push_www.sh +43 -0
  1027. data/tasks/acceptance.rake +22 -0
  1028. data/tasks/bundler.rake +3 -0
  1029. data/tasks/test.rake +8 -0
  1030. data/templates/commands/init/Vagrantfile.erb +86 -0
  1031. data/templates/commands/init/Vagrantfile.min.erb +12 -0
  1032. data/templates/commands/ssh_config/config.erb +42 -0
  1033. data/templates/commands/winrm_config/config.erb +11 -0
  1034. data/templates/config/messages.erb +14 -0
  1035. data/templates/config/validation_failed.erb +7 -0
  1036. data/templates/guests/alpine/network_dhcp.erb +13 -0
  1037. data/templates/guests/alpine/network_static.erb +7 -0
  1038. data/templates/guests/alt/network_dhcp.erb +7 -0
  1039. data/templates/guests/alt/network_ipv4address.erb +3 -0
  1040. data/templates/guests/alt/network_ipv4route.erb +5 -0
  1041. data/templates/guests/alt/network_static.erb +7 -0
  1042. data/templates/guests/arch/default_network/network_dhcp.erb +4 -0
  1043. data/templates/guests/arch/default_network/network_static.erb +8 -0
  1044. data/templates/guests/arch/default_network/network_static6.erb +8 -0
  1045. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  1046. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  1047. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  1048. data/templates/guests/coreos/etcd.service.erb +10 -0
  1049. data/templates/guests/debian/network_dhcp.erb +13 -0
  1050. data/templates/guests/debian/network_static.erb +10 -0
  1051. data/templates/guests/debian/network_static6.erb +10 -0
  1052. data/templates/guests/freebsd/network_dhcp.erb +4 -0
  1053. data/templates/guests/freebsd/network_static.erb +6 -0
  1054. data/templates/guests/freebsd/network_static6.erb +6 -0
  1055. data/templates/guests/funtoo/network_dhcp.erb +4 -0
  1056. data/templates/guests/funtoo/network_static.erb +10 -0
  1057. data/templates/guests/funtoo/network_static6.erb +9 -0
  1058. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  1059. data/templates/guests/gentoo/network_static.erb +8 -0
  1060. data/templates/guests/gentoo/network_static6.erb +8 -0
  1061. data/templates/guests/gentoo/network_systemd.erb +16 -0
  1062. data/templates/guests/linux/etc_fstab.erb +6 -0
  1063. data/templates/guests/netbsd/network_dhcp.erb +3 -0
  1064. data/templates/guests/netbsd/network_static.erb +3 -0
  1065. data/templates/guests/nixos/hostname.erb +6 -0
  1066. data/templates/guests/nixos/network.erb +15 -0
  1067. data/templates/guests/openbsd/network_dhcp.erb +1 -0
  1068. data/templates/guests/openbsd/network_static.erb +1 -0
  1069. data/templates/guests/openbsd/network_static6.erb +1 -0
  1070. data/templates/guests/redhat/network_dhcp.erb +7 -0
  1071. data/templates/guests/redhat/network_static.erb +16 -0
  1072. data/templates/guests/redhat/network_static6.erb +12 -0
  1073. data/templates/guests/slackware/network_dhcp.erb +11 -0
  1074. data/templates/guests/slackware/network_static.erb +13 -0
  1075. data/templates/guests/suse/network_dhcp.erb +6 -0
  1076. data/templates/guests/suse/network_static.erb +13 -0
  1077. data/templates/guests/suse/network_static6.erb +16 -0
  1078. data/templates/license/license.html.tmpl +127 -0
  1079. data/templates/license/license.rtf.tmpl +0 -0
  1080. data/templates/license/license.tmpl +92 -0
  1081. data/templates/locales/comm_winrm.yml +85 -0
  1082. data/templates/locales/command_ps.yml +35 -0
  1083. data/templates/locales/command_rdp.yml +28 -0
  1084. data/templates/locales/en.yml +3149 -0
  1085. data/templates/locales/guest_windows.yml +26 -0
  1086. data/templates/locales/providers_docker.yml +321 -0
  1087. data/templates/locales/providers_hyperv.yml +111 -0
  1088. data/templates/locales/synced_folder_smb.yml +98 -0
  1089. data/templates/networking/network_manager/network_manager_device.erb +41 -0
  1090. data/templates/nfs/exports_bsd.erb +5 -0
  1091. data/templates/nfs/exports_darwin.erb +7 -0
  1092. data/templates/nfs/exports_linux.erb +7 -0
  1093. data/templates/package_Vagrantfile.erb +11 -0
  1094. data/templates/provisioners/chef_client/client.erb +41 -0
  1095. data/templates/provisioners/chef_solo/solo.erb +52 -0
  1096. data/templates/provisioners/chef_zero/zero.erb +45 -0
  1097. data/templates/rgloader.rb +12 -0
  1098. data/vagrant-spec.config.example.rb +13 -0
  1099. data/vagrant.gemspec +110 -20
  1100. data/version.txt +1 -0
  1101. metadata +1581 -43
  1102. data/LICENSE.txt +0 -22
  1103. data/message.txt +0 -17
@@ -0,0 +1,938 @@
1
+ # Copyright (c) HashiCorp, Inc.
2
+ # SPDX-License-Identifier: BUSL-1.1
3
+
4
+ require "monitor"
5
+ require "pathname"
6
+ require "set"
7
+ require "tempfile"
8
+ require "fileutils"
9
+ require "uri"
10
+
11
+ require "rubygems/package"
12
+ require "rubygems/uninstaller"
13
+ require "rubygems/name_tuple"
14
+
15
+ require_relative "shared_helpers"
16
+ require_relative "version"
17
+ require_relative "util/safe_env"
18
+
19
+ module Vagrant
20
+ # This class manages Vagrant's interaction with Bundler. Vagrant uses
21
+ # Bundler as a way to properly resolve all dependencies of Vagrant and
22
+ # all Vagrant-installed plugins.
23
+ class Bundler
24
+ class SolutionFile
25
+ # @return [Pathname] path to plugin file
26
+ attr_reader :plugin_file
27
+ # @return [Pathname] path to solution file
28
+ attr_reader :solution_file
29
+ # @return [Array<Gem::Resolver::DependencyRequest>] list of required dependencies
30
+ attr_reader :dependency_list
31
+
32
+ # @param [Pathname] plugin_file Path to plugin file
33
+ # @param [Pathname] solution_file Custom path to solution file
34
+ def initialize(plugin_file:, solution_file: nil)
35
+ @logger = Log4r::Logger.new("vagrant::bundler::solution_file")
36
+ @plugin_file = Pathname.new(plugin_file.to_s)
37
+ if solution_file
38
+ @solution_file = Pathname.new(solution_file.to_s)
39
+ else
40
+ @solution_file = Pathname.new(@plugin_file.to_s + ".sol")
41
+ end
42
+ @valid = false
43
+ @dependency_list = [].freeze
44
+ @logger.debug("new solution file instance plugin_file=#{plugin_file} " \
45
+ "solution_file=#{solution_file}")
46
+ load
47
+ end
48
+
49
+ # Set the list of dependencies for this solution
50
+ #
51
+ # @param [Array<Gem::Dependency>] dependency_list List of dependencies for the solution
52
+ # @return [Array<Gem::Resolver::DependencyRequest>]
53
+ def dependency_list=(dependency_list)
54
+ Array(dependency_list).each do |d|
55
+ if !d.is_a?(Gem::Dependency)
56
+ raise TypeError, "Expected `Gem::Dependency` but received `#{d.class}`"
57
+ end
58
+ end
59
+ @dependency_list = dependency_list.map do |d|
60
+ Gem::Resolver::DependencyRequest.new(d, nil).freeze
61
+ end.freeze
62
+ end
63
+
64
+ # @return [Boolean] contained solution is valid
65
+ def valid?
66
+ @valid
67
+ end
68
+
69
+ # @return [FalseClass] invalidate this solution file
70
+ def invalidate!
71
+ @valid = false
72
+ @logger.debug("manually invalidating solution file #{self}")
73
+ @valid
74
+ end
75
+
76
+ # Delete the solution file
77
+ #
78
+ # @return [Boolean] true if file was deleted
79
+ def delete!
80
+ if !solution_file.exist?
81
+ @logger.debug("solution file does not exist. nothing to delete.")
82
+ return false
83
+ end
84
+ @logger.debug("deleting solution file - #{solution_file}")
85
+ solution_file.delete
86
+ true
87
+ end
88
+
89
+ # Store the solution file
90
+ def store!
91
+ if !plugin_file.exist?
92
+ @logger.debug("plugin file does not exist, not storing solution")
93
+ return
94
+ end
95
+ if !solution_file.dirname.exist?
96
+ @logger.debug("creating directory for solution file: #{solution_file.dirname}")
97
+ solution_file.dirname.mkpath
98
+ end
99
+ @logger.debug("writing solution file contents to disk")
100
+ solution_file.write({
101
+ dependencies: dependency_list.map { |d|
102
+ [d.dependency.name, d.dependency.requirements_list]
103
+ },
104
+ checksum: plugin_file_checksum,
105
+ vagrant_version: Vagrant::VERSION
106
+ }.to_json)
107
+ @valid = true
108
+ end
109
+
110
+ def to_s # :nodoc:
111
+ "<Vagrant::Bundler::SolutionFile:#{plugin_file}:" \
112
+ "#{solution_file}:#{valid? ? "valid" : "invalid"}>"
113
+ end
114
+
115
+ protected
116
+
117
+ # Load the solution file for the plugin path provided
118
+ # if it exists. Validate solution is still applicable
119
+ # before injecting dependencies.
120
+ def load
121
+ if !plugin_file.exist? || !solution_file.exist?
122
+ @logger.debug("missing file so skipping loading")
123
+ return
124
+ end
125
+ solution = read_solution || return
126
+ return if !valid_solution?(
127
+ checksum: solution[:checksum],
128
+ version: solution[:vagrant_version]
129
+ )
130
+ @logger.debug("loading solution dependency list")
131
+ @dependency_list = Array(solution[:dependencies]).map do |name, requirements|
132
+ gd = Gem::Dependency.new(name, requirements)
133
+ Gem::Resolver::DependencyRequest.new(gd, nil).freeze
134
+ end.freeze
135
+ @logger.debug("solution dependency list: #{dependency_list}")
136
+ @valid = true
137
+ end
138
+
139
+ # Validate the given checksum matches the plugin file
140
+ # checksum
141
+ #
142
+ # @param [String] checksum Checksum value to validate
143
+ # @return [Boolean]
144
+ def valid_solution?(checksum:, version:)
145
+ file_checksum = plugin_file_checksum
146
+ @logger.debug("solution validation check CHECKSUM #{file_checksum} <-> #{checksum}" \
147
+ " VERSION #{Vagrant::VERSION} <-> #{version}")
148
+ plugin_file_checksum == checksum &&
149
+ Vagrant::VERSION == version
150
+ end
151
+
152
+ # @return [String] checksum of plugin file
153
+ def plugin_file_checksum
154
+ digest = Digest::SHA256.new
155
+ digest.file(plugin_file.to_s)
156
+ digest.hexdigest
157
+ end
158
+
159
+ # Read contents of solution file and parse
160
+ #
161
+ # @return [Hash]
162
+ def read_solution
163
+ @logger.debug("reading solution file - #{solution_file}")
164
+ begin
165
+ hash = JSON.load(solution_file.read)
166
+ Vagrant::Util::HashWithIndifferentAccess.new(hash)
167
+ rescue => err
168
+ @logger.warn("failed to load solution file, ignoring (error: #{err})")
169
+ nil
170
+ end
171
+ end
172
+ end
173
+
174
+ # Location of HashiCorp gem repository
175
+ HASHICORP_GEMSTORE = "https://gems.hashicorp.com/".freeze
176
+
177
+ # Default gem repositories
178
+ DEFAULT_GEM_SOURCES = [
179
+ HASHICORP_GEMSTORE,
180
+ "https://rubygems.org/".freeze
181
+ ].freeze
182
+
183
+ def self.instance
184
+ @bundler ||= self.new
185
+ end
186
+
187
+ # @return [Pathname] Global plugin path
188
+ attr_reader :plugin_gem_path
189
+ # @return [Pathname] Global plugin solution set path
190
+ attr_reader :plugin_solution_path
191
+ # @return [Pathname] Vagrant environment specific plugin path
192
+ attr_reader :env_plugin_gem_path
193
+ # @return [Pathname] Vagrant environment data path
194
+ attr_reader :environment_data_path
195
+ # @return [Array<Gem::Specification>, nil] List of builtin specs
196
+ attr_accessor :builtin_specs
197
+
198
+ def initialize
199
+ @builtin_specs = []
200
+ @plugin_gem_path = Vagrant.user_data_path.join("gems", RUBY_VERSION).freeze
201
+ @logger = Log4r::Logger.new("vagrant::bundler")
202
+ end
203
+
204
+ # Enable Vagrant environment specific plugins at given data path
205
+ #
206
+ # @param [Pathname] Path to Vagrant::Environment data directory
207
+ # @return [Pathname] Path to environment specific gem directory
208
+ def environment_path=(env_data_path)
209
+ if !env_data_path.is_a?(Pathname)
210
+ raise TypeError, "Expected `Pathname` but received `#{env_data_path.class}`"
211
+ end
212
+ @env_plugin_gem_path = env_data_path.join("plugins", "gems", RUBY_VERSION).freeze
213
+ @environment_data_path = env_data_path
214
+ end
215
+
216
+ # Use the given options to create a solution file instance
217
+ # for use during initialization. When a Vagrant environment
218
+ # is in use, solution files will be stored within the environment's
219
+ # data directory. This is because the solution for loading global
220
+ # plugins is dependent on any solution generated for local plugins.
221
+ # When no Vagrant environment is in use (running Vagrant without a
222
+ # Vagrantfile), the Vagrant user data path will be used for solution
223
+ # storage since only the global plugins will be used.
224
+ #
225
+ # @param [Hash] opts Options passed to #init!
226
+ # @return [SolutionFile]
227
+ def load_solution_file(opts={})
228
+ return if !opts[:local] && !opts[:global]
229
+ return if opts[:local] && opts[:global]
230
+ return if opts[:local] && environment_data_path.nil?
231
+ solution_path = (environment_data_path || Vagrant.user_data_path) + "bundler"
232
+ solution_path += opts[:local] ? "local.sol" : "global.sol"
233
+ SolutionFile.new(
234
+ plugin_file: opts[:local] || opts[:global],
235
+ solution_file: solution_path
236
+ )
237
+ end
238
+
239
+ # Initializes Bundler and the various gem paths so that we can begin
240
+ # loading gems.
241
+ def init!(plugins, repair=false, **opts)
242
+ if !@initial_specifications
243
+ @initial_specifications = Gem::Specification.find_all{true}
244
+ else
245
+ Gem::Specification.all = @initial_specifications
246
+ Gem::Specification.reset
247
+ end
248
+
249
+ solution_file = load_solution_file(opts)
250
+ @logger.debug("solution file in use for init: #{solution_file}")
251
+
252
+ solution = nil
253
+ composed_set = generate_vagrant_set
254
+
255
+ # Force the composed set to allow prereleases
256
+ if Vagrant.allow_prerelease_dependencies?
257
+ @logger.debug("enabling prerelease dependency matching due to user request")
258
+ composed_set.prerelease = true
259
+ end
260
+
261
+ if solution_file&.valid?
262
+ @logger.debug("loading cached solution set")
263
+ solution = solution_file.dependency_list.map do |dep|
264
+ spec = composed_set.find_all(dep).select do |dep_spec|
265
+ next(true) unless Gem.loaded_specs.has_key?(dep_spec.name)
266
+
267
+ Gem.loaded_specs[dep_spec.name].version.eql?(dep_spec.version)
268
+ end.first
269
+
270
+ if !spec
271
+ @logger.warn("failed to locate specification for dependency - #{dep}")
272
+ @logger.warn("invalidating solution file - #{solution_file}")
273
+ solution_file.invalidate!
274
+ break
275
+ end
276
+ dep_r = Gem::Resolver::DependencyRequest.new(dep, nil)
277
+ Gem::Resolver::ActivationRequest.new(spec, dep_r)
278
+ end
279
+ end
280
+
281
+ if !solution_file&.valid?
282
+ @logger.debug("generating solution set for configured plugins")
283
+ # Add HashiCorp RubyGems source
284
+ if !Gem.sources.include?(HASHICORP_GEMSTORE)
285
+ sources = [HASHICORP_GEMSTORE] + Gem.sources.sources
286
+ Gem.sources.replace(sources)
287
+ end
288
+
289
+ # Generate dependencies for all registered plugins
290
+ plugin_deps = plugins.map do |name, info|
291
+ Gem::Dependency.new(name, info['installed_gem_version'].to_s.empty? ? '> 0' : info['installed_gem_version'])
292
+ end
293
+
294
+ @logger.debug("Current generated plugin dependency list: #{plugin_deps}")
295
+
296
+ # Load dependencies into a request set for resolution
297
+ request_set = Gem::RequestSet.new(*plugin_deps)
298
+ # Never allow dependencies to be remotely satisfied during init
299
+ request_set.remote = false
300
+
301
+ begin
302
+ @logger.debug("resolving solution from available specification set")
303
+ # Resolve the request set to ensure proper activation order
304
+ solution = request_set.resolve(composed_set)
305
+ @logger.debug("solution set for configured plugins has been resolved")
306
+ rescue Gem::UnsatisfiableDependencyError => failure
307
+ if repair
308
+ raise failure if @init_retried
309
+ @logger.debug("Resolution failed but attempting to repair. Failure: #{failure}")
310
+ install(plugins)
311
+ @init_retried = true
312
+ retry
313
+ else
314
+ raise
315
+ end
316
+ end
317
+ end
318
+
319
+ # Activate the gems
320
+ @logger.debug("activating solution set")
321
+ activate_solution(solution)
322
+
323
+ if solution_file && !solution_file.valid?
324
+ solution_file.dependency_list = solution.map do |activation|
325
+ activation.request.dependency
326
+ end
327
+ solution_file.store!
328
+ @logger.debug("solution set stored to - #{solution_file}")
329
+ end
330
+
331
+ full_vagrant_spec_list = @initial_specifications +
332
+ solution.map(&:full_spec)
333
+
334
+ if(defined?(::Bundler))
335
+ @logger.debug("Updating Bundler with full specification list")
336
+ ::Bundler.rubygems.replace_entrypoints(full_vagrant_spec_list)
337
+ end
338
+
339
+ Gem.post_reset do
340
+ Gem::Specification.all = full_vagrant_spec_list
341
+ end
342
+
343
+ Gem::Specification.reset
344
+ nil
345
+ end
346
+
347
+ # Removes any temporary files created by init
348
+ def deinit
349
+ # no-op
350
+ end
351
+
352
+ # Installs the list of plugins.
353
+ #
354
+ # @param [Hash] plugins
355
+ # @param [Boolean] env_local Environment local plugin install
356
+ # @return [Array<Gem::Specification>]
357
+ def install(plugins, env_local=false)
358
+ internal_install(plugins, nil, env_local: env_local)
359
+ end
360
+
361
+ # Installs a local '*.gem' file so that Bundler can find it.
362
+ #
363
+ # @param [String] path Path to a local gem file.
364
+ # @return [Gem::Specification]
365
+ def install_local(path, opts={})
366
+ plugin_source = Gem::Source::SpecificFile.new(path)
367
+ plugin_info = {
368
+ plugin_source.spec.name => {
369
+ "gem_version" => plugin_source.spec.version.to_s,
370
+ "local_source" => plugin_source,
371
+ "sources" => opts.fetch(:sources, [])
372
+ }
373
+ }
374
+ @logger.debug("Installing local plugin - #{plugin_info}")
375
+ internal_install(plugin_info, nil, env_local: opts[:env_local])
376
+ plugin_source.spec
377
+ end
378
+
379
+ # Update updates the given plugins, or every plugin if none is given.
380
+ #
381
+ # @param [Hash] plugins
382
+ # @param [Array<String>] specific Specific plugin names to update. If
383
+ # empty or nil, all plugins will be updated.
384
+ def update(plugins, specific, **opts)
385
+ specific ||= []
386
+ update = opts.merge({gems: specific.empty? ? true : specific})
387
+ internal_install(plugins, update)
388
+ end
389
+
390
+ # Clean removes any unused gems.
391
+ def clean(plugins, **opts)
392
+ @logger.debug("Cleaning Vagrant plugins of stale gems.")
393
+ # Generate dependencies for all registered plugins
394
+ plugin_deps = plugins.map do |name, info|
395
+ gem_version = info['installed_gem_version']
396
+ gem_version = info['gem_version'] if gem_version.to_s.empty?
397
+ gem_version = "> 0" if gem_version.to_s.empty?
398
+ Gem::Dependency.new(name, gem_version)
399
+ end
400
+
401
+ @logger.debug("Current plugin dependency list: #{plugin_deps}")
402
+
403
+ # Load dependencies into a request set for resolution
404
+ request_set = Gem::RequestSet.new(*plugin_deps)
405
+ # Never allow dependencies to be remotely satisfied during cleaning
406
+ request_set.remote = false
407
+
408
+ # Sets that we can resolve our dependencies from. Note that we only
409
+ # resolve from the current set as all required deps are activated during
410
+ # init.
411
+ current_set = generate_vagrant_set
412
+
413
+ # Collect all plugin specifications
414
+ plugin_specs = Dir.glob(plugin_gem_path.join('specifications/*.gemspec').to_s).map do |spec_path|
415
+ Gem::Specification.load(spec_path)
416
+ end
417
+
418
+ # Include environment specific specification if enabled
419
+ if env_plugin_gem_path
420
+ plugin_specs += Dir.glob(env_plugin_gem_path.join('specifications/*.gemspec').to_s).map do |spec_path|
421
+ Gem::Specification.load(spec_path)
422
+ end
423
+ end
424
+
425
+ @logger.debug("Generating current plugin state solution set.")
426
+
427
+ # Resolve the request set to ensure proper activation order
428
+ solution = request_set.resolve(current_set)
429
+ solution_specs = solution.map(&:full_spec)
430
+ solution_full_names = solution_specs.map(&:full_name)
431
+
432
+ # Find all specs installed to plugins directory that are not
433
+ # found within the solution set.
434
+ plugin_specs.delete_if do |spec|
435
+ solution_full_names.include?(spec.full_name)
436
+ end
437
+
438
+ if env_plugin_gem_path
439
+ # If we are cleaning locally, remove any global specs. If
440
+ # not, remove any local specs
441
+ if opts[:env_local]
442
+ @logger.debug("Removing specifications that are not environment local")
443
+ plugin_specs.delete_if do |spec|
444
+ spec.full_gem_path.to_s.include?(plugin_gem_path.realpath.to_s)
445
+ end
446
+ else
447
+ @logger.debug("Removing specifications that are environment local")
448
+ plugin_specs.delete_if do |spec|
449
+ spec.full_gem_path.to_s.include?(env_plugin_gem_path.realpath.to_s)
450
+ end
451
+ end
452
+ end
453
+
454
+ @logger.debug("Specifications to be removed - #{plugin_specs.map(&:full_name)}")
455
+
456
+ # Now delete all unused specs
457
+ plugin_specs.each do |spec|
458
+ @logger.debug("Uninstalling gem - #{spec.full_name}")
459
+ Gem::Uninstaller.new(spec.name,
460
+ version: spec.version,
461
+ install_dir: plugin_gem_path,
462
+ all: true,
463
+ executables: true,
464
+ force: true,
465
+ ignore: true,
466
+ ).uninstall_gem(spec)
467
+ end
468
+
469
+ solution.find_all do |spec|
470
+ plugins.keys.include?(spec.name)
471
+ end
472
+ end
473
+
474
+ # During the duration of the yielded block, Bundler loud output
475
+ # is enabled.
476
+ def verbose
477
+ if block_given?
478
+ initial_state = @verbose
479
+ @verbose = true
480
+ yield
481
+ @verbose = initial_state
482
+ else
483
+ @verbose = true
484
+ end
485
+ end
486
+
487
+ protected
488
+
489
+ def internal_install(plugins, update, **extra)
490
+ update = {} if !update.is_a?(Hash)
491
+ skips = []
492
+ source_list = {}
493
+ system_plugins = plugins.map do |plugin_name, plugin_info|
494
+ plugin_name if plugin_info["system"]
495
+ end.compact
496
+ installer_set = VagrantSet.new(:both)
497
+ installer_set.system_plugins = system_plugins
498
+
499
+ # Generate all required plugin deps
500
+ plugin_deps = plugins.map do |name, info|
501
+ gem_version = info['gem_version'].to_s.empty? ? '> 0' : info['gem_version']
502
+ if update[:gems] == true || (update[:gems].respond_to?(:include?) && update[:gems].include?(name))
503
+ if Gem::Requirement.new(gem_version).exact?
504
+ gem_version = "> 0"
505
+ @logger.debug("Detected exact version match for `#{name}` plugin update. Reset to loosen constraint #{gem_version.inspect}.")
506
+ end
507
+ skips << name
508
+ end
509
+ source_list[name] ||= []
510
+ if plugin_source = info.delete("local_source")
511
+ installer_set.add_local(plugin_source.spec.name, plugin_source.spec, plugin_source)
512
+ source_list[name] << plugin_source.path
513
+ end
514
+ Array(info["sources"]).each do |source|
515
+ if !source.end_with?("/")
516
+ source = source + "/"
517
+ end
518
+ source_list[name] << source
519
+ end
520
+ Gem::Dependency.new(name, *gem_version.split(","))
521
+ end
522
+
523
+ if Vagrant.strict_dependency_enforcement
524
+ @logger.debug("Enabling strict dependency enforcement")
525
+ plugin_deps += vagrant_internal_specs.map do |spec|
526
+ # NOTE: When working within bundler, skip any system plugins and
527
+ # default gems. However, when not within bundler (in the installer)
528
+ # include them as strict dependencies to prevent the resolver from
529
+ # attempting to create a solution with a newer version. The request
530
+ # set does allow for resolving conservatively but it can't be set
531
+ # from the public API (requires an instance variable set on the resolver
532
+ # instance) so strict dependencies are used instead.
533
+ if Vagrant.in_bundler?
534
+ next if system_plugins.include?(spec.name)
535
+ # # If this spec is for a default plugin included in
536
+ # # the ruby stdlib, ignore it
537
+ next if spec.default_gem?
538
+ end
539
+
540
+ # If we are not running within the installer and
541
+ # we are not within a bundler environment then we
542
+ # only want activated specs
543
+ if !Vagrant.in_installer? && !Vagrant.in_bundler?
544
+ next if !spec.activated?
545
+ end
546
+ Gem::Dependency.new(spec.name, spec.version)
547
+ end.compact
548
+ else
549
+ @logger.debug("Disabling strict dependency enforcement")
550
+ end
551
+
552
+ dep_list = plugin_deps.sort_by(&:name).map { |d|
553
+ "#{d.name} #{d.requirement}"
554
+ }.join("\n - ")
555
+ @logger.debug("Dependency list for installation:\n - #{dep_list}")
556
+
557
+ all_sources = source_list.values.flatten.uniq
558
+ default_sources = DEFAULT_GEM_SOURCES & all_sources
559
+ all_sources -= DEFAULT_GEM_SOURCES
560
+
561
+ # Only allow defined Gem sources
562
+ Gem.sources.clear
563
+
564
+ @logger.debug("Enabling user defined remote RubyGems sources")
565
+ all_sources.each do |src|
566
+ begin
567
+ next if File.file?(src) || URI.parse(src).scheme.nil?
568
+ rescue URI::InvalidURIError
569
+ next
570
+ end
571
+ @logger.debug("Adding RubyGems source #{src}")
572
+ Gem.sources << src
573
+ end
574
+
575
+ @logger.debug("Enabling default remote RubyGems sources")
576
+ default_sources.each do |src|
577
+ @logger.debug("Adding source - #{src}")
578
+ Gem.sources << src
579
+ end
580
+
581
+ validate_configured_sources!
582
+
583
+ source_list.values.each{|srcs| srcs.delete_if{|src| default_sources.include?(src)}}
584
+ installer_set.prefer_sources = source_list
585
+
586
+ @logger.debug("Current source list for install: #{Gem.sources.to_a}")
587
+
588
+ # Create the request set for the new plugins
589
+ request_set = Gem::RequestSet.new(*plugin_deps)
590
+
591
+ installer_set = Gem::Resolver.compose_sets(
592
+ installer_set,
593
+ generate_builtin_set(system_plugins),
594
+ generate_plugin_set(skips)
595
+ )
596
+
597
+ if Vagrant.allow_prerelease_dependencies?
598
+ @logger.debug("enabling prerelease dependency matching based on user request")
599
+ request_set.prerelease = true
600
+ installer_set.prerelease = true
601
+ end
602
+
603
+ @logger.debug("Generating solution set for installation.")
604
+
605
+ # Generate the required solution set for new plugins
606
+ solution = request_set.resolve(installer_set)
607
+
608
+ activate_solution(solution)
609
+
610
+ # Remove gems which are already installed
611
+ request_set.sorted_requests.delete_if do |act_req|
612
+ rs = act_req.spec
613
+ if vagrant_internal_specs.detect{ |i| i.name == rs.name && i.version == rs.version }
614
+ @logger.debug("Removing activation request from install. Already installed. (#{rs.spec.full_name})")
615
+ true
616
+ end
617
+ end
618
+
619
+ @logger.debug("Installing required gems.")
620
+
621
+ # Install all remote gems into plugin path. Set the installer to ignore dependencies
622
+ # as we know the dependencies are satisfied and it will attempt to validate a gem's
623
+ # dependencies are satisfied by gems in the install directory (which will likely not
624
+ # be true)
625
+ install_path = extra[:env_local] ? env_plugin_gem_path : plugin_gem_path
626
+ result = request_set.install_into(install_path.to_s, true,
627
+ ignore_dependencies: true,
628
+ prerelease: Vagrant.prerelease? || Vagrant.allow_prerelease_dependencies?,
629
+ wrappers: true,
630
+ document: []
631
+ )
632
+
633
+ result = result.map(&:full_spec)
634
+ result.each do |spec|
635
+ existing_paths = $LOAD_PATH.find_all{|s| s.include?(spec.full_name) }
636
+ if !existing_paths.empty?
637
+ @logger.debug("Removing existing LOAD_PATHs for #{spec.full_name} - " +
638
+ existing_paths.join(", "))
639
+ existing_paths.each{|s| $LOAD_PATH.delete(s) }
640
+ end
641
+ spec.full_require_paths.each do |r_path|
642
+ if !$LOAD_PATH.include?(r_path)
643
+ @logger.debug("Adding path to LOAD_PATH - #{r_path}")
644
+ $LOAD_PATH.unshift(r_path)
645
+ end
646
+ end
647
+ end
648
+ result
649
+ end
650
+
651
+ # Generate the composite resolver set totally all of vagrant (builtin + plugin set)
652
+ def generate_vagrant_set
653
+ sets = [generate_builtin_set, generate_plugin_set]
654
+ if env_plugin_gem_path && env_plugin_gem_path.exist?
655
+ sets << generate_plugin_set(env_plugin_gem_path)
656
+ end
657
+ Gem::Resolver.compose_sets(*sets)
658
+ end
659
+
660
+ # @return [Array<[Gem::Specification]>] spec list
661
+ def vagrant_internal_specs
662
+ # activate any dependencies up front so we can always
663
+ # pin them when resolving
664
+ self_spec = Gem::Specification.find { |s| s.name == "vagrant" && s.activated? }
665
+ if !self_spec
666
+ @logger.warn("Failed to locate activated vagrant specification. Activating...")
667
+ self_spec = Gem::Specification.find { |s| s.name == "vagrant" }
668
+ if !self_spec
669
+ @logger.error("Failed to locate Vagrant RubyGem specification")
670
+ raise Vagrant::Errors::SourceSpecNotFound
671
+ end
672
+ self_spec.activate
673
+ @logger.info("Activated vagrant specification version - #{self_spec.version}")
674
+ end
675
+ # discover all the gems we have available
676
+ list = {}
677
+ if Gem.respond_to?(:default_specifications_dir)
678
+ spec_dir = Gem.default_specifications_dir
679
+ else
680
+ spec_dir = Gem::Specification.default_specifications_dir
681
+ end
682
+ directories = [spec_dir]
683
+ if Vagrant.in_bundler?
684
+ Gem::Specification.find_all{true}.each do |spec|
685
+ list[spec.name] = spec
686
+ end
687
+ else
688
+ builtin_specs.each do |spec|
689
+ list[spec.name] = spec
690
+ end
691
+ end
692
+ if Vagrant.in_installer?
693
+ directories += Gem::Specification.dirs.find_all do |path|
694
+ !path.start_with?(Gem.user_dir)
695
+ end
696
+ end
697
+ Gem::Specification.each_spec(directories) do |spec|
698
+ if !list[spec.name] || list[spec.name].version < spec.version
699
+ list[spec.name] = spec
700
+ end
701
+ end
702
+ list.values
703
+ end
704
+
705
+ # Iterates each configured RubyGem source to validate that it is properly
706
+ # available. If source is unavailable an exception is raised.
707
+ def validate_configured_sources!
708
+ Gem.sources.each_source do |src|
709
+ begin
710
+ src.load_specs(:released)
711
+ rescue Gem::Exception => source_error
712
+ if ENV["VAGRANT_ALLOW_PLUGIN_SOURCE_ERRORS"]
713
+ @logger.warn("Failed to load configured plugin source: #{src}!")
714
+ @logger.warn("Error received attempting to load source (#{src}): #{source_error}")
715
+ @logger.warn("Ignoring plugin source load failure due user request via env variable")
716
+ else
717
+ @logger.error("Failed to load configured plugin source `#{src}`: #{source_error}")
718
+ raise Vagrant::Errors::PluginSourceError,
719
+ source: src.uri.to_s,
720
+ error_msg: source_error.message
721
+ end
722
+ end
723
+ end
724
+ end
725
+
726
+ # Generate the builtin resolver set
727
+ def generate_builtin_set(system_plugins=[])
728
+ builtin_set = BuiltinSet.new
729
+ @logger.debug("Generating new builtin set instance.")
730
+ vagrant_internal_specs.each do |spec|
731
+ if !system_plugins.include?(spec.name)
732
+ builtin_set.add_builtin_spec(spec)
733
+ end
734
+ end
735
+ builtin_set
736
+ end
737
+
738
+ # Generate the plugin resolver set. Optionally provide specification names (short or
739
+ # full) that should be ignored
740
+ #
741
+ # @param [Pathname] path to plugins
742
+ # @param [Array<String>] gems to skip
743
+ # @return [PluginSet]
744
+ def generate_plugin_set(*args)
745
+ plugin_path = args.detect{|i| i.is_a?(Pathname) } || plugin_gem_path
746
+ skip = args.detect{|i| i.is_a?(Array) } || []
747
+ plugin_set = PluginSet.new
748
+ @logger.debug("Generating new plugin set instance. Skip gems - #{skip}")
749
+ Dir.glob(plugin_path.join('specifications/*.gemspec').to_s).each do |spec_path|
750
+ spec = Gem::Specification.load(spec_path)
751
+ desired_spec_path = File.join(spec.gem_dir, "#{spec.name}.gemspec")
752
+ # Vendor set requires the spec to be within the gem directory. Some gems will package their
753
+ # spec file, and that's not what we want to load.
754
+ if !File.exist?(desired_spec_path) || !FileUtils.cmp(spec.spec_file, desired_spec_path)
755
+ File.write(desired_spec_path, spec.to_ruby)
756
+ end
757
+ next if skip.include?(spec.name) || skip.include?(spec.full_name)
758
+ plugin_set.add_vendor_gem(spec.name, spec.gem_dir)
759
+ end
760
+ plugin_set
761
+ end
762
+
763
+ # Activate a given solution
764
+ def activate_solution(solution)
765
+ retried = false
766
+ begin
767
+ @logger.debug("Activating solution set: #{solution.map(&:full_name)}")
768
+ solution.each do |activation_request|
769
+ unless activation_request.full_spec.activated?
770
+ @logger.debug("Activating gem #{activation_request.full_spec.full_name}")
771
+ activation_request.full_spec.activate
772
+ if(defined?(::Bundler))
773
+ @logger.debug("Marking gem #{activation_request.full_spec.full_name} loaded within Bundler.")
774
+ ::Bundler.rubygems.mark_loaded activation_request.full_spec
775
+ end
776
+ end
777
+ end
778
+ rescue Gem::LoadError => e
779
+ # Depending on the version of Ruby, the ordering of the solution set
780
+ # will be either 0..n (molinillo) or n..0 (pre-molinillo). Instead of
781
+ # attempting to determine what's in use, or if it has some how changed
782
+ # again, just reverse order on failure and attempt again.
783
+ if retried
784
+ @logger.error("Failed to load solution set - #{e.class}: #{e}")
785
+ matcher = e.message.match(/Could not find '(?<gem_name>[^']+)'/)
786
+ if matcher && !matcher["gem_name"].empty?
787
+ desired_activation_request = solution.detect do |request|
788
+ request.name == matcher["gem_name"]
789
+ end
790
+ if desired_activation_request && !desired_activation_request.full_spec.activated?
791
+ @logger.warn("Found misordered activation request for #{desired_activation_request.full_name}. Moving to solution HEAD.")
792
+ solution.delete(desired_activation_request)
793
+ solution.unshift(desired_activation_request)
794
+ retry
795
+ end
796
+ end
797
+
798
+ raise
799
+ else
800
+ @logger.debug("Failed to load solution set. Retrying with reverse order.")
801
+ retried = true
802
+ solution.reverse!
803
+ retry
804
+ end
805
+ end
806
+ end
807
+
808
+ # This is a custom Gem::Resolver::InstallerSet. It will prefer sources which are
809
+ # explicitly provided over default sources when matches are found. This is generally
810
+ # the entire set used for performing full resolutions on install.
811
+ class VagrantSet < Gem::Resolver::InstallerSet
812
+ attr_accessor :prefer_sources
813
+ attr_accessor :system_plugins
814
+
815
+ def initialize(domain, defined_sources={})
816
+ @prefer_sources = defined_sources
817
+ @system_plugins = []
818
+ super(domain)
819
+ end
820
+
821
+ # Allow InstallerSet to find matching specs, then filter
822
+ # for preferred sources
823
+ def find_all(req)
824
+ result = super
825
+ if system_plugins.include?(req.name)
826
+ result.delete_if do |spec|
827
+ spec.is_a?(Gem::Resolver::InstalledSpecification)
828
+ end
829
+ end
830
+ subset = result.find_all do |idx_spec|
831
+ preferred = false
832
+ if prefer_sources[req.name]
833
+ if idx_spec.source.respond_to?(:path)
834
+ preferred = prefer_sources[req.name].include?(idx_spec.source.path.to_s)
835
+ end
836
+ if !preferred
837
+ preferred = prefer_sources[req.name].include?(idx_spec.source.uri.to_s)
838
+ end
839
+ end
840
+ preferred
841
+ end
842
+ subset.empty? ? result : subset
843
+ end
844
+ end
845
+
846
+ # This is a custom Gem::Resolver::Set for use with vagrant "system" gems. It
847
+ # allows the installed set of gems to be used for providing a solution while
848
+ # enforcing strict constraints. This ensures that plugins cannot "upgrade"
849
+ # gems that are builtin to vagrant itself.
850
+ class BuiltinSet < Gem::Resolver::Set
851
+ def initialize
852
+ super
853
+ @remote = false
854
+ @specs = []
855
+ end
856
+
857
+ def add_builtin_spec(spec)
858
+ @specs.push(spec).uniq!
859
+ end
860
+
861
+ def find_all(req)
862
+ r = @specs.select do |spec|
863
+ # When matching requests against builtin specs, we _always_ enable
864
+ # prerelease matching since any prerelease that's found in this
865
+ # set has been added explicitly and should be available for all
866
+ # plugins to resolve against. This includes Vagrant itself since
867
+ # it is considered a prerelease when in development mode
868
+ req.match?(spec, true)
869
+ end.map do |spec|
870
+ Gem::Resolver::InstalledSpecification.new(self, spec)
871
+ end
872
+ # If any of the results are a prerelease, we need to mark the request
873
+ # to allow prereleases so the solution can be properly fulfilled
874
+ if r.any? { |x| x.version.prerelease? }
875
+ req.dependency.prerelease = true
876
+ end
877
+ r
878
+ end
879
+ end
880
+
881
+ # This is a custom Gem::Resolver::Set for use with Vagrant plugins. It is
882
+ # a modified Gem::Resolver::VendorSet that supports multiple versions of
883
+ # a specific gem
884
+ class PluginSet < Gem::Resolver::VendorSet
885
+ ##
886
+ # Adds a specification to the set with the given +name+ which has been
887
+ # unpacked into the given +directory+.
888
+ def add_vendor_gem(name, directory)
889
+ gemspec = File.join(directory, "#{name}.gemspec")
890
+ spec = Gem::Specification.load(gemspec)
891
+ if !spec
892
+ raise Gem::GemNotFoundException,
893
+ "unable to find #{gemspec} for gem #{name}"
894
+ end
895
+
896
+ spec.full_gem_path = File.expand_path(directory)
897
+ spec.base_dir = File.dirname(spec.base_dir)
898
+
899
+ @specs[spec.name] ||= []
900
+ @specs[spec.name] << spec
901
+ @directories[spec] = directory
902
+
903
+ spec
904
+ end
905
+
906
+ ##
907
+ # Returns an Array of VendorSpecification objects matching the
908
+ # DependencyRequest +req+.
909
+ def find_all(req)
910
+ @specs.values.flatten.select do |spec|
911
+ req.match?(spec, prerelease)
912
+ end.map do |spec|
913
+ source = Gem::Source::Vendor.new(@directories[spec])
914
+ Gem::Resolver::VendorSpecification.new(self, spec, source)
915
+ end
916
+ end
917
+
918
+ ##
919
+ # Loads a spec with the given +name+. +version+, +platform+ and +source+ are
920
+ # ignored.
921
+ def load_spec(name, version, platform, source)
922
+ version = Gem::Version.new(version) if !version.is_a?(Gem::Version)
923
+ @specs.fetch(name, []).detect{|s| s.name == name && s.version == version}
924
+ end
925
+ end
926
+ end
927
+ end
928
+
929
+ # Patch for Ruby 2.2 and Bundler to behave properly when uninstalling plugins
930
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3')
931
+ if defined?(::Bundler) && !::Bundler::SpecSet.instance_methods.include?(:delete)
932
+ class Gem::Specification
933
+ def self.remove_spec(spec)
934
+ Gem::Specification.reset
935
+ end
936
+ end
937
+ end
938
+ end