vagrant-unbundled 2.2.7.0 → 2.2.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.hashibot.hcl +2 -0
- data/CHANGELOG.md +228 -0
- data/Gemfile +1 -1
- data/README.md +9 -51
- data/RELEASE.md +1 -1
- data/bin/vagrant +50 -1
- data/contrib/README.md +1 -0
- 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 +28 -5
- data/lib/vagrant/action.rb +7 -0
- data/lib/vagrant/action/builder.rb +184 -38
- data/lib/vagrant/action/builtin/box_add.rb +24 -8
- data/lib/vagrant/action/builtin/box_check_outdated.rb +2 -1
- 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 +14 -1
- 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 +1 -0
- 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/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 -31
- data/lib/vagrant/box.rb +11 -4
- data/lib/vagrant/box_collection.rb +1 -1
- data/lib/vagrant/bundler.rb +310 -61
- data/lib/vagrant/cli.rb +4 -2
- data/lib/vagrant/environment.rb +1 -0
- data/lib/vagrant/errors.rb +69 -1
- data/lib/vagrant/machine.rb +64 -11
- data/lib/vagrant/machine_index.rb +28 -1
- data/lib/vagrant/patches/net-ssh.rb +186 -0
- data/lib/vagrant/plugin/manager.rb +45 -16
- 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 +43 -2
- data/lib/vagrant/util.rb +2 -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 +12 -8
- data/lib/vagrant/util/directory.rb +19 -0
- data/lib/vagrant/util/downloader.rb +10 -5
- 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 -19
- 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 +28 -0
- data/lib/vagrant/util/platform.rb +10 -2
- data/lib/vagrant/util/powershell.rb +31 -15
- 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 +2 -2
- 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/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_authentication.rb +60 -31
- data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +64 -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 +55 -79
- data/plugins/commands/cloud/list.rb +3 -4
- data/plugins/commands/cloud/locales/en.yml +15 -11
- 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 +53 -33
- data/plugins/commands/cloud/publish.rb +193 -106
- data/plugins/commands/cloud/search.rb +34 -21
- data/plugins/commands/cloud/util.rb +273 -161
- 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 +7 -7
- data/plugins/commands/login/plugin.rb +0 -13
- 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/configure_networks.rb +1 -1
- 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 +33 -10
- 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/fedora/guest.rb +4 -4
- 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 +74 -0
- data/plugins/guests/linux/cap/reboot.rb +36 -7
- data/plugins/guests/linux/plugin.rb +10 -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/openwrt/cap/change_host_name.rb +19 -0
- data/plugins/guests/openwrt/cap/halt.rb +16 -0
- data/plugins/guests/openwrt/cap/insert_public_key.rb +20 -0
- data/plugins/guests/openwrt/cap/remove_public_key.rb +22 -0
- data/plugins/guests/openwrt/cap/rsync.rb +35 -0
- data/plugins/guests/openwrt/guest.rb +23 -0
- data/plugins/guests/openwrt/plugin.rb +61 -0
- 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/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/plugin.rb +10 -0
- data/plugins/hosts/linux/cap/fs_iso.rb +49 -0
- data/plugins/hosts/linux/cap/nfs.rb +1 -0
- 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 +67 -14
- data/plugins/kernel_v2/config/ssh_connect.rb +24 -0
- data/plugins/kernel_v2/config/vm.rb +155 -21
- data/plugins/kernel_v2/config/vm_provisioner.rb +13 -2
- 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 +58 -7
- 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 +13 -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/network.rb +12 -5
- 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 +40 -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 +16 -2
- data/plugins/providers/virtualbox/driver/version_5_0.rb +217 -2
- data/plugins/providers/virtualbox/driver/version_6_1.rb +23 -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 +42 -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/freebsd/ansible_install.rb +1 -1
- 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/bootstrap-salt.sh +7 -4
- 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.min.erb +3 -0
- 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/guests/nixos/network.erb +5 -6
- data/templates/locales/en.yml +221 -5
- data/templates/locales/providers_docker.yml +4 -0
- data/templates/nfs/exports_darwin.erb +1 -1
- data/vagrant.gemspec +14 -20
- data/version.txt +1 -1
- metadata +5092 -8978
- 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
@@ -8,10 +8,12 @@ require "vagrant/config/v2/util"
|
|
8
8
|
require "vagrant/util/platform"
|
9
9
|
require "vagrant/util/presence"
|
10
10
|
require "vagrant/util/experimental"
|
11
|
+
require "vagrant/util/map_command_options"
|
11
12
|
|
12
13
|
require File.expand_path("../vm_provisioner", __FILE__)
|
13
14
|
require File.expand_path("../vm_subvm", __FILE__)
|
14
15
|
require File.expand_path("../disk", __FILE__)
|
16
|
+
require File.expand_path("../cloud_init", __FILE__)
|
15
17
|
|
16
18
|
module VagrantPlugins
|
17
19
|
module Kernel_V2
|
@@ -21,6 +23,8 @@ module VagrantPlugins
|
|
21
23
|
DEFAULT_VM_NAME = :default
|
22
24
|
|
23
25
|
attr_accessor :allowed_synced_folder_types
|
26
|
+
attr_accessor :allow_fstab_modification
|
27
|
+
attr_accessor :allow_hosts_modification
|
24
28
|
attr_accessor :base_mac
|
25
29
|
attr_accessor :base_address
|
26
30
|
attr_accessor :boot_timeout
|
@@ -37,6 +41,7 @@ module VagrantPlugins
|
|
37
41
|
attr_accessor :box_download_client_cert
|
38
42
|
attr_accessor :box_download_insecure
|
39
43
|
attr_accessor :box_download_location_trusted
|
44
|
+
attr_accessor :box_download_options
|
40
45
|
attr_accessor :communicator
|
41
46
|
attr_accessor :graceful_halt_timeout
|
42
47
|
attr_accessor :guest
|
@@ -45,6 +50,8 @@ module VagrantPlugins
|
|
45
50
|
attr_accessor :usable_port_range
|
46
51
|
attr_reader :provisioners
|
47
52
|
attr_reader :disks
|
53
|
+
attr_reader :cloud_init_configs
|
54
|
+
attr_reader :box_extra_download_options
|
48
55
|
|
49
56
|
# This is an experimental feature that isn't public yet.
|
50
57
|
attr_accessor :clone
|
@@ -53,6 +60,7 @@ module VagrantPlugins
|
|
53
60
|
@logger = Log4r::Logger.new("vagrant::config::vm")
|
54
61
|
|
55
62
|
@allowed_synced_folder_types = UNSET_VALUE
|
63
|
+
@allow_fstab_modification = UNSET_VALUE
|
56
64
|
@base_mac = UNSET_VALUE
|
57
65
|
@base_address = UNSET_VALUE
|
58
66
|
@boot_timeout = UNSET_VALUE
|
@@ -66,8 +74,11 @@ module VagrantPlugins
|
|
66
74
|
@box_download_client_cert = UNSET_VALUE
|
67
75
|
@box_download_insecure = UNSET_VALUE
|
68
76
|
@box_download_location_trusted = UNSET_VALUE
|
77
|
+
@box_download_options = UNSET_VALUE
|
78
|
+
@box_extra_download_options = UNSET_VALUE
|
69
79
|
@box_url = UNSET_VALUE
|
70
80
|
@box_version = UNSET_VALUE
|
81
|
+
@allow_hosts_modification = UNSET_VALUE
|
71
82
|
@clone = UNSET_VALUE
|
72
83
|
@communicator = UNSET_VALUE
|
73
84
|
@graceful_halt_timeout = UNSET_VALUE
|
@@ -76,6 +87,7 @@ module VagrantPlugins
|
|
76
87
|
@post_up_message = UNSET_VALUE
|
77
88
|
@provisioners = []
|
78
89
|
@disks = []
|
90
|
+
@cloud_init_configs = []
|
79
91
|
@usable_port_range = UNSET_VALUE
|
80
92
|
|
81
93
|
# Internal state
|
@@ -148,6 +160,28 @@ module VagrantPlugins
|
|
148
160
|
end
|
149
161
|
result.instance_variable_set(:@disks, new_disks)
|
150
162
|
|
163
|
+
# Merge defined cloud_init_configs
|
164
|
+
other_cloud_init_configs = other.instance_variable_get(:@cloud_init_configs)
|
165
|
+
new_cloud_init_configs = []
|
166
|
+
@cloud_init_configs.each do |p|
|
167
|
+
other_p = other_cloud_init_configs.find { |o| p.id == o.id }
|
168
|
+
if other_p
|
169
|
+
# there is an override. take it.
|
170
|
+
other_p.config = p.config.merge(other_p.config)
|
171
|
+
|
172
|
+
# Remove duplicate disk config from other
|
173
|
+
p = other_p
|
174
|
+
other_cloud_init_configs.delete(other_p)
|
175
|
+
end
|
176
|
+
|
177
|
+
# there is an override, merge it into the
|
178
|
+
new_cloud_init_configs << p.dup
|
179
|
+
end
|
180
|
+
other_cloud_init_configs.each do |p|
|
181
|
+
new_cloud_init_configs << p.dup
|
182
|
+
end
|
183
|
+
result.instance_variable_set(:@cloud_init_configs, new_cloud_init_configs)
|
184
|
+
|
151
185
|
# Merge the providers by prepending any configuration blocks we
|
152
186
|
# have for providers onto the new configuration.
|
153
187
|
other_providers = other.instance_variable_get(:@__providers)
|
@@ -243,6 +277,11 @@ module VagrantPlugins
|
|
243
277
|
|
244
278
|
options ||= {}
|
245
279
|
|
280
|
+
if options[:nfs]
|
281
|
+
options[:type] = :nfs
|
282
|
+
options.delete(:nfs)
|
283
|
+
end
|
284
|
+
|
246
285
|
if options.has_key?(:name)
|
247
286
|
synced_folder_name = options.delete(:name)
|
248
287
|
else
|
@@ -366,7 +405,7 @@ module VagrantPlugins
|
|
366
405
|
|
367
406
|
if Vagrant::Util::Experimental.feature_enabled?("dependency_provisioners")
|
368
407
|
opts = {before: before, after: after}
|
369
|
-
prov = VagrantConfigProvisioner.new(name, type.to_sym, opts)
|
408
|
+
prov = VagrantConfigProvisioner.new(name, type.to_sym, **opts)
|
370
409
|
else
|
371
410
|
prov = VagrantConfigProvisioner.new(name, type.to_sym)
|
372
411
|
end
|
@@ -376,7 +415,9 @@ module VagrantPlugins
|
|
376
415
|
prov.preserve_order = !!options.delete(:preserve_order) if \
|
377
416
|
options.key?(:preserve_order)
|
378
417
|
prov.run = options.delete(:run) if options.key?(:run)
|
379
|
-
prov.
|
418
|
+
prov.communicator_required = options.delete(:communicator_required) if options.key?(:communicator_required)
|
419
|
+
|
420
|
+
prov.add_config(**options, &block)
|
380
421
|
nil
|
381
422
|
end
|
382
423
|
|
@@ -431,16 +472,41 @@ module VagrantPlugins
|
|
431
472
|
disk_config.set_options(options)
|
432
473
|
|
433
474
|
# Add provider config
|
434
|
-
disk_config.add_provider_config(provider_options, &block)
|
475
|
+
disk_config.add_provider_config(**provider_options, &block)
|
435
476
|
|
436
|
-
if !Vagrant::Util::Experimental.feature_enabled?("
|
437
|
-
@logger.warn("Disk config defined, but experimental feature is not enabled. To use this feature, enable it with the experimental flag `
|
477
|
+
if !Vagrant::Util::Experimental.feature_enabled?("disks")
|
478
|
+
@logger.warn("Disk config defined, but experimental feature is not enabled. To use this feature, enable it with the experimental flag `disks`. Disk will not be added to internal config, and will be ignored.")
|
438
479
|
return
|
439
480
|
end
|
440
481
|
|
441
482
|
@disks << disk_config
|
442
483
|
end
|
443
484
|
|
485
|
+
# Stores config options for cloud_init
|
486
|
+
#
|
487
|
+
# @param [Symbol] type
|
488
|
+
# @param [Hash] options
|
489
|
+
# @param [Block] block
|
490
|
+
def cloud_init(type=nil, **options, &block)
|
491
|
+
type = type.to_sym if type
|
492
|
+
|
493
|
+
cloud_init_config = VagrantConfigCloudInit.new(type)
|
494
|
+
|
495
|
+
if block_given?
|
496
|
+
block.call(cloud_init_config, VagrantConfigCloudInit)
|
497
|
+
else
|
498
|
+
# config is hash
|
499
|
+
cloud_init_config.set_options(options)
|
500
|
+
end
|
501
|
+
|
502
|
+
if !Vagrant::Util::Experimental.feature_enabled?("cloud_init")
|
503
|
+
@logger.warn("cloud_init config defined, but experimental feature is not enabled. To use this feature, enable it with the experimental flag `cloud_init`. cloud_init config will not be added to internal config, and will be ignored.")
|
504
|
+
return
|
505
|
+
end
|
506
|
+
|
507
|
+
@cloud_init_configs << cloud_init_config
|
508
|
+
end
|
509
|
+
|
444
510
|
#-------------------------------------------------------------------
|
445
511
|
# Internal methods, don't call these.
|
446
512
|
#-------------------------------------------------------------------
|
@@ -467,6 +533,9 @@ module VagrantPlugins
|
|
467
533
|
@box_download_location_trusted = false if @box_download_location_trusted == UNSET_VALUE
|
468
534
|
@box_url = nil if @box_url == UNSET_VALUE
|
469
535
|
@box_version = nil if @box_version == UNSET_VALUE
|
536
|
+
@box_download_options = {} if @box_download_options == UNSET_VALUE
|
537
|
+
@box_extra_download_options = Vagrant::Util::MapCommandOptions.map_to_command_options(@box_download_options)
|
538
|
+
@allow_hosts_modification = true if @allow_hosts_modification == UNSET_VALUE
|
470
539
|
@clone = nil if @clone == UNSET_VALUE
|
471
540
|
@communicator = nil if @communicator == UNSET_VALUE
|
472
541
|
@graceful_halt_timeout = 60 if @graceful_halt_timeout == UNSET_VALUE
|
@@ -590,15 +659,6 @@ module VagrantPlugins
|
|
590
659
|
|
591
660
|
current_dir_shared = false
|
592
661
|
@__synced_folders.each do |id, options|
|
593
|
-
if options[:nfs]
|
594
|
-
options[:type] = :nfs
|
595
|
-
end
|
596
|
-
|
597
|
-
# Ignore NFS on Windows
|
598
|
-
if options[:type] == :nfs && Vagrant::Util::Platform.windows?
|
599
|
-
options.delete(:type)
|
600
|
-
end
|
601
|
-
|
602
662
|
if options[:hostpath] == '.'
|
603
663
|
current_dir_shared = true
|
604
664
|
end
|
@@ -608,6 +668,10 @@ module VagrantPlugins
|
|
608
668
|
d.finalize!
|
609
669
|
end
|
610
670
|
|
671
|
+
@cloud_init_configs.each do |c|
|
672
|
+
c.finalize!
|
673
|
+
end
|
674
|
+
|
611
675
|
if !current_dir_shared && !@__synced_folders["/vagrant"]
|
612
676
|
synced_folder(".", "/vagrant")
|
613
677
|
end
|
@@ -662,6 +726,17 @@ module VagrantPlugins
|
|
662
726
|
def validate(machine, ignore_provider=nil)
|
663
727
|
errors = _detected_errors
|
664
728
|
|
729
|
+
if @allow_fstab_modification == UNSET_VALUE
|
730
|
+
machine.synced_folders.types.each do |impl_name|
|
731
|
+
inst = machine.synced_folders.type(impl_name)
|
732
|
+
if inst.capability?(:default_fstab_modification) && inst.capability(:default_fstab_modification) == false
|
733
|
+
@allow_fstab_modification = false
|
734
|
+
break
|
735
|
+
end
|
736
|
+
end
|
737
|
+
@allow_fstab_modification = true if @allow_fstab_modification == UNSET_VALUE
|
738
|
+
end
|
739
|
+
|
665
740
|
if !box && !clone && !machine.provider_options[:box_optional]
|
666
741
|
errors << I18n.t("vagrant.config.vm.box_missing")
|
667
742
|
end
|
@@ -670,6 +745,10 @@ module VagrantPlugins
|
|
670
745
|
errors << I18n.t("vagrant.config.vm.clone_and_box")
|
671
746
|
end
|
672
747
|
|
748
|
+
if box && box.empty?
|
749
|
+
errors << I18n.t("vagrant.config.vm.box_empty", machine_name: machine.name)
|
750
|
+
end
|
751
|
+
|
673
752
|
errors << I18n.t("vagrant.config.vm.hostname_invalid_characters", name: machine.name) if \
|
674
753
|
@hostname && @hostname !~ /^[a-z0-9][-.a-z0-9]*$/i
|
675
754
|
|
@@ -714,6 +793,19 @@ module VagrantPlugins
|
|
714
793
|
end
|
715
794
|
end
|
716
795
|
|
796
|
+
if !box_download_options.is_a?(Hash)
|
797
|
+
errors << I18n.t("vagrant.config.vm.box_download_options_type", type: box_download_options.class.to_s)
|
798
|
+
end
|
799
|
+
|
800
|
+
box_download_options.each do |k, v|
|
801
|
+
# If the value is truthy and
|
802
|
+
# if `box_extra_download_options` does not include the key
|
803
|
+
# then the conversion to extra download options produced an error
|
804
|
+
if v && !box_extra_download_options.include?("--#{k}")
|
805
|
+
errors << I18n.t("vagrant.config.vm.box_download_options_not_converted", missing_key: k)
|
806
|
+
end
|
807
|
+
end
|
808
|
+
|
717
809
|
used_guest_paths = Set.new
|
718
810
|
@__synced_folders.each do |id, options|
|
719
811
|
# If the shared folder is disabled then don't worry about validating it
|
@@ -755,9 +847,14 @@ module VagrantPlugins
|
|
755
847
|
errors << I18n.t("vagrant.config.vm.shared_folder_mount_options_array")
|
756
848
|
end
|
757
849
|
|
758
|
-
|
759
|
-
|
760
|
-
|
850
|
+
if options[:type]
|
851
|
+
plugins = Vagrant.plugin("2").manager.synced_folders
|
852
|
+
impl_class = plugins[options[:type]]
|
853
|
+
if !impl_class
|
854
|
+
errors << I18n.t("vagrant.config.vm.shared_folder_invalid_option_type",
|
855
|
+
type: options[:type],
|
856
|
+
options: plugins.keys.join(', '))
|
857
|
+
end
|
761
858
|
end
|
762
859
|
end
|
763
860
|
|
@@ -767,7 +864,17 @@ module VagrantPlugins
|
|
767
864
|
valid_network_types = [:forwarded_port, :private_network, :public_network]
|
768
865
|
|
769
866
|
port_range=(1..65535)
|
867
|
+
has_hostname_config = false
|
770
868
|
networks.each do |type, options|
|
869
|
+
if options[:hostname]
|
870
|
+
if has_hostname_config
|
871
|
+
errors << I18n.t("vagrant.config.vm.multiple_networks_set_hostname")
|
872
|
+
end
|
873
|
+
if options[:ip] == nil
|
874
|
+
errors << I18n.t("vagrant.config.vm.network_with_hostname_must_set_ip")
|
875
|
+
end
|
876
|
+
has_hostname_config = true
|
877
|
+
end
|
771
878
|
if !valid_network_types.include?(type)
|
772
879
|
errors << I18n.t("vagrant.config.vm.network_type_invalid",
|
773
880
|
type: type.to_s)
|
@@ -810,7 +917,7 @@ module VagrantPlugins
|
|
810
917
|
end
|
811
918
|
|
812
919
|
# Validate disks
|
813
|
-
# Check if there is more than one
|
920
|
+
# Check if there is more than one primary disk defined and throw an error
|
814
921
|
primary_disks = @disks.select { |d| d.primary && d.type == :disk }
|
815
922
|
if primary_disks.size > 1
|
816
923
|
errors << I18n.t("vagrant.config.vm.multiple_primary_disks_error",
|
@@ -818,14 +925,29 @@ module VagrantPlugins
|
|
818
925
|
end
|
819
926
|
|
820
927
|
disk_names = @disks.map { |d| d.name }
|
821
|
-
duplicate_names = disk_names.
|
822
|
-
if duplicate_names
|
928
|
+
duplicate_names = disk_names.find_all { |d| disk_names.count(d) > 1 }
|
929
|
+
if duplicate_names.any?
|
823
930
|
errors << I18n.t("vagrant.config.vm.multiple_disk_names_error",
|
824
|
-
name:
|
931
|
+
name: machine.name,
|
932
|
+
disk_names: duplicate_names.uniq.join("\n"))
|
933
|
+
end
|
934
|
+
|
935
|
+
disk_files = @disks.map { |d| d.file }
|
936
|
+
duplicate_files = disk_files.find_all { |d| d && disk_files.count(d) > 1 }
|
937
|
+
if duplicate_files.any?
|
938
|
+
errors << I18n.t("vagrant.config.vm.multiple_disk_files_error",
|
939
|
+
name: machine.name,
|
940
|
+
disk_files: duplicate_files.uniq.join("\n"))
|
825
941
|
end
|
826
942
|
|
827
943
|
@disks.each do |d|
|
828
944
|
error = d.validate(machine)
|
945
|
+
errors.concat(error) if !error.empty?
|
946
|
+
end
|
947
|
+
|
948
|
+
# Validate clout_init_configs
|
949
|
+
@cloud_init_configs.each do |c|
|
950
|
+
error = c.validate(machine)
|
829
951
|
errors.concat error if !error.empty?
|
830
952
|
end
|
831
953
|
|
@@ -903,6 +1025,18 @@ module VagrantPlugins
|
|
903
1025
|
end
|
904
1026
|
end
|
905
1027
|
|
1028
|
+
if ![TrueClass, FalseClass].include?(@allow_fstab_modification.class)
|
1029
|
+
errors["vm"] << I18n.t("vagrant.config.vm.config_type",
|
1030
|
+
option: "allow_fstab_modification", given: @allow_fstab_modification.class, required: "Boolean"
|
1031
|
+
)
|
1032
|
+
end
|
1033
|
+
|
1034
|
+
if ![TrueClass, FalseClass].include?(@allow_hosts_modification.class)
|
1035
|
+
errors["vm"] << I18n.t("vagrant.config.vm.config_type",
|
1036
|
+
option: "allow_hosts_modification", given: @allow_hosts_modification.class, required: "Boolean"
|
1037
|
+
)
|
1038
|
+
end
|
1039
|
+
|
906
1040
|
errors
|
907
1041
|
end
|
908
1042
|
|
@@ -56,6 +56,12 @@ module VagrantPlugins
|
|
56
56
|
# @return [String, Symbol]
|
57
57
|
attr_accessor :after
|
58
58
|
|
59
|
+
# Boolean, when true signifies that some communicator must
|
60
|
+
# be available in order for the provisioner to run.
|
61
|
+
#
|
62
|
+
# @return [Boolean]
|
63
|
+
attr_accessor :communicator_required
|
64
|
+
|
59
65
|
def initialize(name, type, **options)
|
60
66
|
@logger = Log4r::Logger.new("vagrant::config::vm::provisioner")
|
61
67
|
@logger.debug("Provisioner defined: #{name}")
|
@@ -69,6 +75,7 @@ module VagrantPlugins
|
|
69
75
|
@type = type
|
70
76
|
@before = options[:before]
|
71
77
|
@after = options[:after]
|
78
|
+
@communicator_required = options.fetch(:communicator_required, true)
|
72
79
|
|
73
80
|
# Attempt to find the provisioner...
|
74
81
|
if !Vagrant.plugin("2").manager.provisioners[type]
|
@@ -118,6 +125,10 @@ module VagrantPlugins
|
|
118
125
|
|
119
126
|
provisioner_names = provisioners.map { |i| i.name.to_s if i.name != name }.compact
|
120
127
|
|
128
|
+
if ![TrueClass, FalseClass].include?(@communicator_required.class)
|
129
|
+
errors << I18n.t("vagrant.provisioners.base.wrong_type", opt: "communicator_required", type: "boolean")
|
130
|
+
end
|
131
|
+
|
121
132
|
if @before && @after
|
122
133
|
errors << I18n.t("vagrant.provisioners.base.both_before_after_set")
|
123
134
|
end
|
@@ -127,7 +138,7 @@ module VagrantPlugins
|
|
127
138
|
if @before.is_a?(Symbol) && !VALID_BEFORE_AFTER_TYPES.include?(@before)
|
128
139
|
errors << I18n.t("vagrant.provisioners.base.invalid_alias_value", opt: "before", alias: VALID_BEFORE_AFTER_TYPES.join(", "))
|
129
140
|
elsif !@before.is_a?(String) && !VALID_BEFORE_AFTER_TYPES.include?(@before)
|
130
|
-
errors << I18n.t("vagrant.provisioners.base.wrong_type", opt: "before")
|
141
|
+
errors << I18n.t("vagrant.provisioners.base.wrong_type", opt: "before", type: "string")
|
131
142
|
end
|
132
143
|
|
133
144
|
if !provisioner_names.include?(@before)
|
@@ -153,7 +164,7 @@ module VagrantPlugins
|
|
153
164
|
if @after.is_a?(Symbol)
|
154
165
|
errors << I18n.t("vagrant.provisioners.base.invalid_alias_value", opt: "after", alias: VALID_BEFORE_AFTER_TYPES.join(", "))
|
155
166
|
elsif !@after.is_a?(String)
|
156
|
-
errors << I18n.t("vagrant.provisioners.base.wrong_type", opt: "after")
|
167
|
+
errors << I18n.t("vagrant.provisioners.base.wrong_type", opt: "after", type: "string")
|
157
168
|
end
|
158
169
|
|
159
170
|
if !provisioner_names.include?(@after)
|
@@ -114,7 +114,11 @@ module VagrantPlugins
|
|
114
114
|
|
115
115
|
# Internal options
|
116
116
|
@id = SecureRandom.uuid
|
117
|
-
|
117
|
+
if command.respond_to?(:to_sym)
|
118
|
+
@command = command.to_sym
|
119
|
+
else
|
120
|
+
@command = command
|
121
|
+
end
|
118
122
|
@ruby_block = UNSET_VALUE
|
119
123
|
|
120
124
|
@logger.debug("Trigger defined for: #{command}")
|
@@ -214,10 +218,7 @@ module VagrantPlugins
|
|
214
218
|
end
|
215
219
|
|
216
220
|
if @type == :command || !@type
|
217
|
-
commands =
|
218
|
-
Vagrant.plugin("2").manager.commands.each do |key,data|
|
219
|
-
commands.push(key)
|
220
|
-
end
|
221
|
+
commands = Vagrant.plugin("2").manager.commands.keys.map(&:to_s)
|
221
222
|
|
222
223
|
if !commands.include?(@command) && @command != :all
|
223
224
|
machine.ui.warn(I18n.t("vagrant.config.triggers.bad_command_warning",
|
@@ -66,14 +66,8 @@ module VagrantPlugins
|
|
66
66
|
next
|
67
67
|
end
|
68
68
|
|
69
|
-
b3.use Call,
|
70
|
-
|
71
|
-
b4.use Provision
|
72
|
-
else
|
73
|
-
b4.use Message,
|
74
|
-
I18n.t("docker_provider.messages.provision_no_ssh"),
|
75
|
-
post: true
|
76
|
-
end
|
69
|
+
b3.use Call, HasProvisioner do |env3, b4|
|
70
|
+
b4.use Provision
|
77
71
|
end
|
78
72
|
end
|
79
73
|
end
|
@@ -216,14 +210,8 @@ module VagrantPlugins
|
|
216
210
|
Vagrant::Action::Builder.new.tap do |b|
|
217
211
|
b.use Call, IsState, :running do |env, b2|
|
218
212
|
if env[:machine_action] != :run_command
|
219
|
-
b2.use Call,
|
220
|
-
|
221
|
-
b3.use Provision
|
222
|
-
else
|
223
|
-
b3.use Message,
|
224
|
-
I18n.t("docker_provider.messages.provision_no_ssh"),
|
225
|
-
post: true
|
226
|
-
end
|
213
|
+
b2.use Call, HasProvisioner do |env2, b3|
|
214
|
+
b3.use Provision
|
227
215
|
end
|
228
216
|
end
|
229
217
|
|
@@ -251,14 +239,16 @@ module VagrantPlugins
|
|
251
239
|
if env[:machine_action] != :run_command
|
252
240
|
# If the container is NOT created yet, then do some setup steps
|
253
241
|
# necessary for creating it.
|
242
|
+
|
254
243
|
b2.use Call, IsState, :preparing do |env2, b3|
|
255
244
|
if env2[:result]
|
256
245
|
b3.use EnvSet, port_collision_repair: true
|
257
246
|
b3.use HostMachinePortWarning
|
258
247
|
b3.use HostMachinePortChecker
|
248
|
+
b3.use ForwardedPorts # This action converts the `ports` param into proper network configs
|
249
|
+
b3.use PrepareForwardedPortCollisionParams
|
259
250
|
b3.use HandleForwardedPortCollisions
|
260
251
|
b3.use SyncedFolders
|
261
|
-
b3.use ForwardedPorts
|
262
252
|
b3.use Pull
|
263
253
|
b3.use Create
|
264
254
|
b3.use WaitForRunning
|
@@ -313,6 +303,7 @@ module VagrantPlugins
|
|
313
303
|
autoload :IsBuild, action_root.join("is_build")
|
314
304
|
autoload :IsHostMachineCreated, action_root.join("is_host_machine_created")
|
315
305
|
autoload :Login, action_root.join("login")
|
306
|
+
autoload :PrepareForwardedPortCollisionParams, action_root.join("prepare_forwarded_port_collision_params")
|
316
307
|
autoload :PrepareNetworks, action_root.join("prepare_networks")
|
317
308
|
autoload :PrepareNFSValidIds, action_root.join("prepare_nfs_valid_ids")
|
318
309
|
autoload :PrepareNFSSettings, action_root.join("prepare_nfs_settings")
|