vagrant-unbundled 2.2.7.0 → 2.2.16.0

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 (282) hide show
  1. checksums.yaml +4 -4
  2. data/.hashibot.hcl +2 -0
  3. data/CHANGELOG.md +228 -0
  4. data/Gemfile +1 -1
  5. data/README.md +9 -51
  6. data/RELEASE.md +1 -1
  7. data/bin/vagrant +50 -1
  8. data/contrib/README.md +1 -0
  9. data/contrib/sudoers/linux-suse +2 -2
  10. data/contrib/zsh/_vagrant +738 -0
  11. data/contrib/zsh/generate_zsh_completion.rb +165 -0
  12. data/lib/vagrant.rb +28 -5
  13. data/lib/vagrant/action.rb +7 -0
  14. data/lib/vagrant/action/builder.rb +184 -38
  15. data/lib/vagrant/action/builtin/box_add.rb +24 -8
  16. data/lib/vagrant/action/builtin/box_check_outdated.rb +2 -1
  17. data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
  18. data/lib/vagrant/action/builtin/cloud_init_setup.rb +122 -0
  19. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  20. data/lib/vagrant/action/builtin/delayed.rb +26 -0
  21. data/lib/vagrant/action/builtin/disk.rb +14 -1
  22. data/lib/vagrant/action/builtin/handle_box.rb +3 -1
  23. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
  24. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  25. data/lib/vagrant/action/builtin/mixin_provisioners.rb +1 -0
  26. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  27. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  28. data/lib/vagrant/action/builtin/synced_folders.rb +16 -0
  29. data/lib/vagrant/action/builtin/trigger.rb +37 -0
  30. data/lib/vagrant/action/hook.rb +76 -23
  31. data/lib/vagrant/action/runner.rb +12 -27
  32. data/lib/vagrant/action/warden.rb +28 -31
  33. data/lib/vagrant/box.rb +11 -4
  34. data/lib/vagrant/box_collection.rb +1 -1
  35. data/lib/vagrant/bundler.rb +310 -61
  36. data/lib/vagrant/cli.rb +4 -2
  37. data/lib/vagrant/environment.rb +1 -0
  38. data/lib/vagrant/errors.rb +69 -1
  39. data/lib/vagrant/machine.rb +64 -11
  40. data/lib/vagrant/machine_index.rb +28 -1
  41. data/lib/vagrant/patches/net-ssh.rb +186 -0
  42. data/lib/vagrant/plugin/manager.rb +45 -16
  43. data/lib/vagrant/plugin/v2/command.rb +7 -2
  44. data/lib/vagrant/plugin/v2/components.rb +6 -0
  45. data/lib/vagrant/plugin/v2/manager.rb +67 -0
  46. data/lib/vagrant/plugin/v2/plugin.rb +13 -0
  47. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  48. data/lib/vagrant/plugin/v2/trigger.rb +64 -25
  49. data/lib/vagrant/shared_helpers.rb +36 -0
  50. data/lib/vagrant/ui.rb +43 -2
  51. data/lib/vagrant/util.rb +2 -0
  52. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  53. data/lib/vagrant/util/caps.rb +48 -0
  54. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  55. data/lib/vagrant/util/curl_helper.rb +12 -8
  56. data/lib/vagrant/util/directory.rb +19 -0
  57. data/lib/vagrant/util/downloader.rb +10 -5
  58. data/lib/vagrant/util/guest_hosts.rb +68 -0
  59. data/lib/vagrant/util/guest_inspection.rb +9 -1
  60. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  61. data/lib/vagrant/util/io.rb +7 -27
  62. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  63. data/lib/vagrant/util/is_port_open.rb +8 -19
  64. data/lib/vagrant/util/map_command_options.rb +33 -0
  65. data/lib/vagrant/util/mime.rb +92 -0
  66. data/lib/vagrant/util/network_ip.rb +11 -1
  67. data/lib/vagrant/util/numeric.rb +28 -0
  68. data/lib/vagrant/util/platform.rb +10 -2
  69. data/lib/vagrant/util/powershell.rb +31 -15
  70. data/lib/vagrant/util/subprocess.rb +9 -1
  71. data/lib/vagrant/util/template_renderer.rb +2 -2
  72. data/lib/vagrant/util/uploader.rb +7 -4
  73. data/lib/vagrant/vagrantfile.rb +2 -2
  74. data/plugins/commands/autocomplete/command/install.rb +49 -0
  75. data/plugins/commands/autocomplete/command/root.rb +64 -0
  76. data/plugins/commands/autocomplete/plugin.rb +18 -0
  77. data/plugins/commands/cap/command.rb +5 -1
  78. data/plugins/commands/cloud/auth/login.rb +20 -23
  79. data/plugins/commands/cloud/auth/logout.rb +2 -10
  80. data/plugins/commands/cloud/auth/middleware/add_authentication.rb +60 -31
  81. data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +64 -0
  82. data/plugins/commands/cloud/auth/whoami.rb +18 -20
  83. data/plugins/commands/cloud/box/create.rb +33 -29
  84. data/plugins/commands/cloud/box/delete.rb +30 -24
  85. data/plugins/commands/cloud/box/show.rb +41 -31
  86. data/plugins/commands/cloud/box/update.rb +34 -26
  87. data/plugins/commands/cloud/client/client.rb +55 -79
  88. data/plugins/commands/cloud/list.rb +3 -4
  89. data/plugins/commands/cloud/locales/en.yml +15 -11
  90. data/plugins/commands/cloud/plugin.rb +10 -0
  91. data/plugins/commands/cloud/provider/create.rb +38 -28
  92. data/plugins/commands/cloud/provider/delete.rb +39 -29
  93. data/plugins/commands/cloud/provider/update.rb +37 -28
  94. data/plugins/commands/cloud/provider/upload.rb +53 -33
  95. data/plugins/commands/cloud/publish.rb +193 -106
  96. data/plugins/commands/cloud/search.rb +34 -21
  97. data/plugins/commands/cloud/util.rb +273 -161
  98. data/plugins/commands/cloud/version/create.rb +33 -28
  99. data/plugins/commands/cloud/version/delete.rb +35 -28
  100. data/plugins/commands/cloud/version/release.rb +35 -29
  101. data/plugins/commands/cloud/version/revoke.rb +36 -29
  102. data/plugins/commands/cloud/version/update.rb +29 -25
  103. data/plugins/commands/destroy/command.rb +7 -7
  104. data/plugins/commands/login/plugin.rb +0 -13
  105. data/plugins/commands/ssh_config/command.rb +1 -1
  106. data/plugins/communicators/ssh/communicator.rb +25 -24
  107. data/plugins/communicators/winrm/config.rb +1 -1
  108. data/plugins/communicators/winrm/helper.rb +1 -1
  109. data/plugins/communicators/winrm/shell.rb +1 -1
  110. data/plugins/communicators/winssh/communicator.rb +126 -38
  111. data/plugins/communicators/winssh/config.rb +3 -7
  112. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  113. data/plugins/guests/alpine/cap/configure_networks.rb +1 -1
  114. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  115. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  116. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  117. data/plugins/guests/arch/cap/smb.rb +1 -1
  118. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  119. data/plugins/guests/centos/cap/flavor.rb +24 -0
  120. data/plugins/guests/centos/guest.rb +9 -0
  121. data/plugins/guests/centos/plugin.rb +20 -0
  122. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  123. data/plugins/guests/darwin/cap/darwin_version.rb +40 -0
  124. data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
  125. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +33 -10
  126. data/plugins/guests/darwin/plugin.rb +15 -0
  127. data/plugins/guests/debian/cap/change_host_name.rb +12 -11
  128. data/plugins/guests/debian/cap/configure_networks.rb +14 -6
  129. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  130. data/plugins/guests/fedora/guest.rb +4 -4
  131. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  132. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  133. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  134. data/plugins/guests/haiku/plugin.rb +15 -0
  135. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  136. data/plugins/guests/linux/cap/halt.rb +9 -1
  137. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +25 -34
  138. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
  139. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +74 -0
  140. data/plugins/guests/linux/cap/reboot.rb +36 -7
  141. data/plugins/guests/linux/plugin.rb +10 -0
  142. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  143. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  144. data/plugins/guests/openwrt/cap/change_host_name.rb +19 -0
  145. data/plugins/guests/openwrt/cap/halt.rb +16 -0
  146. data/plugins/guests/openwrt/cap/insert_public_key.rb +20 -0
  147. data/plugins/guests/openwrt/cap/remove_public_key.rb +22 -0
  148. data/plugins/guests/openwrt/cap/rsync.rb +35 -0
  149. data/plugins/guests/openwrt/guest.rb +23 -0
  150. data/plugins/guests/openwrt/plugin.rb +61 -0
  151. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  152. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  153. data/plugins/guests/redhat/cap/change_host_name.rb +14 -5
  154. data/plugins/guests/redhat/cap/flavor.rb +3 -1
  155. data/plugins/guests/redhat/cap/smb.rb +20 -0
  156. data/plugins/guests/redhat/plugin.rb +5 -0
  157. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  158. data/plugins/guests/solaris11/plugin.rb +5 -0
  159. data/plugins/guests/suse/cap/change_host_name.rb +31 -9
  160. data/plugins/guests/windows/cap/public_key.rb +3 -3
  161. data/plugins/guests/windows/cap/reboot.rb +10 -5
  162. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  163. data/plugins/hosts/darwin/plugin.rb +10 -0
  164. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  165. data/plugins/hosts/linux/cap/nfs.rb +1 -0
  166. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  167. data/plugins/hosts/linux/plugin.rb +10 -0
  168. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  169. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  170. data/plugins/hosts/windows/plugin.rb +15 -0
  171. data/plugins/kernel_v2/config/cloud_init.rb +133 -0
  172. data/plugins/kernel_v2/config/disk.rb +67 -14
  173. data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
  174. data/plugins/kernel_v2/config/vm.rb +155 -21
  175. data/plugins/kernel_v2/config/vm_provisioner.rb +13 -2
  176. data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
  177. data/plugins/providers/docker/action.rb +8 -17
  178. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  179. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  180. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  181. data/plugins/providers/docker/communicator.rb +1 -1
  182. data/plugins/providers/docker/driver.rb +58 -7
  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 +13 -1
  205. data/plugins/providers/virtualbox/action/export.rb +4 -2
  206. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  207. data/plugins/providers/virtualbox/action/import.rb +8 -4
  208. data/plugins/providers/virtualbox/action/network.rb +12 -5
  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 +40 -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 +16 -2
  218. data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
  219. data/plugins/providers/virtualbox/driver/version_6_1.rb +23 -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 +42 -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/freebsd/ansible_install.rb +1 -1
  227. data/plugins/provisioners/ansible/plugin.rb +5 -0
  228. data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
  229. data/plugins/provisioners/container/client.rb +203 -0
  230. data/plugins/provisioners/container/config.rb +83 -0
  231. data/plugins/provisioners/container/installer.rb +13 -0
  232. data/plugins/provisioners/container/plugin.rb +23 -0
  233. data/plugins/provisioners/container/provisioner.rb +28 -0
  234. data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
  235. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
  236. data/plugins/provisioners/docker/client.rb +4 -175
  237. data/plugins/provisioners/docker/config.rb +2 -72
  238. data/plugins/provisioners/docker/installer.rb +3 -5
  239. data/plugins/provisioners/docker/plugin.rb +6 -6
  240. data/plugins/provisioners/docker/provisioner.rb +4 -10
  241. data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
  242. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
  243. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
  244. data/plugins/provisioners/podman/client.rb +12 -0
  245. data/plugins/provisioners/podman/config.rb +28 -0
  246. data/plugins/provisioners/podman/installer.rb +33 -0
  247. data/plugins/provisioners/podman/plugin.rb +38 -0
  248. data/plugins/provisioners/podman/provisioner.rb +52 -0
  249. data/plugins/provisioners/salt/bootstrap-salt.sh +7 -4
  250. data/plugins/provisioners/salt/provisioner.rb +4 -0
  251. data/plugins/provisioners/shell/config.rb +1 -6
  252. data/plugins/provisioners/shell/provisioner.rb +61 -26
  253. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  254. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  255. data/plugins/synced_folders/smb/cap/mount_options.rb +56 -0
  256. data/plugins/synced_folders/smb/plugin.rb +20 -0
  257. data/plugins/synced_folders/smb/synced_folder.rb +2 -2
  258. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  259. data/scripts/website_push_www.sh +1 -1
  260. data/templates/commands/init/Vagrantfile.min.erb +3 -0
  261. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  262. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  263. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  264. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  265. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  266. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  267. data/templates/guests/linux/etc_fstab.erb +6 -0
  268. data/templates/guests/nixos/network.erb +5 -6
  269. data/templates/locales/en.yml +221 -5
  270. data/templates/locales/providers_docker.yml +4 -0
  271. data/templates/nfs/exports_darwin.erb +1 -1
  272. data/vagrant.gemspec +14 -20
  273. data/version.txt +1 -1
  274. metadata +5092 -8978
  275. data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
  276. data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
  277. data/plugins/commands/login/client.rb +0 -253
  278. data/plugins/commands/login/command.rb +0 -137
  279. data/plugins/commands/login/errors.rb +0 -24
  280. data/plugins/commands/login/locales/en.yml +0 -49
  281. data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
  282. data/scripts/website_push_docs.sh +0 -40
@@ -0,0 +1,34 @@
1
+ require "log4r"
2
+
3
+ module VagrantPlugins
4
+ module HyperV
5
+ module Cap
6
+ module ValidateDiskExt
7
+ LOGGER = Log4r::Logger.new("vagrant::plugins::hyperv::validate_disk_ext")
8
+
9
+ # The default set of disk formats that Hyper-V supports
10
+ DEFAULT_DISK_EXT_LIST = ["vhd", "vhdx"].map(&:freeze).freeze
11
+ DEFAULT_DISK_EXT = "vhdx".freeze
12
+
13
+ # @param [Vagrant::Machine] machine
14
+ # @param [String] disk_ext
15
+ # @return [Bool]
16
+ def self.validate_disk_ext(machine, disk_ext)
17
+ DEFAULT_DISK_EXT_LIST.include?(disk_ext)
18
+ end
19
+
20
+ # @param [Vagrant::Machine] machine
21
+ # @return [Array]
22
+ def self.default_disk_exts(machine)
23
+ DEFAULT_DISK_EXT_LIST
24
+ end
25
+
26
+ # @param [Vagrant::Machine] machine
27
+ # @return [String]
28
+ def self.set_default_disk_ext(machine)
29
+ DEFAULT_DISK_EXT
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -48,6 +48,8 @@ module VagrantPlugins
48
48
  attr_accessor :enable_virtualization_extensions
49
49
  # @return [Hash] Options for VMServiceIntegration
50
50
  attr_accessor :vm_integration_services
51
+ # @return [Boolean] Enable Enhanced session mode
52
+ attr_accessor :enable_enhanced_session_mode
51
53
 
52
54
  def initialize
53
55
  @ip_address_timeout = UNSET_VALUE
@@ -65,6 +67,7 @@ module VagrantPlugins
65
67
  @enable_automatic_checkpoints = UNSET_VALUE
66
68
  @enable_checkpoints = UNSET_VALUE
67
69
  @vm_integration_services = {}
70
+ @enable_enhanced_session_mode = UNSET_VALUE
68
71
  end
69
72
 
70
73
  def finalize!
@@ -102,6 +105,8 @@ module VagrantPlugins
102
105
 
103
106
  # If automatic checkpoints are enabled, checkpoints will automatically be enabled
104
107
  @enable_checkpoints ||= @enable_automatic_checkpoints
108
+
109
+ @enable_enhanced_session_mode = false if @enable_enhanced_session_mode == UNSET_VALUE
105
110
  end
106
111
 
107
112
  def validate(machine)
@@ -10,15 +10,16 @@ module VagrantPlugins
10
10
  ERROR_REGEXP = /===Begin-Error===(.+?)===End-Error===/m
11
11
  OUTPUT_REGEXP = /===Begin-Output===(.+?)===End-Output===/m
12
12
 
13
- # Name mapping for integration services for nicer keys
13
+ # Name mapping for integration services for id
14
+ # https://social.technet.microsoft.com/Forums/de-DE/154917de-f3ca-4b1e-b3f8-23dd4b4f0f06/getvmintegrationservice-sprachabhngig?forum=powershell_de
14
15
  INTEGRATION_SERVICES_MAP = {
15
- guest_service_interface: "Guest Service Interface",
16
- heartbeat: "Heartbeat",
17
- key_value_pair_exchange: "Key-Value Pair Exchange",
18
- shutdown: "Shutdown",
19
- time_synchronization: "Time Synchronization",
20
- vss: "VSS",
21
- }
16
+ guest_service_interface: "6C09BB55-D683-4DA0-8931-C9BF705F6480".freeze,
17
+ heartbeat: "84EAAE65-2F2E-45F5-9BB5-0E857DC8EB47".freeze,
18
+ key_value_pair_exchange: "2A34B1C2-FD73-4043-8A5B-DD2159BC743F".freeze,
19
+ shutdown: "9F8233AC-BE49-4C79-8EE3-E7E1985B2077".freeze,
20
+ time_synchronization: "2497F4DE-E9FA-4204-80E4-4B75C46419C0".freeze,
21
+ vss: "5CED1297-4598-4915-A5FC-AD21BB4D02A4".freeze,
22
+ }.freeze
22
23
 
23
24
  # @return [String] VM ID
24
25
  attr_reader :vm_id
@@ -203,7 +204,7 @@ module VagrantPlugins
203
204
  # to configurable even if Vagrant is not aware of them.
204
205
  def set_vm_integration_services(config)
205
206
  config.each_pair do |srv_name, srv_enable|
206
- args = {VMID: vm_id, Name: INTEGRATION_SERVICES_MAP.fetch(srv_name.to_sym, srv_name).to_s}
207
+ args = {VMID: vm_id, Id: INTEGRATION_SERVICES_MAP.fetch(srv_name.to_sym, srv_name).to_s}
207
208
  args[:Enable] = true if srv_enable
208
209
  execute(:set_vm_integration_services, args)
209
210
  end
@@ -217,6 +218,85 @@ module VagrantPlugins
217
218
  execute(:set_name, VMID: vm_id, VMName: vmname)
218
219
  end
219
220
 
221
+ #
222
+ # Disk Driver methods
223
+ #
224
+
225
+ # @param [String] controller_type
226
+ # @param [String] controller_number
227
+ # @param [String] controller_location
228
+ # @param [Hash] opts
229
+ # @option opts [String] :ControllerType
230
+ # @option opts [String] :ControllerNumber
231
+ # @option opts [String] :ControllerLocation
232
+ def attach_disk(disk_file_path, **opts)
233
+ execute(:attach_disk_drive, VmId: @vm_id, Path: disk_file_path, ControllerType: opts[:ControllerType],
234
+ ControllerNumber: opts[:ControllerNumber], ControllerLocation: opts[:ControllerLocation])
235
+ end
236
+
237
+ # @param [String] path
238
+ # @param [Int] size_bytes
239
+ # @param [Hash] opts
240
+ # @option opts [Bool] :Fixed
241
+ # @option opts [String] :BlockSizeBytes
242
+ # @option opts [String] :LogicalSectorSizeBytes
243
+ # @option opts [String] :PhysicalSectorSizeBytes
244
+ # @option opts [String] :SourceDisk
245
+ # @option opts [Bool] :Differencing
246
+ # @option opts [String] :ParentPath
247
+ def create_disk(path, size_bytes, **opts)
248
+ execute(:new_vhd, Path: path, SizeBytes: size_bytes, Fixed: opts[:Fixed],
249
+ BlockSizeBytes: opts[:BlockSizeBytes], LogicalSectorSizeBytes: opts[:LogicalSectorSizeBytes],
250
+ PhysicalSectorSizeBytes: opts[:PhysicalSectorSizeBytes],
251
+ SourceDisk: opts[:SourceDisk], Differencing: opts[:Differencing],
252
+ ParentPath: opts[:ParentPath])
253
+ end
254
+
255
+ # @param [String] disk_file_path
256
+ def dismount_disk(disk_file_path)
257
+ execute(:dismount_vhd, DiskFilePath: disk_file_path)
258
+ end
259
+
260
+ # @param [String] disk_file_path
261
+ def get_disk(disk_file_path)
262
+ execute(:get_vhd, DiskFilePath: disk_file_path)
263
+ end
264
+
265
+ # @return [Array[Hash]]
266
+ def list_hdds
267
+ execute(:list_hdds, VmId: @vm_id)
268
+ end
269
+
270
+ # @param [String] controller_type
271
+ # @param [String] controller_number
272
+ # @param [String] controller_location
273
+ # @param [String] disk_file_path
274
+ # @param [Hash] opts
275
+ # @option opts [String] :ControllerType
276
+ # @option opts [String] :ControllerNumber
277
+ # @option opts [String] :ControllerLocation
278
+ def remove_disk(controller_type, controller_number, controller_location, disk_file_path, **opts)
279
+ execute(:remove_disk_drive, VmId: @vm_id, ControllerType: controller_type,
280
+ ControllerNumber: controller_number, ControllerLocation: controller_location,
281
+ DiskFilePath: disk_file_path)
282
+ end
283
+
284
+ # @param [String] path
285
+ # @param [Int] size_bytes
286
+ # @param [Hash] opts
287
+ def resize_disk(disk_file_path, size_bytes, **opts)
288
+ execute(:resize_disk_drive, VmId: @vm_id, DiskFilePath: disk_file_path,
289
+ DiskSize: size_bytes)
290
+ end
291
+
292
+ # Set enhanced session transport type of the VM
293
+ #
294
+ # @param [String] enhanced session transport type of the VM
295
+ # @return [nil]
296
+ def set_enhanced_session_transport_type(transport_type)
297
+ execute(:set_enhanced_session_transport_type, VmID: vm_id, type: transport_type)
298
+ end
299
+
220
300
  protected
221
301
 
222
302
  def execute_powershell(path, options, &block)
@@ -226,6 +306,7 @@ module VagrantPlugins
226
306
  options = options || {}
227
307
  ps_options = []
228
308
  options.each do |key, value|
309
+ next if !value || value.to_s.empty?
229
310
  next if value == false
230
311
  ps_options << "-#{key}"
231
312
  # If the value is a TrueClass assume switch
@@ -32,6 +32,31 @@ module VagrantPlugins
32
32
  Cap::SnapshotList
33
33
  end
34
34
 
35
+ provider_capability(:hyperv, :configure_disks) do
36
+ require_relative "cap/configure_disks"
37
+ Cap::ConfigureDisks
38
+ end
39
+
40
+ provider_capability(:hyperv, :cleanup_disks) do
41
+ require_relative "cap/cleanup_disks"
42
+ Cap::CleanupDisks
43
+ end
44
+
45
+ provider_capability(:hyperv, :validate_disk_ext) do
46
+ require_relative "cap/validate_disk_ext"
47
+ Cap::ValidateDiskExt
48
+ end
49
+
50
+ provider_capability(:hyperv, :default_disk_exts) do
51
+ require_relative "cap/validate_disk_ext"
52
+ Cap::ValidateDiskExt
53
+ end
54
+
55
+ provider_capability(:hyperv, :set_default_disk_ext) do
56
+ require_relative "cap/validate_disk_ext"
57
+ Cap::ValidateDiskExt
58
+ end
59
+
35
60
  protected
36
61
 
37
62
  def self.init!
@@ -0,0 +1,28 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$VmId,
6
+ [Parameter(Mandatory=$true)]
7
+ [string]$Path,
8
+ [string]$ControllerType,
9
+ [string]$ControllerNumber,
10
+ [string]$ControllerLocation
11
+ )
12
+
13
+ $Params = @{}
14
+
15
+ foreach ($key in $MyInvocation.BoundParameters.keys) {
16
+ $value = (Get-Variable -Exclude "ErrorAction" $key).Value
17
+ if (($key -ne "VmId") -and ($key -ne "ErrorAction")) {
18
+ $Params.Add($key, $value)
19
+ }
20
+ }
21
+
22
+ try {
23
+ $VM = Hyper-V\Get-VM -Id $VmId
24
+ Hyper-V\Add-VMHardDiskDrive -VMName $VM.Name @Params
25
+ } catch {
26
+ Write-ErrorMessage "Failed to attach disk ${DiskFilePath} to VM ${VM}: ${PSItem}"
27
+ exit 1
28
+ }
@@ -0,0 +1,13 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$DiskFilePath
6
+ )
7
+
8
+ try {
9
+ Hyper-V\Dismount-VHD -path $DiskFilePath
10
+ } catch {
11
+ Write-ErrorMessage "Failed to dismount disk info from disk file path ${DiskFilePath}: ${PSItem}"
12
+ exit 1
13
+ }
@@ -0,0 +1,16 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$DiskFilePath
6
+ )
7
+
8
+ try {
9
+ $Disk = Hyper-V\Get-VHD -path $DiskFilePath
10
+ } catch {
11
+ Write-ErrorMessage "Failed to retrieve disk info from disk file path ${DiskFilePath}: ${PSItem}"
12
+ exit 1
13
+ }
14
+
15
+ $result = ConvertTo-json $Disk
16
+ Write-OutputMessage $result
@@ -14,7 +14,7 @@ try
14
14
  # type was loaded in Microsoft.HyperV.PowerShell
15
15
  [void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.HyperV.PowerShell.Objects, Culture=neutral, PublicKeyToken=31bf3856ad364e35')
16
16
  } catch {
17
- # Empty catch ok, since if we didn't load the types, we will fail in the next block
17
+ # Empty catch ok, since if we didn't load the types, we will fail in the next block
18
18
  }
19
19
 
20
20
  $VmmsPath = if ([environment]::Is64BitProcess) { "$($env:SystemRoot)\System32\vmms.exe" } else { "$($env:SystemRoot)\Sysnative\vmms.exe" }
@@ -0,0 +1,17 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$VmId
6
+ )
7
+
8
+ try {
9
+ $VM = Hyper-V\Get-VM -Id $VmId
10
+ $Disks = @(Hyper-V\Get-VMHardDiskDrive -VMName $VM.Name)
11
+ } catch {
12
+ Write-ErrorMessage "Failed to retrieve all disk info from ${VM}: ${PSItem}"
13
+ exit 1
14
+ }
15
+
16
+ $result = ConvertTo-json $Disks
17
+ Write-OutputMessage $result
@@ -0,0 +1,31 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$Path,
6
+ [Parameter(Mandatory=$true)]
7
+ [UInt64]$SizeBytes,
8
+ [switch]$Fixed,
9
+ [switch]$Differencing,
10
+ [string]$ParentPath,
11
+ [Uint32]$BlockSizeBytes,
12
+ [UInt32]$LogicalSectorSizeBytes,
13
+ [UInt32]$PhysicalSectorSizeBytes,
14
+ [UInt32]$SourceDisk
15
+ )
16
+
17
+ $Params = @{}
18
+
19
+ foreach ($key in $MyInvocation.BoundParameters.keys) {
20
+ $value = (Get-Variable -Exclude "ErrorAction" $key).Value
21
+ if ($key -ne "ErrorAction") {
22
+ $Params.Add($key, $value)
23
+ }
24
+ }
25
+
26
+ try {
27
+ Hyper-V\New-VHD @Params
28
+ } catch {
29
+ Write-ErrorMessage "Failed to create disk ${DiskFilePath}: ${PSItem}"
30
+ exit 1
31
+ }
@@ -0,0 +1,25 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$VmId,
6
+ [Parameter(Mandatory=$true)]
7
+ [string]$ControllerType,
8
+ [Parameter(Mandatory=$true)]
9
+ [string]$ControllerNumber,
10
+ [Parameter(Mandatory=$true)]
11
+ [string]$ControllerLocation,
12
+ [Parameter(Mandatory=$true)]
13
+ [string]$DiskFilePath
14
+ )
15
+
16
+ try {
17
+ $VM = Hyper-V\Get-VM -Id $VmId
18
+
19
+ Hyper-v\Remove-VMHardDiskDrive -VMName $VM.Name -ControllerType $ControllerType -ControllerNumber $ControllerNumber -ControllerLocation $ControllerLocation
20
+
21
+ Remove-Item -Path $DiskFilePath
22
+ } catch {
23
+ Write-ErrorMessage "Failed to remove disk ${DiskFilePath} to VM ${VM}: ${PSItem}"
24
+ exit 1
25
+ }
@@ -0,0 +1,18 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param(
4
+ [Parameter(Mandatory=$true)]
5
+ [string]$VmId,
6
+ [Parameter(Mandatory=$true)]
7
+ [string]$DiskFilePath,
8
+ [Parameter(Mandatory=$true)]
9
+ [UInt64]$DiskSize
10
+ )
11
+
12
+ try {
13
+ $VM = Hyper-V\Get-VM -Id $VmId
14
+ Hyper-V\Resize-VHD -Path $DiskFilePath -SizeBytes $DiskSize
15
+ } catch {
16
+ Write-ErrorMessage "Failed to resize disk ${DiskFilePath} for VM ${VM}: ${PSItem}"
17
+ exit 1
18
+ }
@@ -0,0 +1,24 @@
1
+ #Requires -Modules VagrantMessages
2
+
3
+ param (
4
+ [parameter (Mandatory=$true)]
5
+ [Guid] $VMID,
6
+ [parameter (Mandatory=$true)]
7
+ [string] $Type
8
+ )
9
+
10
+ $ErrorActionPreference = "Stop"
11
+
12
+ try {
13
+ $VM = Hyper-V\Get-VM -Id $VMID
14
+ } catch {
15
+ Write-ErrorMessage "Failed to locate VM: ${PSItem}"
16
+ exit 1
17
+ }
18
+
19
+ try {
20
+ Hyper-V\Set-VM -VM $VM -EnhancedSessionTransportType $Type
21
+ } catch {
22
+ Write-ErrorMessage "Failed to assign EnhancedSessionTransportType to ${Type}: ${PSItem}"
23
+ exit 1
24
+ }
@@ -4,7 +4,7 @@ param (
4
4
  [parameter (Mandatory=$true)]
5
5
  [string] $VMID,
6
6
  [parameter (Mandatory=$true)]
7
- [string] $Name,
7
+ [string] $Id,
8
8
  [parameter (Mandatory=$false)]
9
9
  [switch] $Enable
10
10
  )
@@ -19,9 +19,9 @@ try {
19
19
  }
20
20
 
21
21
  try {
22
- Set-VagrantVMService -VM $VM -Name $Name -Enable $Enable
22
+ Set-VagrantVMService -VM $VM -Id $Id -Enable $Enable
23
23
  } catch {
24
24
  if($Enable){ $action = "enable" } else { $action = "disable" }
25
- Write-ErrorMessage "Failed to ${action} VM integration service ${Name}: ${PSItem}"
25
+ Write-ErrorMessage "Failed to ${action} VM integration service id ${Id}: ${PSItem}"
26
26
  exit 1
27
27
  }
@@ -223,6 +223,7 @@ function New-VagrantVMXML {
223
223
 
224
224
  # Determine if secure boot is enabled
225
225
  $SecureBoot = (Select-Xml -XML $VMConfig -XPath "//secure_boot_enabled").Node."#text"
226
+ $SecureBootTemplate = (Select-Xml -XML $VMConfig -XPath "//secure_boot_template").Node."#text"
226
227
 
227
228
  $NewVMConfig = @{
228
229
  Name = $VMName;
@@ -242,6 +243,13 @@ function New-VagrantVMXML {
242
243
  if($Gen -gt 1) {
243
244
  if($SecureBoot -eq "True") {
244
245
  Hyper-V\Set-VMFirmware -VM $VM -EnableSecureBoot On
246
+ if (
247
+ ( ![System.String]::IsNullOrEmpty($SecureBootTemplate) )`
248
+ -and`
249
+ ( (Get-Command Hyper-V\Set-VMFirmware).Parameters.Keys.Contains("secureboottemplate") )
250
+ ) {
251
+ Hyper-V\Set-VMFirmware -VM $VM -SecureBootTemplate $SecureBootTemplate
252
+ }
245
253
  } else {
246
254
  Hyper-V\Set-VMFirmware -VM $VM -EnableSecureBoot Off
247
255
  }
@@ -614,15 +622,15 @@ function Set-VagrantVMService {
614
622
  [parameter (Mandatory=$true)]
615
623
  [Microsoft.HyperV.PowerShell.VirtualMachine] $VM,
616
624
  [parameter (Mandatory=$true)]
617
- [string] $Name,
625
+ [string] $Id,
618
626
  [parameter (Mandatory=$true)]
619
627
  [bool] $Enable
620
628
  )
621
629
 
622
630
  if($Enable) {
623
- Hyper-V\Enable-VMIntegrationService -VM $VM -Name $Name
631
+ Hyper-V\Get-VMIntegrationService -VM $VM | ?{$_.Id -match $Id} | Hyper-V\Enable-VMIntegrationService
624
632
  } else {
625
- Hyper-V\Disable-VMIntegrationService -VM $VM -Name $Name
633
+ Hyper-V\Get-VMIntegrationService -VM $VM | ?{$_.Id -match $Id} | Hyper-V\Disable-VMIntegrationService
626
634
  }
627
635
  return $VM
628
636
  <#
@@ -634,9 +642,9 @@ Enable or disable Hyper-V VM integration services.
634
642
 
635
643
  Hyper-V VM for modification.
636
644
 
637
- .PARAMETER Name
645
+ .PARAMETER Id
638
646
 
639
- Name of the integration service.
647
+ Id of the integration service.
640
648
 
641
649
  .PARAMETER Enable
642
650
 
@@ -722,7 +730,7 @@ function Check-VagrantHyperVAccess {
722
730
  )
723
731
  $acl = Get-ACL -Path $Path
724
732
  $systemACL = $acl.Access | where {
725
- $_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -eq "S-1-5-18" -and
733
+ try { return $_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -eq "S-1-5-18" } catch { return $false } -and
726
734
  $_.FileSystemRights -eq "FullControl" -and
727
735
  $_.AccessControlType -eq "Allow" -and
728
736
  $_.IsInherited -eq $true}