vagrant-unbundled 2.2.6.2 → 2.2.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.hashibot.hcl +14 -0
- data/CHANGELOG.md +213 -2
- data/Gemfile +1 -1
- data/README.md +9 -51
- data/RELEASE.md +1 -1
- 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 +738 -0
- data/contrib/zsh/generate_zsh_completion.rb +165 -0
- data/lib/vagrant.rb +25 -4
- data/lib/vagrant/action.rb +8 -0
- data/lib/vagrant/action/builder.rb +184 -38
- data/lib/vagrant/action/builtin/box_add.rb +20 -8
- 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 +122 -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 +16 -0
- data/lib/vagrant/action/builtin/trigger.rb +37 -0
- data/lib/vagrant/action/hook.rb +76 -23
- data/lib/vagrant/action/runner.rb +12 -27
- data/lib/vagrant/action/warden.rb +28 -22
- data/lib/vagrant/box.rb +11 -4
- data/lib/vagrant/box_collection.rb +1 -1
- data/lib/vagrant/box_metadata.rb +17 -3
- data/lib/vagrant/bundler.rb +298 -59
- data/lib/vagrant/cli.rb +4 -2
- data/lib/vagrant/errors.rb +61 -1
- data/lib/vagrant/machine.rb +64 -11
- data/lib/vagrant/machine_index.rb +28 -1
- data/lib/vagrant/plugin/manager.rb +25 -14
- data/lib/vagrant/plugin/v2/command.rb +7 -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 +36 -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 +10 -5
- 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/mime.rb +92 -0
- data/lib/vagrant/util/network_ip.rb +11 -1
- data/lib/vagrant/util/numeric.rb +69 -0
- data/lib/vagrant/util/platform.rb +10 -2
- data/lib/vagrant/util/powershell.rb +1 -1
- data/lib/vagrant/util/subprocess.rb +9 -1
- data/lib/vagrant/util/template_renderer.rb +2 -2
- data/lib/vagrant/util/uploader.rb +7 -4
- 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/cap/command.rb +5 -1
- data/plugins/commands/cloud/auth/login.rb +20 -23
- data/plugins/commands/cloud/auth/logout.rb +2 -10
- data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +57 -0
- data/plugins/commands/cloud/auth/whoami.rb +18 -20
- data/plugins/commands/cloud/box/create.rb +33 -29
- data/plugins/commands/cloud/box/delete.rb +30 -24
- data/plugins/commands/cloud/box/show.rb +41 -31
- data/plugins/commands/cloud/box/update.rb +34 -26
- data/plugins/commands/cloud/client/client.rb +50 -81
- data/plugins/commands/cloud/list.rb +3 -4
- data/plugins/commands/cloud/locales/en.yml +10 -10
- data/plugins/commands/cloud/plugin.rb +10 -0
- data/plugins/commands/cloud/provider/create.rb +38 -28
- data/plugins/commands/cloud/provider/delete.rb +39 -29
- data/plugins/commands/cloud/provider/update.rb +37 -28
- data/plugins/commands/cloud/provider/upload.rb +44 -34
- data/plugins/commands/cloud/publish.rb +185 -108
- data/plugins/commands/cloud/search.rb +34 -21
- data/plugins/commands/cloud/util.rb +266 -162
- data/plugins/commands/cloud/version/create.rb +33 -28
- data/plugins/commands/cloud/version/delete.rb +35 -28
- data/plugins/commands/cloud/version/release.rb +35 -29
- data/plugins/commands/cloud/version/revoke.rb +36 -29
- data/plugins/commands/cloud/version/update.rb +29 -25
- data/plugins/commands/destroy/command.rb +6 -2
- data/plugins/commands/login/plugin.rb +0 -13
- 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/arch/cap/smb.rb +1 -1
- 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/darwin_version.rb +40 -0
- data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +1 -1
- data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +109 -13
- data/plugins/guests/darwin/plugin.rb +15 -0
- data/plugins/guests/debian/cap/change_host_name.rb +12 -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 +25 -34
- data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +10 -11
- data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +75 -0
- data/plugins/guests/linux/cap/reboot.rb +53 -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 +14 -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 +31 -9
- data/plugins/guests/windows/cap/public_key.rb +3 -3
- data/plugins/guests/windows/cap/reboot.rb +10 -5
- 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 +133 -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 +230 -15
- 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 +3 -1
- 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 +98 -0
- data/plugins/providers/virtualbox/plugin.rb +38 -0
- data/plugins/providers/virtualbox/provider.rb +2 -1
- 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 +56 -0
- data/plugins/synced_folders/smb/plugin.rb +20 -0
- data/plugins/synced_folders/smb/synced_folder.rb +2 -2
- data/plugins/synced_folders/unix_mount_helpers.rb +14 -0
- data/scripts/website_push_www.sh +1 -1
- 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 +14 -15
- data/version.txt +1 -1
- metadata +3577 -3855
- data/lib/vagrant/action/builtin/after_trigger.rb +0 -31
- data/lib/vagrant/action/builtin/before_trigger.rb +0 -28
- data/plugins/commands/login/client.rb +0 -253
- data/plugins/commands/login/command.rb +0 -137
- data/plugins/commands/login/errors.rb +0 -24
- data/plugins/commands/login/locales/en.yml +0 -49
- data/plugins/provisioners/docker/cap/redhat/docker_start_service.rb +0 -16
- data/scripts/website_push_docs.sh +0 -40
@@ -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}
|
@@ -79,10 +79,22 @@ module VagrantPlugins
|
|
79
79
|
b.use ForwardPorts
|
80
80
|
b.use SetHostname
|
81
81
|
b.use SaneDefaults
|
82
|
+
b.use Call, IsEnvSet, :cloud_init do |env, b2|
|
83
|
+
if env[:result]
|
84
|
+
b2.use CloudInitSetup
|
85
|
+
end
|
86
|
+
end
|
87
|
+
b.use CleanupDisks
|
88
|
+
b.use Disk
|
82
89
|
b.use Customize, "pre-boot"
|
83
90
|
b.use Boot
|
84
91
|
b.use Customize, "post-boot"
|
85
92
|
b.use WaitForCommunicator, [:starting, :running]
|
93
|
+
b.use Call, IsEnvSet, :cloud_init do |env, b2|
|
94
|
+
if env[:result]
|
95
|
+
b2.use CloudInitWait
|
96
|
+
end
|
97
|
+
end
|
86
98
|
b.use Customize, "post-comm"
|
87
99
|
b.use CheckGuestAdditions
|
88
100
|
end
|
@@ -104,7 +116,7 @@ module VagrantPlugins
|
|
104
116
|
b3.use ConfigValidate
|
105
117
|
b3.use ProvisionerCleanup, :before
|
106
118
|
b3.use CheckAccessible
|
107
|
-
b3.use EnvSet, force_halt:
|
119
|
+
b3.use EnvSet, force_halt: env2[:force_halt]
|
108
120
|
b3.use action_halt
|
109
121
|
b3.use Destroy
|
110
122
|
b3.use CleanMachineFolder
|
@@ -409,6 +421,7 @@ module VagrantPlugins
|
|
409
421
|
end
|
410
422
|
end
|
411
423
|
|
424
|
+
b.use EnvSet, cloud_init: true
|
412
425
|
b.use action_start
|
413
426
|
end
|
414
427
|
end
|
@@ -13,7 +13,16 @@ module VagrantPlugins
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def call(env)
|
16
|
-
|
16
|
+
machine_folder = env[:machine].provider.driver.read_machine_folder
|
17
|
+
|
18
|
+
begin
|
19
|
+
clean_machine_folder(machine_folder)
|
20
|
+
rescue Errno::EPERM
|
21
|
+
raise Vagrant::Errors::MachineFolderNotAccessible,
|
22
|
+
name: env[:machine].name,
|
23
|
+
path: machine_folder
|
24
|
+
end
|
25
|
+
|
17
26
|
@app.call(env)
|
18
27
|
end
|
19
28
|
|
@@ -23,8 +23,10 @@ module VagrantPlugins
|
|
23
23
|
def export
|
24
24
|
@env[:ui].info I18n.t("vagrant.actions.vm.export.exporting")
|
25
25
|
@env[:machine].provider.driver.export(ovf_path) do |progress|
|
26
|
-
@env[:ui].
|
27
|
-
|
26
|
+
@env[:ui].rewriting do |ui|
|
27
|
+
ui.clear_line
|
28
|
+
ui.report_progress(progress.percent, 100, false)
|
29
|
+
end
|
28
30
|
end
|
29
31
|
|
30
32
|
# Clear the line a final time so the next data can appear
|
@@ -48,7 +48,7 @@ module VagrantPlugins
|
|
48
48
|
# bridged networking don't require port-forwarding and establishing
|
49
49
|
# forwarded ports on these attachment types has uncertain behaviour.
|
50
50
|
@env[:ui].detail(I18n.t("vagrant.actions.vm.forward_ports.forwarding_entry",
|
51
|
-
message_attributes))
|
51
|
+
**message_attributes))
|
52
52
|
|
53
53
|
# Verify we have the network interface to attach to
|
54
54
|
if !interfaces[fp.adapter]
|
@@ -62,7 +62,7 @@ module VagrantPlugins
|
|
62
62
|
# so verify that that is the case.
|
63
63
|
if interfaces[fp.adapter][:type] != :nat
|
64
64
|
@env[:ui].detail(I18n.t("vagrant.actions.vm.forward_ports.non_nat",
|
65
|
-
message_attributes))
|
65
|
+
**message_attributes))
|
66
66
|
next
|
67
67
|
end
|
68
68
|
|
@@ -19,8 +19,10 @@ module VagrantPlugins
|
|
19
19
|
env[:ui].info I18n.t("vagrant.actions.vm.clone.creating")
|
20
20
|
env[:machine].id = env[:machine].provider.driver.clonevm(
|
21
21
|
env[:clone_id], env[:clone_snapshot]) do |progress|
|
22
|
-
env[:ui].
|
23
|
-
|
22
|
+
env[:ui].rewriting do |ui|
|
23
|
+
ui.clear_line
|
24
|
+
ui.report_progress(progress, 100, false)
|
25
|
+
end
|
24
26
|
end
|
25
27
|
|
26
28
|
# Clear the line one last time since the progress meter doesn't
|
@@ -51,8 +53,10 @@ module VagrantPlugins
|
|
51
53
|
# Import the virtual machine
|
52
54
|
ovf_file = env[:machine].box.directory.join("box.ovf").to_s
|
53
55
|
id = env[:machine].provider.driver.import(ovf_file) do |progress|
|
54
|
-
env[:ui].
|
55
|
-
|
56
|
+
env[:ui].rewriting do |ui|
|
57
|
+
ui.clear_line
|
58
|
+
ui.report_progress(progress, 100, false)
|
59
|
+
end
|
56
60
|
end
|
57
61
|
|
58
62
|
# Set the machine ID
|
@@ -55,8 +55,10 @@ module VagrantPlugins
|
|
55
55
|
@logger.info("Creating base snapshot for master VM.")
|
56
56
|
env[:machine].provider.driver.create_snapshot(
|
57
57
|
env[:clone_id], name) do |progress|
|
58
|
-
env[:ui].
|
59
|
-
|
58
|
+
env[:ui].rewriting do |ui|
|
59
|
+
ui.clear_line
|
60
|
+
ui.report_progress(progress, 100, false)
|
61
|
+
end
|
60
62
|
end
|
61
63
|
end
|
62
64
|
end
|
@@ -12,8 +12,10 @@ module VagrantPlugins
|
|
12
12
|
name: env[:snapshot_name]))
|
13
13
|
env[:machine].provider.driver.delete_snapshot(
|
14
14
|
env[:machine].id, env[:snapshot_name]) do |progress|
|
15
|
-
env[:ui].
|
16
|
-
|
15
|
+
env[:ui].rewriting do |ui|
|
16
|
+
ui.clear_line
|
17
|
+
ui.report_progress(progress, 100, false)
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
# Clear the line one last time since the progress meter doesn't disappear
|
@@ -12,8 +12,10 @@ module VagrantPlugins
|
|
12
12
|
name: env[:snapshot_name]))
|
13
13
|
env[:machine].provider.driver.restore_snapshot(
|
14
14
|
env[:machine].id, env[:snapshot_name]) do |progress|
|
15
|
-
env[:ui].
|
16
|
-
|
15
|
+
env[:ui].rewriting do |ui|
|
16
|
+
ui.clear_line
|
17
|
+
ui.report_progress(progress, 100, false)
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
# Clear the line one last time since the progress meter doesn't disappear
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "vagrant/util/experimental"
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module ProviderVirtualBox
|
6
|
+
module Cap
|
7
|
+
module CleanupDisks
|
8
|
+
LOGGER = Log4r::Logger.new("vagrant::plugins::virtualbox::cleanup_disks")
|
9
|
+
|
10
|
+
# @param [Vagrant::Machine] machine
|
11
|
+
# @param [VagrantPlugins::Kernel_V2::VagrantConfigDisk] defined_disks
|
12
|
+
# @param [Hash] disk_meta_file - A hash of all the previously defined disks from the last configure_disk action
|
13
|
+
def self.cleanup_disks(machine, defined_disks, disk_meta_file)
|
14
|
+
return if disk_meta_file.values.flatten.empty?
|
15
|
+
|
16
|
+
return if !Vagrant::Util::Experimental.feature_enabled?("disks")
|
17
|
+
|
18
|
+
handle_cleanup_disk(machine, defined_disks, disk_meta_file["disk"])
|
19
|
+
handle_cleanup_dvd(machine, defined_disks, disk_meta_file["dvd"])
|
20
|
+
# TODO: Floppy disks
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
# @param [Vagrant::Machine] machine
|
26
|
+
# @param [VagrantPlugins::Kernel_V2::VagrantConfigDisk] defined_disks
|
27
|
+
# @param [Array<Hash>] disk_meta - An array of all the previously defined disks from the last configure_disk action
|
28
|
+
def self.handle_cleanup_disk(machine, defined_disks, disk_meta)
|
29
|
+
raise TypeError, "Expected `Array` but received `#{disk_meta.class}`" if !disk_meta.is_a?(Array)
|
30
|
+
storage_controllers = machine.provider.driver.read_storage_controllers
|
31
|
+
|
32
|
+
primary = storage_controllers.get_primary_attachment
|
33
|
+
primary_uuid = primary[:uuid]
|
34
|
+
|
35
|
+
disk_meta.each do |d|
|
36
|
+
dsk = defined_disks.select { |dk| dk.name == d["name"] }
|
37
|
+
if !dsk.empty? || d["uuid"] == primary_uuid
|
38
|
+
next
|
39
|
+
else
|
40
|
+
LOGGER.warn("Found disk not in Vagrantfile config: '#{d["name"]}'. Removing disk from guest #{machine.name}")
|
41
|
+
machine.ui.warn(I18n.t("vagrant.cap.cleanup_disks.disk_cleanup", name: d["name"]), prefix: true)
|
42
|
+
|
43
|
+
controller = storage_controllers.get_controller(d["controller"])
|
44
|
+
attachment = controller.get_attachment(uuid: d["uuid"])
|
45
|
+
|
46
|
+
if !attachment
|
47
|
+
LOGGER.warn("Disk '#{d["name"]}' not attached to guest, but still exists.")
|
48
|
+
else
|
49
|
+
machine.provider.driver.remove_disk(controller.name, attachment[:port], attachment[:device])
|
50
|
+
end
|
51
|
+
|
52
|
+
machine.provider.driver.close_medium(d["uuid"])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# @param [Vagrant::Machine] machine
|
58
|
+
# @param [VagrantPlugins::Kernel_V2::VagrantConfigDisk] defined_dvds
|
59
|
+
# @param [Array<Hash>] dvd_meta - An array of all the previously defined dvds from the last configure_disk action
|
60
|
+
def self.handle_cleanup_dvd(machine, defined_dvds, dvd_meta)
|
61
|
+
raise TypeError, "Expected `Array` but received `#{dvd_meta.class}`" if !dvd_meta.is_a?(Array)
|
62
|
+
dvd_meta.each do |d|
|
63
|
+
dsk = defined_dvds.select { |dk| dk.name == d["name"] }
|
64
|
+
if !dsk.empty?
|
65
|
+
next
|
66
|
+
else
|
67
|
+
LOGGER.warn("Found dvd not in Vagrantfile config: '#{d["name"]}'. Removing dvd from guest #{machine.name}")
|
68
|
+
machine.ui.warn("DVD '#{d["name"]}' no longer exists in Vagrant config. Removing medium from guest...", prefix: true)
|
69
|
+
|
70
|
+
storage_controllers = machine.provider.driver.read_storage_controllers
|
71
|
+
controller = storage_controllers.get_controller(d["controller"])
|
72
|
+
attachment = controller.get_attachment(uuid: d["uuid"])
|
73
|
+
|
74
|
+
if !attachment
|
75
|
+
LOGGER.warn("DVD '#{d["name"]}' not attached to guest, but still exists.")
|
76
|
+
else
|
77
|
+
machine.provider.driver.remove_disk(controller.name, attachment[:port], attachment[:device])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|