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
@@ -0,0 +1,36 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Action
|
3
|
+
module Builtin
|
4
|
+
# This middleware is used with Call to test if this machine
|
5
|
+
# has available provisioners
|
6
|
+
class HasProvisioner
|
7
|
+
def initialize(app, env)
|
8
|
+
@app = app
|
9
|
+
@logger = Log4r::Logger.new("vagrant::action::builtin::has_provisioner")
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
machine = env[:machine]
|
14
|
+
|
15
|
+
if machine.provider.capability?(:has_communicator)
|
16
|
+
has_communicator = machine.provider.capability(:has_communicator)
|
17
|
+
else
|
18
|
+
has_communicator = true
|
19
|
+
end
|
20
|
+
|
21
|
+
env[:skip] = []
|
22
|
+
if !has_communicator
|
23
|
+
machine.config.vm.provisioners.each do |p|
|
24
|
+
if p.communicator_required
|
25
|
+
env[:skip].push(p)
|
26
|
+
@logger.info("Skipping running provisioner #{p.name || 'no name'}, type: #{p.type}")
|
27
|
+
p.run = :never
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
@app.call(env)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -72,7 +72,7 @@ module Vagrant
|
|
72
72
|
#
|
73
73
|
# @param [Machine] machine The machine that the folders belong to
|
74
74
|
# @param [Hash] folders The result from a {#synced_folders} call.
|
75
|
-
def save_synced_folders(machine, folders,
|
75
|
+
def save_synced_folders(machine, folders, opts={})
|
76
76
|
if opts[:merge]
|
77
77
|
existing = cached_synced_folders(machine)
|
78
78
|
if existing
|
@@ -97,11 +97,8 @@ module Vagrant
|
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
|
-
|
101
|
-
|
102
|
-
# Scrub any register credentials from the synced folders
|
103
|
-
# configuration data to prevent accidental leakage
|
104
|
-
folder_data = Util::CredentialScrubber.desensitize(folder_data)
|
100
|
+
# Remove implementation instances
|
101
|
+
folder_data = JSON.dump(folders.to_h)
|
105
102
|
|
106
103
|
machine.data_dir.join("synced_folders").open("w") do |f|
|
107
104
|
f.write(folder_data)
|
@@ -124,7 +121,7 @@ module Vagrant
|
|
124
121
|
end
|
125
122
|
|
126
123
|
config_folders = config.synced_folders
|
127
|
-
folders =
|
124
|
+
folders = Vagrant::Plugin::V2::SyncedFolder::Collection.new
|
128
125
|
|
129
126
|
# Determine all the synced folders as well as the implementation
|
130
127
|
# they're going to use.
|
@@ -181,8 +178,10 @@ module Vagrant
|
|
181
178
|
|
182
179
|
# Apply the scoped hash overrides to get the options
|
183
180
|
folders.dup.each do |impl_name, fs|
|
181
|
+
impl = plugins[impl_name].first.new._initialize(machine, impl_name)
|
184
182
|
new_fs = {}
|
185
183
|
fs.each do |id, data|
|
184
|
+
data[:plugin] = impl
|
186
185
|
id = data[:id] if data[:id]
|
187
186
|
new_fs[id] = scoped_hash_override(data, impl_name)
|
188
187
|
end
|
@@ -190,7 +189,7 @@ module Vagrant
|
|
190
189
|
folders[impl_name] = new_fs
|
191
190
|
end
|
192
191
|
|
193
|
-
|
192
|
+
folders
|
194
193
|
end
|
195
194
|
|
196
195
|
# This finds the difference between two lists of synced folder
|
@@ -239,26 +238,26 @@ module Vagrant
|
|
239
238
|
protected
|
240
239
|
|
241
240
|
def cached_synced_folders(machine)
|
242
|
-
JSON.parse(machine.data_dir.join("synced_folders").read)
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
241
|
+
import = JSON.parse(machine.data_dir.join("synced_folders").read)
|
242
|
+
import.each do |type, folders|
|
243
|
+
impl = plugins[type.to_sym].first.new._initialize(machine, type.to_sym)
|
244
|
+
folders.each { |_, v| v[:plugin] = impl }
|
245
|
+
end
|
246
|
+
# Symbolize the keys we want as symbols
|
247
|
+
import.keys.dup.each do |k|
|
248
|
+
import[k].values.each do |item|
|
249
|
+
item.keys.dup.each do |ik|
|
250
|
+
item[ik.to_sym] = item.delete(ik)
|
251
251
|
end
|
252
|
-
|
253
|
-
r[k.to_sym] = r[k]
|
254
|
-
r.delete(k)
|
255
252
|
end
|
253
|
+
import[k.to_sym] = import.delete(k)
|
256
254
|
end
|
255
|
+
Vagrant::Plugin::V2::SyncedFolder::Collection[import]
|
257
256
|
rescue Errno::ENOENT
|
258
257
|
# If the file doesn't exist, we probably just have a machine created
|
259
258
|
# by a version of Vagrant that didn't cache shared folders. Report no
|
260
259
|
# shared folders to be safe.
|
261
|
-
|
260
|
+
Vagrant::Plugin::V2::SyncedFolder::Collection.new
|
262
261
|
end
|
263
262
|
end
|
264
263
|
end
|
@@ -10,15 +10,19 @@ module Vagrant
|
|
10
10
|
class SetHostname
|
11
11
|
def initialize(app, env)
|
12
12
|
@app = app
|
13
|
+
@logger = Log4r::Logger.new("vagrant::action::builtin::set_hostname")
|
13
14
|
end
|
14
15
|
|
15
16
|
def call(env)
|
16
17
|
@app.call(env)
|
17
18
|
|
18
19
|
hostname = env[:machine].config.vm.hostname
|
19
|
-
|
20
|
+
allow_hosts_modification = env[:machine].config.vm.allow_hosts_modification
|
21
|
+
if !hostname.nil? && allow_hosts_modification
|
20
22
|
env[:ui].info I18n.t("vagrant.actions.vm.hostname.setting")
|
21
23
|
env[:machine].guest.capability(:change_host_name, hostname)
|
24
|
+
else
|
25
|
+
@logger.info("`allow_hosts_modification` set to false. Hosts modification has been disabled, skiping changing hostname.")
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|
@@ -128,6 +128,22 @@ module Vagrant
|
|
128
128
|
# Save the synced folders
|
129
129
|
save_synced_folders(env[:machine], original_folders, **save_opts)
|
130
130
|
end
|
131
|
+
|
132
|
+
# Persist the mounts by adding them to fstab (only if the guest is available)
|
133
|
+
begin
|
134
|
+
persist_mount = env[:machine].guest.capability?(:persist_mount_shared_folder)
|
135
|
+
rescue Errors::MachineGuestNotReady
|
136
|
+
persist_mount = false
|
137
|
+
end
|
138
|
+
if persist_mount
|
139
|
+
# Persist the mounts by adding them to fstab
|
140
|
+
if env[:machine].config.vm.allow_fstab_modification
|
141
|
+
fstab_folders = original_folders
|
142
|
+
else
|
143
|
+
fstab_folders = nil
|
144
|
+
end
|
145
|
+
env[:machine].guest.capability(:persist_mount_shared_folder, fstab_folders)
|
146
|
+
end
|
131
147
|
end
|
132
148
|
end
|
133
149
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Action
|
3
|
+
module Builtin
|
4
|
+
# This class is used within the Builder class for injecting triggers into
|
5
|
+
# different parts of the call stack.
|
6
|
+
class Trigger
|
7
|
+
# @param [Class, String, Symbol] name Name of trigger to fire
|
8
|
+
# @param [Vagrant::Plugin::V2::Triger] triggers Trigger object
|
9
|
+
# @param [Symbol] timing When trigger should fire (:before/:after)
|
10
|
+
# @param [Symbol] type Type of trigger
|
11
|
+
def initialize(app, env, name, triggers, timing, type=:action, all: false)
|
12
|
+
@app = app
|
13
|
+
@env = env
|
14
|
+
@triggers = triggers
|
15
|
+
@name = name
|
16
|
+
@timing = timing
|
17
|
+
@type = type
|
18
|
+
@all = all
|
19
|
+
|
20
|
+
if ![:before, :after].include?(timing)
|
21
|
+
raise ArgumentError,
|
22
|
+
"Invalid value provided for `timing` (allowed: :before or :after)"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def call(env)
|
27
|
+
machine = env[:machine]
|
28
|
+
machine_name = machine.name if machine
|
29
|
+
|
30
|
+
@triggers.fire(@name, @timing, machine_name, @type, all: @all)
|
31
|
+
# Carry on
|
32
|
+
@app.call(env)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/vagrant/action/hook.rb
CHANGED
@@ -7,23 +7,23 @@ module Vagrant
|
|
7
7
|
# This is a hash of the middleware to prepend to a certain
|
8
8
|
# other middleware.
|
9
9
|
#
|
10
|
-
# @return [Hash<Class, Array<
|
10
|
+
# @return [Hash<Class, Array<Builder::StackItem>>]
|
11
11
|
attr_reader :before_hooks
|
12
12
|
|
13
13
|
# This is a hash of the middleware to append to a certain other
|
14
14
|
# middleware.
|
15
15
|
#
|
16
|
-
# @return [Hash<Class, Array<
|
16
|
+
# @return [Hash<Class, Array<Builder::StackItem>>]
|
17
17
|
attr_reader :after_hooks
|
18
18
|
|
19
19
|
# This is a list of the hooks to just prepend to the beginning
|
20
20
|
#
|
21
|
-
# @return [Array<
|
21
|
+
# @return [Array<Builder::StackItem>]
|
22
22
|
attr_reader :prepend_hooks
|
23
23
|
|
24
24
|
# This is a list of the hooks to just append to the end
|
25
25
|
#
|
26
|
-
# @return [Array<
|
26
|
+
# @return [Array<Builder::StackItem>]
|
27
27
|
attr_reader :append_hooks
|
28
28
|
|
29
29
|
def initialize
|
@@ -37,16 +37,32 @@ module Vagrant
|
|
37
37
|
#
|
38
38
|
# @param [Class] existing The existing middleware.
|
39
39
|
# @param [Class] new The new middleware.
|
40
|
-
def before(existing, new, *args, &block)
|
41
|
-
|
40
|
+
def before(existing, new, *args, **keywords, &block)
|
41
|
+
item = Builder::StackItem.new(
|
42
|
+
middleware: new,
|
43
|
+
arguments: Builder::MiddlewareArguments.new(
|
44
|
+
parameters: args,
|
45
|
+
keywords: keywords,
|
46
|
+
block: block
|
47
|
+
)
|
48
|
+
)
|
49
|
+
@before_hooks[existing] << item
|
42
50
|
end
|
43
51
|
|
44
52
|
# Add a middleware after an existing middleware.
|
45
53
|
#
|
46
54
|
# @param [Class] existing The existing middleware.
|
47
55
|
# @param [Class] new The new middleware.
|
48
|
-
def after(existing, new, *args, &block)
|
49
|
-
|
56
|
+
def after(existing, new, *args, **keywords, &block)
|
57
|
+
item = Builder::StackItem.new(
|
58
|
+
middleware: new,
|
59
|
+
arguments: Builder::MiddlewareArguments.new(
|
60
|
+
parameters: args,
|
61
|
+
keywords: keywords,
|
62
|
+
block: block
|
63
|
+
)
|
64
|
+
)
|
65
|
+
@after_hooks[existing] << item
|
50
66
|
end
|
51
67
|
|
52
68
|
# Append a middleware to the end of the stack. Note that if the
|
@@ -54,33 +70,68 @@ module Vagrant
|
|
54
70
|
# be run.
|
55
71
|
#
|
56
72
|
# @param [Class] new The middleware to append.
|
57
|
-
def append(new, *args, &block)
|
58
|
-
|
73
|
+
def append(new, *args, **keywords, &block)
|
74
|
+
item = Builder::StackItem.new(
|
75
|
+
middleware: new,
|
76
|
+
arguments: Builder::MiddlewareArguments.new(
|
77
|
+
parameters: args,
|
78
|
+
keywords: keywords,
|
79
|
+
block: block
|
80
|
+
)
|
81
|
+
)
|
82
|
+
@append_hooks << item
|
59
83
|
end
|
60
84
|
|
61
85
|
# Prepend a middleware to the beginning of the stack.
|
62
86
|
#
|
63
87
|
# @param [Class] new The new middleware to prepend.
|
64
|
-
def prepend(new, *args, &block)
|
65
|
-
|
88
|
+
def prepend(new, *args, **keywords, &block)
|
89
|
+
item = Builder::StackItem.new(
|
90
|
+
middleware: new,
|
91
|
+
arguments: Builder::MiddlewareArguments.new(
|
92
|
+
parameters: args,
|
93
|
+
keywords: keywords,
|
94
|
+
block: block
|
95
|
+
)
|
96
|
+
)
|
97
|
+
@prepend_hooks << item
|
98
|
+
end
|
99
|
+
|
100
|
+
# @return [Boolean]
|
101
|
+
def empty?
|
102
|
+
before_hooks.empty? &&
|
103
|
+
after_hooks.empty? &&
|
104
|
+
prepend_hooks.empty? &&
|
105
|
+
append_hooks.empty?
|
66
106
|
end
|
67
107
|
|
68
108
|
# This applies the given hook to a builder. This should not be
|
69
109
|
# called directly.
|
70
110
|
#
|
71
111
|
# @param [Builder] builder
|
72
|
-
def apply(builder, options=
|
73
|
-
options ||= {}
|
74
|
-
|
112
|
+
def apply(builder, options={})
|
75
113
|
if !options[:no_prepend_or_append]
|
76
114
|
# Prepends first
|
77
|
-
@prepend_hooks.each do |
|
78
|
-
|
115
|
+
@prepend_hooks.each do |item|
|
116
|
+
if options[:root]
|
117
|
+
idx = builder.index(options[:root])
|
118
|
+
else
|
119
|
+
idx = 0
|
120
|
+
end
|
121
|
+
builder.insert(idx, item.middleware, *item.arguments.parameters,
|
122
|
+
**item.arguments.keywords, &item.arguments.block)
|
79
123
|
end
|
80
124
|
|
81
125
|
# Appends
|
82
|
-
@append_hooks.each do |
|
83
|
-
|
126
|
+
@append_hooks.each do |item|
|
127
|
+
if options[:root]
|
128
|
+
idx = builder.index(options[:root])
|
129
|
+
builder.insert(idx + 1, item.middleware, *item.arguments.parameters,
|
130
|
+
**item.arguments.keywords, &item.arguments.block)
|
131
|
+
else
|
132
|
+
builder.use(item.middleware, *item.arguments.parameters,
|
133
|
+
**item.arguments.keywords, &item.arguments.block)
|
134
|
+
end
|
84
135
|
end
|
85
136
|
end
|
86
137
|
|
@@ -88,8 +139,9 @@ module Vagrant
|
|
88
139
|
@before_hooks.each do |key, list|
|
89
140
|
next if !builder.index(key)
|
90
141
|
|
91
|
-
list.each do |
|
92
|
-
builder.insert_before(key,
|
142
|
+
list.each do |item|
|
143
|
+
builder.insert_before(key, item.middleware, *item.arguments.parameters,
|
144
|
+
**item.arguments.keywords, &item.arguments.block)
|
93
145
|
end
|
94
146
|
end
|
95
147
|
|
@@ -97,8 +149,9 @@ module Vagrant
|
|
97
149
|
@after_hooks.each do |key, list|
|
98
150
|
next if !builder.index(key)
|
99
151
|
|
100
|
-
list.each do |
|
101
|
-
builder.insert_after(key,
|
152
|
+
list.each do |item|
|
153
|
+
builder.insert_after(key, item.middleware, *item.arguments.parameters,
|
154
|
+
**item.arguments.keywords, &item.arguments.block)
|
102
155
|
end
|
103
156
|
end
|
104
157
|
end
|
@@ -34,30 +34,19 @@ module Vagrant
|
|
34
34
|
environment.merge!(@lazy_globals.call) if @lazy_globals
|
35
35
|
environment.merge!(options || {})
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
machine = environment[:machine]
|
44
|
-
machine_name = machine.name if machine
|
37
|
+
# NOTE: Triggers are initialized later in the Action::Runer because of
|
38
|
+
# how `@lazy_globals` are evaluated. Rather than trying to guess where
|
39
|
+
# the `env` is coming from, we can wait until they're merged into a single
|
40
|
+
# hash above.
|
41
|
+
env = environment[:env]
|
42
|
+
machine = environment[:machine]
|
45
43
|
|
46
|
-
|
47
|
-
triggers = Vagrant::Plugin::V2::Trigger.new(env, env.vagrantfile.config.trigger, machine, ui)
|
48
|
-
end
|
49
|
-
|
50
|
-
# Setup the action hooks
|
51
|
-
hooks = Vagrant.plugin("2").manager.action_hooks(environment[:action_name])
|
52
|
-
if !hooks.empty?
|
53
|
-
@logger.info("Preparing hooks for middleware sequence...")
|
54
|
-
environment[:action_hooks] = hooks.map do |hook_proc|
|
55
|
-
Hook.new.tap do |h|
|
56
|
-
hook_proc.call(h)
|
57
|
-
end
|
58
|
-
end
|
44
|
+
environment[:triggers] = machine.triggers if machine
|
59
45
|
|
60
|
-
|
46
|
+
if env
|
47
|
+
ui = Vagrant::UI::Prefixed.new(env.ui, "vagrant")
|
48
|
+
environment[:triggers] ||= Vagrant::Plugin::V2::Trigger.
|
49
|
+
new(env, env.vagrantfile.config.trigger, machine, ui)
|
61
50
|
end
|
62
51
|
|
63
52
|
# Run the action chain in a busy block, marking the environment as
|
@@ -95,14 +84,10 @@ module Vagrant
|
|
95
84
|
|
96
85
|
action_name = environment[:action_name]
|
97
86
|
|
98
|
-
triggers.fire_triggers(action_name, :before, machine_name, :hook) if Vagrant::Util::Experimental.feature_enabled?("typed_triggers")
|
99
|
-
|
100
87
|
# We place a process lock around every action that is called
|
101
|
-
@logger.info("Running action: #{
|
88
|
+
@logger.info("Running action: #{action_name} #{callable_id}")
|
102
89
|
Util::Busy.busy(int_callback) { callable.call(environment) }
|
103
90
|
|
104
|
-
triggers.fire_triggers(action_name, :after, machine_name, :hook) if Vagrant::Util::Experimental.feature_enabled?("typed_triggers")
|
105
|
-
|
106
91
|
# Return the environment in case there are things in there that
|
107
92
|
# the caller wants to use.
|
108
93
|
environment
|
@@ -1,7 +1,5 @@
|
|
1
1
|
require "log4r"
|
2
2
|
require 'vagrant/util/experimental'
|
3
|
-
require 'vagrant/action/builtin/before_trigger'
|
4
|
-
require 'vagrant/action/builtin/after_trigger'
|
5
3
|
|
6
4
|
module Vagrant
|
7
5
|
module Action
|
@@ -47,21 +45,12 @@ module Vagrant
|
|
47
45
|
raise Errors::VagrantInterrupt if env[:interrupted]
|
48
46
|
action = @actions.shift
|
49
47
|
@logger.info("Calling IN action: #{action}")
|
50
|
-
|
51
|
-
if !action.is_a?(Proc) && env[:hook]
|
52
|
-
hook_name = action.class.name.split("::").last.
|
53
|
-
gsub(/([a-z])([A-Z])/, '\1_\2').gsub('-', '_').downcase
|
54
|
-
end
|
55
|
-
|
56
|
-
env[:hook].call("before_#{hook_name}".to_sym) if hook_name
|
57
48
|
@stack.unshift(action).first.call(env)
|
58
|
-
env[:hook].call("after_#{hook_name}".to_sym) if hook_name
|
59
|
-
|
60
49
|
raise Errors::VagrantInterrupt if env[:interrupted]
|
61
50
|
@logger.info("Calling OUT action: #{action}")
|
62
|
-
rescue SystemExit
|
63
|
-
# This means that an "exit" or "abort" was called
|
64
|
-
# we just exit immediately.
|
51
|
+
rescue SystemExit, NoMemoryError
|
52
|
+
# This means that an "exit" or "abort" was called, or we have run out
|
53
|
+
# of memory. In these cases, we just exit immediately.
|
65
54
|
raise
|
66
55
|
rescue Exception => e
|
67
56
|
# We guard this so that the Warden only outputs this once for
|
@@ -103,26 +92,34 @@ module Vagrant
|
|
103
92
|
# A somewhat confusing function which simply initializes each
|
104
93
|
# middleware properly to call the next middleware in the sequence.
|
105
94
|
def finalize_action(action, env)
|
106
|
-
|
95
|
+
if action.is_a?(Builder::StackItem)
|
96
|
+
klass = action.middleware
|
97
|
+
args = action.arguments.parameters
|
98
|
+
keywords = action.arguments.keywords
|
99
|
+
block = action.arguments.block
|
100
|
+
else
|
101
|
+
klass = action
|
102
|
+
args = []
|
103
|
+
keywords = {}
|
104
|
+
end
|
107
105
|
|
108
|
-
|
109
|
-
|
110
|
-
args ||= []
|
106
|
+
args = nil if args.empty?
|
107
|
+
keywords = nil if keywords.empty?
|
111
108
|
|
112
109
|
if klass.is_a?(Class)
|
113
|
-
#
|
114
|
-
#
|
115
|
-
|
116
|
-
#
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
110
|
+
# NOTE: We need to detect if we are passing args and/or
|
111
|
+
# keywords and do it explicitly. Earlier versions
|
112
|
+
# are not as lax about splatting keywords when the
|
113
|
+
# target method is not expecting them.
|
114
|
+
if args && keywords
|
115
|
+
klass.new(self, env, *args, **keywords, &block)
|
116
|
+
elsif args
|
117
|
+
klass.new(self, env, *args, &block)
|
118
|
+
elsif keywords
|
119
|
+
klass.new(self, env, **keywords, &block)
|
120
|
+
else
|
121
|
+
klass.new(self, env, &block)
|
122
|
+
end
|
126
123
|
elsif klass.respond_to?(:call)
|
127
124
|
# Make it a lambda which calls the item then forwards
|
128
125
|
# up the chain
|