vagrant-unbundled 2.2.6.1 → 2.2.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (247) hide show
  1. checksums.yaml +4 -4
  2. data/.hashibot.hcl +14 -0
  3. data/CHANGELOG.md +153 -2
  4. data/README.md +5 -7
  5. data/bin/vagrant +23 -0
  6. data/contrib/README.md +1 -0
  7. data/contrib/bash/completion.sh +13 -1
  8. data/contrib/sudoers/linux-suse +2 -2
  9. data/contrib/zsh/_vagrant +736 -0
  10. data/contrib/zsh/generate_zsh_completion.rb +166 -0
  11. data/lib/vagrant.rb +25 -0
  12. data/lib/vagrant/action.rb +8 -0
  13. data/lib/vagrant/action/builder.rb +193 -38
  14. data/lib/vagrant/action/builtin/box_add.rb +15 -7
  15. data/lib/vagrant/action/builtin/box_check_outdated.rb +12 -15
  16. data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
  17. data/lib/vagrant/action/builtin/cloud_init_setup.rb +127 -0
  18. data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
  19. data/lib/vagrant/action/builtin/delayed.rb +26 -0
  20. data/lib/vagrant/action/builtin/disk.rb +52 -0
  21. data/lib/vagrant/action/builtin/handle_box.rb +3 -1
  22. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
  23. data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
  24. data/lib/vagrant/action/builtin/mixin_provisioners.rb +20 -1
  25. data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
  26. data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
  27. data/lib/vagrant/action/builtin/ssh_run.rb +21 -3
  28. data/lib/vagrant/action/builtin/synced_folders.rb +10 -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 +11 -26
  32. data/lib/vagrant/action/warden.rb +28 -22
  33. data/lib/vagrant/box.rb +5 -4
  34. data/lib/vagrant/box_metadata.rb +17 -3
  35. data/lib/vagrant/bundler.rb +265 -53
  36. data/lib/vagrant/cli.rb +4 -2
  37. data/lib/vagrant/errors.rb +61 -1
  38. data/lib/vagrant/machine.rb +56 -6
  39. data/lib/vagrant/machine_index.rb +27 -1
  40. data/lib/vagrant/plugin/manager.rb +25 -14
  41. data/lib/vagrant/plugin/v2/command.rb +6 -2
  42. data/lib/vagrant/plugin/v2/components.rb +6 -0
  43. data/lib/vagrant/plugin/v2/manager.rb +67 -0
  44. data/lib/vagrant/plugin/v2/plugin.rb +13 -0
  45. data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
  46. data/lib/vagrant/plugin/v2/trigger.rb +64 -25
  47. data/lib/vagrant/shared_helpers.rb +28 -0
  48. data/lib/vagrant/ui.rb +51 -5
  49. data/lib/vagrant/util.rb +1 -0
  50. data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
  51. data/lib/vagrant/util/caps.rb +48 -0
  52. data/lib/vagrant/util/credential_scrubber.rb +1 -1
  53. data/lib/vagrant/util/curl_helper.rb +8 -5
  54. data/lib/vagrant/util/directory.rb +19 -0
  55. data/lib/vagrant/util/downloader.rb +7 -3
  56. data/lib/vagrant/util/file_checksum.rb +6 -2
  57. data/lib/vagrant/util/guest_hosts.rb +68 -0
  58. data/lib/vagrant/util/guest_inspection.rb +9 -1
  59. data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
  60. data/lib/vagrant/util/io.rb +7 -27
  61. data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
  62. data/lib/vagrant/util/is_port_open.rb +8 -20
  63. data/lib/vagrant/util/map_command_options.rb +33 -0
  64. data/lib/vagrant/util/network_ip.rb +11 -1
  65. data/lib/vagrant/util/numeric.rb +69 -0
  66. data/lib/vagrant/util/platform.rb +8 -1
  67. data/lib/vagrant/util/powershell.rb +1 -1
  68. data/lib/vagrant/util/subprocess.rb +9 -1
  69. data/lib/vagrant/vagrantfile.rb +1 -1
  70. data/plugins/commands/autocomplete/command/install.rb +49 -0
  71. data/plugins/commands/autocomplete/command/root.rb +64 -0
  72. data/plugins/commands/autocomplete/plugin.rb +18 -0
  73. data/plugins/commands/box/command/outdated.rb +14 -2
  74. data/plugins/commands/cloud/locales/en.yml +1 -1
  75. data/plugins/commands/cloud/publish.rb +1 -1
  76. data/plugins/commands/destroy/command.rb +6 -2
  77. data/plugins/commands/snapshot/command/save.rb +13 -8
  78. data/plugins/commands/ssh_config/command.rb +1 -1
  79. data/plugins/communicators/ssh/communicator.rb +25 -24
  80. data/plugins/communicators/winrm/config.rb +1 -1
  81. data/plugins/communicators/winrm/helper.rb +1 -1
  82. data/plugins/communicators/winrm/shell.rb +1 -1
  83. data/plugins/communicators/winssh/communicator.rb +126 -38
  84. data/plugins/communicators/winssh/config.rb +3 -7
  85. data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
  86. data/plugins/guests/alpine/cap/rsync.rb +1 -1
  87. data/plugins/guests/alpine/plugin.rb +16 -0
  88. data/plugins/guests/alt/cap/change_host_name.rb +40 -53
  89. data/plugins/guests/arch/cap/change_host_name.rb +5 -14
  90. data/plugins/guests/arch/cap/configure_networks.rb +27 -10
  91. data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
  92. data/plugins/guests/centos/cap/flavor.rb +24 -0
  93. data/plugins/guests/centos/guest.rb +9 -0
  94. data/plugins/guests/centos/plugin.rb +20 -0
  95. data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
  96. data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +99 -13
  97. data/plugins/guests/darwin/plugin.rb +5 -0
  98. data/plugins/guests/debian/cap/change_host_name.rb +11 -11
  99. data/plugins/guests/debian/cap/configure_networks.rb +14 -6
  100. data/plugins/guests/esxi/cap/public_key.rb +3 -1
  101. data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
  102. data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
  103. data/plugins/guests/haiku/cap/rsync.rb +19 -0
  104. data/plugins/guests/haiku/plugin.rb +15 -0
  105. data/plugins/guests/linux/cap/change_host_name.rb +46 -0
  106. data/plugins/guests/linux/cap/halt.rb +9 -1
  107. data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +16 -0
  108. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +4 -11
  109. data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +62 -0
  110. data/plugins/guests/linux/cap/reboot.rb +48 -0
  111. data/plugins/guests/linux/plugin.rb +20 -0
  112. data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
  113. data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
  114. data/plugins/guests/photon/cap/change_host_name.rb +9 -15
  115. data/plugins/guests/pld/cap/change_host_name.rb +11 -17
  116. data/plugins/guests/redhat/cap/change_host_name.rb +10 -5
  117. data/plugins/guests/redhat/cap/flavor.rb +3 -1
  118. data/plugins/guests/redhat/cap/nfs_client.rb +2 -2
  119. data/plugins/guests/redhat/cap/smb.rb +20 -0
  120. data/plugins/guests/redhat/plugin.rb +5 -0
  121. data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
  122. data/plugins/guests/solaris11/plugin.rb +5 -0
  123. data/plugins/guests/suse/cap/change_host_name.rb +13 -12
  124. data/plugins/guests/windows/cap/public_key.rb +3 -3
  125. data/plugins/guests/windows/cap/reboot.rb +2 -1
  126. data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
  127. data/plugins/hosts/darwin/cap/nfs.rb +11 -0
  128. data/plugins/hosts/darwin/plugin.rb +15 -0
  129. data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
  130. data/plugins/hosts/linux/cap/nfs.rb +21 -2
  131. data/plugins/hosts/linux/cap/rdp.rb +1 -1
  132. data/plugins/hosts/linux/plugin.rb +10 -0
  133. data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
  134. data/plugins/hosts/windows/cap/rdp.rb +1 -1
  135. data/plugins/hosts/windows/plugin.rb +15 -0
  136. data/plugins/kernel_v2/config/cloud_init.rb +126 -0
  137. data/plugins/kernel_v2/config/disk.rb +221 -0
  138. data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
  139. data/plugins/kernel_v2/config/vm.rb +225 -11
  140. data/plugins/kernel_v2/config/vm_provisioner.rb +17 -3
  141. data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
  142. data/plugins/providers/docker/action.rb +8 -17
  143. data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
  144. data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
  145. data/plugins/providers/docker/cap/has_communicator.rb +11 -0
  146. data/plugins/providers/docker/communicator.rb +1 -1
  147. data/plugins/providers/docker/driver.rb +73 -10
  148. data/plugins/providers/docker/errors.rb +4 -0
  149. data/plugins/providers/docker/executor/local.rb +7 -1
  150. data/plugins/providers/docker/plugin.rb +5 -0
  151. data/plugins/providers/hyperv/action.rb +2 -0
  152. data/plugins/providers/hyperv/action/configure.rb +8 -0
  153. data/plugins/providers/hyperv/action/export.rb +4 -2
  154. data/plugins/providers/hyperv/cap/cleanup_disks.rb +54 -0
  155. data/plugins/providers/hyperv/cap/configure_disks.rb +200 -0
  156. data/plugins/providers/hyperv/cap/validate_disk_ext.rb +34 -0
  157. data/plugins/providers/hyperv/config.rb +5 -0
  158. data/plugins/providers/hyperv/driver.rb +90 -9
  159. data/plugins/providers/hyperv/plugin.rb +25 -0
  160. data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +28 -0
  161. data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +13 -0
  162. data/plugins/providers/hyperv/scripts/get_vhd.ps1 +16 -0
  163. data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +1 -1
  164. data/plugins/providers/hyperv/scripts/list_hdds.ps1 +17 -0
  165. data/plugins/providers/hyperv/scripts/new_vhd.ps1 +31 -0
  166. data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +25 -0
  167. data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +18 -0
  168. data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +24 -0
  169. data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +3 -3
  170. data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +14 -6
  171. data/plugins/providers/virtualbox/action.rb +14 -1
  172. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +10 -1
  173. data/plugins/providers/virtualbox/action/export.rb +4 -2
  174. data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
  175. data/plugins/providers/virtualbox/action/import.rb +8 -4
  176. data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +4 -2
  177. data/plugins/providers/virtualbox/action/snapshot_delete.rb +4 -2
  178. data/plugins/providers/virtualbox/action/snapshot_restore.rb +4 -2
  179. data/plugins/providers/virtualbox/cap/cleanup_disks.rb +85 -0
  180. data/plugins/providers/virtualbox/cap/configure_disks.rb +440 -0
  181. data/plugins/providers/virtualbox/cap/mount_options.rb +35 -0
  182. data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +34 -0
  183. data/plugins/providers/virtualbox/driver/base.rb +15 -0
  184. data/plugins/providers/virtualbox/driver/meta.rb +17 -2
  185. data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
  186. data/plugins/providers/virtualbox/driver/version_6_1.rb +39 -0
  187. data/plugins/providers/virtualbox/model/storage_controller.rb +135 -0
  188. data/plugins/providers/virtualbox/model/storage_controller_array.rb +100 -0
  189. data/plugins/providers/virtualbox/plugin.rb +38 -0
  190. data/plugins/providers/virtualbox/synced_folder.rb +1 -0
  191. data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +44 -0
  192. data/plugins/provisioners/ansible/cap/guest/arch/ansible_install.rb +20 -3
  193. data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +4 -5
  194. data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +2 -2
  195. data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +2 -2
  196. data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +8 -4
  197. data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +2 -2
  198. data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +2 -1
  199. data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +3 -3
  200. data/plugins/provisioners/ansible/plugin.rb +5 -0
  201. data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
  202. data/plugins/provisioners/container/client.rb +203 -0
  203. data/plugins/provisioners/container/config.rb +83 -0
  204. data/plugins/provisioners/container/installer.rb +13 -0
  205. data/plugins/provisioners/container/plugin.rb +23 -0
  206. data/plugins/provisioners/container/provisioner.rb +28 -0
  207. data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
  208. data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
  209. data/plugins/provisioners/docker/client.rb +4 -175
  210. data/plugins/provisioners/docker/config.rb +2 -72
  211. data/plugins/provisioners/docker/installer.rb +3 -5
  212. data/plugins/provisioners/docker/plugin.rb +6 -6
  213. data/plugins/provisioners/docker/provisioner.rb +4 -10
  214. data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
  215. data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
  216. data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
  217. data/plugins/provisioners/podman/client.rb +12 -0
  218. data/plugins/provisioners/podman/config.rb +28 -0
  219. data/plugins/provisioners/podman/installer.rb +33 -0
  220. data/plugins/provisioners/podman/plugin.rb +38 -0
  221. data/plugins/provisioners/podman/provisioner.rb +52 -0
  222. data/plugins/provisioners/salt/provisioner.rb +4 -0
  223. data/plugins/provisioners/shell/config.rb +1 -6
  224. data/plugins/provisioners/shell/provisioner.rb +61 -26
  225. data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
  226. data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
  227. data/plugins/synced_folders/smb/cap/mount_options.rb +36 -0
  228. data/plugins/synced_folders/smb/plugin.rb +10 -0
  229. data/plugins/synced_folders/smb/synced_folder.rb +2 -2
  230. data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
  231. data/templates/commands/init/Vagrantfile.erb +1 -1
  232. data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
  233. data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
  234. data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
  235. data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
  236. data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
  237. data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
  238. data/templates/guests/linux/etc_fstab.erb +6 -0
  239. data/templates/locales/en.yml +235 -6
  240. data/templates/locales/providers_docker.yml +6 -0
  241. data/templates/nfs/exports_darwin.erb +7 -0
  242. data/vagrant.gemspec +12 -12
  243. data/version.txt +1 -1
  244. metadata +3937 -3686
  245. data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
  246. data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
  247. data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
@@ -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}