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
@@ -13,9 +13,11 @@ module Vagrant
|
|
13
13
|
# a hand-rolled Ruby library, so we defer to its expertise.
|
14
14
|
class Uploader
|
15
15
|
|
16
|
-
# @param [String] destination
|
17
|
-
# @param [String] file
|
18
|
-
# @param [Hash]
|
16
|
+
# @param [String] destination Valid URL to upload file to
|
17
|
+
# @param [String] file Location of file to upload on disk
|
18
|
+
# @param [Hash] options
|
19
|
+
# @option options [Vagrant::UI] :ui UI interface for output
|
20
|
+
# @option options [String, Symbol] :method Request method for upload
|
19
21
|
def initialize(destination, file, options=nil)
|
20
22
|
options ||= {}
|
21
23
|
@logger = Log4r::Logger.new("vagrant::util::uploader")
|
@@ -27,6 +29,7 @@ module Vagrant
|
|
27
29
|
if !@request_method
|
28
30
|
@request_method = "PUT"
|
29
31
|
end
|
32
|
+
@request_method = @request_method.to_s.upcase
|
30
33
|
end
|
31
34
|
|
32
35
|
def upload!
|
@@ -51,7 +54,7 @@ module Vagrant
|
|
51
54
|
protected
|
52
55
|
|
53
56
|
def build_options
|
54
|
-
options = [@destination, "--request", @request_method, "--upload-file", @file]
|
57
|
+
options = [@destination, "--request", @request_method, "--upload-file", @file, "--fail"]
|
55
58
|
return options
|
56
59
|
end
|
57
60
|
|
data/lib/vagrant/vagrantfile.rb
CHANGED
@@ -197,7 +197,7 @@ module Vagrant
|
|
197
197
|
local_keys = keys.dup
|
198
198
|
|
199
199
|
# Load the box Vagrantfile, if there is one
|
200
|
-
if config.vm.box && boxes
|
200
|
+
if !config.vm.box.to_s.empty? && boxes
|
201
201
|
box = boxes.find(config.vm.box, box_formats, config.vm.box_version)
|
202
202
|
if box
|
203
203
|
box_vagrantfile = find_vagrantfile(box.directory)
|
@@ -241,7 +241,7 @@ module Vagrant
|
|
241
241
|
# configuration and attempt to load that
|
242
242
|
if box.nil?
|
243
243
|
@logger.warn("Failed to locate #{config.vm.box} with version #{config.vm.box_version}")
|
244
|
-
@logger.warn("Performing lookup with
|
244
|
+
@logger.warn("Performing lookup with initial values #{initial_box} with version #{initial_version}")
|
245
245
|
config.vm.box = original_box = initial_box
|
246
246
|
config.vm.box_version = original_box = initial_version
|
247
247
|
load_box_proc.call
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
require 'vagrant/util/install_cli_autocomplete'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module CommandAutocomplete
|
7
|
+
module Command
|
8
|
+
class Install < Vagrant.plugin("2", :command)
|
9
|
+
def execute
|
10
|
+
options = {
|
11
|
+
shells: []
|
12
|
+
}
|
13
|
+
|
14
|
+
opts = OptionParser.new do |o|
|
15
|
+
o.banner = "Usage: vagrant autocomplete install [-h] [shell name]"
|
16
|
+
o.separator ""
|
17
|
+
o.separator "Available shells: #{Vagrant::Util::InstallCLIAutocomplete::SUPPORTED_SHELLS.keys.join(' ')}"
|
18
|
+
o.separator ""
|
19
|
+
o.separator "Options:"
|
20
|
+
o.separator ""
|
21
|
+
|
22
|
+
o.on("-b", "--bash", "Install bash autocomplete") do |c|
|
23
|
+
options[:shells].append("bash")
|
24
|
+
end
|
25
|
+
|
26
|
+
o.on("-z", "--zsh", "Install zsh autocomplete") do |c|
|
27
|
+
options[:shells].append("zsh")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Parse the options
|
32
|
+
argv = parse_options(opts)
|
33
|
+
return if !argv
|
34
|
+
raise Vagrant::Errors::CLIInvalidUsage, help: opts.help.chomp if argv.length > 0
|
35
|
+
|
36
|
+
written_paths = Vagrant::Util::InstallCLIAutocomplete.install(options[:shells])
|
37
|
+
if written_paths && written_paths.length > 0
|
38
|
+
@env.ui.info(I18n.t("vagrant.autocomplete.installed", paths: written_paths.join("\n- ")))
|
39
|
+
else
|
40
|
+
@env.ui.info(I18n.t("vagrant.autocomplete.not_installed"))
|
41
|
+
end
|
42
|
+
|
43
|
+
# Success, exit status 0
|
44
|
+
0
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require "optparse"
|
2
|
+
require 'vagrant/util/install_cli_autocomplete'
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module CommandAutocomplete
|
6
|
+
module Command
|
7
|
+
class Root < Vagrant.plugin("2", :command)
|
8
|
+
def self.synopsis
|
9
|
+
"manages autocomplete installation on host"
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(argv, env)
|
13
|
+
super
|
14
|
+
|
15
|
+
@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
|
16
|
+
|
17
|
+
@subcommands = Vagrant::Registry.new
|
18
|
+
@subcommands.register(:install) do
|
19
|
+
require File.expand_path("../install", __FILE__)
|
20
|
+
Install
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def execute
|
25
|
+
if @main_args.include?("-h") || @main_args.include?("--help")
|
26
|
+
# Print the help for all the box commands.
|
27
|
+
return help
|
28
|
+
end
|
29
|
+
|
30
|
+
# If we reached this far then we must have a subcommand. If not,
|
31
|
+
# then we also just print the help and exit.
|
32
|
+
command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
|
33
|
+
return help if !command_class || !@sub_command
|
34
|
+
@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
|
35
|
+
|
36
|
+
# Initialize and execute the command class
|
37
|
+
command_class.new(@sub_args, @env).execute
|
38
|
+
end
|
39
|
+
|
40
|
+
def help
|
41
|
+
opts = OptionParser.new do |opts|
|
42
|
+
opts.banner = "Usage: vagrant autocomplete <subcommand>"
|
43
|
+
opts.separator ""
|
44
|
+
opts.separator "Available subcommands:"
|
45
|
+
|
46
|
+
# Add the available subcommands as separators in order to print them
|
47
|
+
# out as well.
|
48
|
+
keys = []
|
49
|
+
keys = @subcommands.keys.map(&:to_s)
|
50
|
+
|
51
|
+
keys.sort.each do |key|
|
52
|
+
opts.separator " #{key}"
|
53
|
+
end
|
54
|
+
|
55
|
+
opts.separator ""
|
56
|
+
opts.separator "For help on any individual subcommand run `vagrant autocomplete <subcommand> -h`"
|
57
|
+
end
|
58
|
+
|
59
|
+
@env.ui.info(opts.help, prefix: false)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "vagrant"
|
2
|
+
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module CommandAutocomplete
|
6
|
+
class Plugin < Vagrant.plugin("2")
|
7
|
+
name "autocomplete command"
|
8
|
+
description <<-DESC
|
9
|
+
The `autocomplete` manipulates Vagrant the autocomplete feature.
|
10
|
+
DESC
|
11
|
+
|
12
|
+
command("autocomplete") do
|
13
|
+
require File.expand_path("../command/root", __FILE__)
|
14
|
+
Command::Root
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -27,6 +27,10 @@ module VagrantPlugins
|
|
27
27
|
o.on("--check", "Only checks for a capability, does not execute") do |f|
|
28
28
|
options[:check] = f
|
29
29
|
end
|
30
|
+
|
31
|
+
o.on("-t", "--target=TARGET", "Target guest to run against (if applicable)") do |t|
|
32
|
+
options[:target] = t
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
36
|
# Parse the options
|
@@ -45,7 +49,7 @@ module VagrantPlugins
|
|
45
49
|
if type == :host
|
46
50
|
cap_host = @env.host
|
47
51
|
else
|
48
|
-
with_target_vms([]) do |vm|
|
52
|
+
with_target_vms(options[:target] || []) do |vm|
|
49
53
|
cap_host = case type
|
50
54
|
when :provider
|
51
55
|
vm.provider
|
@@ -5,6 +5,8 @@ module VagrantPlugins
|
|
5
5
|
module AuthCommand
|
6
6
|
module Command
|
7
7
|
class Login < Vagrant.plugin("2", :command)
|
8
|
+
include Util
|
9
|
+
|
8
10
|
def execute
|
9
11
|
options = {}
|
10
12
|
|
@@ -16,15 +18,10 @@ module VagrantPlugins
|
|
16
18
|
o.on("-c", "--check", "Checks if currently logged in") do |c|
|
17
19
|
options[:check] = c
|
18
20
|
end
|
19
|
-
|
20
21
|
o.on("-d", "--description DESCRIPTION", String, "Set description for the Vagrant Cloud token") do |d|
|
21
22
|
options[:description] = d
|
22
23
|
end
|
23
24
|
|
24
|
-
o.on("-k", "--logout", "Logout from Vagrant Cloud") do |k|
|
25
|
-
options[:logout] = k
|
26
|
-
end
|
27
|
-
|
28
25
|
o.on("-t", "--token TOKEN", String, "Set the Vagrant Cloud token") do |t|
|
29
26
|
options[:token] = t
|
30
27
|
end
|
@@ -37,26 +34,32 @@ module VagrantPlugins
|
|
37
34
|
# Parse the options
|
38
35
|
argv = parse_options(opts)
|
39
36
|
return if !argv
|
37
|
+
if !argv.empty?
|
38
|
+
raise Vagrant::Errors::CLIInvalidUsage,
|
39
|
+
help: opts.help.chomp
|
40
|
+
end
|
40
41
|
|
41
|
-
|
42
|
-
|
42
|
+
client = Client.new(@env)
|
43
|
+
client.username_or_email = options[:login]
|
43
44
|
|
44
45
|
# Determine what task we're actually taking based on flags
|
45
46
|
if options[:check]
|
46
|
-
return execute_check
|
47
|
-
elsif options[:logout]
|
48
|
-
return execute_logout
|
47
|
+
return execute_check(client)
|
49
48
|
elsif options[:token]
|
50
|
-
return execute_token(options[:token])
|
49
|
+
return execute_token(client, options[:token])
|
51
50
|
else
|
52
|
-
|
51
|
+
if client.logged_in?
|
52
|
+
@env.ui.success(I18n.t("cloud_command.check_logged_in"))
|
53
|
+
else
|
54
|
+
client_login(@env, options.slice(:login, :description))
|
55
|
+
end
|
53
56
|
end
|
54
57
|
|
55
58
|
0
|
56
59
|
end
|
57
60
|
|
58
|
-
def execute_check
|
59
|
-
if
|
61
|
+
def execute_check(client)
|
62
|
+
if client.logged_in?
|
60
63
|
@env.ui.success(I18n.t("cloud_command.check_logged_in"))
|
61
64
|
return 0
|
62
65
|
else
|
@@ -65,17 +68,11 @@ module VagrantPlugins
|
|
65
68
|
end
|
66
69
|
end
|
67
70
|
|
68
|
-
def
|
69
|
-
|
70
|
-
@env.ui.success(I18n.t("cloud_command.logged_out"))
|
71
|
-
return 0
|
72
|
-
end
|
73
|
-
|
74
|
-
def execute_token(token)
|
75
|
-
@client.store_token(token)
|
71
|
+
def execute_token(client, token)
|
72
|
+
client.store_token(token)
|
76
73
|
@env.ui.success(I18n.t("cloud_command.token_saved"))
|
77
74
|
|
78
|
-
if
|
75
|
+
if client.logged_in?
|
79
76
|
@env.ui.success(I18n.t("cloud_command.check_logged_in"))
|
80
77
|
return 0
|
81
78
|
else
|
@@ -9,15 +9,9 @@ module VagrantPlugins
|
|
9
9
|
options = {}
|
10
10
|
|
11
11
|
opts = OptionParser.new do |o|
|
12
|
-
o.banner = "Usage: vagrant cloud auth logout
|
12
|
+
o.banner = "Usage: vagrant cloud auth logout"
|
13
13
|
o.separator ""
|
14
14
|
o.separator "Log out of Vagrant Cloud"
|
15
|
-
o.separator ""
|
16
|
-
o.separator "Options:"
|
17
|
-
o.separator ""
|
18
|
-
o.on("-u", "--username USERNAME_OR_EMAIL", String, "Vagrant Cloud username or email address") do |l|
|
19
|
-
options[:login] = l
|
20
|
-
end
|
21
15
|
end
|
22
16
|
|
23
17
|
# Parse the options
|
@@ -28,9 +22,7 @@ module VagrantPlugins
|
|
28
22
|
help: opts.help.chomp
|
29
23
|
end
|
30
24
|
|
31
|
-
|
32
|
-
@client = VagrantPlugins::CloudCommand::Util.client_login(@env, options[:username])
|
33
|
-
|
25
|
+
@client = Client.new(@env)
|
34
26
|
@client.clear_token
|
35
27
|
@env.ui.success(I18n.t("cloud_command.logged_out"))
|
36
28
|
return 0
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require "cgi"
|
2
2
|
require "uri"
|
3
|
+
require "log4r"
|
3
4
|
|
4
5
|
require Vagrant.source_root.join("plugins/commands/cloud/client/client")
|
5
6
|
|
@@ -27,55 +28,83 @@ module VagrantPlugins
|
|
27
28
|
|
28
29
|
def initialize(app, env)
|
29
30
|
@app = app
|
31
|
+
@logger = Log4r::Logger.new("vagrant::cloud::auth::authenticate-box-url")
|
30
32
|
CloudCommand::Plugin.init!
|
31
33
|
end
|
32
34
|
|
33
35
|
def call(env)
|
34
|
-
|
35
|
-
|
36
|
+
if ENV["VAGRANT_SERVER_ACCESS_TOKEN_BY_URL"]
|
37
|
+
@logger.warn("Adding access token as GET parameter by user request")
|
38
|
+
client = Client.new(env[:env])
|
39
|
+
token = client.token
|
36
40
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
env[:box_urls].map! do |url|
|
42
|
+
begin
|
43
|
+
u = URI.parse(url)
|
44
|
+
if u.host != TARGET_HOST && REPLACEMENT_HOSTS.include?(u.host)
|
45
|
+
u.host = TARGET_HOST
|
46
|
+
u.to_s
|
47
|
+
else
|
48
|
+
url
|
49
|
+
end
|
50
|
+
rescue URI::Error
|
44
51
|
url
|
45
52
|
end
|
46
|
-
rescue URI::Error
|
47
|
-
url
|
48
53
|
end
|
49
|
-
end
|
50
54
|
|
51
|
-
|
55
|
+
server_uri = URI.parse(Vagrant.server_url.to_s)
|
52
56
|
|
53
|
-
|
54
|
-
|
55
|
-
|
57
|
+
if token && !server_uri.host.to_s.empty?
|
58
|
+
env[:box_urls].map! do |url|
|
59
|
+
begin
|
60
|
+
u = URI.parse(url)
|
56
61
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
62
|
+
if u.host == server_uri.host
|
63
|
+
if server_uri.host != TARGET_HOST && !self.class.custom_host_notified?
|
64
|
+
env[:ui].warn(I18n.t("cloud_command.middleware.authentication.different_target",
|
65
|
+
custom_host: server_uri.host, known_host: TARGET_HOST) + "\n")
|
66
|
+
sleep CUSTOM_HOST_NOTIFY_WAIT
|
67
|
+
self.class.custom_host_notified!
|
68
|
+
end
|
64
69
|
|
65
|
-
|
70
|
+
q = CGI.parse(u.query || "")
|
66
71
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
72
|
+
current = q["access_token"]
|
73
|
+
if current && current.empty?
|
74
|
+
q["access_token"] = token
|
75
|
+
end
|
71
76
|
|
72
|
-
|
77
|
+
u.query = URI.encode_www_form(q)
|
78
|
+
end
|
79
|
+
|
80
|
+
u.to_s
|
81
|
+
rescue URI::Error
|
82
|
+
url
|
83
|
+
end
|
73
84
|
end
|
85
|
+
end
|
86
|
+
else
|
87
|
+
env[:box_urls].map! do |url|
|
88
|
+
begin
|
89
|
+
u = URI.parse(url)
|
90
|
+
q = CGI.parse(u.query || "")
|
91
|
+
if q["access_token"]
|
92
|
+
@logger.warn("Removing access token from URL parameter.")
|
93
|
+
q.delete("access_token")
|
94
|
+
if q.empty?
|
95
|
+
u.query = nil
|
96
|
+
else
|
97
|
+
u.query = URI.encode_www_form(q)
|
98
|
+
end
|
99
|
+
end
|
74
100
|
|
75
|
-
|
101
|
+
u.to_s
|
102
|
+
rescue URI::Error
|
103
|
+
url
|
104
|
+
end
|
76
105
|
end
|
106
|
+
@logger.warn("Authentication token not added as GET parameter.")
|
77
107
|
end
|
78
|
-
|
79
108
|
@app.call(env)
|
80
109
|
end.freeze
|
81
110
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require "cgi"
|
2
|
+
require "uri"
|
3
|
+
|
4
|
+
require "vagrant/util/credential_scrubber"
|
5
|
+
require_relative "./add_authentication"
|
6
|
+
|
7
|
+
require Vagrant.source_root.join("plugins/commands/cloud/client/client")
|
8
|
+
|
9
|
+
# Similar to AddAuthentication this middleware will add authentication for interacting
|
10
|
+
# with Vagrant cloud. It does this by adding Authentication headers to a
|
11
|
+
# Vagrant::Util::Downloader object.
|
12
|
+
module VagrantPlugins
|
13
|
+
module CloudCommand
|
14
|
+
class AddDownloaderAuthentication < AddAuthentication
|
15
|
+
|
16
|
+
def initialize(app, env)
|
17
|
+
super
|
18
|
+
@logger = Log4r::Logger.new("vagrant::cloud::auth::add-download-authentication")
|
19
|
+
end
|
20
|
+
|
21
|
+
def call(env)
|
22
|
+
if ENV["VAGRANT_SERVER_ACCESS_TOKEN_BY_URL"]
|
23
|
+
@logger.warn("Authentication header not added due to user requested access token URL parameter")
|
24
|
+
else
|
25
|
+
client = Client.new(env[:env])
|
26
|
+
token = client.token
|
27
|
+
Vagrant::Util::CredentialScrubber.sensitive(token)
|
28
|
+
|
29
|
+
begin
|
30
|
+
target_url = URI.parse(env[:downloader].source)
|
31
|
+
if target_url.host != TARGET_HOST && REPLACEMENT_HOSTS.include?(target_url.host)
|
32
|
+
target_url.host = TARGET_HOST
|
33
|
+
env[:downloader].source = target_url.to_s
|
34
|
+
end
|
35
|
+
rescue URI::Error
|
36
|
+
# if there is an error, use current target_url
|
37
|
+
end
|
38
|
+
|
39
|
+
server_uri = URI.parse(Vagrant.server_url.to_s)
|
40
|
+
if token && !server_uri.host.to_s.empty?
|
41
|
+
if target_url.host == server_uri.host
|
42
|
+
if server_uri.host != TARGET_HOST && !self.class.custom_host_notified?
|
43
|
+
env[:ui].warn(I18n.t("cloud_command.middleware.authentication.different_target",
|
44
|
+
custom_host: server_uri.host, known_host: TARGET_HOST) + "\n")
|
45
|
+
sleep CUSTOM_HOST_NOTIFY_WAIT
|
46
|
+
self.class.custom_host_notified!
|
47
|
+
end
|
48
|
+
|
49
|
+
if Array(env[:downloader].headers).any? { |h| h.include?("Authorization") }
|
50
|
+
@logger.info("Not adding an authentication header, one already found")
|
51
|
+
else
|
52
|
+
env[:downloader].headers << "Authorization: Bearer #{token}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
env[:downloader]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
@app.call(env)
|
61
|
+
end.freeze
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|