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
@@ -9,7 +9,10 @@ module VagrantPlugins
|
|
9
9
|
|
10
10
|
# Unique name for this provisioner
|
11
11
|
#
|
12
|
-
#
|
12
|
+
# Accepts a string, but is ultimately forced into a symbol in the top level method inside
|
13
|
+
# #Config::VM.provision method while being parsed from a Vagrantfile
|
14
|
+
#
|
15
|
+
# @return [Symbol]
|
13
16
|
attr_reader :name
|
14
17
|
|
15
18
|
# Internal unique name for this provisioner
|
@@ -53,6 +56,12 @@ module VagrantPlugins
|
|
53
56
|
# @return [String, Symbol]
|
54
57
|
attr_accessor :after
|
55
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
|
+
|
56
65
|
def initialize(name, type, **options)
|
57
66
|
@logger = Log4r::Logger.new("vagrant::config::vm::provisioner")
|
58
67
|
@logger.debug("Provisioner defined: #{name}")
|
@@ -66,6 +75,7 @@ module VagrantPlugins
|
|
66
75
|
@type = type
|
67
76
|
@before = options[:before]
|
68
77
|
@after = options[:after]
|
78
|
+
@communicator_required = options.fetch(:communicator_required, true)
|
69
79
|
|
70
80
|
# Attempt to find the provisioner...
|
71
81
|
if !Vagrant.plugin("2").manager.provisioners[type]
|
@@ -115,6 +125,10 @@ module VagrantPlugins
|
|
115
125
|
|
116
126
|
provisioner_names = provisioners.map { |i| i.name.to_s if i.name != name }.compact
|
117
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
|
+
|
118
132
|
if @before && @after
|
119
133
|
errors << I18n.t("vagrant.provisioners.base.both_before_after_set")
|
120
134
|
end
|
@@ -124,7 +138,7 @@ module VagrantPlugins
|
|
124
138
|
if @before.is_a?(Symbol) && !VALID_BEFORE_AFTER_TYPES.include?(@before)
|
125
139
|
errors << I18n.t("vagrant.provisioners.base.invalid_alias_value", opt: "before", alias: VALID_BEFORE_AFTER_TYPES.join(", "))
|
126
140
|
elsif !@before.is_a?(String) && !VALID_BEFORE_AFTER_TYPES.include?(@before)
|
127
|
-
errors << I18n.t("vagrant.provisioners.base.wrong_type", opt: "before")
|
141
|
+
errors << I18n.t("vagrant.provisioners.base.wrong_type", opt: "before", type: "string")
|
128
142
|
end
|
129
143
|
|
130
144
|
if !provisioner_names.include?(@before)
|
@@ -150,7 +164,7 @@ module VagrantPlugins
|
|
150
164
|
if @after.is_a?(Symbol)
|
151
165
|
errors << I18n.t("vagrant.provisioners.base.invalid_alias_value", opt: "after", alias: VALID_BEFORE_AFTER_TYPES.join(", "))
|
152
166
|
elsif !@after.is_a?(String)
|
153
|
-
errors << I18n.t("vagrant.provisioners.base.wrong_type", opt: "after")
|
167
|
+
errors << I18n.t("vagrant.provisioners.base.wrong_type", opt: "after", type: "string")
|
154
168
|
end
|
155
169
|
|
156
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")
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module DockerProvider
|
3
|
+
module Action
|
4
|
+
class PrepareForwardedPortCollisionParams
|
5
|
+
def initialize(app, env)
|
6
|
+
@app = app
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
machine = env[:machine]
|
11
|
+
|
12
|
+
# Get the forwarded ports used by other containers and
|
13
|
+
# consider those in use as well.
|
14
|
+
other_used_ports = machine.provider.driver.read_used_ports
|
15
|
+
env[:port_collision_extra_in_use] = other_used_ports
|
16
|
+
|
17
|
+
# Build the remap for any existing collision detections
|
18
|
+
#
|
19
|
+
# Note: This remap might not be required yet (as it is with the virtualbox provider)
|
20
|
+
# so for now we leave the remap hash empty.
|
21
|
+
remap = {}
|
22
|
+
env[:port_collision_remap] = remap
|
23
|
+
|
24
|
+
# This port checker method calls the custom port_check method
|
25
|
+
# defined below. If its false, it will go ahead and use the built-in
|
26
|
+
# port_check method to see if there are any live containers with bound
|
27
|
+
# ports
|
28
|
+
docker_port_check = proc { |host_ip, host_port|
|
29
|
+
result = port_check(env, host_port)
|
30
|
+
if !result
|
31
|
+
result = Vagrant::Action::Builtin::HandleForwardedPortCollisions.port_check(machine, host_ip, host_port)
|
32
|
+
end
|
33
|
+
result}
|
34
|
+
env[:port_collision_port_check] = docker_port_check
|
35
|
+
|
36
|
+
@app.call(env)
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
|
41
|
+
# This check is required the docker provider. Containers
|
42
|
+
# can bind ports but be halted. We don't want new containers to
|
43
|
+
# grab these bound ports, so this check is here for that since
|
44
|
+
# the checks above won't detect it
|
45
|
+
#
|
46
|
+
# @param [Vagrant::Environment] env
|
47
|
+
# @param [String] host_port
|
48
|
+
# @returns [Bool]
|
49
|
+
def port_check(env, host_port)
|
50
|
+
extra_in_use = env[:port_collision_extra_in_use]
|
51
|
+
|
52
|
+
if extra_in_use
|
53
|
+
return extra_in_use.include?(host_port.to_s)
|
54
|
+
else
|
55
|
+
return false
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -15,19 +15,46 @@ module VagrantPlugins
|
|
15
15
|
@executor = Executor::Local.new
|
16
16
|
end
|
17
17
|
|
18
|
+
# Returns the id for a new container built from `docker build`. Raises
|
19
|
+
# an exception if the id was unable to be captured from the output
|
20
|
+
#
|
21
|
+
# @return [String] id - ID matched from the docker build output.
|
18
22
|
def build(dir, **opts, &block)
|
19
|
-
args
|
20
|
-
args
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
args = Array(opts[:extra_args])
|
24
|
+
args << dir
|
25
|
+
opts = {with_stderr: true}
|
26
|
+
result = execute('docker', 'build', *args, opts, &block)
|
27
|
+
# Check for the new output format 'writing image sha256...'
|
28
|
+
# In this case, docker builtkit is enabled. Its format is different
|
29
|
+
# from standard docker
|
30
|
+
matches = result.scan(/writing image .+:([0-9a-z]+) done/i).last
|
31
|
+
if !matches
|
32
|
+
if podman?
|
33
|
+
# Check for podman format when it is emulating docker CLI.
|
34
|
+
# Podman outputs the full hash of the container on
|
35
|
+
# the last line after a successful build.
|
36
|
+
match = result.split.select { |str| str.match?(/[0-9a-z]{64}/) }.last
|
37
|
+
return match[0..7] unless match.nil?
|
38
|
+
else
|
39
|
+
matches = result.scan(/Successfully built (.+)$/i).last
|
40
|
+
end
|
41
|
+
|
42
|
+
if !matches
|
43
|
+
# This will cause a stack trace in Vagrant, but it is a bug
|
44
|
+
# if this happens anyways.
|
45
|
+
raise Errors::BuildError, result: result
|
46
|
+
end
|
27
47
|
end
|
28
48
|
|
29
|
-
# Return the
|
30
|
-
matches[
|
49
|
+
# Return the matched group `id`
|
50
|
+
matches[0]
|
51
|
+
end
|
52
|
+
|
53
|
+
# Check if podman emulating docker CLI is enabled.
|
54
|
+
#
|
55
|
+
# @return [Bool]
|
56
|
+
def podman?
|
57
|
+
execute('docker', '--version').include?("podman")
|
31
58
|
end
|
32
59
|
|
33
60
|
def create(params, **opts, &block)
|
@@ -99,6 +126,41 @@ module VagrantPlugins
|
|
99
126
|
result =~ /^#{Regexp.escape(id)}$/
|
100
127
|
end
|
101
128
|
|
129
|
+
# Reads all current docker containers and determines what ports
|
130
|
+
# are currently registered to be forwarded
|
131
|
+
# {2222=>#<Set: {"127.0.0.1"}>, 8080=>#<Set: {"*"}>, 9090=>#<Set: {"*"}>}
|
132
|
+
#
|
133
|
+
# Note: This is this format because of what the builtin action for resolving colliding
|
134
|
+
# port forwards expects.
|
135
|
+
#
|
136
|
+
# @return [Hash[Set]] used_ports - {forward_port: #<Set: {"host ip address"}>}
|
137
|
+
def read_used_ports
|
138
|
+
used_ports = Hash.new{|hash,key| hash[key] = Set.new}
|
139
|
+
|
140
|
+
all_containers.each do |c|
|
141
|
+
container_info = inspect_container(c)
|
142
|
+
|
143
|
+
if container_info["HostConfig"]["PortBindings"]
|
144
|
+
port_bindings = container_info["HostConfig"]["PortBindings"]
|
145
|
+
next if port_bindings.empty? # Nothing defined, but not nil either
|
146
|
+
|
147
|
+
port_bindings.each do |guest_port,host_mapping|
|
148
|
+
host_mapping.each do |h|
|
149
|
+
if h["HostIp"] == ""
|
150
|
+
hostip = "*"
|
151
|
+
else
|
152
|
+
hostip = h["HostIp"]
|
153
|
+
end
|
154
|
+
hostport = h["HostPort"]
|
155
|
+
used_ports[hostport].add(hostip)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
used_ports
|
162
|
+
end
|
163
|
+
|
102
164
|
def running?(cid)
|
103
165
|
result = execute('docker', 'ps', '-q', '--no-trunc')
|
104
166
|
result =~ /^#{Regexp.escape cid}$/m
|
@@ -154,6 +216,7 @@ module VagrantPlugins
|
|
154
216
|
return true
|
155
217
|
rescue => e
|
156
218
|
return false if e.to_s.include?("is using it")
|
219
|
+
return false if e.to_s.include?("is being used")
|
157
220
|
raise if !e.to_s.include?("No such image")
|
158
221
|
end
|
159
222
|
|
@@ -149,10 +149,12 @@ module VagrantPlugins
|
|
149
149
|
b3.use NetSetMac
|
150
150
|
end
|
151
151
|
|
152
|
+
b3.use CleanupDisks
|
153
|
+
b3.use Disk
|
154
|
+
b3.use SyncedFolderCleanup
|
152
155
|
b3.use StartInstance
|
153
156
|
b3.use WaitForIPAddress
|
154
157
|
b3.use WaitForCommunicator, [:running]
|
155
|
-
b3.use SyncedFolderCleanup
|
156
158
|
b3.use SyncedFolders
|
157
159
|
b3.use SetHostname
|
158
160
|
end
|
@@ -97,6 +97,14 @@ module VagrantPlugins
|
|
97
97
|
env[:machine].provider_config.vm_integration_services)
|
98
98
|
end
|
99
99
|
|
100
|
+
if env[:machine].provider_config.enable_enhanced_session_mode
|
101
|
+
env[:ui].detail(I18n.t("vagrant.hyperv_enable_enhanced_session"))
|
102
|
+
env[:machine].provider.driver.set_enhanced_session_transport_type("HvSocket")
|
103
|
+
else
|
104
|
+
env[:ui].detail(I18n.t("vagrant.hyperv_disable_enhanced_session"))
|
105
|
+
env[:machine].provider.driver.set_enhanced_session_transport_type("VMBus")
|
106
|
+
end
|
107
|
+
|
100
108
|
@app.call(env)
|
101
109
|
end
|
102
110
|
end
|
@@ -25,8 +25,10 @@ module VagrantPlugins
|
|
25
25
|
@env[:ui].info I18n.t("vagrant.actions.vm.export.exporting")
|
26
26
|
export_tmp_dir = Vagrant::Util::Platform.wsl_to_windows_path(@env["export.temp_dir"])
|
27
27
|
@env[:machine].provider.driver.export(export_tmp_dir) do |progress|
|
28
|
-
@env[:ui].
|
29
|
-
|
28
|
+
@env[:ui].rewriting do |ui|
|
29
|
+
ui.clear_line
|
30
|
+
ui.report_progress(progress.percent, 100, false)
|
31
|
+
end
|
30
32
|
end
|
31
33
|
|
32
34
|
# Clear the line a final time so the next data can appear
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "log4r"
|
2
|
+
require "vagrant/util/experimental"
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module HyperV
|
6
|
+
module Cap
|
7
|
+
module CleanupDisks
|
8
|
+
LOGGER = Log4r::Logger.new("vagrant::plugins::hyperv::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
|
+
# TODO: Floppy and DVD disks
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
# @param [Vagrant::Machine] machine
|
25
|
+
# @param [VagrantPlugins::Kernel_V2::VagrantConfigDisk] defined_disks
|
26
|
+
# @param [Hash] disk_meta - A hash of all the previously defined disks from the last configure_disk action
|
27
|
+
def self.handle_cleanup_disk(machine, defined_disks, disk_meta)
|
28
|
+
all_disks = machine.provider.driver.list_hdds
|
29
|
+
|
30
|
+
disk_meta.each do |d|
|
31
|
+
# look at Path instead of Name or UUID
|
32
|
+
disk_name = File.basename(d["Path"], '.*')
|
33
|
+
dsk = defined_disks.select { |dk| dk.name == disk_name }
|
34
|
+
|
35
|
+
if !dsk.empty? || d["primary"] == true
|
36
|
+
next
|
37
|
+
else
|
38
|
+
LOGGER.warn("Found disk not in Vagrantfile config: '#{d["Name"]}'. Removing disk from guest #{machine.name}")
|
39
|
+
|
40
|
+
machine.ui.warn(I18n.t("vagrant.cap.cleanup_disks.disk_cleanup", name: d["Name"]), prefix: true)
|
41
|
+
|
42
|
+
disk_actual = all_disks.select { |a| File.realdirpath(a["Path"]) == File.realdirpath(d["Path"]) }.first
|
43
|
+
if !disk_actual
|
44
|
+
machine.ui.warn(I18n.t("vagrant.cap.cleanup_disks.disk_not_found", name: d["Name"]), prefix: true)
|
45
|
+
else
|
46
|
+
machine.provider.driver.remove_disk(disk_actual["ControllerType"], disk_actual["ControllerNumber"], disk_actual["ControllerLocation"], disk_actual["Path"])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|