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.
- checksums.yaml +4 -4
- data/.hashibot.hcl +14 -0
- data/CHANGELOG.md +153 -2
- data/README.md +5 -7
- data/bin/vagrant +23 -0
- data/contrib/README.md +1 -0
- data/contrib/bash/completion.sh +13 -1
- data/contrib/sudoers/linux-suse +2 -2
- data/contrib/zsh/_vagrant +736 -0
- data/contrib/zsh/generate_zsh_completion.rb +166 -0
- data/lib/vagrant.rb +25 -0
- data/lib/vagrant/action.rb +8 -0
- data/lib/vagrant/action/builder.rb +193 -38
- data/lib/vagrant/action/builtin/box_add.rb +15 -7
- data/lib/vagrant/action/builtin/box_check_outdated.rb +12 -15
- data/lib/vagrant/action/builtin/cleanup_disks.rb +56 -0
- data/lib/vagrant/action/builtin/cloud_init_setup.rb +127 -0
- data/lib/vagrant/action/builtin/cloud_init_wait.rb +30 -0
- data/lib/vagrant/action/builtin/delayed.rb +26 -0
- data/lib/vagrant/action/builtin/disk.rb +52 -0
- data/lib/vagrant/action/builtin/handle_box.rb +3 -1
- data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +28 -9
- data/lib/vagrant/action/builtin/has_provisioner.rb +36 -0
- data/lib/vagrant/action/builtin/mixin_provisioners.rb +20 -1
- data/lib/vagrant/action/builtin/mixin_synced_folders.rb +20 -21
- data/lib/vagrant/action/builtin/set_hostname.rb +5 -1
- data/lib/vagrant/action/builtin/ssh_run.rb +21 -3
- data/lib/vagrant/action/builtin/synced_folders.rb +10 -0
- data/lib/vagrant/action/builtin/trigger.rb +37 -0
- data/lib/vagrant/action/hook.rb +76 -23
- data/lib/vagrant/action/runner.rb +11 -26
- data/lib/vagrant/action/warden.rb +28 -22
- data/lib/vagrant/box.rb +5 -4
- data/lib/vagrant/box_metadata.rb +17 -3
- data/lib/vagrant/bundler.rb +265 -53
- data/lib/vagrant/cli.rb +4 -2
- data/lib/vagrant/errors.rb +61 -1
- data/lib/vagrant/machine.rb +56 -6
- data/lib/vagrant/machine_index.rb +27 -1
- data/lib/vagrant/plugin/manager.rb +25 -14
- data/lib/vagrant/plugin/v2/command.rb +6 -2
- data/lib/vagrant/plugin/v2/components.rb +6 -0
- data/lib/vagrant/plugin/v2/manager.rb +67 -0
- data/lib/vagrant/plugin/v2/plugin.rb +13 -0
- data/lib/vagrant/plugin/v2/synced_folder.rb +50 -0
- data/lib/vagrant/plugin/v2/trigger.rb +64 -25
- data/lib/vagrant/shared_helpers.rb +28 -0
- data/lib/vagrant/ui.rb +51 -5
- data/lib/vagrant/util.rb +1 -0
- data/lib/vagrant/util/ansi_escape_code_remover.rb +1 -1
- data/lib/vagrant/util/caps.rb +48 -0
- data/lib/vagrant/util/credential_scrubber.rb +1 -1
- data/lib/vagrant/util/curl_helper.rb +8 -5
- data/lib/vagrant/util/directory.rb +19 -0
- data/lib/vagrant/util/downloader.rb +7 -3
- data/lib/vagrant/util/file_checksum.rb +6 -2
- data/lib/vagrant/util/guest_hosts.rb +68 -0
- data/lib/vagrant/util/guest_inspection.rb +9 -1
- data/lib/vagrant/util/install_cli_autocomplete.rb +118 -0
- data/lib/vagrant/util/io.rb +7 -27
- data/lib/vagrant/util/ipv4_interfaces.rb +15 -0
- data/lib/vagrant/util/is_port_open.rb +8 -20
- data/lib/vagrant/util/map_command_options.rb +33 -0
- data/lib/vagrant/util/network_ip.rb +11 -1
- data/lib/vagrant/util/numeric.rb +69 -0
- data/lib/vagrant/util/platform.rb +8 -1
- data/lib/vagrant/util/powershell.rb +1 -1
- data/lib/vagrant/util/subprocess.rb +9 -1
- data/lib/vagrant/vagrantfile.rb +1 -1
- data/plugins/commands/autocomplete/command/install.rb +49 -0
- data/plugins/commands/autocomplete/command/root.rb +64 -0
- data/plugins/commands/autocomplete/plugin.rb +18 -0
- data/plugins/commands/box/command/outdated.rb +14 -2
- data/plugins/commands/cloud/locales/en.yml +1 -1
- data/plugins/commands/cloud/publish.rb +1 -1
- data/plugins/commands/destroy/command.rb +6 -2
- data/plugins/commands/snapshot/command/save.rb +13 -8
- data/plugins/commands/ssh_config/command.rb +1 -1
- data/plugins/communicators/ssh/communicator.rb +25 -24
- data/plugins/communicators/winrm/config.rb +1 -1
- data/plugins/communicators/winrm/helper.rb +1 -1
- data/plugins/communicators/winrm/shell.rb +1 -1
- data/plugins/communicators/winssh/communicator.rb +126 -38
- data/plugins/communicators/winssh/config.rb +3 -7
- data/plugins/guests/alpine/cap/change_host_name.rb +10 -11
- data/plugins/guests/alpine/cap/rsync.rb +1 -1
- data/plugins/guests/alpine/plugin.rb +16 -0
- data/plugins/guests/alt/cap/change_host_name.rb +40 -53
- data/plugins/guests/arch/cap/change_host_name.rb +5 -14
- data/plugins/guests/arch/cap/configure_networks.rb +27 -10
- data/plugins/guests/atomic/cap/change_host_name.rb +5 -14
- data/plugins/guests/centos/cap/flavor.rb +24 -0
- data/plugins/guests/centos/guest.rb +9 -0
- data/plugins/guests/centos/plugin.rb +20 -0
- data/plugins/guests/darwin/cap/change_host_name.rb +10 -6
- data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +99 -13
- data/plugins/guests/darwin/plugin.rb +5 -0
- data/plugins/guests/debian/cap/change_host_name.rb +11 -11
- data/plugins/guests/debian/cap/configure_networks.rb +14 -6
- data/plugins/guests/esxi/cap/public_key.rb +3 -1
- data/plugins/guests/freebsd/cap/change_host_name.rb +10 -6
- data/plugins/guests/gentoo/cap/change_host_name.rb +14 -22
- data/plugins/guests/haiku/cap/rsync.rb +19 -0
- data/plugins/guests/haiku/plugin.rb +15 -0
- data/plugins/guests/linux/cap/change_host_name.rb +46 -0
- data/plugins/guests/linux/cap/halt.rb +9 -1
- data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +16 -0
- data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +4 -11
- data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +62 -0
- data/plugins/guests/linux/cap/reboot.rb +48 -0
- data/plugins/guests/linux/plugin.rb +20 -0
- data/plugins/guests/omnios/cap/change_host_name.rb +10 -16
- data/plugins/guests/openbsd/cap/change_host_name.rb +10 -6
- data/plugins/guests/photon/cap/change_host_name.rb +9 -15
- data/plugins/guests/pld/cap/change_host_name.rb +11 -17
- data/plugins/guests/redhat/cap/change_host_name.rb +10 -5
- data/plugins/guests/redhat/cap/flavor.rb +3 -1
- data/plugins/guests/redhat/cap/nfs_client.rb +2 -2
- data/plugins/guests/redhat/cap/smb.rb +20 -0
- data/plugins/guests/redhat/plugin.rb +5 -0
- data/plugins/guests/slackware/cap/change_host_name.rb +11 -17
- data/plugins/guests/solaris11/plugin.rb +5 -0
- data/plugins/guests/suse/cap/change_host_name.rb +13 -12
- data/plugins/guests/windows/cap/public_key.rb +3 -3
- data/plugins/guests/windows/cap/reboot.rb +2 -1
- data/plugins/hosts/darwin/cap/fs_iso.rb +49 -0
- data/plugins/hosts/darwin/cap/nfs.rb +11 -0
- data/plugins/hosts/darwin/plugin.rb +15 -0
- data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
- data/plugins/hosts/linux/cap/nfs.rb +21 -2
- data/plugins/hosts/linux/cap/rdp.rb +1 -1
- data/plugins/hosts/linux/plugin.rb +10 -0
- data/plugins/hosts/windows/cap/fs_iso.rb +48 -0
- data/plugins/hosts/windows/cap/rdp.rb +1 -1
- data/plugins/hosts/windows/plugin.rb +15 -0
- data/plugins/kernel_v2/config/cloud_init.rb +126 -0
- data/plugins/kernel_v2/config/disk.rb +221 -0
- data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
- data/plugins/kernel_v2/config/vm.rb +225 -11
- data/plugins/kernel_v2/config/vm_provisioner.rb +17 -3
- data/plugins/kernel_v2/config/vm_trigger.rb +6 -5
- data/plugins/providers/docker/action.rb +8 -17
- data/plugins/providers/docker/action/forwarded_ports.rb +2 -0
- data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +61 -0
- data/plugins/providers/docker/cap/has_communicator.rb +11 -0
- data/plugins/providers/docker/communicator.rb +1 -1
- data/plugins/providers/docker/driver.rb +73 -10
- data/plugins/providers/docker/errors.rb +4 -0
- data/plugins/providers/docker/executor/local.rb +7 -1
- data/plugins/providers/docker/plugin.rb +5 -0
- data/plugins/providers/hyperv/action.rb +2 -0
- data/plugins/providers/hyperv/action/configure.rb +8 -0
- data/plugins/providers/hyperv/action/export.rb +4 -2
- data/plugins/providers/hyperv/cap/cleanup_disks.rb +54 -0
- data/plugins/providers/hyperv/cap/configure_disks.rb +200 -0
- data/plugins/providers/hyperv/cap/validate_disk_ext.rb +34 -0
- data/plugins/providers/hyperv/config.rb +5 -0
- data/plugins/providers/hyperv/driver.rb +90 -9
- data/plugins/providers/hyperv/plugin.rb +25 -0
- data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +28 -0
- data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +13 -0
- data/plugins/providers/hyperv/scripts/get_vhd.ps1 +16 -0
- data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +1 -1
- data/plugins/providers/hyperv/scripts/list_hdds.ps1 +17 -0
- data/plugins/providers/hyperv/scripts/new_vhd.ps1 +31 -0
- data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +25 -0
- data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +18 -0
- data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +24 -0
- data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +3 -3
- data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +14 -6
- data/plugins/providers/virtualbox/action.rb +14 -1
- data/plugins/providers/virtualbox/action/clean_machine_folder.rb +10 -1
- data/plugins/providers/virtualbox/action/export.rb +4 -2
- data/plugins/providers/virtualbox/action/forward_ports.rb +2 -2
- data/plugins/providers/virtualbox/action/import.rb +8 -4
- data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +4 -2
- data/plugins/providers/virtualbox/action/snapshot_delete.rb +4 -2
- data/plugins/providers/virtualbox/action/snapshot_restore.rb +4 -2
- data/plugins/providers/virtualbox/cap/cleanup_disks.rb +85 -0
- data/plugins/providers/virtualbox/cap/configure_disks.rb +440 -0
- data/plugins/providers/virtualbox/cap/mount_options.rb +35 -0
- data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +34 -0
- data/plugins/providers/virtualbox/driver/base.rb +15 -0
- data/plugins/providers/virtualbox/driver/meta.rb +17 -2
- data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
- data/plugins/providers/virtualbox/driver/version_6_1.rb +39 -0
- data/plugins/providers/virtualbox/model/storage_controller.rb +135 -0
- data/plugins/providers/virtualbox/model/storage_controller_array.rb +100 -0
- data/plugins/providers/virtualbox/plugin.rb +38 -0
- data/plugins/providers/virtualbox/synced_folder.rb +1 -0
- data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +44 -0
- data/plugins/provisioners/ansible/cap/guest/arch/ansible_install.rb +20 -3
- data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +4 -5
- data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +2 -2
- data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +2 -2
- data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +8 -4
- data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +2 -2
- data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +2 -1
- data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +3 -3
- data/plugins/provisioners/ansible/plugin.rb +5 -0
- data/plugins/provisioners/ansible/provisioner/base.rb +1 -1
- data/plugins/provisioners/container/client.rb +203 -0
- data/plugins/provisioners/container/config.rb +83 -0
- data/plugins/provisioners/container/installer.rb +13 -0
- data/plugins/provisioners/container/plugin.rb +23 -0
- data/plugins/provisioners/container/provisioner.rb +28 -0
- data/plugins/provisioners/docker/cap/{redhat → centos}/docker_install.rb +10 -7
- data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +24 -0
- data/plugins/provisioners/docker/client.rb +4 -175
- data/plugins/provisioners/docker/config.rb +2 -72
- data/plugins/provisioners/docker/installer.rb +3 -5
- data/plugins/provisioners/docker/plugin.rb +6 -6
- data/plugins/provisioners/docker/provisioner.rb +4 -10
- data/plugins/provisioners/podman/cap/centos/podman_install.rb +35 -0
- data/plugins/provisioners/podman/cap/linux/podman_installed.rb +13 -0
- data/plugins/provisioners/podman/cap/redhat/podman_install.rb +26 -0
- data/plugins/provisioners/podman/client.rb +12 -0
- data/plugins/provisioners/podman/config.rb +28 -0
- data/plugins/provisioners/podman/installer.rb +33 -0
- data/plugins/provisioners/podman/plugin.rb +38 -0
- data/plugins/provisioners/podman/provisioner.rb +52 -0
- data/plugins/provisioners/salt/provisioner.rb +4 -0
- data/plugins/provisioners/shell/config.rb +1 -6
- data/plugins/provisioners/shell/provisioner.rb +61 -26
- data/plugins/synced_folders/nfs/synced_folder.rb +3 -1
- data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +11 -0
- data/plugins/synced_folders/smb/cap/mount_options.rb +36 -0
- data/plugins/synced_folders/smb/plugin.rb +10 -0
- data/plugins/synced_folders/smb/synced_folder.rb +2 -2
- data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
- data/templates/commands/init/Vagrantfile.erb +1 -1
- data/templates/guests/arch/{network_dhcp.erb → default_network/network_dhcp.erb} +0 -0
- data/templates/guests/arch/{network_static.erb → default_network/network_static.erb} +0 -0
- data/templates/guests/arch/{network_static6.erb → default_network/network_static6.erb} +0 -0
- data/templates/guests/arch/systemd_networkd/network_dhcp.erb +6 -0
- data/templates/guests/arch/systemd_networkd/network_static.erb +9 -0
- data/templates/guests/arch/systemd_networkd/network_static6.erb +9 -0
- data/templates/guests/linux/etc_fstab.erb +6 -0
- data/templates/locales/en.yml +235 -6
- data/templates/locales/providers_docker.yml +6 -0
- data/templates/nfs/exports_darwin.erb +7 -0
- data/vagrant.gemspec +12 -12
- data/version.txt +1 -1
- metadata +3937 -3686
- data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
- data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
- 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
|
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: "
|
16
|
-
heartbeat: "
|
17
|
-
key_value_pair_exchange: "
|
18
|
-
shutdown: "
|
19
|
-
time_synchronization: "
|
20
|
-
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,
|
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
|
-
|
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] $
|
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 -
|
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 ${
|
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] $
|
625
|
+
[string] $Id,
|
618
626
|
[parameter (Mandatory=$true)]
|
619
627
|
[bool] $Enable
|
620
628
|
)
|
621
629
|
|
622
630
|
if($Enable) {
|
623
|
-
Hyper-V\
|
631
|
+
Hyper-V\Get-VMIntegrationService -VM $VM | ?{$_.Id -match $Id} | Hyper-V\Enable-VMIntegrationService
|
624
632
|
} else {
|
625
|
-
Hyper-V\
|
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
|
645
|
+
.PARAMETER Id
|
638
646
|
|
639
|
-
|
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}
|