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
@@ -1,9 +1,12 @@
|
|
1
1
|
module VagrantPlugins
|
2
2
|
module Kernel_V2
|
3
3
|
class SSHConnectConfig < Vagrant.plugin("2", :config)
|
4
|
+
DEFAULT_SSH_CONNECT_TIMEOUT = 15
|
5
|
+
|
4
6
|
attr_accessor :host
|
5
7
|
attr_accessor :port
|
6
8
|
attr_accessor :config
|
9
|
+
attr_accessor :connect_timeout
|
7
10
|
attr_accessor :private_key_path
|
8
11
|
attr_accessor :username
|
9
12
|
attr_accessor :password
|
@@ -20,6 +23,7 @@ module VagrantPlugins
|
|
20
23
|
@host = UNSET_VALUE
|
21
24
|
@port = UNSET_VALUE
|
22
25
|
@config = UNSET_VALUE
|
26
|
+
@connect_timeout = UNSET_VALUE
|
23
27
|
@private_key_path = UNSET_VALUE
|
24
28
|
@username = UNSET_VALUE
|
25
29
|
@password = UNSET_VALUE
|
@@ -47,6 +51,7 @@ module VagrantPlugins
|
|
47
51
|
@dsa_authentication = true if @dsa_authentication == UNSET_VALUE
|
48
52
|
@extra_args = nil if @extra_args == UNSET_VALUE
|
49
53
|
@config = nil if @config == UNSET_VALUE
|
54
|
+
@connect_timeout = DEFAULT_SSH_CONNECT_TIMEOUT if @connect_timeout == UNSET_VALUE
|
50
55
|
|
51
56
|
if @private_key_path && !@private_key_path.is_a?(Array)
|
52
57
|
@private_key_path = [@private_key_path]
|
@@ -76,6 +81,15 @@ module VagrantPlugins
|
|
76
81
|
when :secure
|
77
82
|
@verify_host_key = :always
|
78
83
|
end
|
84
|
+
|
85
|
+
# Attempt to convert timeout to integer value
|
86
|
+
# If we can't convert the connect timeout into an integer or
|
87
|
+
# if the value is less than 1, set it to the default value
|
88
|
+
begin
|
89
|
+
@connect_timeout = @connect_timeout.to_i
|
90
|
+
rescue
|
91
|
+
# ignore
|
92
|
+
end
|
79
93
|
end
|
80
94
|
|
81
95
|
# NOTE: This is _not_ a valid config validation method, since it
|
@@ -110,6 +124,16 @@ module VagrantPlugins
|
|
110
124
|
machine.env.ui.warn(I18n.t("vagrant.config.ssh.paranoid_deprecated"))
|
111
125
|
end
|
112
126
|
|
127
|
+
if !@connect_timeout.is_a?(Integer)
|
128
|
+
errors << I18n.t(
|
129
|
+
"vagrant.config.ssh.connect_timeout_invalid_type",
|
130
|
+
given: @connect_timeout.class.name)
|
131
|
+
elsif @connect_timeout < 1
|
132
|
+
errors << I18n.t(
|
133
|
+
"vagrant.config.ssh.connect_timeout_invalid_value",
|
134
|
+
given: @connect_timeout.to_s)
|
135
|
+
end
|
136
|
+
|
113
137
|
errors
|
114
138
|
end
|
115
139
|
end
|
@@ -8,9 +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__)
|
15
|
+
require File.expand_path("../disk", __FILE__)
|
16
|
+
require File.expand_path("../cloud_init", __FILE__)
|
14
17
|
|
15
18
|
module VagrantPlugins
|
16
19
|
module Kernel_V2
|
@@ -20,6 +23,8 @@ module VagrantPlugins
|
|
20
23
|
DEFAULT_VM_NAME = :default
|
21
24
|
|
22
25
|
attr_accessor :allowed_synced_folder_types
|
26
|
+
attr_accessor :allow_fstab_modification
|
27
|
+
attr_accessor :allow_hosts_modification
|
23
28
|
attr_accessor :base_mac
|
24
29
|
attr_accessor :base_address
|
25
30
|
attr_accessor :boot_timeout
|
@@ -36,6 +41,7 @@ module VagrantPlugins
|
|
36
41
|
attr_accessor :box_download_client_cert
|
37
42
|
attr_accessor :box_download_insecure
|
38
43
|
attr_accessor :box_download_location_trusted
|
44
|
+
attr_accessor :box_download_options
|
39
45
|
attr_accessor :communicator
|
40
46
|
attr_accessor :graceful_halt_timeout
|
41
47
|
attr_accessor :guest
|
@@ -43,6 +49,9 @@ module VagrantPlugins
|
|
43
49
|
attr_accessor :post_up_message
|
44
50
|
attr_accessor :usable_port_range
|
45
51
|
attr_reader :provisioners
|
52
|
+
attr_reader :disks
|
53
|
+
attr_reader :cloud_init_configs
|
54
|
+
attr_reader :box_extra_download_options
|
46
55
|
|
47
56
|
# This is an experimental feature that isn't public yet.
|
48
57
|
attr_accessor :clone
|
@@ -51,6 +60,7 @@ module VagrantPlugins
|
|
51
60
|
@logger = Log4r::Logger.new("vagrant::config::vm")
|
52
61
|
|
53
62
|
@allowed_synced_folder_types = UNSET_VALUE
|
63
|
+
@allow_fstab_modification = UNSET_VALUE
|
54
64
|
@base_mac = UNSET_VALUE
|
55
65
|
@base_address = UNSET_VALUE
|
56
66
|
@boot_timeout = UNSET_VALUE
|
@@ -64,8 +74,11 @@ module VagrantPlugins
|
|
64
74
|
@box_download_client_cert = UNSET_VALUE
|
65
75
|
@box_download_insecure = UNSET_VALUE
|
66
76
|
@box_download_location_trusted = UNSET_VALUE
|
77
|
+
@box_download_options = UNSET_VALUE
|
78
|
+
@box_extra_download_options = UNSET_VALUE
|
67
79
|
@box_url = UNSET_VALUE
|
68
80
|
@box_version = UNSET_VALUE
|
81
|
+
@allow_hosts_modification = UNSET_VALUE
|
69
82
|
@clone = UNSET_VALUE
|
70
83
|
@communicator = UNSET_VALUE
|
71
84
|
@graceful_halt_timeout = UNSET_VALUE
|
@@ -73,6 +86,8 @@ module VagrantPlugins
|
|
73
86
|
@hostname = UNSET_VALUE
|
74
87
|
@post_up_message = UNSET_VALUE
|
75
88
|
@provisioners = []
|
89
|
+
@disks = []
|
90
|
+
@cloud_init_configs = []
|
76
91
|
@usable_port_range = UNSET_VALUE
|
77
92
|
|
78
93
|
# Internal state
|
@@ -123,6 +138,50 @@ module VagrantPlugins
|
|
123
138
|
end
|
124
139
|
end
|
125
140
|
|
141
|
+
# Merge defined disks
|
142
|
+
other_disks = other.instance_variable_get(:@disks)
|
143
|
+
new_disks = []
|
144
|
+
@disks.each do |p|
|
145
|
+
other_p = other_disks.find { |o| p.id == o.id }
|
146
|
+
if other_p
|
147
|
+
# there is an override. take it.
|
148
|
+
other_p.config = p.config.merge(other_p.config)
|
149
|
+
|
150
|
+
# Remove duplicate disk config from other
|
151
|
+
p = other_p
|
152
|
+
other_disks.delete(other_p)
|
153
|
+
end
|
154
|
+
|
155
|
+
# there is an override, merge it into the
|
156
|
+
new_disks << p.dup
|
157
|
+
end
|
158
|
+
other_disks.each do |p|
|
159
|
+
new_disks << p.dup
|
160
|
+
end
|
161
|
+
result.instance_variable_set(:@disks, new_disks)
|
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
|
+
|
126
185
|
# Merge the providers by prepending any configuration blocks we
|
127
186
|
# have for providers onto the new configuration.
|
128
187
|
other_providers = other.instance_variable_get(:@__providers)
|
@@ -218,6 +277,11 @@ module VagrantPlugins
|
|
218
277
|
|
219
278
|
options ||= {}
|
220
279
|
|
280
|
+
if options[:nfs]
|
281
|
+
options[:type] = :nfs
|
282
|
+
options.delete(:nfs)
|
283
|
+
end
|
284
|
+
|
221
285
|
if options.has_key?(:name)
|
222
286
|
synced_folder_name = options.delete(:name)
|
223
287
|
else
|
@@ -341,7 +405,7 @@ module VagrantPlugins
|
|
341
405
|
|
342
406
|
if Vagrant::Util::Experimental.feature_enabled?("dependency_provisioners")
|
343
407
|
opts = {before: before, after: after}
|
344
|
-
prov = VagrantConfigProvisioner.new(name, type.to_sym, opts)
|
408
|
+
prov = VagrantConfigProvisioner.new(name, type.to_sym, **opts)
|
345
409
|
else
|
346
410
|
prov = VagrantConfigProvisioner.new(name, type.to_sym)
|
347
411
|
end
|
@@ -351,7 +415,9 @@ module VagrantPlugins
|
|
351
415
|
prov.preserve_order = !!options.delete(:preserve_order) if \
|
352
416
|
options.key?(:preserve_order)
|
353
417
|
prov.run = options.delete(:run) if options.key?(:run)
|
354
|
-
prov.
|
418
|
+
prov.communicator_required = options.delete(:communicator_required) if options.key?(:communicator_required)
|
419
|
+
|
420
|
+
prov.add_config(**options, &block)
|
355
421
|
nil
|
356
422
|
end
|
357
423
|
|
@@ -384,6 +450,63 @@ module VagrantPlugins
|
|
384
450
|
@__defined_vms[name].config_procs << [options[:config_version], block] if block
|
385
451
|
end
|
386
452
|
|
453
|
+
# Stores disk config options from Vagrantfile
|
454
|
+
#
|
455
|
+
# @param [Symbol] type
|
456
|
+
# @param [Hash] options
|
457
|
+
# @param [Block] block
|
458
|
+
def disk(type, **options, &block)
|
459
|
+
disk_config = VagrantConfigDisk.new(type)
|
460
|
+
|
461
|
+
# Remove provider__option options before set_options, otherwise will
|
462
|
+
# show up as missing setting
|
463
|
+
# Extract provider hash options as well
|
464
|
+
provider_options = {}
|
465
|
+
options.delete_if do |p,o|
|
466
|
+
if o.is_a?(Hash) || p.to_s.include?("__")
|
467
|
+
provider_options[p] = o
|
468
|
+
true
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
disk_config.set_options(options)
|
473
|
+
|
474
|
+
# Add provider config
|
475
|
+
disk_config.add_provider_config(**provider_options, &block)
|
476
|
+
|
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.")
|
479
|
+
return
|
480
|
+
end
|
481
|
+
|
482
|
+
@disks << disk_config
|
483
|
+
end
|
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
|
+
|
387
510
|
#-------------------------------------------------------------------
|
388
511
|
# Internal methods, don't call these.
|
389
512
|
#-------------------------------------------------------------------
|
@@ -410,6 +533,9 @@ module VagrantPlugins
|
|
410
533
|
@box_download_location_trusted = false if @box_download_location_trusted == UNSET_VALUE
|
411
534
|
@box_url = nil if @box_url == UNSET_VALUE
|
412
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
|
413
539
|
@clone = nil if @clone == UNSET_VALUE
|
414
540
|
@communicator = nil if @communicator == UNSET_VALUE
|
415
541
|
@graceful_halt_timeout = 60 if @graceful_halt_timeout == UNSET_VALUE
|
@@ -533,20 +659,19 @@ module VagrantPlugins
|
|
533
659
|
|
534
660
|
current_dir_shared = false
|
535
661
|
@__synced_folders.each do |id, options|
|
536
|
-
if options[:nfs]
|
537
|
-
options[:type] = :nfs
|
538
|
-
end
|
539
|
-
|
540
|
-
# Ignore NFS on Windows
|
541
|
-
if options[:type] == :nfs && Vagrant::Util::Platform.windows?
|
542
|
-
options.delete(:type)
|
543
|
-
end
|
544
|
-
|
545
662
|
if options[:hostpath] == '.'
|
546
663
|
current_dir_shared = true
|
547
664
|
end
|
548
665
|
end
|
549
666
|
|
667
|
+
@disks.each do |d|
|
668
|
+
d.finalize!
|
669
|
+
end
|
670
|
+
|
671
|
+
@cloud_init_configs.each do |c|
|
672
|
+
c.finalize!
|
673
|
+
end
|
674
|
+
|
550
675
|
if !current_dir_shared && !@__synced_folders["/vagrant"]
|
551
676
|
synced_folder(".", "/vagrant")
|
552
677
|
end
|
@@ -601,6 +726,17 @@ module VagrantPlugins
|
|
601
726
|
def validate(machine, ignore_provider=nil)
|
602
727
|
errors = _detected_errors
|
603
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
|
+
|
604
740
|
if !box && !clone && !machine.provider_options[:box_optional]
|
605
741
|
errors << I18n.t("vagrant.config.vm.box_missing")
|
606
742
|
end
|
@@ -609,7 +745,11 @@ module VagrantPlugins
|
|
609
745
|
errors << I18n.t("vagrant.config.vm.clone_and_box")
|
610
746
|
end
|
611
747
|
|
612
|
-
|
748
|
+
if box && box.empty?
|
749
|
+
errors << I18n.t("vagrant.config.vm.box_empty", machine_name: machine.name)
|
750
|
+
end
|
751
|
+
|
752
|
+
errors << I18n.t("vagrant.config.vm.hostname_invalid_characters", name: machine.name) if \
|
613
753
|
@hostname && @hostname !~ /^[a-z0-9][-.a-z0-9]*$/i
|
614
754
|
|
615
755
|
if @box_version
|
@@ -653,6 +793,19 @@ module VagrantPlugins
|
|
653
793
|
end
|
654
794
|
end
|
655
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
|
+
|
656
809
|
used_guest_paths = Set.new
|
657
810
|
@__synced_folders.each do |id, options|
|
658
811
|
# If the shared folder is disabled then don't worry about validating it
|
@@ -694,9 +847,14 @@ module VagrantPlugins
|
|
694
847
|
errors << I18n.t("vagrant.config.vm.shared_folder_mount_options_array")
|
695
848
|
end
|
696
849
|
|
697
|
-
|
698
|
-
|
699
|
-
|
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
|
700
858
|
end
|
701
859
|
end
|
702
860
|
|
@@ -706,7 +864,17 @@ module VagrantPlugins
|
|
706
864
|
valid_network_types = [:forwarded_port, :private_network, :public_network]
|
707
865
|
|
708
866
|
port_range=(1..65535)
|
867
|
+
has_hostname_config = false
|
709
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
|
710
878
|
if !valid_network_types.include?(type)
|
711
879
|
errors << I18n.t("vagrant.config.vm.network_type_invalid",
|
712
880
|
type: type.to_s)
|
@@ -748,6 +916,41 @@ module VagrantPlugins
|
|
748
916
|
end
|
749
917
|
end
|
750
918
|
|
919
|
+
# Validate disks
|
920
|
+
# Check if there is more than one primary disk defined and throw an error
|
921
|
+
primary_disks = @disks.select { |d| d.primary && d.type == :disk }
|
922
|
+
if primary_disks.size > 1
|
923
|
+
errors << I18n.t("vagrant.config.vm.multiple_primary_disks_error",
|
924
|
+
name: machine.name)
|
925
|
+
end
|
926
|
+
|
927
|
+
disk_names = @disks.map { |d| d.name }
|
928
|
+
duplicate_names = disk_names.find_all { |d| disk_names.count(d) > 1 }
|
929
|
+
if duplicate_names.any?
|
930
|
+
errors << I18n.t("vagrant.config.vm.multiple_disk_names_error",
|
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"))
|
941
|
+
end
|
942
|
+
|
943
|
+
@disks.each do |d|
|
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)
|
951
|
+
errors.concat error if !error.empty?
|
952
|
+
end
|
953
|
+
|
751
954
|
# We're done with VM level errors so prepare the section
|
752
955
|
errors = { "vm" => errors }
|
753
956
|
|
@@ -822,6 +1025,18 @@ module VagrantPlugins
|
|
822
1025
|
end
|
823
1026
|
end
|
824
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
|
+
|
825
1040
|
errors
|
826
1041
|
end
|
827
1042
|
|