vagrant 1.5.0 → 2.4.4
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 +5 -5
- data/.copywrite.hcl +15 -0
- data/.gitignore +79 -14
- data/.gitmodules +0 -0
- data/.vimrc +5 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +4512 -0
- data/Gemfile +10 -2
- data/LICENSE +92 -0
- data/README.md +55 -3
- data/RELEASE.md +11 -0
- data/Rakefile +22 -1
- data/Vagrantfile +31 -0
- data/bin/vagrant +268 -2
- data/contrib/README.md +17 -0
- data/contrib/bash/completion.sh +190 -0
- data/contrib/emacs/vagrant.el +11 -0
- data/contrib/st/Ruby.sublime-settings +6 -0
- data/contrib/sudoers/linux-fedora +7 -0
- data/contrib/sudoers/linux-suse +6 -0
- data/contrib/sudoers/linux-ubuntu +8 -0
- data/contrib/sudoers/osx +10 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/contrib/zsh/_vagrant +738 -0
- data/contrib/zsh/generate_zsh_completion.rb +168 -0
- data/ext/vagrant/vagrant_ssl/extconf.rb +24 -0
- data/ext/vagrant/vagrant_ssl/vagrant_ssl.c +37 -0
- data/ext/vagrant/vagrant_ssl/vagrant_ssl.h +19 -0
- data/keys/README.md +23 -0
- data/keys/vagrant +27 -0
- data/keys/vagrant.key.ed25519 +7 -0
- data/keys/vagrant.key.rsa +27 -0
- data/keys/vagrant.pub +2 -0
- data/keys/vagrant.pub.ed25519 +1 -0
- data/keys/vagrant.pub.rsa +1 -0
- data/lib/vagrant/action/builder.rb +356 -0
- data/lib/vagrant/action/builtin/box_add.rb +638 -0
- data/lib/vagrant/action/builtin/box_check_outdated.rb +116 -0
- data/lib/vagrant/action/builtin/box_remove.rb +181 -0
- data/lib/vagrant/action/builtin/box_update.rb +23 -0
- data/lib/vagrant/action/builtin/call.rb +69 -0
- data/lib/vagrant/action/builtin/cleanup_disks.rb +59 -0
- data/lib/vagrant/action/builtin/cloud_init_setup.rb +125 -0
- data/lib/vagrant/action/builtin/cloud_init_wait.rb +35 -0
- data/lib/vagrant/action/builtin/config_validate.rb +33 -0
- data/lib/vagrant/action/builtin/confirm.rb +51 -0
- data/lib/vagrant/action/builtin/delayed.rb +29 -0
- data/lib/vagrant/action/builtin/destroy_confirm.rb +24 -0
- data/lib/vagrant/action/builtin/disk.rb +55 -0
- data/lib/vagrant/action/builtin/env_set.rb +27 -0
- data/lib/vagrant/action/builtin/graceful_halt.rb +88 -0
- data/lib/vagrant/action/builtin/handle_box.rb +111 -0
- data/lib/vagrant/action/builtin/handle_box_url.rb +17 -0
- data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +300 -0
- data/lib/vagrant/action/builtin/has_provisioner.rb +39 -0
- data/lib/vagrant/action/builtin/is_env_set.rb +25 -0
- data/lib/vagrant/action/builtin/is_state.rb +35 -0
- data/lib/vagrant/action/builtin/lock.rb +60 -0
- data/lib/vagrant/action/builtin/message.rb +29 -0
- data/lib/vagrant/action/builtin/mixin_provisioners.rb +159 -0
- data/lib/vagrant/action/builtin/mixin_synced_folders.rb +267 -0
- data/lib/vagrant/action/builtin/prepare_clone.rb +41 -0
- data/lib/vagrant/action/builtin/provision.rb +146 -0
- data/lib/vagrant/action/builtin/provisioner_cleanup.rb +57 -0
- data/lib/vagrant/action/builtin/set_hostname.rb +34 -0
- data/lib/vagrant/action/builtin/ssh_exec.rb +47 -0
- data/lib/vagrant/action/builtin/ssh_run.rb +88 -0
- data/lib/vagrant/action/builtin/synced_folder_cleanup.rb +36 -0
- data/lib/vagrant/action/builtin/synced_folders.rb +154 -0
- data/lib/vagrant/action/builtin/trigger.rb +40 -0
- data/lib/vagrant/action/builtin/wait_for_communicator.rb +82 -0
- data/lib/vagrant/action/general/package.rb +248 -0
- data/lib/vagrant/action/general/package_setup_files.rb +54 -0
- data/lib/vagrant/action/general/package_setup_folders.rb +40 -0
- data/lib/vagrant/action/hook.rb +163 -0
- data/lib/vagrant/action/primary_runner.rb +18 -0
- data/lib/vagrant/action/runner.rb +112 -0
- data/lib/vagrant/action/warden.rb +126 -0
- data/lib/vagrant/action.rb +88 -0
- data/lib/vagrant/alias.rb +59 -0
- data/lib/vagrant/batch_action.rb +181 -0
- data/lib/vagrant/box.rb +260 -0
- data/lib/vagrant/box_collection.rb +563 -0
- data/lib/vagrant/box_metadata.rb +275 -0
- data/lib/vagrant/bundler.rb +936 -0
- data/lib/vagrant/capability_host.rb +180 -0
- data/lib/vagrant/cli.rb +122 -0
- data/lib/vagrant/config/loader.rb +323 -0
- data/lib/vagrant/config/v1/dummy_config.rb +16 -0
- data/lib/vagrant/config/v1/loader.rb +108 -0
- data/lib/vagrant/config/v1/root.rb +63 -0
- data/lib/vagrant/config/v1.rb +12 -0
- data/lib/vagrant/config/v2/dummy_config.rb +60 -0
- data/lib/vagrant/config/v2/loader.rb +154 -0
- data/lib/vagrant/config/v2/root.rb +122 -0
- data/lib/vagrant/config/v2/util.rb +24 -0
- data/lib/vagrant/config/v2.rb +13 -0
- data/lib/vagrant/config/version_base.rb +83 -0
- data/lib/vagrant/config.rb +64 -0
- data/lib/vagrant/environment.rb +1230 -0
- data/lib/vagrant/errors.rb +1158 -0
- data/lib/vagrant/guest.rb +72 -0
- data/lib/vagrant/host.rb +19 -0
- data/lib/vagrant/machine.rb +672 -0
- data/lib/vagrant/machine_index.rb +527 -0
- data/lib/vagrant/machine_state.rb +54 -0
- data/lib/vagrant/patches/builder/mkmf.rb +116 -0
- data/lib/vagrant/patches/fake_ftp.rb +28 -0
- data/lib/vagrant/patches/log4r.rb +54 -0
- data/lib/vagrant/patches/net-ssh.rb +76 -0
- data/lib/vagrant/patches/rubygems.rb +23 -0
- data/lib/vagrant/patches/timeout_error.rb +5 -0
- data/lib/vagrant/plugin/manager.rb +406 -0
- data/lib/vagrant/plugin/state_file.rb +136 -0
- data/lib/vagrant/plugin/v1/command.rb +171 -0
- data/lib/vagrant/plugin/v1/communicator.rb +101 -0
- data/lib/vagrant/plugin/v1/config.rb +115 -0
- data/lib/vagrant/plugin/v1/errors.rb +18 -0
- data/lib/vagrant/plugin/v1/guest.rb +95 -0
- data/lib/vagrant/plugin/v1/host.rb +69 -0
- data/lib/vagrant/plugin/v1/manager.rb +134 -0
- data/lib/vagrant/plugin/v1/plugin.rb +231 -0
- data/lib/vagrant/plugin/v1/provider.rb +71 -0
- data/lib/vagrant/plugin/v1/provisioner.rb +53 -0
- data/lib/vagrant/plugin/v1.rb +25 -0
- data/lib/vagrant/plugin/v2/command.rb +309 -0
- data/lib/vagrant/plugin/v2/communicator.rb +133 -0
- data/lib/vagrant/plugin/v2/components.rb +94 -0
- data/lib/vagrant/plugin/v2/config.rb +167 -0
- data/lib/vagrant/plugin/v2/errors.rb +18 -0
- data/lib/vagrant/plugin/v2/guest.rb +26 -0
- data/lib/vagrant/plugin/v2/host.rb +22 -0
- data/lib/vagrant/plugin/v2/manager.rb +306 -0
- data/lib/vagrant/plugin/v2/plugin.rb +296 -0
- data/lib/vagrant/plugin/v2/provider.rb +118 -0
- data/lib/vagrant/plugin/v2/provisioner.rb +56 -0
- data/lib/vagrant/plugin/v2/push.rb +30 -0
- data/lib/vagrant/plugin/v2/synced_folder.rb +113 -0
- data/lib/vagrant/plugin/v2/trigger.rb +367 -0
- data/lib/vagrant/plugin/v2.rb +33 -0
- data/lib/vagrant/plugin.rb +11 -0
- data/lib/vagrant/registry.rb +113 -0
- data/lib/vagrant/shared_helpers.rb +238 -0
- data/lib/vagrant/ui.rb +449 -0
- data/lib/vagrant/util/ansi_escape_code_remover.rb +37 -0
- data/lib/vagrant/util/busy.rb +62 -0
- data/lib/vagrant/util/caps.rb +51 -0
- data/lib/vagrant/util/checkpoint_client.rb +186 -0
- data/lib/vagrant/util/command_deprecation.rb +59 -0
- data/lib/vagrant/util/counter.rb +27 -0
- data/lib/vagrant/util/credential_scrubber.rb +74 -0
- data/lib/vagrant/util/curl_helper.rb +104 -0
- data/lib/vagrant/util/deep_merge.rb +23 -0
- data/lib/vagrant/util/directory.rb +22 -0
- data/lib/vagrant/util/downloader.rb +278 -0
- data/lib/vagrant/util/env.rb +56 -0
- data/lib/vagrant/util/experimental.rb +79 -0
- data/lib/vagrant/util/file_checksum.rb +77 -0
- data/lib/vagrant/util/file_mode.rb +15 -0
- data/lib/vagrant/util/file_mutex.rb +50 -0
- data/lib/vagrant/util/guest_hosts.rb +71 -0
- data/lib/vagrant/util/guest_inspection.rb +118 -0
- data/lib/vagrant/util/guest_networks.rb +107 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +66 -0
- data/lib/vagrant/util/install_cli_autocomplete.rb +121 -0
- data/lib/vagrant/util/io.rb +53 -0
- data/lib/vagrant/util/ipv4_interfaces.rb +18 -0
- data/lib/vagrant/util/is_port_open.rb +31 -0
- data/lib/vagrant/util/keypair.rb +293 -0
- data/lib/vagrant/util/line_buffer.rb +63 -0
- data/lib/vagrant/util/line_ending_helpers.rb +17 -0
- data/lib/vagrant/util/logging_formatter.rb +70 -0
- data/lib/vagrant/util/map_command_options.rb +36 -0
- data/lib/vagrant/util/mime.rb +95 -0
- data/lib/vagrant/util/network_ip.rb +27 -0
- data/lib/vagrant/util/numeric.rb +92 -0
- data/lib/vagrant/util/platform.rb +737 -0
- data/lib/vagrant/util/powershell.rb +316 -0
- data/lib/vagrant/util/presence.rb +48 -0
- data/lib/vagrant/util/retryable.rb +34 -0
- data/lib/vagrant/util/safe_chdir.rb +36 -0
- data/lib/vagrant/util/safe_env.rb +17 -0
- data/lib/vagrant/util/safe_exec.rb +78 -0
- data/lib/vagrant/util/safe_puts.rb +34 -0
- data/lib/vagrant/util/scoped_hash_override.rb +47 -0
- data/lib/vagrant/util/shell_quote.rb +18 -0
- data/lib/vagrant/util/silence_warnings.rb +17 -0
- data/lib/vagrant/util/ssh.rb +267 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +38 -0
- data/lib/vagrant/util/string_block_editor.rb +80 -0
- data/lib/vagrant/util/subprocess.rb +365 -0
- data/lib/vagrant/util/template_renderer.rb +91 -0
- data/lib/vagrant/util/uploader.rb +109 -0
- data/lib/vagrant/util/which.rb +56 -0
- data/lib/vagrant/util/windows_path.rb +41 -0
- data/lib/vagrant/util.rb +63 -0
- data/lib/vagrant/vagrantfile.rb +320 -0
- data/lib/vagrant/version.rb +10 -0
- data/lib/vagrant.rb +380 -0
- data/plugins/README.md +11 -0
- data/plugins/commands/autocomplete/command/install.rb +52 -0
- data/plugins/commands/autocomplete/command/root.rb +69 -0
- data/plugins/commands/autocomplete/plugin.rb +21 -0
- data/plugins/commands/box/command/add.rb +111 -0
- data/plugins/commands/box/command/download_mixins.rb +32 -0
- data/plugins/commands/box/command/list.rb +82 -0
- data/plugins/commands/box/command/outdated.rb +109 -0
- data/plugins/commands/box/command/prune.rb +136 -0
- data/plugins/commands/box/command/remove.rb +83 -0
- data/plugins/commands/box/command/repackage.rb +46 -0
- data/plugins/commands/box/command/root.rb +98 -0
- data/plugins/commands/box/command/update.rb +206 -0
- data/plugins/commands/box/plugin.rb +18 -0
- data/plugins/commands/cap/command.rb +83 -0
- data/plugins/commands/cap/plugin.rb +20 -0
- data/plugins/commands/cloud/auth/login.rb +90 -0
- data/plugins/commands/cloud/auth/logout.rb +37 -0
- data/plugins/commands/cloud/auth/middleware/add_authentication.rb +116 -0
- data/plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb +68 -0
- data/plugins/commands/cloud/auth/plugin.rb +23 -0
- data/plugins/commands/cloud/auth/root.rb +77 -0
- data/plugins/commands/cloud/auth/whoami.rb +63 -0
- data/plugins/commands/cloud/box/create.rb +82 -0
- data/plugins/commands/cloud/box/delete.rb +74 -0
- data/plugins/commands/cloud/box/plugin.rb +22 -0
- data/plugins/commands/cloud/box/root.rb +81 -0
- data/plugins/commands/cloud/box/show.rb +133 -0
- data/plugins/commands/cloud/box/update.rb +82 -0
- data/plugins/commands/cloud/client/client.rb +257 -0
- data/plugins/commands/cloud/errors.rb +31 -0
- data/plugins/commands/cloud/list.rb +54 -0
- data/plugins/commands/cloud/locales/en.yml +197 -0
- data/plugins/commands/cloud/plugin.rb +48 -0
- data/plugins/commands/cloud/provider/create.rb +105 -0
- data/plugins/commands/cloud/provider/delete.rb +109 -0
- data/plugins/commands/cloud/provider/plugin.rb +22 -0
- data/plugins/commands/cloud/provider/root.rb +81 -0
- data/plugins/commands/cloud/provider/update.rb +102 -0
- data/plugins/commands/cloud/provider/upload.rb +100 -0
- data/plugins/commands/cloud/publish.rb +297 -0
- data/plugins/commands/cloud/root.rb +108 -0
- data/plugins/commands/cloud/search.rb +102 -0
- data/plugins/commands/cloud/util.rb +371 -0
- data/plugins/commands/cloud/version/create.rb +77 -0
- data/plugins/commands/cloud/version/delete.rb +78 -0
- data/plugins/commands/cloud/version/plugin.rb +22 -0
- data/plugins/commands/cloud/version/release.rb +78 -0
- data/plugins/commands/cloud/version/revoke.rb +79 -0
- data/plugins/commands/cloud/version/root.rb +85 -0
- data/plugins/commands/cloud/version/update.rb +76 -0
- data/plugins/commands/destroy/command.rb +79 -0
- data/plugins/commands/destroy/plugin.rb +21 -0
- data/plugins/commands/global-status/command.rb +114 -0
- data/plugins/commands/global-status/plugin.rb +21 -0
- data/plugins/commands/halt/command.rb +42 -0
- data/plugins/commands/halt/plugin.rb +21 -0
- data/plugins/commands/help/command.rb +19 -0
- data/plugins/commands/help/plugin.rb +20 -0
- data/plugins/commands/init/command.rb +110 -0
- data/plugins/commands/init/plugin.rb +21 -0
- data/plugins/commands/list-commands/command.rb +46 -0
- data/plugins/commands/list-commands/plugin.rb +21 -0
- data/plugins/commands/login/plugin.rb +20 -0
- data/plugins/commands/package/command.rb +104 -0
- data/plugins/commands/package/plugin.rb +21 -0
- data/plugins/commands/plugin/action/expunge_plugins.rb +77 -0
- data/plugins/commands/plugin/action/install_gem.rb +80 -0
- data/plugins/commands/plugin/action/license_plugin.rb +48 -0
- data/plugins/commands/plugin/action/list_plugins.rb +79 -0
- data/plugins/commands/plugin/action/plugin_exists_check.rb +28 -0
- data/plugins/commands/plugin/action/repair_plugins.rb +67 -0
- data/plugins/commands/plugin/action/uninstall_plugin.rb +28 -0
- data/plugins/commands/plugin/action/update_gems.rb +52 -0
- data/plugins/commands/plugin/action.rb +82 -0
- data/plugins/commands/plugin/command/base.rb +22 -0
- data/plugins/commands/plugin/command/expunge.rb +95 -0
- data/plugins/commands/plugin/command/install.rb +90 -0
- data/plugins/commands/plugin/command/license.rb +34 -0
- data/plugins/commands/plugin/command/list.rb +34 -0
- data/plugins/commands/plugin/command/mixin_install_opts.rb +34 -0
- data/plugins/commands/plugin/command/repair.rb +41 -0
- data/plugins/commands/plugin/command/root.rb +98 -0
- data/plugins/commands/plugin/command/uninstall.rb +38 -0
- data/plugins/commands/plugin/command/update.rb +42 -0
- data/plugins/commands/plugin/gem_helper.rb +89 -0
- data/plugins/commands/plugin/plugin.rb +23 -0
- data/plugins/commands/port/command.rb +91 -0
- data/plugins/commands/port/locales/en.yml +23 -0
- data/plugins/commands/port/plugin.rb +30 -0
- data/plugins/commands/powershell/command.rb +132 -0
- data/plugins/commands/powershell/errors.rb +29 -0
- data/plugins/commands/powershell/plugin.rb +34 -0
- data/plugins/commands/powershell/scripts/enable_psremoting.ps1 +63 -0
- data/plugins/commands/powershell/scripts/reset_trustedhosts.ps1 +15 -0
- data/plugins/commands/provider/command.rb +77 -0
- data/plugins/commands/provider/plugin.rb +21 -0
- data/plugins/commands/provision/command.rb +41 -0
- data/plugins/commands/provision/plugin.rb +21 -0
- data/plugins/commands/push/command.rb +78 -0
- data/plugins/commands/push/plugin.rb +20 -0
- data/plugins/commands/rdp/command.rb +114 -0
- data/plugins/commands/rdp/config.rb +29 -0
- data/plugins/commands/rdp/errors.rb +21 -0
- data/plugins/commands/rdp/plugin.rb +39 -0
- data/plugins/commands/reload/command.rb +67 -0
- data/plugins/commands/reload/plugin.rb +21 -0
- data/plugins/commands/resume/command.rb +46 -0
- data/plugins/commands/resume/plugin.rb +20 -0
- data/plugins/commands/snapshot/command/delete.rb +50 -0
- data/plugins/commands/snapshot/command/list.rb +50 -0
- data/plugins/commands/snapshot/command/pop.rb +52 -0
- data/plugins/commands/snapshot/command/push.rb +36 -0
- data/plugins/commands/snapshot/command/push_shared.rb +58 -0
- data/plugins/commands/snapshot/command/restore.rb +67 -0
- data/plugins/commands/snapshot/command/root.rb +95 -0
- data/plugins/commands/snapshot/command/save.rb +75 -0
- data/plugins/commands/snapshot/plugin.rb +18 -0
- data/plugins/commands/ssh/command.rb +80 -0
- data/plugins/commands/ssh/plugin.rb +20 -0
- data/plugins/commands/ssh_config/command.rb +78 -0
- data/plugins/commands/ssh_config/plugin.rb +21 -0
- data/plugins/commands/status/command.rb +59 -0
- data/plugins/commands/status/plugin.rb +21 -0
- data/plugins/commands/suspend/command.rb +49 -0
- data/plugins/commands/suspend/plugin.rb +21 -0
- data/plugins/commands/up/command.rb +194 -0
- data/plugins/commands/up/middleware/store_box_metadata.rb +40 -0
- data/plugins/commands/up/plugin.rb +25 -0
- data/plugins/commands/up/start_mixins.rb +58 -0
- data/plugins/commands/upload/command.rb +239 -0
- data/plugins/commands/upload/plugin.rb +20 -0
- data/plugins/commands/validate/command.rb +107 -0
- data/plugins/commands/validate/plugin.rb +20 -0
- data/plugins/commands/version/command.rb +60 -0
- data/plugins/commands/version/plugin.rb +21 -0
- data/plugins/commands/winrm/command.rb +71 -0
- data/plugins/commands/winrm/plugin.rb +20 -0
- data/plugins/commands/winrm_config/command.rb +129 -0
- data/plugins/commands/winrm_config/plugin.rb +20 -0
- data/plugins/communicators/ssh/communicator.rb +898 -0
- data/plugins/communicators/ssh/plugin.rb +22 -0
- data/plugins/communicators/winrm/command_filter.rb +49 -0
- data/plugins/communicators/winrm/command_filters/cat.rb +26 -0
- data/plugins/communicators/winrm/command_filters/chmod.rb +20 -0
- data/plugins/communicators/winrm/command_filters/chown.rb +20 -0
- data/plugins/communicators/winrm/command_filters/grep.rb +26 -0
- data/plugins/communicators/winrm/command_filters/mkdir.rb +30 -0
- data/plugins/communicators/winrm/command_filters/rm.rb +50 -0
- data/plugins/communicators/winrm/command_filters/test.rb +68 -0
- data/plugins/communicators/winrm/command_filters/uname.rb +30 -0
- data/plugins/communicators/winrm/command_filters/which.rb +27 -0
- data/plugins/communicators/winrm/communicator.rb +230 -0
- data/plugins/communicators/winrm/config.rb +76 -0
- data/plugins/communicators/winrm/errors.rb +72 -0
- data/plugins/communicators/winrm/helper.rb +91 -0
- data/plugins/communicators/winrm/plugin.rb +69 -0
- data/plugins/communicators/winrm/shell.rb +267 -0
- data/plugins/communicators/winssh/communicator.rb +252 -0
- data/plugins/communicators/winssh/config.rb +37 -0
- data/plugins/communicators/winssh/plugin.rb +24 -0
- data/plugins/guests/alma/cap/flavor.rb +26 -0
- data/plugins/guests/alma/guest.rb +13 -0
- data/plugins/guests/alma/plugin.rb +23 -0
- data/plugins/guests/alpine/cap/change_host_name.rb +85 -0
- data/plugins/guests/alpine/cap/configure_networks.rb +67 -0
- data/plugins/guests/alpine/cap/halt.rb +24 -0
- data/plugins/guests/alpine/cap/nfs_client.rb +17 -0
- data/plugins/guests/alpine/cap/rsync.rb +20 -0
- data/plugins/guests/alpine/cap/smb.rb +16 -0
- data/plugins/guests/alpine/guest.rb +14 -0
- data/plugins/guests/alpine/plugin.rb +69 -0
- data/plugins/guests/alt/cap/change_host_name.rb +55 -0
- data/plugins/guests/alt/cap/configure_networks.rb +132 -0
- data/plugins/guests/alt/cap/flavor.rb +66 -0
- data/plugins/guests/alt/cap/network_scripts_dir.rb +14 -0
- data/plugins/guests/alt/cap/rsync.rb +16 -0
- data/plugins/guests/alt/guest.rb +12 -0
- data/plugins/guests/alt/plugin.rb +43 -0
- data/plugins/guests/amazon/cap/configure_networks.rb +26 -0
- data/plugins/guests/amazon/cap/flavor.rb +17 -0
- data/plugins/guests/amazon/guest.rb +12 -0
- data/plugins/guests/amazon/plugin.rb +28 -0
- data/plugins/guests/arch/cap/change_host_name.rb +18 -0
- data/plugins/guests/arch/cap/configure_networks.rb +81 -0
- data/plugins/guests/arch/cap/nfs.rb +36 -0
- data/plugins/guests/arch/cap/rsync.rb +19 -0
- data/plugins/guests/arch/cap/smb.rb +20 -0
- data/plugins/guests/arch/guest.rb +14 -0
- data/plugins/guests/arch/plugin.rb +53 -0
- data/plugins/guests/atomic/cap/change_host_name.rb +18 -0
- data/plugins/guests/atomic/cap/docker.rb +14 -0
- data/plugins/guests/atomic/guest.rb +14 -0
- data/plugins/guests/atomic/plugin.rb +28 -0
- data/plugins/guests/bsd/cap/file_system.rb +80 -0
- data/plugins/guests/bsd/cap/halt.rb +19 -0
- data/plugins/guests/bsd/cap/mount_virtualbox_shared_folder.rb +19 -0
- data/plugins/guests/bsd/cap/nfs.rb +50 -0
- data/plugins/guests/bsd/cap/public_key.rb +69 -0
- data/plugins/guests/bsd/guest.rb +12 -0
- data/plugins/guests/bsd/plugin.rb +58 -0
- data/plugins/guests/centos/cap/flavor.rb +32 -0
- data/plugins/guests/centos/guest.rb +14 -0
- data/plugins/guests/centos/plugin.rb +23 -0
- data/plugins/guests/coreos/cap/change_host_name.rb +41 -0
- data/plugins/guests/coreos/cap/configure_networks.rb +138 -0
- data/plugins/guests/coreos/cap/docker.rb +14 -0
- data/plugins/guests/coreos/guest.rb +14 -0
- data/plugins/guests/coreos/plugin.rb +33 -0
- data/plugins/guests/darwin/cap/change_host_name.rb +43 -0
- data/plugins/guests/darwin/cap/choose_addressable_ip_addr.rb +23 -0
- data/plugins/guests/darwin/cap/configure_networks.rb +126 -0
- data/plugins/guests/darwin/cap/darwin_version.rb +43 -0
- data/plugins/guests/darwin/cap/halt.rb +21 -0
- data/plugins/guests/darwin/cap/mount_smb_shared_folder.rb +46 -0
- data/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb +135 -0
- data/plugins/guests/darwin/cap/rsync.rb +14 -0
- data/plugins/guests/darwin/cap/shell_expand_guest_path.rb +30 -0
- data/plugins/guests/darwin/cap/verify_vmware_hgfs.rb +15 -0
- data/plugins/guests/darwin/guest.rb +18 -0
- data/plugins/guests/darwin/plugin.rb +93 -0
- data/plugins/guests/debian/cap/change_host_name.rb +110 -0
- data/plugins/guests/debian/cap/configure_networks.rb +205 -0
- data/plugins/guests/debian/cap/nfs.rb +19 -0
- data/plugins/guests/debian/cap/rsync.rb +18 -0
- data/plugins/guests/debian/cap/smb.rb +20 -0
- data/plugins/guests/debian/guest.rb +13 -0
- data/plugins/guests/debian/plugin.rb +43 -0
- data/plugins/guests/dragonflybsd/guest.rb +12 -0
- data/plugins/guests/dragonflybsd/plugin.rb +18 -0
- data/plugins/guests/elementary/guest.rb +13 -0
- data/plugins/guests/elementary/plugin.rb +18 -0
- data/plugins/guests/esxi/cap/change_host_name.rb +16 -0
- data/plugins/guests/esxi/cap/configure_networks.rb +41 -0
- data/plugins/guests/esxi/cap/halt.rb +19 -0
- data/plugins/guests/esxi/cap/mount_nfs_folder.rb +43 -0
- data/plugins/guests/esxi/cap/public_key.rb +68 -0
- data/plugins/guests/esxi/guest.rb +14 -0
- data/plugins/guests/esxi/plugin.rb +49 -0
- data/plugins/guests/fedora/cap/flavor.rb +26 -0
- data/plugins/guests/fedora/guest.rb +14 -0
- data/plugins/guests/fedora/plugin.rb +23 -0
- data/plugins/guests/freebsd/cap/change_host_name.rb +34 -0
- data/plugins/guests/freebsd/cap/configure_networks.rb +70 -0
- data/plugins/guests/freebsd/cap/mount_virtualbox_shared_folder.rb +79 -0
- data/plugins/guests/freebsd/cap/rsync.rb +18 -0
- data/plugins/guests/freebsd/cap/shell_expand_guest_path.rb +31 -0
- data/plugins/guests/freebsd/guest.rb +17 -0
- data/plugins/guests/freebsd/plugin.rb +68 -0
- data/plugins/guests/funtoo/cap/configure_networks.rb +50 -0
- data/plugins/guests/funtoo/guest.rb +12 -0
- data/plugins/guests/funtoo/plugin.rb +23 -0
- data/plugins/guests/gentoo/cap/change_host_name.rb +27 -0
- data/plugins/guests/gentoo/cap/configure_networks.rb +92 -0
- data/plugins/guests/gentoo/guest.rb +12 -0
- data/plugins/guests/gentoo/plugin.rb +28 -0
- data/plugins/guests/haiku/cap/change_host_name.rb +36 -0
- data/plugins/guests/haiku/cap/halt.rb +19 -0
- data/plugins/guests/haiku/cap/insert_public_key.rb +24 -0
- data/plugins/guests/haiku/cap/remove_public_key.rb +24 -0
- data/plugins/guests/haiku/cap/rsync.rb +22 -0
- data/plugins/guests/haiku/guest.rb +14 -0
- data/plugins/guests/haiku/plugin.rb +53 -0
- data/plugins/guests/kali/guest.rb +13 -0
- data/plugins/guests/kali/plugin.rb +18 -0
- data/plugins/guests/linux/cap/change_host_name.rb +49 -0
- data/plugins/guests/linux/cap/choose_addressable_ip_addr.rb +22 -0
- data/plugins/guests/linux/cap/file_system.rb +82 -0
- data/plugins/guests/linux/cap/halt.rb +27 -0
- data/plugins/guests/linux/cap/mount_smb_shared_folder.rb +95 -0
- data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +78 -0
- data/plugins/guests/linux/cap/network_interfaces.rb +89 -0
- data/plugins/guests/linux/cap/nfs.rb +51 -0
- data/plugins/guests/linux/cap/persist_mount_shared_folder.rb +77 -0
- data/plugins/guests/linux/cap/port.rb +14 -0
- data/plugins/guests/linux/cap/public_key.rb +65 -0
- data/plugins/guests/linux/cap/read_ip_address.rb +28 -0
- data/plugins/guests/linux/cap/reboot.rb +74 -0
- data/plugins/guests/linux/cap/rsync.rb +14 -0
- data/plugins/guests/linux/cap/shell_expand_guest_path.rb +35 -0
- data/plugins/guests/linux/guest.rb +26 -0
- data/plugins/guests/linux/plugin.rb +139 -0
- data/plugins/guests/mint/guest.rb +13 -0
- data/plugins/guests/mint/plugin.rb +18 -0
- data/plugins/guests/netbsd/cap/change_host_name.rb +20 -0
- data/plugins/guests/netbsd/cap/configure_networks.rb +56 -0
- data/plugins/guests/netbsd/cap/rsync.rb +23 -0
- data/plugins/guests/netbsd/cap/shell_expand_guest_path.rb +30 -0
- data/plugins/guests/netbsd/guest.rb +14 -0
- data/plugins/guests/netbsd/plugin.rb +58 -0
- data/plugins/guests/nixos/cap/change_host_name.rb +47 -0
- data/plugins/guests/nixos/cap/configure_networks.rb +135 -0
- data/plugins/guests/nixos/cap/nfs_client.rb +14 -0
- data/plugins/guests/nixos/guest.rb +20 -0
- data/plugins/guests/nixos/plugin.rb +33 -0
- data/plugins/guests/omnios/cap/change_host_name.rb +23 -0
- data/plugins/guests/omnios/cap/mount_nfs_folder.rb +24 -0
- data/plugins/guests/omnios/cap/rsync.rb +14 -0
- data/plugins/guests/omnios/guest.rb +12 -0
- data/plugins/guests/omnios/plugin.rb +33 -0
- data/plugins/guests/openbsd/cap/change_host_name.rb +35 -0
- data/plugins/guests/openbsd/cap/configure_networks.rb +49 -0
- data/plugins/guests/openbsd/cap/halt.rb +22 -0
- data/plugins/guests/openbsd/cap/rsync.rb +32 -0
- data/plugins/guests/openbsd/cap/shell_expand_guest_path.rb +30 -0
- data/plugins/guests/openbsd/guest.rb +14 -0
- data/plugins/guests/openbsd/plugin.rb +63 -0
- data/plugins/guests/openwrt/cap/change_host_name.rb +22 -0
- data/plugins/guests/openwrt/cap/halt.rb +19 -0
- data/plugins/guests/openwrt/cap/insert_public_key.rb +23 -0
- data/plugins/guests/openwrt/cap/remove_public_key.rb +25 -0
- data/plugins/guests/openwrt/cap/rsync.rb +38 -0
- data/plugins/guests/openwrt/guest.rb +26 -0
- data/plugins/guests/openwrt/plugin.rb +64 -0
- data/plugins/guests/photon/cap/change_host_name.rb +22 -0
- data/plugins/guests/photon/cap/configure_networks.rb +33 -0
- data/plugins/guests/photon/cap/docker.rb +14 -0
- data/plugins/guests/photon/guest.rb +12 -0
- data/plugins/guests/photon/plugin.rb +33 -0
- data/plugins/guests/pld/cap/change_host_name.rb +26 -0
- data/plugins/guests/pld/cap/flavor.rb +14 -0
- data/plugins/guests/pld/cap/network_scripts_dir.rb +14 -0
- data/plugins/guests/pld/guest.rb +12 -0
- data/plugins/guests/pld/plugin.rb +33 -0
- data/plugins/guests/redhat/cap/change_host_name.rb +59 -0
- data/plugins/guests/redhat/cap/configure_networks.rb +113 -0
- data/plugins/guests/redhat/cap/flavor.rb +32 -0
- data/plugins/guests/redhat/cap/network_scripts_dir.rb +18 -0
- data/plugins/guests/redhat/cap/nfs_client.rb +33 -0
- data/plugins/guests/redhat/cap/rsync.rb +20 -0
- data/plugins/guests/redhat/cap/smb.rb +23 -0
- data/plugins/guests/redhat/guest.rb +12 -0
- data/plugins/guests/redhat/plugin.rb +53 -0
- data/plugins/guests/rocky/cap/flavor.rb +26 -0
- data/plugins/guests/rocky/guest.rb +13 -0
- data/plugins/guests/rocky/plugin.rb +23 -0
- data/plugins/guests/slackware/cap/change_host_name.rb +24 -0
- data/plugins/guests/slackware/cap/configure_networks.rb +51 -0
- data/plugins/guests/slackware/guest.rb +12 -0
- data/plugins/guests/slackware/plugin.rb +28 -0
- data/plugins/guests/smartos/cap/change_host_name.rb +29 -0
- data/plugins/guests/smartos/cap/configure_networks.rb +30 -0
- data/plugins/guests/smartos/cap/halt.rb +25 -0
- data/plugins/guests/smartos/cap/insert_public_key.rb +31 -0
- data/plugins/guests/smartos/cap/mount_nfs.rb +31 -0
- data/plugins/guests/smartos/cap/remove_public_key.rb +28 -0
- data/plugins/guests/smartos/cap/rsync.rb +36 -0
- data/plugins/guests/smartos/config.rb +18 -0
- data/plugins/guests/smartos/guest.rb +14 -0
- data/plugins/guests/smartos/plugin.rb +74 -0
- data/plugins/guests/solaris/cap/change_host_name.rb +20 -0
- data/plugins/guests/solaris/cap/configure_networks.rb +28 -0
- data/plugins/guests/solaris/cap/file_system.rb +80 -0
- data/plugins/guests/solaris/cap/halt.rb +25 -0
- data/plugins/guests/solaris/cap/insert_public_key.rb +25 -0
- data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +44 -0
- data/plugins/guests/solaris/cap/remove_public_key.rb +25 -0
- data/plugins/guests/solaris/cap/rsync.rb +36 -0
- data/plugins/guests/solaris/config.rb +34 -0
- data/plugins/guests/solaris/guest.rb +17 -0
- data/plugins/guests/solaris/plugin.rb +88 -0
- data/plugins/guests/solaris11/cap/change_host_name.rb +26 -0
- data/plugins/guests/solaris11/cap/configure_networks.rb +37 -0
- data/plugins/guests/solaris11/config.rb +37 -0
- data/plugins/guests/solaris11/guest.rb +22 -0
- data/plugins/guests/solaris11/plugin.rb +42 -0
- data/plugins/guests/suse/cap/change_host_name.rb +48 -0
- data/plugins/guests/suse/cap/configure_networks.rb +53 -0
- data/plugins/guests/suse/cap/halt.rb +23 -0
- data/plugins/guests/suse/cap/network_scripts_dir.rb +14 -0
- data/plugins/guests/suse/cap/nfs_client.rb +18 -0
- data/plugins/guests/suse/cap/rsync.rb +18 -0
- data/plugins/guests/suse/guest.rb +12 -0
- data/plugins/guests/suse/plugin.rb +53 -0
- data/plugins/guests/tinycore/cap/change_host_name.rb +16 -0
- data/plugins/guests/tinycore/cap/configure_networks.rb +29 -0
- data/plugins/guests/tinycore/cap/halt.rb +19 -0
- data/plugins/guests/tinycore/cap/mount_nfs.rb +44 -0
- data/plugins/guests/tinycore/cap/rsync.rb +20 -0
- data/plugins/guests/tinycore/guest.rb +13 -0
- data/plugins/guests/tinycore/plugin.rb +43 -0
- data/plugins/guests/trisquel/guest.rb +12 -0
- data/plugins/guests/trisquel/plugin.rb +18 -0
- data/plugins/guests/ubuntu/guest.rb +13 -0
- data/plugins/guests/ubuntu/plugin.rb +18 -0
- data/plugins/guests/windows/cap/change_host_name.rb +36 -0
- data/plugins/guests/windows/cap/choose_addressable_ip_addr.rb +23 -0
- data/plugins/guests/windows/cap/configure_networks.rb +83 -0
- data/plugins/guests/windows/cap/file_system.rb +68 -0
- data/plugins/guests/windows/cap/halt.rb +19 -0
- data/plugins/guests/windows/cap/mount_shared_folder.rb +60 -0
- data/plugins/guests/windows/cap/public_key.rb +87 -0
- data/plugins/guests/windows/cap/reboot.rb +63 -0
- data/plugins/guests/windows/cap/rsync.rb +29 -0
- data/plugins/guests/windows/config.rb +26 -0
- data/plugins/guests/windows/errors.rb +25 -0
- data/plugins/guests/windows/guest.rb +13 -0
- data/plugins/guests/windows/guest_network.rb +128 -0
- data/plugins/guests/windows/plugin.rb +116 -0
- data/plugins/guests/windows/scripts/mount_volume.ps1.erb +48 -0
- data/plugins/guests/windows/scripts/reboot_detect.ps1 +50 -0
- data/plugins/guests/windows/scripts/set_work_network.ps1 +9 -0
- data/plugins/guests/windows/scripts/winrs_v3_get_adapters.ps1 +14 -0
- data/plugins/hosts/alt/cap/nfs.rb +46 -0
- data/plugins/hosts/alt/host.rb +14 -0
- data/plugins/hosts/alt/plugin.rb +35 -0
- data/plugins/hosts/arch/cap/nfs.rb +22 -0
- data/plugins/hosts/arch/host.rb +14 -0
- data/plugins/hosts/arch/plugin.rb +35 -0
- data/plugins/hosts/bsd/cap/nfs.rb +218 -0
- data/plugins/hosts/bsd/cap/path.rb +14 -0
- data/plugins/hosts/bsd/cap/ssh.rb +19 -0
- data/plugins/hosts/bsd/host.rb +15 -0
- data/plugins/hosts/bsd/plugin.rb +63 -0
- data/plugins/hosts/darwin/cap/configured_ip_addresses.rb +21 -0
- data/plugins/hosts/darwin/cap/fs_iso.rb +52 -0
- data/plugins/hosts/darwin/cap/nfs.rb +14 -0
- data/plugins/hosts/darwin/cap/path.rb +66 -0
- data/plugins/hosts/darwin/cap/provider_install_virtualbox.rb +64 -0
- data/plugins/hosts/darwin/cap/rdp.rb +64 -0
- data/plugins/hosts/darwin/cap/smb.rb +128 -0
- data/plugins/hosts/darwin/cap/version.rb +26 -0
- data/plugins/hosts/darwin/host.rb +14 -0
- data/plugins/hosts/darwin/plugin.rb +83 -0
- data/plugins/hosts/darwin/scripts/install_virtualbox.sh +18 -0
- data/plugins/hosts/freebsd/cap/nfs.rb +34 -0
- data/plugins/hosts/freebsd/host.rb +15 -0
- data/plugins/hosts/freebsd/plugin.rb +34 -0
- data/plugins/hosts/gentoo/cap/nfs.rb +42 -0
- data/plugins/hosts/gentoo/host.rb +14 -0
- data/plugins/hosts/gentoo/plugin.rb +31 -0
- data/plugins/hosts/linux/cap/fs_iso.rb +52 -0
- data/plugins/hosts/linux/cap/nfs.rb +296 -0
- data/plugins/hosts/linux/cap/rdp.rb +59 -0
- data/plugins/hosts/linux/cap/ssh.rb +19 -0
- data/plugins/hosts/linux/host.rb +15 -0
- data/plugins/hosts/linux/plugin.rb +70 -0
- data/plugins/hosts/null/host.rb +15 -0
- data/plugins/hosts/null/plugin.rb +18 -0
- data/plugins/hosts/redhat/cap/nfs.rb +58 -0
- data/plugins/hosts/redhat/host.rb +31 -0
- data/plugins/hosts/redhat/plugin.rb +30 -0
- data/plugins/hosts/slackware/cap/nfs.rb +18 -0
- data/plugins/hosts/slackware/host.rb +15 -0
- data/plugins/hosts/slackware/plugin.rb +30 -0
- data/plugins/hosts/suse/cap/nfs.rb +22 -0
- data/plugins/hosts/suse/host.rb +30 -0
- data/plugins/hosts/suse/plugin.rb +33 -0
- data/plugins/hosts/void/cap/nfs.rb +27 -0
- data/plugins/hosts/void/host.rb +23 -0
- data/plugins/hosts/void/plugin.rb +33 -0
- data/plugins/hosts/windows/cap/configured_ip_addresses.rb +32 -0
- data/plugins/hosts/windows/cap/fs_iso.rb +51 -0
- data/plugins/hosts/windows/cap/nfs.rb +14 -0
- data/plugins/hosts/windows/cap/provider_install_virtualbox.rb +65 -0
- data/plugins/hosts/windows/cap/ps.rb +50 -0
- data/plugins/hosts/windows/cap/rdp.rb +33 -0
- data/plugins/hosts/windows/cap/smb.rb +203 -0
- data/plugins/hosts/windows/cap/ssh.rb +29 -0
- data/plugins/hosts/windows/host.rb +26 -0
- data/plugins/hosts/windows/plugin.rb +83 -0
- data/plugins/hosts/windows/scripts/check_credentials.ps1 +37 -0
- data/plugins/hosts/windows/scripts/host_info.ps1 +24 -0
- data/plugins/hosts/windows/scripts/install_virtualbox.ps1 +40 -0
- data/plugins/hosts/windows/scripts/set_share.ps1 +40 -0
- data/plugins/hosts/windows/scripts/set_ssh_key_permissions.ps1 +20 -0
- data/plugins/hosts/windows/scripts/unset_share.ps1 +13 -0
- data/plugins/hosts/windows/scripts/utils/VagrantSSH/VagrantSSH.psm1 +29 -0
- data/plugins/kernel_v1/config/nfs.rb +23 -0
- data/plugins/kernel_v1/config/package.rb +20 -0
- data/plugins/kernel_v1/config/ssh.rb +50 -0
- data/plugins/kernel_v1/config/vagrant.rb +34 -0
- data/plugins/kernel_v1/config/vm.rb +191 -0
- data/plugins/kernel_v1/plugin.rb +47 -0
- data/plugins/kernel_v2/config/cloud_init.rb +136 -0
- data/plugins/kernel_v2/config/disk.rb +224 -0
- data/plugins/kernel_v2/config/package.rb +24 -0
- data/plugins/kernel_v2/config/push.rb +155 -0
- data/plugins/kernel_v2/config/ssh.rb +93 -0
- data/plugins/kernel_v2/config/ssh_connect.rb +194 -0
- data/plugins/kernel_v2/config/trigger.rb +214 -0
- data/plugins/kernel_v2/config/vagrant.rb +99 -0
- data/plugins/kernel_v2/config/vm.rb +1062 -0
- data/plugins/kernel_v2/config/vm_provisioner.rb +202 -0
- data/plugins/kernel_v2/config/vm_subvm.rb +33 -0
- data/plugins/kernel_v2/config/vm_trigger.rb +297 -0
- data/plugins/kernel_v2/plugin.rb +71 -0
- data/plugins/providers/docker/action/build.rb +99 -0
- data/plugins/providers/docker/action/compare_synced_folders.rb +65 -0
- data/plugins/providers/docker/action/connect_networks.rb +80 -0
- data/plugins/providers/docker/action/create.rb +162 -0
- data/plugins/providers/docker/action/destroy.rb +34 -0
- data/plugins/providers/docker/action/destroy_build_image.rb +51 -0
- data/plugins/providers/docker/action/destroy_network.rb +53 -0
- data/plugins/providers/docker/action/forwarded_ports.rb +36 -0
- data/plugins/providers/docker/action/has_ssh.rb +21 -0
- data/plugins/providers/docker/action/host_machine.rb +75 -0
- data/plugins/providers/docker/action/host_machine_build_dir.rb +48 -0
- data/plugins/providers/docker/action/host_machine_port_checker.rb +34 -0
- data/plugins/providers/docker/action/host_machine_port_warning.rb +40 -0
- data/plugins/providers/docker/action/host_machine_required.rb +20 -0
- data/plugins/providers/docker/action/host_machine_sync_folders.rb +175 -0
- data/plugins/providers/docker/action/host_machine_sync_folders_disable.rb +91 -0
- data/plugins/providers/docker/action/init_state.rb +23 -0
- data/plugins/providers/docker/action/is_build.rb +19 -0
- data/plugins/providers/docker/action/is_host_machine_created.rb +32 -0
- data/plugins/providers/docker/action/login.rb +51 -0
- data/plugins/providers/docker/action/prepare_forwarded_port_collision_params.rb +64 -0
- data/plugins/providers/docker/action/prepare_networks.rb +372 -0
- data/plugins/providers/docker/action/prepare_nfs_settings.rb +60 -0
- data/plugins/providers/docker/action/prepare_nfs_valid_ids.rb +22 -0
- data/plugins/providers/docker/action/prepare_ssh.rb +48 -0
- data/plugins/providers/docker/action/pull.rb +30 -0
- data/plugins/providers/docker/action/start.rb +24 -0
- data/plugins/providers/docker/action/stop.rb +24 -0
- data/plugins/providers/docker/action/wait_for_running.rb +70 -0
- data/plugins/providers/docker/action.rb +319 -0
- data/plugins/providers/docker/cap/has_communicator.rb +14 -0
- data/plugins/providers/docker/cap/proxy_machine.rb +15 -0
- data/plugins/providers/docker/cap/public_address.rb +26 -0
- data/plugins/providers/docker/command/exec.rb +112 -0
- data/plugins/providers/docker/command/logs.rb +111 -0
- data/plugins/providers/docker/command/run.rb +76 -0
- data/plugins/providers/docker/communicator.rb +199 -0
- data/plugins/providers/docker/config.rb +362 -0
- data/plugins/providers/docker/driver/compose.rb +315 -0
- data/plugins/providers/docker/driver.rb +416 -0
- data/plugins/providers/docker/errors.rb +108 -0
- data/plugins/providers/docker/executor/local.rb +48 -0
- data/plugins/providers/docker/executor/vagrant.rb +88 -0
- data/plugins/providers/docker/hostmachine/Vagrantfile +3 -0
- data/plugins/providers/docker/plugin.rb +89 -0
- data/plugins/providers/docker/provider.rb +215 -0
- data/plugins/providers/docker/synced_folder.rb +35 -0
- data/plugins/providers/hyperv/action/check_access.rb +27 -0
- data/plugins/providers/hyperv/action/check_enabled.rb +25 -0
- data/plugins/providers/hyperv/action/configure.rb +115 -0
- data/plugins/providers/hyperv/action/delete_vm.rb +28 -0
- data/plugins/providers/hyperv/action/export.rb +45 -0
- data/plugins/providers/hyperv/action/import.rb +86 -0
- data/plugins/providers/hyperv/action/is_windows.rb +19 -0
- data/plugins/providers/hyperv/action/message_will_not_destroy.rb +20 -0
- data/plugins/providers/hyperv/action/net_set_mac.rb +23 -0
- data/plugins/providers/hyperv/action/net_set_vlan.rb +23 -0
- data/plugins/providers/hyperv/action/package.rb +19 -0
- data/plugins/providers/hyperv/action/package_metadata_json.rb +37 -0
- data/plugins/providers/hyperv/action/package_setup_files.rb +19 -0
- data/plugins/providers/hyperv/action/package_setup_folders.rb +21 -0
- data/plugins/providers/hyperv/action/package_vagrantfile.rb +37 -0
- data/plugins/providers/hyperv/action/read_guest_ip.rb +45 -0
- data/plugins/providers/hyperv/action/read_state.rb +33 -0
- data/plugins/providers/hyperv/action/resume_vm.rb +20 -0
- data/plugins/providers/hyperv/action/set_name.rb +46 -0
- data/plugins/providers/hyperv/action/snapshot_delete.rb +30 -0
- data/plugins/providers/hyperv/action/snapshot_restore.rb +26 -0
- data/plugins/providers/hyperv/action/snapshot_save.rb +30 -0
- data/plugins/providers/hyperv/action/start_instance.rb +20 -0
- data/plugins/providers/hyperv/action/stop_instance.rb +20 -0
- data/plugins/providers/hyperv/action/suspend_vm.rb +20 -0
- data/plugins/providers/hyperv/action/wait_for_ip_address.rb +62 -0
- data/plugins/providers/hyperv/action.rb +326 -0
- data/plugins/providers/hyperv/cap/cleanup_disks.rb +92 -0
- data/plugins/providers/hyperv/cap/configure_disks.rb +248 -0
- data/plugins/providers/hyperv/cap/public_address.rb +18 -0
- data/plugins/providers/hyperv/cap/snapshot_list.rb +14 -0
- data/plugins/providers/hyperv/cap/validate_disk_ext.rb +37 -0
- data/plugins/providers/hyperv/config.rb +148 -0
- data/plugins/providers/hyperv/driver.rb +368 -0
- data/plugins/providers/hyperv/errors.rb +49 -0
- data/plugins/providers/hyperv/plugin.rb +74 -0
- data/plugins/providers/hyperv/provider.rb +116 -0
- data/plugins/providers/hyperv/scripts/add_dvd.ps1 +18 -0
- data/plugins/providers/hyperv/scripts/attach_disk_drive.ps1 +31 -0
- data/plugins/providers/hyperv/scripts/check_hyperv.ps1 +11 -0
- data/plugins/providers/hyperv/scripts/check_hyperv_access.ps1 +17 -0
- data/plugins/providers/hyperv/scripts/clone_vhd.ps1 +21 -0
- data/plugins/providers/hyperv/scripts/configure_vm.ps1 +130 -0
- data/plugins/providers/hyperv/scripts/create_snapshot.ps1 +27 -0
- data/plugins/providers/hyperv/scripts/delete_snapshot.ps1 +19 -0
- data/plugins/providers/hyperv/scripts/delete_vm.ps1 +22 -0
- data/plugins/providers/hyperv/scripts/dismount_vhd.ps1 +16 -0
- data/plugins/providers/hyperv/scripts/export_vm.ps1 +32 -0
- data/plugins/providers/hyperv/scripts/file_sync.ps1 +123 -0
- data/plugins/providers/hyperv/scripts/get_network_config.ps1 +68 -0
- data/plugins/providers/hyperv/scripts/get_network_mac.ps1 +35 -0
- data/plugins/providers/hyperv/scripts/get_scsi_controller.ps1 +19 -0
- data/plugins/providers/hyperv/scripts/get_switches.ps1 +13 -0
- data/plugins/providers/hyperv/scripts/get_vhd.ps1 +19 -0
- data/plugins/providers/hyperv/scripts/get_vm_status.ps1 +52 -0
- data/plugins/providers/hyperv/scripts/has_vmcx_support.ps1 +12 -0
- data/plugins/providers/hyperv/scripts/import_vm.ps1 +40 -0
- data/plugins/providers/hyperv/scripts/list_hdds.ps1 +20 -0
- data/plugins/providers/hyperv/scripts/list_snapshots.ps1 +22 -0
- data/plugins/providers/hyperv/scripts/new_vhd.ps1 +34 -0
- data/plugins/providers/hyperv/scripts/remove_disk_drive.ps1 +28 -0
- data/plugins/providers/hyperv/scripts/remove_dvd.ps1 +21 -0
- data/plugins/providers/hyperv/scripts/resize_disk_drive.ps1 +21 -0
- data/plugins/providers/hyperv/scripts/restore_snapshot.ps1 +20 -0
- data/plugins/providers/hyperv/scripts/resume_vm.ps1 +19 -0
- data/plugins/providers/hyperv/scripts/set_enhanced_session_transport_type.ps1 +36 -0
- data/plugins/providers/hyperv/scripts/set_name.ps1 +27 -0
- data/plugins/providers/hyperv/scripts/set_network_mac.ps1 +21 -0
- data/plugins/providers/hyperv/scripts/set_network_vlan.ps1 +19 -0
- data/plugins/providers/hyperv/scripts/set_vm_integration_services.ps1 +30 -0
- data/plugins/providers/hyperv/scripts/start_vm.ps1 +29 -0
- data/plugins/providers/hyperv/scripts/stop_vm.ps1 +20 -0
- data/plugins/providers/hyperv/scripts/suspend_vm.ps1 +19 -0
- data/plugins/providers/hyperv/scripts/utils/VagrantMessages/VagrantMessages.psm1 +27 -0
- data/plugins/providers/hyperv/scripts/utils/VagrantVM/VagrantVM.psm1 +776 -0
- data/plugins/providers/virtualbox/action/boot.rb +26 -0
- data/plugins/providers/virtualbox/action/check_accessible.rb +26 -0
- data/plugins/providers/virtualbox/action/check_created.rb +24 -0
- data/plugins/providers/virtualbox/action/check_guest_additions.rb +58 -0
- data/plugins/providers/virtualbox/action/check_running.rb +24 -0
- data/plugins/providers/virtualbox/action/check_virtualbox.rb +28 -0
- data/plugins/providers/virtualbox/action/clean_machine_folder.rb +55 -0
- data/plugins/providers/virtualbox/action/clear_forwarded_ports.rb +23 -0
- data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +34 -0
- data/plugins/providers/virtualbox/action/created.rb +23 -0
- data/plugins/providers/virtualbox/action/customize.rb +48 -0
- data/plugins/providers/virtualbox/action/destroy.rb +22 -0
- data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +26 -0
- data/plugins/providers/virtualbox/action/discard_state.rb +23 -0
- data/plugins/providers/virtualbox/action/export.rb +54 -0
- data/plugins/providers/virtualbox/action/forced_halt.rb +28 -0
- data/plugins/providers/virtualbox/action/forward_ports.rb +92 -0
- data/plugins/providers/virtualbox/action/import.rb +110 -0
- data/plugins/providers/virtualbox/action/import_master.rb +83 -0
- data/plugins/providers/virtualbox/action/is_paused.rb +23 -0
- data/plugins/providers/virtualbox/action/is_running.rb +23 -0
- data/plugins/providers/virtualbox/action/is_saved.rb +23 -0
- data/plugins/providers/virtualbox/action/match_mac_address.rb +30 -0
- data/plugins/providers/virtualbox/action/message_already_running.rb +19 -0
- data/plugins/providers/virtualbox/action/message_not_created.rb +19 -0
- data/plugins/providers/virtualbox/action/message_not_running.rb +19 -0
- data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +20 -0
- data/plugins/providers/virtualbox/action/network.rb +638 -0
- data/plugins/providers/virtualbox/action/network_fix_ipv6.rb +87 -0
- data/plugins/providers/virtualbox/action/package.rb +19 -0
- data/plugins/providers/virtualbox/action/package_setup_files.rb +19 -0
- data/plugins/providers/virtualbox/action/package_setup_folders.rb +21 -0
- data/plugins/providers/virtualbox/action/package_vagrantfile.rb +36 -0
- data/plugins/providers/virtualbox/action/prepare_clone_snapshot.rb +69 -0
- data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +38 -0
- data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +162 -0
- data/plugins/providers/virtualbox/action/prepare_nfs_valid_ids.rb +20 -0
- data/plugins/providers/virtualbox/action/resume.rb +28 -0
- data/plugins/providers/virtualbox/action/sane_defaults.rb +92 -0
- data/plugins/providers/virtualbox/action/set_default_nic_type.rb +72 -0
- data/plugins/providers/virtualbox/action/set_name.rb +58 -0
- data/plugins/providers/virtualbox/action/setup_package_files.rb +20 -0
- data/plugins/providers/virtualbox/action/snapshot_delete.rb +37 -0
- data/plugins/providers/virtualbox/action/snapshot_restore.rb +33 -0
- data/plugins/providers/virtualbox/action/snapshot_save.rb +28 -0
- data/plugins/providers/virtualbox/action/suspend.rb +23 -0
- data/plugins/providers/virtualbox/action.rb +433 -0
- data/plugins/providers/virtualbox/cap/cleanup_disks.rb +86 -0
- data/plugins/providers/virtualbox/cap/configure_disks.rb +441 -0
- data/plugins/providers/virtualbox/cap/mount_options.rb +43 -0
- data/plugins/providers/virtualbox/cap/public_address.rb +18 -0
- data/plugins/providers/virtualbox/cap/validate_disk_ext.rb +37 -0
- data/plugins/providers/virtualbox/cap.rb +40 -0
- data/plugins/providers/virtualbox/config.rb +211 -0
- data/plugins/providers/virtualbox/driver/base.rb +530 -0
- data/plugins/providers/virtualbox/driver/meta.rb +212 -0
- data/plugins/providers/virtualbox/driver/version_4_0.rb +574 -0
- data/plugins/providers/virtualbox/driver/version_4_1.rb +699 -0
- data/plugins/providers/virtualbox/driver/version_4_2.rb +713 -0
- data/plugins/providers/virtualbox/driver/version_4_3.rb +757 -0
- data/plugins/providers/virtualbox/driver/version_5_0.rb +1022 -0
- data/plugins/providers/virtualbox/driver/version_5_1.rb +19 -0
- data/plugins/providers/virtualbox/driver/version_5_2.rb +19 -0
- data/plugins/providers/virtualbox/driver/version_6_0.rb +105 -0
- data/plugins/providers/virtualbox/driver/version_6_1.rb +42 -0
- data/plugins/providers/virtualbox/driver/version_7_0.rb +306 -0
- data/plugins/providers/virtualbox/driver/version_7_1.rb +19 -0
- data/plugins/providers/virtualbox/model/forwarded_port.rb +73 -0
- data/plugins/providers/virtualbox/model/storage_controller.rb +138 -0
- data/plugins/providers/virtualbox/model/storage_controller_array.rb +101 -0
- data/plugins/providers/virtualbox/plugin.rb +120 -0
- data/plugins/providers/virtualbox/provider.rb +133 -0
- data/plugins/providers/virtualbox/synced_folder.rb +153 -0
- data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +40 -0
- data/plugins/provisioners/ansible/cap/guest/alpine/ansible_install.rb +47 -0
- data/plugins/provisioners/ansible/cap/guest/arch/ansible_install.rb +44 -0
- data/plugins/provisioners/ansible/cap/guest/debian/ansible_install.rb +56 -0
- data/plugins/provisioners/ansible/cap/guest/facts.rb +27 -0
- data/plugins/provisioners/ansible/cap/guest/fedora/ansible_install.rb +43 -0
- data/plugins/provisioners/ansible/cap/guest/freebsd/ansible_install.rb +26 -0
- data/plugins/provisioners/ansible/cap/guest/pip/pip.rb +49 -0
- data/plugins/provisioners/ansible/cap/guest/posix/ansible_installed.rb +28 -0
- data/plugins/provisioners/ansible/cap/guest/redhat/ansible_install.rb +75 -0
- data/plugins/provisioners/ansible/cap/guest/suse/ansible_install.rb +26 -0
- data/plugins/provisioners/ansible/cap/guest/ubuntu/ansible_install.rb +42 -0
- data/plugins/provisioners/ansible/config/base.rb +157 -0
- data/plugins/provisioners/ansible/config/guest.rb +59 -0
- data/plugins/provisioners/ansible/config/host.rb +66 -0
- data/plugins/provisioners/ansible/constants.rb +17 -0
- data/plugins/provisioners/ansible/errors.rb +43 -0
- data/plugins/provisioners/ansible/helpers.rb +20 -0
- data/plugins/provisioners/ansible/plugin.rb +88 -0
- data/plugins/provisioners/ansible/provisioner/base.rb +405 -0
- data/plugins/provisioners/ansible/provisioner/guest.rb +197 -0
- data/plugins/provisioners/ansible/provisioner/host.rb +352 -0
- data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +24 -0
- data/plugins/provisioners/cfengine/cap/linux/cfengine_installed.rb +17 -0
- data/plugins/provisioners/cfengine/cap/linux/cfengine_needs_bootstrap.rb +37 -0
- data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +37 -0
- data/plugins/provisioners/cfengine/cap/suse/cfengine_install.rb +21 -0
- data/plugins/provisioners/cfengine/config.rb +127 -0
- data/plugins/provisioners/cfengine/plugin.rb +50 -0
- data/plugins/provisioners/cfengine/provisioner.rb +142 -0
- data/plugins/provisioners/chef/cap/debian/chef_install.rb +22 -0
- data/plugins/provisioners/chef/cap/freebsd/chef_install.rb +21 -0
- data/plugins/provisioners/chef/cap/freebsd/chef_installed.rb +27 -0
- data/plugins/provisioners/chef/cap/linux/chef_installed.rb +27 -0
- data/plugins/provisioners/chef/cap/omnios/chef_install.rb +23 -0
- data/plugins/provisioners/chef/cap/omnios/chef_installed.rb +28 -0
- data/plugins/provisioners/chef/cap/redhat/chef_install.rb +27 -0
- data/plugins/provisioners/chef/cap/suse/chef_install.rb +30 -0
- data/plugins/provisioners/chef/cap/windows/chef_install.rb +19 -0
- data/plugins/provisioners/chef/cap/windows/chef_installed.rb +24 -0
- data/plugins/provisioners/chef/command_builder.rb +87 -0
- data/plugins/provisioners/chef/config/base.rb +139 -0
- data/plugins/provisioners/chef/config/base_runner.rb +131 -0
- data/plugins/provisioners/chef/config/chef_apply.rb +53 -0
- data/plugins/provisioners/chef/config/chef_client.rb +77 -0
- data/plugins/provisioners/chef/config/chef_solo.rb +141 -0
- data/plugins/provisioners/chef/config/chef_zero.rb +133 -0
- data/plugins/provisioners/chef/installer.rb +51 -0
- data/plugins/provisioners/chef/omnibus.rb +40 -0
- data/plugins/provisioners/chef/plugin.rb +108 -0
- data/plugins/provisioners/chef/provisioner/base.rb +258 -0
- data/plugins/provisioners/chef/provisioner/chef_apply.rb +74 -0
- data/plugins/provisioners/chef/provisioner/chef_client.rb +179 -0
- data/plugins/provisioners/chef/provisioner/chef_solo.rb +244 -0
- data/plugins/provisioners/chef/provisioner/chef_zero.rb +123 -0
- data/plugins/provisioners/container/client.rb +206 -0
- data/plugins/provisioners/container/config.rb +86 -0
- data/plugins/provisioners/container/installer.rb +16 -0
- data/plugins/provisioners/container/plugin.rb +26 -0
- data/plugins/provisioners/container/provisioner.rb +31 -0
- data/plugins/provisioners/docker/cap/centos/docker_install.rb +44 -0
- data/plugins/provisioners/docker/cap/centos/docker_start_service.rb +27 -0
- data/plugins/provisioners/docker/cap/debian/docker_install.rb +21 -0
- data/plugins/provisioners/docker/cap/debian/docker_start_service.rb +16 -0
- data/plugins/provisioners/docker/cap/fedora/docker_install.rb +30 -0
- data/plugins/provisioners/docker/cap/linux/docker_configure_vagrant_user.rb +23 -0
- data/plugins/provisioners/docker/cap/linux/docker_daemon_running.rb +16 -0
- data/plugins/provisioners/docker/cap/linux/docker_installed.rb +29 -0
- data/plugins/provisioners/docker/cap/windows/docker_daemon_running.rb +16 -0
- data/plugins/provisioners/docker/client.rb +26 -0
- data/plugins/provisioners/docker/config.rb +19 -0
- data/plugins/provisioners/docker/installer.rb +37 -0
- data/plugins/provisioners/docker/plugin.rb +71 -0
- data/plugins/provisioners/docker/provisioner.rb +59 -0
- data/plugins/provisioners/file/config.rb +32 -0
- data/plugins/provisioners/file/plugin.rb +26 -0
- data/plugins/provisioners/file/provisioner.rb +46 -0
- data/plugins/provisioners/podman/cap/centos/podman_install.rb +38 -0
- data/plugins/provisioners/podman/cap/linux/podman_installed.rb +16 -0
- data/plugins/provisioners/podman/cap/redhat/podman_install.rb +29 -0
- data/plugins/provisioners/podman/client.rb +15 -0
- data/plugins/provisioners/podman/config.rb +31 -0
- data/plugins/provisioners/podman/installer.rb +36 -0
- data/plugins/provisioners/podman/plugin.rb +41 -0
- data/plugins/provisioners/podman/provisioner.rb +55 -0
- data/plugins/provisioners/puppet/config/puppet.rb +178 -0
- data/plugins/provisioners/puppet/config/puppet_server.rb +84 -0
- data/plugins/provisioners/puppet/plugin.rb +36 -0
- data/plugins/provisioners/puppet/provisioner/puppet.rb +336 -0
- data/plugins/provisioners/puppet/provisioner/puppet_server.rb +114 -0
- data/plugins/provisioners/salt/bootstrap_downloader.rb +62 -0
- data/plugins/provisioners/salt/config.rb +194 -0
- data/plugins/provisioners/salt/errors.rb +18 -0
- data/plugins/provisioners/salt/plugin.rb +25 -0
- data/plugins/provisioners/salt/provisioner.rb +499 -0
- data/plugins/provisioners/shell/config.rb +146 -0
- data/plugins/provisioners/shell/plugin.rb +26 -0
- data/plugins/provisioners/shell/provisioner.rb +368 -0
- data/plugins/pushes/atlas/config.rb +151 -0
- data/plugins/pushes/atlas/errors.rb +16 -0
- data/plugins/pushes/atlas/locales/en.yml +25 -0
- data/plugins/pushes/atlas/plugin.rb +38 -0
- data/plugins/pushes/atlas/push.rb +87 -0
- data/plugins/pushes/ftp/adapter.rb +147 -0
- data/plugins/pushes/ftp/config.rb +133 -0
- data/plugins/pushes/ftp/errors.rb +16 -0
- data/plugins/pushes/ftp/locales/en.yml +19 -0
- data/plugins/pushes/ftp/plugin.rb +36 -0
- data/plugins/pushes/ftp/push.rb +137 -0
- data/plugins/pushes/heroku/config.rb +77 -0
- data/plugins/pushes/heroku/errors.rb +24 -0
- data/plugins/pushes/heroku/locales/en.yml +33 -0
- data/plugins/pushes/heroku/plugin.rb +36 -0
- data/plugins/pushes/heroku/push.rb +147 -0
- data/plugins/pushes/local-exec/config.rb +80 -0
- data/plugins/pushes/local-exec/errors.rb +16 -0
- data/plugins/pushes/local-exec/locales/en.yml +26 -0
- data/plugins/pushes/local-exec/plugin.rb +36 -0
- data/plugins/pushes/local-exec/push.rb +91 -0
- data/plugins/pushes/noop/config.rb +19 -0
- data/plugins/pushes/noop/plugin.rb +25 -0
- data/plugins/pushes/noop/push.rb +12 -0
- data/plugins/synced_folders/nfs/action_cleanup.rb +32 -0
- data/plugins/synced_folders/nfs/config.rb +35 -0
- data/plugins/synced_folders/nfs/plugin.rb +49 -0
- data/plugins/synced_folders/nfs/synced_folder.rb +171 -0
- data/plugins/synced_folders/rsync/command/rsync.rb +81 -0
- data/plugins/synced_folders/rsync/command/rsync_auto.rb +244 -0
- data/plugins/synced_folders/rsync/default_unix_cap.rb +49 -0
- data/plugins/synced_folders/rsync/helper.rb +296 -0
- data/plugins/synced_folders/rsync/plugin.rb +31 -0
- data/plugins/synced_folders/rsync/synced_folder.rb +62 -0
- data/plugins/synced_folders/smb/cap/default_fstab_modification.rb +14 -0
- data/plugins/synced_folders/smb/cap/mount_options.rb +59 -0
- data/plugins/synced_folders/smb/config.rb +26 -0
- data/plugins/synced_folders/smb/errors.rb +65 -0
- data/plugins/synced_folders/smb/plugin.rb +60 -0
- data/plugins/synced_folders/smb/synced_folder.rb +189 -0
- data/plugins/synced_folders/unix_mount_helpers.rb +122 -0
- data/scripts/install_rvm +19 -0
- data/scripts/setup_tests +49 -0
- data/scripts/sign.sh +29 -0
- data/scripts/website_push_www.sh +43 -0
- data/tasks/acceptance.rake +22 -0
- data/tasks/bundler.rake +3 -0
- data/tasks/test.rake +8 -0
- data/templates/commands/init/Vagrantfile.erb +86 -0
- data/templates/commands/init/Vagrantfile.min.erb +12 -0
- data/templates/commands/ssh_config/config.erb +42 -0
- data/templates/commands/winrm_config/config.erb +11 -0
- data/templates/config/messages.erb +14 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/guests/alpine/network_dhcp.erb +13 -0
- data/templates/guests/alpine/network_static.erb +7 -0
- data/templates/guests/alt/network_dhcp.erb +7 -0
- data/templates/guests/alt/network_ipv4address.erb +3 -0
- data/templates/guests/alt/network_ipv4route.erb +5 -0
- data/templates/guests/alt/network_static.erb +7 -0
- data/templates/guests/arch/default_network/network_dhcp.erb +4 -0
- data/templates/guests/arch/default_network/network_static.erb +8 -0
- data/templates/guests/arch/default_network/network_static6.erb +8 -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/coreos/etcd.service.erb +10 -0
- data/templates/guests/debian/network_dhcp.erb +13 -0
- data/templates/guests/debian/network_static.erb +10 -0
- data/templates/guests/debian/network_static6.erb +10 -0
- data/templates/guests/freebsd/network_dhcp.erb +4 -0
- data/templates/guests/freebsd/network_static.erb +6 -0
- data/templates/guests/freebsd/network_static6.erb +6 -0
- data/templates/guests/funtoo/network_dhcp.erb +4 -0
- data/templates/guests/funtoo/network_static.erb +10 -0
- data/templates/guests/funtoo/network_static6.erb +9 -0
- data/templates/guests/gentoo/network_dhcp.erb +4 -0
- data/templates/guests/gentoo/network_static.erb +8 -0
- data/templates/guests/gentoo/network_static6.erb +8 -0
- data/templates/guests/gentoo/network_systemd.erb +16 -0
- data/templates/guests/linux/etc_fstab.erb +6 -0
- data/templates/guests/netbsd/network_dhcp.erb +3 -0
- data/templates/guests/netbsd/network_static.erb +3 -0
- data/templates/guests/nixos/hostname.erb +6 -0
- data/templates/guests/nixos/network.erb +15 -0
- data/templates/guests/openbsd/network_dhcp.erb +1 -0
- data/templates/guests/openbsd/network_static.erb +1 -0
- data/templates/guests/openbsd/network_static6.erb +1 -0
- data/templates/guests/redhat/network_dhcp.erb +7 -0
- data/templates/guests/redhat/network_static.erb +16 -0
- data/templates/guests/redhat/network_static6.erb +12 -0
- data/templates/guests/slackware/network_dhcp.erb +11 -0
- data/templates/guests/slackware/network_static.erb +13 -0
- data/templates/guests/suse/network_dhcp.erb +6 -0
- data/templates/guests/suse/network_static.erb +13 -0
- data/templates/guests/suse/network_static6.erb +16 -0
- data/templates/license/license.html.tmpl +127 -0
- data/templates/license/license.rtf.tmpl +0 -0
- data/templates/license/license.tmpl +92 -0
- data/templates/locales/comm_winrm.yml +85 -0
- data/templates/locales/command_ps.yml +35 -0
- data/templates/locales/command_rdp.yml +28 -0
- data/templates/locales/en.yml +3149 -0
- data/templates/locales/guest_windows.yml +26 -0
- data/templates/locales/providers_docker.yml +321 -0
- data/templates/locales/providers_hyperv.yml +111 -0
- data/templates/locales/synced_folder_smb.yml +98 -0
- data/templates/networking/network_manager/network_manager_device.erb +41 -0
- data/templates/nfs/exports_bsd.erb +5 -0
- data/templates/nfs/exports_darwin.erb +7 -0
- data/templates/nfs/exports_linux.erb +7 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/provisioners/chef_client/client.erb +41 -0
- data/templates/provisioners/chef_solo/solo.erb +52 -0
- data/templates/provisioners/chef_zero/zero.erb +45 -0
- data/templates/rgloader.rb +12 -0
- data/vagrant-spec.config.example.rb +13 -0
- data/vagrant.gemspec +113 -20
- data/version.txt +1 -0
- metadata +1621 -43
- data/LICENSE.txt +0 -22
- data/message.txt +0 -17
@@ -0,0 +1,898 @@
|
|
1
|
+
# Copyright (c) HashiCorp, Inc.
|
2
|
+
# SPDX-License-Identifier: BUSL-1.1
|
3
|
+
|
4
|
+
require 'etc'
|
5
|
+
require 'logger'
|
6
|
+
require 'pathname'
|
7
|
+
require 'stringio'
|
8
|
+
require 'thread'
|
9
|
+
require 'timeout'
|
10
|
+
|
11
|
+
require 'log4r'
|
12
|
+
require 'net/ssh'
|
13
|
+
require 'net/ssh/proxy/command'
|
14
|
+
require 'net/scp'
|
15
|
+
|
16
|
+
require 'vagrant/util/ansi_escape_code_remover'
|
17
|
+
require 'vagrant/util/file_mode'
|
18
|
+
require 'vagrant/util/keypair'
|
19
|
+
require 'vagrant/util/platform'
|
20
|
+
require 'vagrant/util/retryable'
|
21
|
+
|
22
|
+
module VagrantPlugins
|
23
|
+
module CommunicatorSSH
|
24
|
+
# This class provides communication with the VM via SSH.
|
25
|
+
class Communicator < Vagrant.plugin("2", :communicator)
|
26
|
+
READY_COMMAND=""
|
27
|
+
# Marker for start of PTY enabled command output
|
28
|
+
PTY_DELIM_START = "bccbb768c119429488cfd109aacea6b5-pty"
|
29
|
+
# Marker for end of PTY enabled command output
|
30
|
+
PTY_DELIM_END = "bccbb768c119429488cfd109aacea6b5-pty"
|
31
|
+
# Marker for start of regular command output
|
32
|
+
CMD_GARBAGE_MARKER = "41e57d38-b4f7-4e46-9c38-13873d338b86-vagrant-ssh"
|
33
|
+
# These are the exceptions that we retry because they represent
|
34
|
+
# errors that are generally fixed from a retry and don't
|
35
|
+
# necessarily represent immediate failure cases.
|
36
|
+
SSH_RETRY_EXCEPTIONS = [
|
37
|
+
Errno::EACCES,
|
38
|
+
Errno::EADDRINUSE,
|
39
|
+
Errno::ECONNABORTED,
|
40
|
+
Errno::ECONNREFUSED,
|
41
|
+
Errno::ECONNRESET,
|
42
|
+
Errno::ENETUNREACH,
|
43
|
+
Errno::EHOSTUNREACH,
|
44
|
+
Errno::EPIPE,
|
45
|
+
Net::SSH::Disconnect,
|
46
|
+
Timeout::Error
|
47
|
+
]
|
48
|
+
|
49
|
+
include Vagrant::Util::ANSIEscapeCodeRemover
|
50
|
+
include Vagrant::Util::Retryable
|
51
|
+
|
52
|
+
def self.match?(machine)
|
53
|
+
# All machines are currently expected to have SSH.
|
54
|
+
true
|
55
|
+
end
|
56
|
+
|
57
|
+
def initialize(machine)
|
58
|
+
@lock = Mutex.new
|
59
|
+
@machine = machine
|
60
|
+
@logger = Log4r::Logger.new("vagrant::communication::ssh")
|
61
|
+
@connection = nil
|
62
|
+
@inserted_key = false
|
63
|
+
end
|
64
|
+
|
65
|
+
def wait_for_ready(timeout)
|
66
|
+
Timeout.timeout(timeout) do
|
67
|
+
# Wait for ssh_info to be ready
|
68
|
+
ssh_info = nil
|
69
|
+
while true
|
70
|
+
ssh_info = @machine.ssh_info
|
71
|
+
break if ssh_info
|
72
|
+
sleep(0.5)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Got it! Let the user know what we're connecting to.
|
76
|
+
if !@ssh_info_notification
|
77
|
+
@machine.ui.detail("SSH address: #{ssh_info[:host]}:#{ssh_info[:port]}")
|
78
|
+
@machine.ui.detail("SSH username: #{ssh_info[:username]}")
|
79
|
+
ssh_auth_type = "private key"
|
80
|
+
ssh_auth_type = "password" if ssh_info[:password]
|
81
|
+
@machine.ui.detail("SSH auth method: #{ssh_auth_type}")
|
82
|
+
@ssh_info_notification = true
|
83
|
+
end
|
84
|
+
|
85
|
+
previous_messages = {}
|
86
|
+
while true
|
87
|
+
message = nil
|
88
|
+
begin
|
89
|
+
begin
|
90
|
+
connect(retries: 1)
|
91
|
+
return true if ready?
|
92
|
+
rescue Vagrant::Errors::VagrantError => e
|
93
|
+
@logger.info("SSH not ready: #{e.inspect}")
|
94
|
+
raise
|
95
|
+
end
|
96
|
+
rescue Vagrant::Errors::SSHConnectionTimeout
|
97
|
+
message = "Connection timeout."
|
98
|
+
rescue Vagrant::Errors::SSHAuthenticationFailed
|
99
|
+
message = "Authentication failure."
|
100
|
+
rescue Vagrant::Errors::SSHDisconnected
|
101
|
+
message = "Remote connection disconnect."
|
102
|
+
rescue Vagrant::Errors::SSHConnectionRefused
|
103
|
+
message = "Connection refused."
|
104
|
+
rescue Vagrant::Errors::SSHConnectionReset
|
105
|
+
message = "Connection reset."
|
106
|
+
rescue Vagrant::Errors::SSHConnectionAborted
|
107
|
+
message = "Connection aborted."
|
108
|
+
rescue Vagrant::Errors::SSHHostDown
|
109
|
+
message = "Host appears down."
|
110
|
+
rescue Vagrant::Errors::SSHNoRoute
|
111
|
+
message = "Host unreachable."
|
112
|
+
rescue Vagrant::Errors::SSHInvalidShell
|
113
|
+
raise
|
114
|
+
rescue Vagrant::Errors::SSHKeyTypeNotSupported
|
115
|
+
raise
|
116
|
+
rescue Vagrant::Errors::SSHKeyTypeNotSupportedByServer
|
117
|
+
raise
|
118
|
+
rescue Vagrant::Errors::SSHKeyBadOwner
|
119
|
+
raise
|
120
|
+
rescue Vagrant::Errors::SSHKeyBadPermissions
|
121
|
+
raise
|
122
|
+
rescue Vagrant::Errors::SSHInsertKeyUnsupported
|
123
|
+
raise
|
124
|
+
rescue Vagrant::Errors::VagrantError => e
|
125
|
+
# Ignore it, SSH is not ready, some other error.
|
126
|
+
end
|
127
|
+
|
128
|
+
# If we have a message to show, then show it. We don't show
|
129
|
+
# repeated messages unless they've been repeating longer than
|
130
|
+
# 10 seconds.
|
131
|
+
if message
|
132
|
+
message_at = Time.now.to_f
|
133
|
+
show_message = true
|
134
|
+
if previous_messages[message]
|
135
|
+
show_message = (message_at - previous_messages[message]) > 10.0
|
136
|
+
end
|
137
|
+
|
138
|
+
if show_message
|
139
|
+
@machine.ui.detail("Warning: #{message} Retrying...")
|
140
|
+
previous_messages[message] = message_at
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
rescue Timeout::Error
|
146
|
+
return false
|
147
|
+
end
|
148
|
+
|
149
|
+
def ready?
|
150
|
+
@logger.debug("Checking whether SSH is ready...")
|
151
|
+
|
152
|
+
# Attempt to connect. This will raise an exception if it fails.
|
153
|
+
begin
|
154
|
+
connect
|
155
|
+
@logger.info("SSH is ready!")
|
156
|
+
rescue Vagrant::Errors::VagrantError => e
|
157
|
+
# We catch a `VagrantError` which would signal that something went
|
158
|
+
# wrong expectedly in the `connect`, which means we didn't connect.
|
159
|
+
@logger.info("SSH not up: #{e.inspect}")
|
160
|
+
return false
|
161
|
+
end
|
162
|
+
|
163
|
+
# Verify the shell is valid
|
164
|
+
if execute(self.class.const_get(:READY_COMMAND), error_check: false) != 0
|
165
|
+
raise Vagrant::Errors::SSHInvalidShell
|
166
|
+
end
|
167
|
+
|
168
|
+
# If we're already attempting to switch out the SSH key, then
|
169
|
+
# just return that we're ready (for Machine#guest).
|
170
|
+
@lock.synchronize do
|
171
|
+
return true if @inserted_key || !machine_config_ssh.insert_key
|
172
|
+
@inserted_key = true
|
173
|
+
end
|
174
|
+
|
175
|
+
# If we used a password, then insert the insecure key
|
176
|
+
ssh_info = @machine.ssh_info
|
177
|
+
return if ssh_info.nil?
|
178
|
+
insert = ssh_info[:password] && ssh_info[:private_key_path].empty?
|
179
|
+
ssh_info[:private_key_path].each do |pk|
|
180
|
+
if insecure_key?(pk)
|
181
|
+
insert = true
|
182
|
+
@machine.ui.detail("\n"+I18n.t("vagrant.inserting_insecure_detected"))
|
183
|
+
break
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
if insert
|
188
|
+
# If we don't have the power to insert/remove keys, then its an error
|
189
|
+
cap = @machine.guest.capability?(:insert_public_key) &&
|
190
|
+
@machine.guest.capability?(:remove_public_key)
|
191
|
+
raise Vagrant::Errors::SSHInsertKeyUnsupported if !cap
|
192
|
+
|
193
|
+
key_type = machine_config_ssh.key_type
|
194
|
+
|
195
|
+
begin
|
196
|
+
# If the key type is set to `:auto` check for supported type. Otherwise
|
197
|
+
# ensure that the key type is supported by the guest
|
198
|
+
if key_type == :auto
|
199
|
+
key_type = catch(:key_type) do
|
200
|
+
begin
|
201
|
+
Vagrant::Util::Keypair::PREFER_KEY_TYPES.each do |type_name, type|
|
202
|
+
throw :key_type, type if supports_key_type?(type_name)
|
203
|
+
end
|
204
|
+
nil
|
205
|
+
rescue => err
|
206
|
+
@logger.warn("Failed to check key types server supports: #{err}")
|
207
|
+
nil
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
@logger.debug("Detected key type for new private key: #{key_type}")
|
212
|
+
|
213
|
+
# If no key type was discovered, default to rsa
|
214
|
+
if key_type.nil?
|
215
|
+
@logger.debug("Failed to detect supported key type in: #{supported_key_types.join(", ")}")
|
216
|
+
available_types = supported_key_types.map { |t|
|
217
|
+
next if !Vagrant::Util::Keypair::PREFER_KEY_TYPES.key?(t)
|
218
|
+
"#{t} (#{Vagrant::Util::Keypair::PREFER_KEY_TYPES[t]})"
|
219
|
+
}.compact.join(", ")
|
220
|
+
|
221
|
+
raise Vagrant::Errors::SSHKeyTypeNotSupportedByServer,
|
222
|
+
requested_key_type: ":auto",
|
223
|
+
available_key_types: available_types
|
224
|
+
end
|
225
|
+
else
|
226
|
+
type_name = Vagrant::Util::Keypair::PREFER_KEY_TYPES.key(key_type)
|
227
|
+
if !supports_key_type?(type_name)
|
228
|
+
available_types = supported_key_types.map { |t|
|
229
|
+
next if !Vagrant::Util::Keypair::PREFER_KEY_TYPES.key?(t)
|
230
|
+
"#{t} (#{Vagrant::Util::Keypair::PREFER_KEY_TYPES[t]})"
|
231
|
+
}.compact.join(", ")
|
232
|
+
raise Vagrant::Errors::SSHKeyTypeNotSupportedByServer,
|
233
|
+
requested_key_type: "#{type_name} (#{key_type})",
|
234
|
+
available_key_types: available_types
|
235
|
+
end
|
236
|
+
end
|
237
|
+
rescue ServerDataError
|
238
|
+
@logger.warn("failed to load server data for key type check")
|
239
|
+
if key_type.nil? || key_type == :auto
|
240
|
+
@logger.warn("defaulting key type to :rsa due to failed server data loading")
|
241
|
+
key_type = :rsa
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
@logger.info("Creating new ssh keypair (type: #{key_type.inspect})")
|
246
|
+
_pub, priv, openssh = Vagrant::Util::Keypair.create(type: key_type)
|
247
|
+
|
248
|
+
@logger.info("Inserting key to avoid password: #{openssh}")
|
249
|
+
@machine.ui.detail("\n"+I18n.t("vagrant.inserting_random_key"))
|
250
|
+
@machine.guest.capability(:insert_public_key, openssh)
|
251
|
+
|
252
|
+
# Write out the private key in the data dir so that the
|
253
|
+
# machine automatically picks it up.
|
254
|
+
@machine.data_dir.join("private_key").open("wb+") do |f|
|
255
|
+
f.write(priv)
|
256
|
+
end
|
257
|
+
|
258
|
+
# Adjust private key file permissions if host provides capability
|
259
|
+
if @machine.env.host.capability?(:set_ssh_key_permissions)
|
260
|
+
@machine.env.host.capability(:set_ssh_key_permissions, @machine.data_dir.join("private_key"))
|
261
|
+
end
|
262
|
+
|
263
|
+
# Remove the old key if it exists
|
264
|
+
@machine.ui.detail(I18n.t("vagrant.inserting_remove_key"))
|
265
|
+
@machine.guest.capability(
|
266
|
+
:remove_public_key,
|
267
|
+
Vagrant.source_root.join("keys", "vagrant.pub").read.chomp)
|
268
|
+
|
269
|
+
# Done, restart.
|
270
|
+
@machine.ui.detail(I18n.t("vagrant.inserted_key"))
|
271
|
+
@connection.close
|
272
|
+
@connection = nil
|
273
|
+
|
274
|
+
return ready?
|
275
|
+
end
|
276
|
+
|
277
|
+
# If we reached this point then we successfully connected
|
278
|
+
true
|
279
|
+
end
|
280
|
+
|
281
|
+
def execute(command, opts=nil, &block)
|
282
|
+
opts = {
|
283
|
+
error_check: true,
|
284
|
+
error_class: Vagrant::Errors::VagrantError,
|
285
|
+
error_key: :ssh_bad_exit_status,
|
286
|
+
good_exit: 0,
|
287
|
+
command: command,
|
288
|
+
shell: nil,
|
289
|
+
sudo: false,
|
290
|
+
force_raw: false
|
291
|
+
}.merge(opts || {})
|
292
|
+
|
293
|
+
opts[:good_exit] = Array(opts[:good_exit])
|
294
|
+
|
295
|
+
# Connect via SSH and execute the command in the shell.
|
296
|
+
stdout = ""
|
297
|
+
stderr = ""
|
298
|
+
exit_status = connect do |connection|
|
299
|
+
shell_opts = {
|
300
|
+
sudo: opts[:sudo],
|
301
|
+
shell: opts[:shell],
|
302
|
+
force_raw: opts[:force_raw]
|
303
|
+
}
|
304
|
+
|
305
|
+
shell_execute(connection, command, **shell_opts) do |type, data|
|
306
|
+
if type == :stdout
|
307
|
+
stdout += data
|
308
|
+
elsif type == :stderr
|
309
|
+
stderr += data
|
310
|
+
end
|
311
|
+
|
312
|
+
block.call(type, data) if block
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
# Check for any errors
|
317
|
+
if opts[:error_check] && !opts[:good_exit].include?(exit_status)
|
318
|
+
# The error classes expect the translation key to be _key,
|
319
|
+
# but that makes for an ugly configuration parameter, so we
|
320
|
+
# set it here from `error_key`
|
321
|
+
error_opts = opts.merge(
|
322
|
+
_key: opts[:error_key],
|
323
|
+
stdout: stdout,
|
324
|
+
stderr: stderr
|
325
|
+
)
|
326
|
+
raise opts[:error_class], error_opts
|
327
|
+
end
|
328
|
+
|
329
|
+
# Return the exit status
|
330
|
+
exit_status
|
331
|
+
end
|
332
|
+
|
333
|
+
def sudo(command, opts=nil, &block)
|
334
|
+
# Run `execute` but with the `sudo` option.
|
335
|
+
opts = { sudo: true }.merge(opts || {})
|
336
|
+
execute(command, opts, &block)
|
337
|
+
end
|
338
|
+
|
339
|
+
def download(from, to=nil)
|
340
|
+
@logger.debug("Downloading: #{from} to #{to}")
|
341
|
+
|
342
|
+
scp_connect do |scp|
|
343
|
+
scp.download!(from, to)
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
def test(command, opts=nil)
|
348
|
+
opts = { error_check: false }.merge(opts || {})
|
349
|
+
execute(command, opts) == 0
|
350
|
+
end
|
351
|
+
|
352
|
+
def upload(from, to)
|
353
|
+
@logger.debug("Uploading: #{from} to #{to}")
|
354
|
+
|
355
|
+
if File.directory?(from)
|
356
|
+
if from.end_with?(".")
|
357
|
+
@logger.debug("Uploading directory contents of: #{from}")
|
358
|
+
from = from.sub(/\.$/, "")
|
359
|
+
else
|
360
|
+
@logger.debug("Uploading full directory container of: #{from}")
|
361
|
+
to = File.join(to, File.basename(File.expand_path(from)))
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
scp_connect do |scp|
|
366
|
+
uploader = lambda do |path, remote_dest=nil|
|
367
|
+
if File.directory?(path)
|
368
|
+
dest = File.join(to, path.sub(/^#{Regexp.escape(from)}/, ""))
|
369
|
+
create_remote_directory(dest)
|
370
|
+
Dir.new(path).each do |entry|
|
371
|
+
next if entry == "." || entry == ".."
|
372
|
+
full_path = File.join(path, entry)
|
373
|
+
create_remote_directory(dest)
|
374
|
+
uploader.call(full_path, dest)
|
375
|
+
end
|
376
|
+
else
|
377
|
+
if remote_dest
|
378
|
+
dest = File.join(remote_dest, File.basename(path))
|
379
|
+
else
|
380
|
+
dest = to
|
381
|
+
if to.end_with?(File::SEPARATOR)
|
382
|
+
dest = File.join(to, File.basename(path))
|
383
|
+
end
|
384
|
+
end
|
385
|
+
@logger.debug("Ensuring remote directory exists for destination upload")
|
386
|
+
create_remote_directory(File.dirname(dest))
|
387
|
+
@logger.debug("Uploading file #{path} to remote #{dest}")
|
388
|
+
upload_file = File.open(path, "rb")
|
389
|
+
begin
|
390
|
+
scp.upload!(upload_file, dest)
|
391
|
+
ensure
|
392
|
+
upload_file.close
|
393
|
+
end
|
394
|
+
end
|
395
|
+
end
|
396
|
+
uploader.call(from)
|
397
|
+
end
|
398
|
+
rescue RuntimeError => e
|
399
|
+
# Net::SCP raises a runtime error for this so the only way we have
|
400
|
+
# to really catch this exception is to check the message to see if
|
401
|
+
# it is something we care about. If it isn't, we re-raise.
|
402
|
+
raise if e.message !~ /Permission denied/
|
403
|
+
|
404
|
+
# Otherwise, it is a permission denied, so let's raise a proper
|
405
|
+
# exception
|
406
|
+
raise Vagrant::Errors::SCPPermissionDenied,
|
407
|
+
from: from.to_s,
|
408
|
+
to: to.to_s
|
409
|
+
end
|
410
|
+
|
411
|
+
def reset!
|
412
|
+
if @connection
|
413
|
+
@connection.close
|
414
|
+
@connection = nil
|
415
|
+
end
|
416
|
+
@ssh_info_notification = true # suppress ssh info output
|
417
|
+
wait_for_ready(5)
|
418
|
+
end
|
419
|
+
|
420
|
+
def generate_environment_export(env_key, env_value)
|
421
|
+
template = machine_config_ssh.export_command_template
|
422
|
+
template.sub("%ENV_KEY%", env_key).sub("%ENV_VALUE%", env_value) + "\n"
|
423
|
+
end
|
424
|
+
|
425
|
+
protected
|
426
|
+
|
427
|
+
# Opens an SSH connection and yields it to a block.
|
428
|
+
def connect(**opts)
|
429
|
+
if @connection && !@connection.closed?
|
430
|
+
# There is a chance that the socket is closed despite us checking
|
431
|
+
# 'closed?' above. To test this we need to send data through the
|
432
|
+
# socket.
|
433
|
+
#
|
434
|
+
# We wrap the check itself in a 5 second timeout because there
|
435
|
+
# are some cases where this will just hang.
|
436
|
+
begin
|
437
|
+
Timeout.timeout(5) do
|
438
|
+
@connection.exec!("")
|
439
|
+
end
|
440
|
+
rescue Exception => e
|
441
|
+
@logger.info("Connection errored, not re-using. Will reconnect.")
|
442
|
+
@logger.debug(e.inspect)
|
443
|
+
@connection = nil
|
444
|
+
end
|
445
|
+
|
446
|
+
# If the @connection is still around, then it is valid,
|
447
|
+
# and we use it.
|
448
|
+
if @connection
|
449
|
+
@logger.debug("Re-using SSH connection.")
|
450
|
+
return yield @connection if block_given?
|
451
|
+
return
|
452
|
+
end
|
453
|
+
end
|
454
|
+
|
455
|
+
# Get the SSH info for the machine, raise an exception if the
|
456
|
+
# provider is saying that SSH is not ready.
|
457
|
+
ssh_info = @machine.ssh_info
|
458
|
+
raise Vagrant::Errors::SSHNotReady if ssh_info.nil?
|
459
|
+
|
460
|
+
# Default some options
|
461
|
+
opts[:retries] = ssh_info[:connect_retries] if !opts.key?(:retries)
|
462
|
+
opts[:retry_delay] = ssh_info[:connect_retry_delay] if !opts.key?(:retry_delay)
|
463
|
+
|
464
|
+
# Set some valid auth methods. We disable the auth methods that
|
465
|
+
# we're not using if we don't have the right auth info.
|
466
|
+
auth_methods = ["none", "hostbased"]
|
467
|
+
auth_methods << "publickey" if ssh_info[:private_key_path]
|
468
|
+
auth_methods << "password" if ssh_info[:password]
|
469
|
+
|
470
|
+
# Build the options we'll use to initiate the connection via Net::SSH
|
471
|
+
common_connect_opts = {
|
472
|
+
auth_methods: auth_methods,
|
473
|
+
config: false,
|
474
|
+
forward_agent: ssh_info[:forward_agent],
|
475
|
+
send_env: ssh_info[:forward_env],
|
476
|
+
keys_only: ssh_info[:keys_only],
|
477
|
+
verify_host_key: ssh_info[:verify_host_key],
|
478
|
+
password: ssh_info[:password],
|
479
|
+
port: ssh_info[:port],
|
480
|
+
timeout: ssh_info[:connect_timeout],
|
481
|
+
user_known_hosts_file: [],
|
482
|
+
verbose: :debug
|
483
|
+
}
|
484
|
+
|
485
|
+
# Connect to SSH, giving it a few tries
|
486
|
+
connection = nil
|
487
|
+
begin
|
488
|
+
timeout = 60
|
489
|
+
|
490
|
+
@logger.info("Attempting SSH connection...")
|
491
|
+
connection = retryable(tries: opts[:retries], on: SSH_RETRY_EXCEPTIONS, sleep: opts[:retry_delay]) do
|
492
|
+
Timeout.timeout(timeout) do
|
493
|
+
begin
|
494
|
+
# This logger will get the Net-SSH log data for us.
|
495
|
+
ssh_logger_io = StringIO.new
|
496
|
+
ssh_logger = Logger.new(ssh_logger_io)
|
497
|
+
|
498
|
+
# Setup logging for connections
|
499
|
+
connect_opts = common_connect_opts.dup
|
500
|
+
connect_opts[:logger] = ssh_logger
|
501
|
+
|
502
|
+
if ssh_info[:private_key_path]
|
503
|
+
connect_opts[:keys] = ssh_info[:private_key_path]
|
504
|
+
end
|
505
|
+
|
506
|
+
if ssh_info[:proxy_command]
|
507
|
+
connect_opts[:proxy] = Net::SSH::Proxy::Command.new(ssh_info[:proxy_command])
|
508
|
+
end
|
509
|
+
|
510
|
+
if ssh_info[:config]
|
511
|
+
connect_opts[:config] = ssh_info[:config]
|
512
|
+
end
|
513
|
+
|
514
|
+
if ssh_info[:remote_user]
|
515
|
+
connect_opts[:remote_user] = ssh_info[:remote_user]
|
516
|
+
end
|
517
|
+
|
518
|
+
if @machine.config.ssh.keep_alive
|
519
|
+
connect_opts[:keepalive] = true
|
520
|
+
connect_opts[:keepalive_interval] = 5
|
521
|
+
end
|
522
|
+
|
523
|
+
@logger.info("Attempting to connect to SSH...")
|
524
|
+
@logger.info(" - Host: #{ssh_info[:host]}")
|
525
|
+
@logger.info(" - Port: #{ssh_info[:port]}")
|
526
|
+
@logger.info(" - Username: #{ssh_info[:username]}")
|
527
|
+
@logger.info(" - Password? #{!!ssh_info[:password]}")
|
528
|
+
@logger.info(" - Key Path: #{ssh_info[:private_key_path]}")
|
529
|
+
@logger.debug(" - connect_opts: #{connect_opts}")
|
530
|
+
|
531
|
+
Net::SSH.start(ssh_info[:host], ssh_info[:username], **connect_opts)
|
532
|
+
ensure
|
533
|
+
# Make sure we output the connection log
|
534
|
+
@logger.debug("== Net-SSH connection debug-level log START ==")
|
535
|
+
@logger.debug(ssh_logger_io.string)
|
536
|
+
@logger.debug("== Net-SSH connection debug-level log END ==")
|
537
|
+
end
|
538
|
+
end
|
539
|
+
end
|
540
|
+
rescue Errno::EACCES
|
541
|
+
# This happens on connect() for unknown reasons yet...
|
542
|
+
raise Vagrant::Errors::SSHConnectEACCES
|
543
|
+
rescue Errno::ETIMEDOUT, Timeout::Error, IO::TimeoutError
|
544
|
+
# This happens if we continued to timeout when attempting to connect.
|
545
|
+
raise Vagrant::Errors::SSHConnectionTimeout
|
546
|
+
rescue Net::SSH::AuthenticationFailed
|
547
|
+
# This happens if authentication failed. We wrap the error in our
|
548
|
+
# own exception.
|
549
|
+
raise Vagrant::Errors::SSHAuthenticationFailed
|
550
|
+
rescue Net::SSH::Disconnect
|
551
|
+
# This happens if the remote server unexpectedly closes the
|
552
|
+
# connection. This is usually raised when SSH is running on the
|
553
|
+
# other side but can't properly setup a connection. This is
|
554
|
+
# usually a server-side issue.
|
555
|
+
raise Vagrant::Errors::SSHDisconnected
|
556
|
+
rescue Errno::ECONNREFUSED
|
557
|
+
# This is raised if we failed to connect the max amount of times
|
558
|
+
raise Vagrant::Errors::SSHConnectionRefused
|
559
|
+
rescue Errno::ECONNRESET
|
560
|
+
# This is raised if we failed to connect the max number of times
|
561
|
+
# due to an ECONNRESET.
|
562
|
+
raise Vagrant::Errors::SSHConnectionReset
|
563
|
+
rescue Errno::ECONNABORTED
|
564
|
+
# This is raised if we failed to connect the max number of times
|
565
|
+
# due to an ECONNABORTED
|
566
|
+
raise Vagrant::Errors::SSHConnectionAborted
|
567
|
+
rescue Errno::EHOSTDOWN
|
568
|
+
# This is raised if we get an ICMP DestinationUnknown error.
|
569
|
+
raise Vagrant::Errors::SSHHostDown
|
570
|
+
rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH
|
571
|
+
# This is raised if we can't work out how to route traffic.
|
572
|
+
raise Vagrant::Errors::SSHNoRoute
|
573
|
+
rescue Net::SSH::Exception => e
|
574
|
+
# This is an internal error in Net::SSH
|
575
|
+
raise Vagrant::Errors::NetSSHException, message: e.message
|
576
|
+
rescue NotImplementedError
|
577
|
+
# This is raised if a private key type that Net-SSH doesn't support
|
578
|
+
# is used. Show a nicer error.
|
579
|
+
raise Vagrant::Errors::SSHKeyTypeNotSupported
|
580
|
+
end
|
581
|
+
|
582
|
+
@connection = connection
|
583
|
+
@connection_ssh_info = ssh_info
|
584
|
+
|
585
|
+
# Yield the connection that is ready to be used and
|
586
|
+
# return the value of the block
|
587
|
+
return yield connection if block_given?
|
588
|
+
end
|
589
|
+
|
590
|
+
# The shell wrapper command used in shell_execute defined by
|
591
|
+
# the sudo and shell options.
|
592
|
+
def shell_cmd(opts)
|
593
|
+
sudo = opts[:sudo]
|
594
|
+
shell = opts[:shell]
|
595
|
+
|
596
|
+
# Determine the shell to execute. Prefer the explicitly passed in shell
|
597
|
+
# over the default configured shell. If we are using `sudo` then we
|
598
|
+
# need to wrap the shell in a `sudo` call.
|
599
|
+
cmd = machine_config_ssh.shell
|
600
|
+
cmd = shell if shell
|
601
|
+
cmd = machine_config_ssh.sudo_command.gsub("%c", cmd) if sudo
|
602
|
+
cmd
|
603
|
+
end
|
604
|
+
|
605
|
+
# Executes the command on an SSH connection within a login shell.
|
606
|
+
def shell_execute(connection, command, **opts)
|
607
|
+
opts = {
|
608
|
+
sudo: false,
|
609
|
+
shell: nil
|
610
|
+
}.merge(opts)
|
611
|
+
|
612
|
+
sudo = opts[:sudo]
|
613
|
+
|
614
|
+
@logger.info("Execute: #{command} (sudo=#{sudo.inspect})")
|
615
|
+
exit_status = nil
|
616
|
+
|
617
|
+
# These variables are used to scrub PTY output if we're in a PTY
|
618
|
+
pty = false
|
619
|
+
pty_stdout = ""
|
620
|
+
|
621
|
+
# Open the channel so we can execute or command
|
622
|
+
channel = connection.open_channel do |ch|
|
623
|
+
if machine_config_ssh.pty
|
624
|
+
ch.request_pty do |ch2, success|
|
625
|
+
pty = success && command != ""
|
626
|
+
|
627
|
+
if success
|
628
|
+
@logger.debug("pty obtained for connection")
|
629
|
+
else
|
630
|
+
@logger.warn("failed to obtain pty, will try to continue anyways")
|
631
|
+
end
|
632
|
+
end
|
633
|
+
end
|
634
|
+
|
635
|
+
marker_found = false
|
636
|
+
data_buffer = ''
|
637
|
+
stderr_marker_found = false
|
638
|
+
stderr_data_buffer = ''
|
639
|
+
|
640
|
+
ch.exec(shell_cmd(opts)) do |ch2, _|
|
641
|
+
# Setup the channel callbacks so we can get data and exit status
|
642
|
+
ch2.on_data do |ch3, data|
|
643
|
+
# Filter out the clear screen command
|
644
|
+
data = remove_ansi_escape_codes(data)
|
645
|
+
|
646
|
+
if pty
|
647
|
+
pty_stdout << data
|
648
|
+
else
|
649
|
+
if !marker_found
|
650
|
+
data_buffer << data
|
651
|
+
marker_index = data_buffer.index(CMD_GARBAGE_MARKER)
|
652
|
+
if marker_index
|
653
|
+
marker_found = true
|
654
|
+
data_buffer.slice!(0, marker_index + CMD_GARBAGE_MARKER.size)
|
655
|
+
data.replace(data_buffer)
|
656
|
+
data_buffer = nil
|
657
|
+
end
|
658
|
+
end
|
659
|
+
|
660
|
+
if block_given? && marker_found && !data.empty?
|
661
|
+
yield :stdout, data
|
662
|
+
end
|
663
|
+
end
|
664
|
+
end
|
665
|
+
|
666
|
+
ch2.on_extended_data do |ch3, type, data|
|
667
|
+
# Filter out the clear screen command
|
668
|
+
data = remove_ansi_escape_codes(data)
|
669
|
+
@logger.debug("stderr: #{data}")
|
670
|
+
if !stderr_marker_found
|
671
|
+
stderr_data_buffer << data
|
672
|
+
marker_index = stderr_data_buffer.index(CMD_GARBAGE_MARKER)
|
673
|
+
if marker_index
|
674
|
+
stderr_marker_found = true
|
675
|
+
stderr_data_buffer.slice!(0, marker_index + CMD_GARBAGE_MARKER.size)
|
676
|
+
data.replace(stderr_data_buffer)
|
677
|
+
stderr_data_buffer = nil
|
678
|
+
end
|
679
|
+
end
|
680
|
+
|
681
|
+
if block_given? && stderr_marker_found && !data.empty?
|
682
|
+
yield :stderr, data
|
683
|
+
end
|
684
|
+
end
|
685
|
+
|
686
|
+
ch2.on_request("exit-status") do |ch3, data|
|
687
|
+
exit_status = data.read_long
|
688
|
+
@logger.debug("Exit status: #{exit_status}")
|
689
|
+
|
690
|
+
# Close the channel, since after the exit status we're
|
691
|
+
# probably done. This fixes up issues with hanging.
|
692
|
+
ch.close
|
693
|
+
end
|
694
|
+
|
695
|
+
# Set the terminal
|
696
|
+
ch2.send_data(generate_environment_export("TERM", "vt100"))
|
697
|
+
|
698
|
+
# Set SSH_AUTH_SOCK if we are in sudo and forwarding agent.
|
699
|
+
# This is to work around often misconfigured boxes where
|
700
|
+
# the SSH_AUTH_SOCK env var is not preserved.
|
701
|
+
if @connection_ssh_info[:forward_agent] && sudo
|
702
|
+
auth_socket = ""
|
703
|
+
execute("echo; printf $SSH_AUTH_SOCK") do |type, data|
|
704
|
+
if type == :stdout
|
705
|
+
auth_socket += data
|
706
|
+
end
|
707
|
+
end
|
708
|
+
|
709
|
+
if auth_socket != ""
|
710
|
+
# Make sure we only read the last line which should be
|
711
|
+
# the $SSH_AUTH_SOCK env var we printed.
|
712
|
+
auth_socket = auth_socket.split("\n").last.to_s.chomp
|
713
|
+
end
|
714
|
+
|
715
|
+
if auth_socket == ""
|
716
|
+
@logger.warn("No SSH_AUTH_SOCK found despite forward_agent being set.")
|
717
|
+
else
|
718
|
+
@logger.info("Setting SSH_AUTH_SOCK remotely: #{auth_socket}")
|
719
|
+
ch2.send_data(generate_environment_export("SSH_AUTH_SOCK", auth_socket))
|
720
|
+
end
|
721
|
+
end
|
722
|
+
|
723
|
+
# Output the command. If we're using a pty we have to do
|
724
|
+
# a little dance to make sure we get all the output properly
|
725
|
+
# without the cruft added from pty mode.
|
726
|
+
if pty
|
727
|
+
data = "stty raw -echo\n"
|
728
|
+
data += generate_environment_export("PS1", "")
|
729
|
+
data += generate_environment_export("PS2", "")
|
730
|
+
data += generate_environment_export("PROMPT_COMMAND", "")
|
731
|
+
data += "printf #{PTY_DELIM_START}\n"
|
732
|
+
data += "#{command}\n"
|
733
|
+
data += "exitcode=$?\n"
|
734
|
+
data += "printf #{PTY_DELIM_END}\n"
|
735
|
+
data += "exit $exitcode\n"
|
736
|
+
data = data.force_encoding('ASCII-8BIT')
|
737
|
+
ch2.send_data(data)
|
738
|
+
else
|
739
|
+
ch2.send_data("printf '#{CMD_GARBAGE_MARKER}'\n(>&2 printf '#{CMD_GARBAGE_MARKER}')\n#{command}\n".force_encoding('ASCII-8BIT'))
|
740
|
+
# Remember to exit or this channel will hang open
|
741
|
+
ch2.send_data("exit\n")
|
742
|
+
end
|
743
|
+
|
744
|
+
# Send eof to let server know we're done
|
745
|
+
ch2.eof!
|
746
|
+
end
|
747
|
+
end
|
748
|
+
|
749
|
+
begin
|
750
|
+
# Wait for the channel to complete
|
751
|
+
begin
|
752
|
+
channel.wait
|
753
|
+
rescue Errno::ECONNRESET, IOError
|
754
|
+
@logger.info(
|
755
|
+
"SSH connection unexpected closed. Assuming reboot or something.")
|
756
|
+
exit_status = 0
|
757
|
+
pty = false
|
758
|
+
rescue Net::SSH::ChannelOpenFailed
|
759
|
+
raise Vagrant::Errors::SSHChannelOpenFail
|
760
|
+
rescue Net::SSH::Disconnect
|
761
|
+
raise Vagrant::Errors::SSHDisconnected
|
762
|
+
end
|
763
|
+
end
|
764
|
+
|
765
|
+
# If we're in a PTY, we now finally parse the output
|
766
|
+
if pty
|
767
|
+
@logger.debug("PTY stdout: #{pty_stdout}")
|
768
|
+
if !pty_stdout.include?(PTY_DELIM_START) || !pty_stdout.include?(PTY_DELIM_END)
|
769
|
+
@logger.error("PTY stdout doesn't include delims")
|
770
|
+
raise Vagrant::Errors::SSHInvalidShell.new
|
771
|
+
end
|
772
|
+
|
773
|
+
data = pty_stdout[/.*#{PTY_DELIM_START}(.*?)#{PTY_DELIM_END}/m, 1]
|
774
|
+
data ||= ""
|
775
|
+
@logger.debug("PTY stdout parsed: #{data}")
|
776
|
+
yield :stdout, data if block_given?
|
777
|
+
end
|
778
|
+
|
779
|
+
if !exit_status
|
780
|
+
@logger.debug("Exit status: #{exit_status.inspect}")
|
781
|
+
raise Vagrant::Errors::SSHNoExitStatus
|
782
|
+
end
|
783
|
+
|
784
|
+
# Return the final exit status
|
785
|
+
return exit_status
|
786
|
+
end
|
787
|
+
|
788
|
+
# Opens an SCP connection and yields it so that you can download
|
789
|
+
# and upload files.
|
790
|
+
def scp_connect
|
791
|
+
# Connect to SCP and yield the SCP object
|
792
|
+
connect do |connection|
|
793
|
+
scp = Net::SCP.new(connection)
|
794
|
+
return yield scp
|
795
|
+
end
|
796
|
+
rescue Net::SCP::Error => e
|
797
|
+
# If we get the exit code of 127, then this means SCP is unavailable.
|
798
|
+
raise Vagrant::Errors::SCPUnavailable if e.message =~ /\(127\)/
|
799
|
+
|
800
|
+
# Otherwise, just raise the error up
|
801
|
+
raise
|
802
|
+
end
|
803
|
+
|
804
|
+
# This will test whether path is the Vagrant insecure private key.
|
805
|
+
#
|
806
|
+
# @param [String] path
|
807
|
+
def insecure_key?(path)
|
808
|
+
return false if !path
|
809
|
+
return false if !File.file?(path)
|
810
|
+
Dir.glob(Vagrant.source_root.join("keys", "vagrant.key.*")).any? do |source_path|
|
811
|
+
File.read(path).chomp == File.read(source_path).chomp
|
812
|
+
end
|
813
|
+
end
|
814
|
+
|
815
|
+
def create_remote_directory(dir)
|
816
|
+
execute("mkdir -p \"#{dir}\"")
|
817
|
+
end
|
818
|
+
|
819
|
+
def machine_config_ssh
|
820
|
+
@machine.config.ssh
|
821
|
+
end
|
822
|
+
|
823
|
+
protected
|
824
|
+
|
825
|
+
class ServerDataError < StandardError; end
|
826
|
+
|
827
|
+
# Check if server supports given key type
|
828
|
+
#
|
829
|
+
# @param [String, Symbol] type Key type
|
830
|
+
# @return [Boolean]
|
831
|
+
# @note This does not use a stable API and may be subject
|
832
|
+
# to unexpected breakage on net-ssh updates
|
833
|
+
def supports_key_type?(type)
|
834
|
+
if @connection.nil?
|
835
|
+
raise Vagrant::Errors::SSHNotReady
|
836
|
+
end
|
837
|
+
|
838
|
+
supported_key_types.include?(type.to_s)
|
839
|
+
end
|
840
|
+
|
841
|
+
def supported_key_types
|
842
|
+
return @supported_key_types if @supported_key_types
|
843
|
+
|
844
|
+
if @connection.nil?
|
845
|
+
raise Vagrant::Errors::SSHNotReady
|
846
|
+
end
|
847
|
+
|
848
|
+
list = ""
|
849
|
+
result = sudo("sshd -T | grep key", {error_check: false}) do |type, data|
|
850
|
+
list << data
|
851
|
+
end
|
852
|
+
|
853
|
+
# If the command failed, attempt to extract some supported
|
854
|
+
# key information from within net-ssh
|
855
|
+
if result != 0
|
856
|
+
server_data = @connection.
|
857
|
+
transport&.
|
858
|
+
algorithms&.
|
859
|
+
instance_variable_get(:@server_data)
|
860
|
+
if server_data.nil?
|
861
|
+
@logger.warn("No server data available for key type support check")
|
862
|
+
raise ServerDataError, "no data available"
|
863
|
+
end
|
864
|
+
if !server_data.is_a?(Hash)
|
865
|
+
@logger.warn("Server data is not expected type (expecting Hash, got #{server_data.class})")
|
866
|
+
raise ServerDataError, "unexpected type encountered (expecting Hash, got #{server_data.class})"
|
867
|
+
end
|
868
|
+
|
869
|
+
@logger.debug("server supported key type list (extracted from connection server info using host key): #{server_data[:host_key]}")
|
870
|
+
return @supported_key_types = server_data[:host_key]
|
871
|
+
end
|
872
|
+
|
873
|
+
# Convert the options into a Hash for easy access
|
874
|
+
opts = Hash[*list.split("\n").map{|line| line.split(" ", 2)}.flatten]
|
875
|
+
|
876
|
+
# Define the option names to check for in preferred order
|
877
|
+
# NOTE: pubkeyacceptedkeytypes has been renamed to pubkeyacceptedalgorithms
|
878
|
+
# ref: https://github.com/openssh/openssh-portable/commit/ee9c0da8035b3168e8e57c1dedc2d1b0daf00eec
|
879
|
+
["pubkeyacceptedalgorithms", "pubkeyacceptedkeytypes", "hostkeyalgorithms"].each do |opt_name|
|
880
|
+
next if !opts.key?(opt_name)
|
881
|
+
|
882
|
+
@supported_key_types = opts[opt_name].split(",")
|
883
|
+
@logger.debug("server supported key type list (using #{opt_name}): #{@supported_key_types}")
|
884
|
+
|
885
|
+
return @supported_key_types
|
886
|
+
end
|
887
|
+
|
888
|
+
# Still here means unable to determine key types
|
889
|
+
# so log what information was returned and toss
|
890
|
+
# and error
|
891
|
+
@logger.warn("failed to determine supported key types from remote inspection")
|
892
|
+
@logger.debug("data returned for supported key types remote inspection: #{list.inspect}")
|
893
|
+
|
894
|
+
raise ServerDataError, "no data available"
|
895
|
+
end
|
896
|
+
end
|
897
|
+
end
|
898
|
+
end
|