vagrant-unbundled 2.2.6.2 → 2.2.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (287) hide show
  1. checksums.yaml +4 -4
  2. data/.hashibot.hcl +14 -0
  3. data/CHANGELOG.md +213 -2
  4. data/Gemfile +1 -1
  5. data/README.md +9 -51
  6. data/RELEASE.md +1 -1
  7. data/bin/vagrant +23 -0
  8. data/contrib/README.md +1 -0
  9. data/contrib/bash/completion.sh +13 -1
  10. data/contrib/sudoers/linux-suse +2 -2
  11. data/contrib/zsh/_vagrant +738 -0
  12. data/contrib/zsh/generate_zsh_completion.rb +165 -0
  13. data/lib/vagrant.rb +25 -4
  14. data/lib/vagrant/action.rb +8 -0
  15. data/lib/vagrant/action/builder.rb +184 -38
  16. data/lib/vagrant/action/builtin/box_add.rb +20 -8
  17. data/lib/vagrant/action/builtin/box_check_outdated.rb +12 -15
  18. data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
  19. data/lib/vagrant/action/builtin/cloud_init_setup.rb +122 -0
  20. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  21. data/lib/vagrant/action/builtin/delayed.rb +26 -0
  22. data/lib/vagrant/action/builtin/disk.rb +52 -0
  23. data/lib/vagrant/action/builtin/handle_box.rb +3 -1
  24. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
  25. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  26. data/lib/vagrant/action/builtin/mixin_provisioners.rb +20 -1
  27. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  28. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  29. data/lib/vagrant/action/builtin/ssh_run.rb +21 -3
  30. data/lib/vagrant/action/builtin/synced_folders.rb +16 -0
  31. data/lib/vagrant/action/builtin/trigger.rb +37 -0
  32. data/lib/vagrant/action/hook.rb +76 -23
  33. data/lib/vagrant/action/runner.rb +12 -27
  34. data/lib/vagrant/action/warden.rb +28 -22
  35. data/lib/vagrant/box.rb +11 -4
  36. data/lib/vagrant/box_collection.rb +1 -1
  37. data/lib/vagrant/box_metadata.rb +17 -3
  38. data/lib/vagrant/bundler.rb +298 -59
  39. data/lib/vagrant/cli.rb +4 -2
  40. data/lib/vagrant/errors.rb +61 -1
  41. data/lib/vagrant/machine.rb +64 -11
  42. data/lib/vagrant/machine_index.rb +28 -1
  43. data/lib/vagrant/plugin/manager.rb +25 -14
  44. data/lib/vagrant/plugin/v2/command.rb +7 -2
  45. data/lib/vagrant/plugin/v2/components.rb +6 -0
  46. data/lib/vagrant/plugin/v2/manager.rb +67 -0
  47. data/lib/vagrant/plugin/v2/plugin.rb +13 -0
  48. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  49. data/lib/vagrant/plugin/v2/trigger.rb +64 -25
  50. data/lib/vagrant/shared_helpers.rb +36 -0
  51. data/lib/vagrant/ui.rb +51 -5
  52. data/lib/vagrant/util.rb +1 -0
  53. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  54. data/lib/vagrant/util/caps.rb +48 -0
  55. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  56. data/lib/vagrant/util/curl_helper.rb +8 -5
  57. data/lib/vagrant/util/directory.rb +19 -0
  58. data/lib/vagrant/util/downloader.rb +10 -5
  59. data/lib/vagrant/util/file_checksum.rb +6 -2
  60. data/lib/vagrant/util/guest_hosts.rb +68 -0
  61. data/lib/vagrant/util/guest_inspection.rb +9 -1
  62. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  63. data/lib/vagrant/util/io.rb +7 -27
  64. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  65. data/lib/vagrant/util/is_port_open.rb +8 -20
  66. data/lib/vagrant/util/map_command_options.rb +33 -0
  67. data/lib/vagrant/util/mime.rb +92 -0
  68. data/lib/vagrant/util/network_ip.rb +11 -1
  69. data/lib/vagrant/util/numeric.rb +69 -0
  70. data/lib/vagrant/util/platform.rb +10 -2
  71. data/lib/vagrant/util/powershell.rb +1 -1
  72. data/lib/vagrant/util/subprocess.rb +9 -1
  73. data/lib/vagrant/util/template_renderer.rb +2 -2
  74. data/lib/vagrant/util/uploader.rb +7 -4
  75. data/lib/vagrant/vagrantfile.rb +1 -1
  76. data/plugins/commands/autocomplete/command/install.rb +49 -0
  77. data/plugins/commands/autocomplete/command/root.rb +64 -0
  78. data/plugins/commands/autocomplete/plugin.rb +18 -0
  79. data/plugins/commands/box/command/outdated.rb +14 -2
  80. data/plugins/commands/cap/command.rb +5 -1
  81. data/plugins/commands/cloud/auth/login.rb +20 -23
  82. data/plugins/commands/cloud/auth/logout.rb +2 -10
  83. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +57 -0
  84. data/plugins/commands/cloud/auth/whoami.rb +18 -20
  85. data/plugins/commands/cloud/box/create.rb +33 -29
  86. data/plugins/commands/cloud/box/delete.rb +30 -24
  87. data/plugins/commands/cloud/box/show.rb +41 -31
  88. data/plugins/commands/cloud/box/update.rb +34 -26
  89. data/plugins/commands/cloud/client/client.rb +50 -81
  90. data/plugins/commands/cloud/list.rb +3 -4
  91. data/plugins/commands/cloud/locales/en.yml +10 -10
  92. data/plugins/commands/cloud/plugin.rb +10 -0
  93. data/plugins/commands/cloud/provider/create.rb +38 -28
  94. data/plugins/commands/cloud/provider/delete.rb +39 -29
  95. data/plugins/commands/cloud/provider/update.rb +37 -28
  96. data/plugins/commands/cloud/provider/upload.rb +44 -34
  97. data/plugins/commands/cloud/publish.rb +185 -108
  98. data/plugins/commands/cloud/search.rb +34 -21
  99. data/plugins/commands/cloud/util.rb +266 -162
  100. data/plugins/commands/cloud/version/create.rb +33 -28
  101. data/plugins/commands/cloud/version/delete.rb +35 -28
  102. data/plugins/commands/cloud/version/release.rb +35 -29
  103. data/plugins/commands/cloud/version/revoke.rb +36 -29
  104. data/plugins/commands/cloud/version/update.rb +29 -25
  105. data/plugins/commands/destroy/command.rb +6 -2
  106. data/plugins/commands/login/plugin.rb +0 -13
  107. data/plugins/commands/snapshot/command/save.rb +13 -8
  108. data/plugins/commands/ssh_config/command.rb +1 -1
  109. data/plugins/communicators/ssh/communicator.rb +25 -24
  110. data/plugins/communicators/winrm/config.rb +1 -1
  111. data/plugins/communicators/winrm/helper.rb +1 -1
  112. data/plugins/communicators/winrm/shell.rb +1 -1
  113. data/plugins/communicators/winssh/communicator.rb +126 -38
  114. data/plugins/communicators/winssh/config.rb +3 -7
  115. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  116. data/plugins/guests/alpine/cap/rsync.rb +1 -1
  117. data/plugins/guests/alpine/plugin.rb +16 -0
  118. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  119. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  120. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  121. data/plugins/guests/arch/cap/smb.rb +1 -1
  122. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  123. data/plugins/guests/centos/cap/flavor.rb +24 -0
  124. data/plugins/guests/centos/guest.rb +9 -0
  125. data/plugins/guests/centos/plugin.rb +20 -0
  126. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  127. data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
  128. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
  129. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +109 -13
  130. data/plugins/guests/darwin/plugin.rb +15 -0
  131. data/plugins/guests/debian/cap/change_host_name.rb +12 -11
  132. data/plugins/guests/debian/cap/configure_networks.rb +14 -6
  133. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  134. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  135. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  136. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  137. data/plugins/guests/haiku/plugin.rb +15 -0
  138. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  139. data/plugins/guests/linux/cap/halt.rb +9 -1
  140. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +25 -34
  141. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
  142. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +75 -0
  143. data/plugins/guests/linux/cap/reboot.rb +53 -0
  144. data/plugins/guests/linux/plugin.rb +20 -0
  145. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  146. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  147. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  148. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  149. data/plugins/guests/redhat/cap/change_host_name.rb +14 -5
  150. data/plugins/guests/redhat/cap/flavor.rb +3 -1
  151. data/plugins/guests/redhat/cap/nfs_client.rb +2 -2
  152. data/plugins/guests/redhat/cap/smb.rb +20 -0
  153. data/plugins/guests/redhat/plugin.rb +5 -0
  154. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  155. data/plugins/guests/solaris11/plugin.rb +5 -0
  156. data/plugins/guests/suse/cap/change_host_name.rb +31 -9
  157. data/plugins/guests/windows/cap/public_key.rb +3 -3
  158. data/plugins/guests/windows/cap/reboot.rb +10 -5
  159. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  160. data/plugins/hosts/darwin/cap/nfs.rb +11 -0
  161. data/plugins/hosts/darwin/plugin.rb +15 -0
  162. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  163. data/plugins/hosts/linux/cap/nfs.rb +21 -2
  164. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  165. data/plugins/hosts/linux/plugin.rb +10 -0
  166. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  167. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  168. data/plugins/hosts/windows/plugin.rb +15 -0
  169. data/plugins/kernel_v2/config/cloud_init.rb +133 -0
  170. data/plugins/kernel_v2/config/disk.rb +221 -0
  171. data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
  172. data/plugins/kernel_v2/config/vm.rb +230 -15
  173. data/plugins/kernel_v2/config/vm_provisioner.rb +17 -3
  174. data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
  175. data/plugins/providers/docker/action.rb +8 -17
  176. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  177. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  178. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  179. data/plugins/providers/docker/communicator.rb +1 -1
  180. data/plugins/providers/docker/driver.rb +73 -10
  181. data/plugins/providers/docker/errors.rb +4 -0
  182. data/plugins/providers/docker/executor/local.rb +7 -1
  183. data/plugins/providers/docker/plugin.rb +5 -0
  184. data/plugins/providers/hyperv/action.rb +3 -1
  185. data/plugins/providers/hyperv/action/configure.rb +8 -0
  186. data/plugins/providers/hyperv/action/export.rb +4 -2
  187. data/plugins/providers/hyperv/cap/cleanup_disks.rb +54 -0
  188. data/plugins/providers/hyperv/cap/configure_disks.rb +200 -0
  189. data/plugins/providers/hyperv/cap/validate_disk_ext.rb +34 -0
  190. data/plugins/providers/hyperv/config.rb +5 -0
  191. data/plugins/providers/hyperv/driver.rb +90 -9
  192. data/plugins/providers/hyperv/plugin.rb +25 -0
  193. data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +28 -0
  194. data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +13 -0
  195. data/plugins/providers/hyperv/scripts/get_vhd.ps1 +16 -0
  196. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +1 -1
  197. data/plugins/providers/hyperv/scripts/list_hdds.ps1 +17 -0
  198. data/plugins/providers/hyperv/scripts/new_vhd.ps1 +31 -0
  199. data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +25 -0
  200. data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +18 -0
  201. data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +24 -0
  202. data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +3 -3
  203. data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +14 -6
  204. data/plugins/providers/virtualbox/action.rb +14 -1
  205. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +10 -1
  206. data/plugins/providers/virtualbox/action/export.rb +4 -2
  207. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  208. data/plugins/providers/virtualbox/action/import.rb +8 -4
  209. data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +4 -2
  210. data/plugins/providers/virtualbox/action/snapshot_delete.rb +4 -2
  211. data/plugins/providers/virtualbox/action/snapshot_restore.rb +4 -2
  212. data/plugins/providers/virtualbox/cap/cleanup_disks.rb +85 -0
  213. data/plugins/providers/virtualbox/cap/configure_disks.rb +440 -0
  214. data/plugins/providers/virtualbox/cap/mount_options.rb +35 -0
  215. data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +34 -0
  216. data/plugins/providers/virtualbox/driver/base.rb +15 -0
  217. data/plugins/providers/virtualbox/driver/meta.rb +17 -2
  218. data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
  219. data/plugins/providers/virtualbox/driver/version_6_1.rb +39 -0
  220. data/plugins/providers/virtualbox/model/storage_controller.rb +135 -0
  221. data/plugins/providers/virtualbox/model/storage_controller_array.rb +98 -0
  222. data/plugins/providers/virtualbox/plugin.rb +38 -0
  223. data/plugins/providers/virtualbox/provider.rb +2 -1
  224. data/plugins/providers/virtualbox/synced_folder.rb +1 -0
  225. data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +44 -0
  226. data/plugins/provisioners/ansible/cap/guest/arch/ansible_install.rb +20 -3
  227. data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +4 -5
  228. data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +2 -2
  229. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +2 -2
  230. data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +8 -4
  231. data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +2 -2
  232. data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +2 -1
  233. data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +3 -3
  234. data/plugins/provisioners/ansible/plugin.rb +5 -0
  235. data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
  236. data/plugins/provisioners/container/client.rb +203 -0
  237. data/plugins/provisioners/container/config.rb +83 -0
  238. data/plugins/provisioners/container/installer.rb +13 -0
  239. data/plugins/provisioners/container/plugin.rb +23 -0
  240. data/plugins/provisioners/container/provisioner.rb +28 -0
  241. data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
  242. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
  243. data/plugins/provisioners/docker/client.rb +4 -175
  244. data/plugins/provisioners/docker/config.rb +2 -72
  245. data/plugins/provisioners/docker/installer.rb +3 -5
  246. data/plugins/provisioners/docker/plugin.rb +6 -6
  247. data/plugins/provisioners/docker/provisioner.rb +4 -10
  248. data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
  249. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
  250. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
  251. data/plugins/provisioners/podman/client.rb +12 -0
  252. data/plugins/provisioners/podman/config.rb +28 -0
  253. data/plugins/provisioners/podman/installer.rb +33 -0
  254. data/plugins/provisioners/podman/plugin.rb +38 -0
  255. data/plugins/provisioners/podman/provisioner.rb +52 -0
  256. data/plugins/provisioners/salt/provisioner.rb +4 -0
  257. data/plugins/provisioners/shell/config.rb +1 -6
  258. data/plugins/provisioners/shell/provisioner.rb +61 -26
  259. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  260. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  261. data/plugins/synced_folders/smb/cap/mount_options.rb +56 -0
  262. data/plugins/synced_folders/smb/plugin.rb +20 -0
  263. data/plugins/synced_folders/smb/synced_folder.rb +2 -2
  264. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  265. data/scripts/website_push_www.sh +1 -1
  266. data/templates/commands/init/Vagrantfile.erb +1 -1
  267. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  268. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  269. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  270. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  271. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  272. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  273. data/templates/guests/linux/etc_fstab.erb +6 -0
  274. data/templates/locales/en.yml +235 -6
  275. data/templates/locales/providers_docker.yml +6 -0
  276. data/templates/nfs/exports_darwin.erb +7 -0
  277. data/vagrant.gemspec +14 -15
  278. data/version.txt +1 -1
  279. metadata +3577 -3855
  280. data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
  281. data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
  282. data/plugins/commands/login/client.rb +0 -253
  283. data/plugins/commands/login/command.rb +0 -137
  284. data/plugins/commands/login/errors.rb +0 -24
  285. data/plugins/commands/login/locales/en.yml +0 -49
  286. data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
  287. data/scripts/website_push_docs.sh +0 -40
@@ -0,0 +1,135 @@
1
+ module VagrantPlugins
2
+ module ProviderVirtualBox
3
+ module Model
4
+ # Represents a storage controller for VirtualBox. Storage controllers
5
+ # have a type, a name, and can have hard disks or optical drives attached.
6
+ class StorageController
7
+ IDE_CONTROLLER_TYPES = ["PIIX4", "PIIX3", "ICH6"].map(&:freeze).freeze
8
+ SATA_CONTROLLER_TYPES = ["IntelAhci"].map(&:freeze).freeze
9
+ SCSI_CONTROLLER_TYPES = [ "LsiLogic", "BusLogic"].map(&:freeze).freeze
10
+
11
+ IDE_DEVICES_PER_PORT = 2.freeze
12
+ SATA_DEVICES_PER_PORT = 1.freeze
13
+ SCSI_DEVICES_PER_PORT = 1.freeze
14
+
15
+ IDE_BOOT_PRIORITY = 1.freeze
16
+ SATA_BOOT_PRIORITY = 2.freeze
17
+ SCSI_BOOT_PRIORITY = 3.freeze
18
+
19
+ # The name of the storage controller.
20
+ #
21
+ # @return [String]
22
+ attr_reader :name
23
+
24
+ # The specific type of controller.
25
+ #
26
+ # @return [String]
27
+ attr_reader :type
28
+
29
+ # The maximum number of avilable ports for the storage controller.
30
+ #
31
+ # @return [Integer]
32
+ attr_reader :maxportcount
33
+
34
+ # The number of devices that can be attached to each port. For SATA
35
+ # controllers, this will usually be 1, and for IDE controllers this
36
+ # will usually be 2.
37
+ # @return [Integer]
38
+ attr_reader :devices_per_port
39
+
40
+ # The maximum number of individual disks that can be attached to the
41
+ # storage controller. For SATA controllers, this equals the maximum
42
+ # number of ports. For IDE controllers, this will be twice the max
43
+ # number of ports (primary/secondary).
44
+ #
45
+ # @return [Integer]
46
+ attr_reader :limit
47
+
48
+ # The boot priority of the storage controller. This does not seem to
49
+ # depend on the controller number returned by `showvminfo`.
50
+ # Experimentation has determined that VirtualBox will try to boot from
51
+ # the first controller it finds with a hard disk, in this order:
52
+ # IDE, SATA, SCSI
53
+ #
54
+ # @return [Integer]
55
+ attr_reader :boot_priority
56
+
57
+ # The list of disks/ISOs attached to each storage controller.
58
+ #
59
+ # @return [Array<Hash>]
60
+ attr_reader :attachments
61
+
62
+ def initialize(name, type, maxportcount, attachments)
63
+ @name = name
64
+ @type = type
65
+
66
+ @maxportcount = maxportcount.to_i
67
+
68
+ if IDE_CONTROLLER_TYPES.include?(@type)
69
+ @storage_bus = :ide
70
+ @devices_per_port = IDE_DEVICES_PER_PORT
71
+ @boot_priority = IDE_BOOT_PRIORITY
72
+ elsif SATA_CONTROLLER_TYPES.include?(@type)
73
+ @storage_bus = :sata
74
+ @devices_per_port = SATA_DEVICES_PER_PORT
75
+ @boot_priority = SATA_BOOT_PRIORITY
76
+ elsif SCSI_CONTROLLER_TYPES.include?(@type)
77
+ @storage_bus = :scsi
78
+ @devices_per_port = SCSI_DEVICES_PER_PORT
79
+ @boot_priority = SCSI_BOOT_PRIORITY
80
+ else
81
+ @storage_bus = :unknown
82
+ @devices_per_port = 1
83
+ end
84
+
85
+ @limit = @maxportcount * @devices_per_port
86
+
87
+ attachments ||= []
88
+ @attachments = attachments
89
+ end
90
+
91
+ # Get a single storage device, either by port/device address or by
92
+ # UUID.
93
+ #
94
+ # @param [Hash] opts - A hash of options to match
95
+ # @return [Hash] attachment - Attachment information
96
+ def get_attachment(opts = {})
97
+ if opts[:port] && opts[:device]
98
+ @attachments.detect { |a| a[:port] == opts[:port] &&
99
+ a[:device] == opts[:device] }
100
+ elsif opts[:uuid]
101
+ @attachments.detect { |a| a[:uuid] == opts[:uuid] }
102
+ end
103
+ end
104
+
105
+ # Returns true if the storage controller has a supported type.
106
+ #
107
+ # @return [Boolean]
108
+ def supported?
109
+ [:ide, :sata, :scsi].include?(@storage_bus)
110
+ end
111
+
112
+ # Returns true if the storage controller is a IDE type controller.
113
+ #
114
+ # @return [Boolean]
115
+ def ide?
116
+ @storage_bus == :ide
117
+ end
118
+
119
+ # Returns true if the storage controller is a SATA type controller.
120
+ #
121
+ # @return [Boolean]
122
+ def sata?
123
+ @storage_bus == :sata
124
+ end
125
+
126
+ # Returns true if the storage controller is a SCSI type controller.
127
+ #
128
+ # @return [Boolean]
129
+ def scsi?
130
+ @storage_bus == :scsi
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,98 @@
1
+ require_relative "../cap/validate_disk_ext"
2
+
3
+ module VagrantPlugins
4
+ module ProviderVirtualBox
5
+ module Model
6
+ # A collection of storage controllers. Includes finder methods to look
7
+ # up a storage controller by given attributes.
8
+ class StorageControllerArray < Array
9
+ # Returns a storage controller with the given name. Raises an
10
+ # exception if a matching controller can't be found.
11
+ #
12
+ # @param [String] name - The name of the storage controller
13
+ # @return [VagrantPlugins::ProviderVirtualBox::Model::StorageController]
14
+ def get_controller(name)
15
+ controller = detect { |c| c.name == name }
16
+ if !controller
17
+ raise Vagrant::Errors::VirtualBoxDisksControllerNotFound, name: name
18
+ end
19
+ controller
20
+ end
21
+
22
+ # Find the controller containing the primary disk (i.e. the boot
23
+ # disk). This is used to determine which controller virtual disks
24
+ # should be attached to.
25
+ #
26
+ # Raises an exception if no supported controllers are found.
27
+ #
28
+ # @return [VagrantPlugins::ProviderVirtualBox::Model::StorageController]
29
+ def get_primary_controller
30
+ ordered = find_all(&:supported?).sort_by(&:boot_priority)
31
+ controller = ordered.detect { |c| c.attachments.any? { |a| hdd?(a) } }
32
+
33
+ if !controller
34
+ raise Vagrant::Errors::VirtualBoxDisksNoSupportedControllers,
35
+ supported_types: supported_types.join(" ,")
36
+ end
37
+
38
+ controller
39
+ end
40
+
41
+ # Find the attachment representing the primary disk (i.e. the boot
42
+ # disk). We can't rely on the order of #list_hdds, as they will not
43
+ # always come in port order, but primary is always Port 0 Device 0.
44
+ #
45
+ # @return [Hash] attachment - Primary disk attachment information
46
+ def get_primary_attachment
47
+ attachment = nil
48
+
49
+ controller = get_primary_controller
50
+ attachment = controller.get_attachment(port: "0", device: "0")
51
+ if !attachment
52
+ raise Vagrant::Errors::VirtualBoxDisksPrimaryNotFound
53
+ end
54
+
55
+ attachment
56
+ end
57
+
58
+ # Returns the first supported storage controller for attaching dvds.
59
+ # Will raise an exception if no suitable controller can be found.
60
+ #
61
+ # @return [VagrantPlugins::ProviderVirtualBox::Model::StorageController]
62
+ def get_dvd_controller
63
+ ordered = find_all(&:supported?).sort_by(&:boot_priority)
64
+ controller = ordered.first
65
+ if !controller
66
+ raise Vagrant::Errors::VirtualBoxDisksNoSupportedControllers,
67
+ supported_types: supported_types.join(" ,")
68
+ end
69
+
70
+ controller
71
+ end
72
+
73
+ private
74
+
75
+ # Determine whether the given attachment is a hard disk.
76
+ #
77
+ # @param [Hash] attachment - Attachment information
78
+ # @return [Boolean]
79
+ def hdd?(attachment)
80
+ if !attachment
81
+ false
82
+ else
83
+ ext = File.extname(attachment[:location].to_s).downcase.split('.').last
84
+ VagrantPlugins::ProviderVirtualBox::Cap::ValidateDiskExt.validate_disk_ext(nil, ext)
85
+ end
86
+ end
87
+
88
+ # Returns a list of all the supported controller types.
89
+ #
90
+ # @return [Array<String>]
91
+ def supported_types
92
+ StorageController::SATA_CONTROLLER_TYPES + StorageController::IDE_CONTROLLER_TYPES +
93
+ StorageController::SCSI_CONTROLLER_TYPES
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -39,10 +39,45 @@ module VagrantPlugins
39
39
  Cap::PublicAddress
40
40
  end
41
41
 
42
+ provider_capability(:virtualbox, :configure_disks) do
43
+ require_relative "cap/configure_disks"
44
+ Cap::ConfigureDisks
45
+ end
46
+
47
+ provider_capability(:virtualbox, :cleanup_disks) do
48
+ require_relative "cap/cleanup_disks"
49
+ Cap::CleanupDisks
50
+ end
51
+
52
+ provider_capability(:virtualbox, :validate_disk_ext) do
53
+ require_relative "cap/validate_disk_ext"
54
+ Cap::ValidateDiskExt
55
+ end
56
+
57
+ provider_capability(:virtualbox, :default_disk_exts) do
58
+ require_relative "cap/validate_disk_ext"
59
+ Cap::ValidateDiskExt
60
+ end
61
+
62
+ provider_capability(:virtualbox, :set_default_disk_ext) do
63
+ require_relative "cap/validate_disk_ext"
64
+ Cap::ValidateDiskExt
65
+ end
66
+
42
67
  provider_capability(:virtualbox, :snapshot_list) do
43
68
  require_relative "cap"
44
69
  Cap
45
70
  end
71
+
72
+ synced_folder_capability(:virtualbox, "mount_options") do
73
+ require_relative "cap/mount_options"
74
+ Cap::MountOptions
75
+ end
76
+
77
+ synced_folder_capability(:virtualbox, "mount_type") do
78
+ require_relative "cap/mount_options"
79
+ Cap::MountOptions
80
+ end
46
81
  end
47
82
 
48
83
  autoload :Action, File.expand_path("../action", __FILE__)
@@ -59,10 +94,13 @@ module VagrantPlugins
59
94
  autoload :Version_5_1, File.expand_path("../driver/version_5_1", __FILE__)
60
95
  autoload :Version_5_2, File.expand_path("../driver/version_5_2", __FILE__)
61
96
  autoload :Version_6_0, File.expand_path("../driver/version_6_0", __FILE__)
97
+ autoload :Version_6_1, File.expand_path("../driver/version_6_1", __FILE__)
62
98
  end
63
99
 
64
100
  module Model
65
101
  autoload :ForwardedPort, File.expand_path("../model/forwarded_port", __FILE__)
102
+ autoload :StorageController, File.expand_path("../model/storage_controller", __FILE__)
103
+ autoload :StorageControllerArray, File.expand_path("../model/storage_controller_array", __FILE__)
66
104
  end
67
105
 
68
106
  module Util
@@ -23,7 +23,8 @@ module VagrantPlugins
23
23
  rescue Vagrant::Errors::VirtualBoxInvalidVersion,
24
24
  Vagrant::Errors::VirtualBoxNotDetected,
25
25
  Vagrant::Errors::VirtualBoxKernelModuleNotLoaded,
26
- Vagrant::Errors::VirtualBoxInstallIncomplete
26
+ Vagrant::Errors::VirtualBoxInstallIncomplete,
27
+ Vagrant::Errors::VBoxManageNotFoundError
27
28
  raise if raise_error
28
29
  return false
29
30
  end
@@ -33,6 +33,7 @@ module VagrantPlugins
33
33
 
34
34
  # Go through each folder and mount
35
35
  machine.ui.output(I18n.t("vagrant.actions.vm.share_folders.mounting"))
36
+ fstab_folders = []
36
37
  folders.each do |id, data|
37
38
  if data[:guestpath]
38
39
  # Guest path specified, so mount the folder to specified point
@@ -0,0 +1,44 @@
1
+ require_relative "../facts"
2
+ require_relative "../pip/pip"
3
+
4
+ module VagrantPlugins
5
+ module Ansible
6
+ module Cap
7
+ module Guest
8
+ module Alpine
9
+ module AnsibleInstall
10
+
11
+ def self.ansible_install(machine, install_mode, ansible_version, pip_args, pip_install_cmd = "")
12
+ case install_mode
13
+ when :pip
14
+ pip_setup machine, pip_install_cmd
15
+ Pip::pip_install machine, "ansible", ansible_version, pip_args, true
16
+ when :pip_args_only
17
+ pip_setup machine, pip_install_cmd
18
+ Pip::pip_install machine, "", "", pip_args, false
19
+ else
20
+ ansible_apk_install machine
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def self.ansible_apk_install(machine)
27
+ machine.communicate.sudo "apk add --update --no-cache python3 ansible"
28
+ machine.communicate.sudo "if [ ! -e /usr/bin/python ]; then ln -sf python3 /usr/bin/python ; fi"
29
+ machine.communicate.sudo "if [ ! -e /usr/bin/pip ]; then ln -sf pip3 /usr/bin/pip ; fi"
30
+ end
31
+
32
+ def self.pip_setup(machine, pip_install_cmd = "")
33
+ machine.communicate.sudo "apk add --update --no-cache python3"
34
+ machine.communicate.sudo "if [ ! -e /usr/bin/python ]; then ln -sf python3 /usr/bin/python ; fi"
35
+ machine.communicate.sudo "apk add --update --no-cache --virtual .build-deps python3-dev libffi-dev openssl-dev build-base"
36
+ Pip::get_pip machine, pip_install_cmd
37
+ end
38
+
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,4 +1,5 @@
1
1
  require_relative "../../../errors"
2
+ require_relative "../pip/pip"
2
3
 
3
4
  module VagrantPlugins
4
5
  module Ansible
@@ -7,15 +8,31 @@ module VagrantPlugins
7
8
  module Arch
8
9
  module AnsibleInstall
9
10
 
10
- def self.ansible_install(machine, install_mode, ansible_version, pip_args)
11
- if install_mode != :default
12
- raise Ansible::Errors::AnsiblePipInstallIsNotSupported
11
+ def self.ansible_install(machine, install_mode, ansible_version, pip_args, pip_install_cmd = "")
12
+ case install_mode
13
+ when :pip
14
+ pip_setup machine, pip_install_cmd
15
+ Pip::pip_install machine, "ansible", ansible_version, pip_args, true
16
+
17
+ when :pip_args_only
18
+ pip_setup machine, pip_install_cmd
19
+ Pip::pip_install machine, "", "", pip_args, false
20
+
13
21
  else
14
22
  machine.communicate.sudo "pacman -Syy --noconfirm"
15
23
  machine.communicate.sudo "pacman -S --noconfirm ansible"
16
24
  end
17
25
  end
18
26
 
27
+ private
28
+
29
+ def self.pip_setup(machine, pip_install_cmd = "")
30
+ machine.communicate.sudo "pacman -Syy --noconfirm"
31
+ machine.communicate.sudo "pacman -S --noconfirm base-devel curl git python"
32
+
33
+ Pip::get_pip machine, pip_install_cmd
34
+ end
35
+
19
36
  end
20
37
  end
21
38
  end
@@ -7,8 +7,7 @@ module VagrantPlugins
7
7
  module Debian
8
8
  module AnsibleInstall
9
9
 
10
-
11
- def self.ansible_install(machine, install_mode, ansible_version, pip_args, pip_install_cmd="")
10
+ def self.ansible_install(machine, install_mode, ansible_version, pip_args, pip_install_cmd = "")
12
11
  case install_mode
13
12
  when :pip
14
13
  pip_setup machine, pip_install_cmd
@@ -33,12 +32,12 @@ INLINE_CRIPT
33
32
 
34
33
  machine.communicate.sudo install_backports_if_wheezy_release
35
34
  machine.communicate.sudo "apt-get update -y -qq"
36
- machine.communicate.sudo "apt-get install -y -qq ansible"
35
+ machine.communicate.sudo "DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --option \"Dpkg::Options::=--force-confold\" ansible"
37
36
  end
38
37
 
39
- def self.pip_setup(machine, pip_install_cmd="")
38
+ def self.pip_setup(machine, pip_install_cmd = "")
40
39
  machine.communicate.sudo "apt-get update -y -qq"
41
- machine.communicate.sudo "apt-get install -y -qq build-essential curl git libssl-dev libffi-dev python-dev"
40
+ machine.communicate.sudo "DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --option \"Dpkg::Options::=--force-confold\" build-essential curl git libssl-dev libffi-dev python-dev"
42
41
  Pip::get_pip machine, pip_install_cmd
43
42
  end
44
43
 
@@ -8,7 +8,7 @@ module VagrantPlugins
8
8
  module Fedora
9
9
  module AnsibleInstall
10
10
 
11
- def self.ansible_install(machine, install_mode, ansible_version, pip_args, pip_install_cmd="")
11
+ def self.ansible_install(machine, install_mode, ansible_version, pip_args, pip_install_cmd = "")
12
12
  case install_mode
13
13
  when :pip
14
14
  pip_setup machine, pip_install_cmd
@@ -25,7 +25,7 @@ module VagrantPlugins
25
25
 
26
26
  private
27
27
 
28
- def self.pip_setup(machine, pip_install_cmd="")
28
+ def self.pip_setup(machine, pip_install_cmd = "")
29
29
  rpm_package_manager = Facts::rpm_package_manager(machine)
30
30
 
31
31
  machine.communicate.sudo "#{rpm_package_manager} install -y curl gcc gmp-devel libffi-devel openssl-devel python-crypto python-devel python-dnf python-setuptools redhat-rpm-config"
@@ -7,11 +7,11 @@ module VagrantPlugins
7
7
  module FreeBSD
8
8
  module AnsibleInstall
9
9
 
10
- def self.ansible_install(machine, install_mode, ansible_version, pip_args)
10
+ def self.ansible_install(machine, install_mode, ansible_version, pip_args, pip_install_cmd = "")
11
11
  if install_mode != :default
12
12
  raise Ansible::Errors::AnsiblePipInstallIsNotSupported
13
13
  else
14
- machine.communicate.sudo "yes | pkg install ansible"
14
+ machine.communicate.sudo "pkg install -qy py36-ansible"
15
15
  end
16
16
  end
17
17