Full Code of hashicorp/vagrant for AI

main 0b7d460a450e cached
1925 files
6.1 MB
1.7M tokens
7228 symbols
1 requests
Download .txt
Showing preview only (6,733K chars total). Download the full file or copy to clipboard to get everything.
Repository: hashicorp/vagrant
Branch: main
Commit: 0b7d460a450e
Files: 1925
Total size: 6.1 MB

Directory structure:
gitextract_w81_rx3j/

├── .ci/
│   ├── .ci-utility-files/
│   │   └── common.sh
│   ├── build
│   ├── dev-build
│   ├── generate-licenses
│   ├── load-ci.sh
│   ├── nightly-build
│   ├── release
│   ├── release-initiator
│   ├── spec/
│   │   ├── clean-packet.sh
│   │   ├── create-hosts.sh
│   │   ├── create-packet.sh
│   │   ├── env.sh
│   │   ├── notify-success.sh
│   │   ├── pull-log.sh
│   │   └── run-test.sh
│   └── sync.sh
├── .copywrite.hcl
├── .github/
│   ├── CODEOWNERS
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.md
│   │   ├── config.yml
│   │   ├── engineering-task.md
│   │   └── vagrant-feature-request.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── backport.yml
│       ├── check-legacy-links-format.yml
│       ├── code.yml
│       ├── dev-appimage-build.yml
│       ├── dev-arch-build.yml
│       ├── dev-build.yml
│       ├── dev-debs-build.yml
│       ├── dev-macos-build.yml
│       ├── dev-rpms-build.yml
│       ├── dev-windows-build.yml
│       ├── initiate-release.yml
│       ├── lock.yml
│       ├── nightlies.yml
│       ├── release.yml
│       ├── testing-skipped.yml
│       └── testing.yml
├── .gitignore
├── .gitmodules
├── .vimrc
├── .yardopts
├── CHANGELOG.md
├── Gemfile
├── LICENSE
├── README.md
├── RELEASE.md
├── Rakefile
├── Vagrantfile
├── bin/
│   └── vagrant
├── builtin/
│   ├── README.md
│   ├── configvagrant/
│   │   └── main.go
│   ├── httpdownloader/
│   │   ├── downloader/
│   │   │   ├── downloader.go
│   │   │   └── httpmethod_string.go
│   │   └── main.go
│   ├── myplugin/
│   │   ├── command/
│   │   │   ├── command.go
│   │   │   ├── dothing.go
│   │   │   ├── host.go
│   │   │   ├── info.go
│   │   │   └── interactive.go
│   │   ├── communicator/
│   │   │   └── communicator.go
│   │   ├── host/
│   │   │   ├── alwaystrue.go
│   │   │   └── cap/
│   │   │       └── write_hello.go
│   │   ├── locales/
│   │   │   ├── assets/
│   │   │   │   ├── en.json
│   │   │   │   └── es.json
│   │   │   └── locales.go
│   │   ├── main.go
│   │   ├── mappers.go
│   │   ├── proto/
│   │   │   ├── plugin.pb.go
│   │   │   └── plugin.proto
│   │   ├── provider/
│   │   │   └── happy.go
│   │   └── push/
│   │       └── encouragement.go
│   └── otherplugin/
│       ├── command.go
│       ├── guest/
│       │   ├── alwaystrue.go
│       │   └── cap/
│       │       └── write_hello.go
│       └── main.go
├── contrib/
│   ├── README.md
│   ├── bash/
│   │   └── completion.sh
│   ├── emacs/
│   │   └── vagrant.el
│   ├── st/
│   │   └── Ruby.sublime-settings
│   ├── sudoers/
│   │   ├── linux-fedora
│   │   ├── linux-suse
│   │   ├── linux-ubuntu
│   │   └── osx
│   ├── vim/
│   │   └── vagrantfile.vim
│   └── zsh/
│       ├── _vagrant
│       └── generate_zsh_completion.rb
├── ext/
│   └── vagrant/
│       └── vagrant_ssl/
│           ├── extconf.rb
│           ├── vagrant_ssl.c
│           └── vagrant_ssl.h
├── keys/
│   ├── README.md
│   ├── vagrant
│   ├── vagrant.key.ed25519
│   ├── vagrant.key.rsa
│   ├── vagrant.pub
│   ├── vagrant.pub.ed25519
│   └── vagrant.pub.rsa
├── lib/
│   ├── vagrant/
│   │   ├── action/
│   │   │   ├── builder.rb
│   │   │   ├── builtin/
│   │   │   │   ├── box_add.rb
│   │   │   │   ├── box_check_outdated.rb
│   │   │   │   ├── box_remove.rb
│   │   │   │   ├── box_update.rb
│   │   │   │   ├── call.rb
│   │   │   │   ├── cleanup_disks.rb
│   │   │   │   ├── cloud_init_setup.rb
│   │   │   │   ├── cloud_init_wait.rb
│   │   │   │   ├── config_validate.rb
│   │   │   │   ├── confirm.rb
│   │   │   │   ├── delayed.rb
│   │   │   │   ├── destroy_confirm.rb
│   │   │   │   ├── disk.rb
│   │   │   │   ├── env_set.rb
│   │   │   │   ├── graceful_halt.rb
│   │   │   │   ├── handle_box.rb
│   │   │   │   ├── handle_box_url.rb
│   │   │   │   ├── handle_forwarded_port_collisions.rb
│   │   │   │   ├── has_provisioner.rb
│   │   │   │   ├── is_env_set.rb
│   │   │   │   ├── is_state.rb
│   │   │   │   ├── lock.rb
│   │   │   │   ├── message.rb
│   │   │   │   ├── mixin_provisioners.rb
│   │   │   │   ├── mixin_synced_folders.rb
│   │   │   │   ├── prepare_clone.rb
│   │   │   │   ├── provision.rb
│   │   │   │   ├── provisioner_cleanup.rb
│   │   │   │   ├── set_hostname.rb
│   │   │   │   ├── ssh_exec.rb
│   │   │   │   ├── ssh_run.rb
│   │   │   │   ├── synced_folder_cleanup.rb
│   │   │   │   ├── synced_folders.rb
│   │   │   │   ├── trigger.rb
│   │   │   │   └── wait_for_communicator.rb
│   │   │   ├── general/
│   │   │   │   ├── package.rb
│   │   │   │   ├── package_setup_files.rb
│   │   │   │   └── package_setup_folders.rb
│   │   │   ├── hook.rb
│   │   │   ├── primary_runner.rb
│   │   │   ├── runner.rb
│   │   │   └── warden.rb
│   │   ├── action.rb
│   │   ├── alias.rb
│   │   ├── batch_action.rb
│   │   ├── box.rb
│   │   ├── box_collection.rb
│   │   ├── box_metadata.rb
│   │   ├── bundler.rb
│   │   ├── capability_host.rb
│   │   ├── cli.rb
│   │   ├── config/
│   │   │   ├── loader.rb
│   │   │   ├── v1/
│   │   │   │   ├── dummy_config.rb
│   │   │   │   ├── loader.rb
│   │   │   │   └── root.rb
│   │   │   ├── v1.rb
│   │   │   ├── v2/
│   │   │   │   ├── dummy_config.rb
│   │   │   │   ├── loader.rb
│   │   │   │   ├── root.rb
│   │   │   │   └── util.rb
│   │   │   ├── v2.rb
│   │   │   └── version_base.rb
│   │   ├── config.rb
│   │   ├── environment.rb
│   │   ├── errors.rb
│   │   ├── guest.rb
│   │   ├── host.rb
│   │   ├── machine.rb
│   │   ├── machine_index.rb
│   │   ├── machine_state.rb
│   │   ├── patches/
│   │   │   ├── builder/
│   │   │   │   └── mkmf.rb
│   │   │   ├── fake_ftp.rb
│   │   │   ├── log4r.rb
│   │   │   ├── net-ssh.rb
│   │   │   ├── rubygems.rb
│   │   │   └── timeout_error.rb
│   │   ├── plugin/
│   │   │   ├── manager.rb
│   │   │   ├── state_file.rb
│   │   │   ├── v1/
│   │   │   │   ├── command.rb
│   │   │   │   ├── communicator.rb
│   │   │   │   ├── config.rb
│   │   │   │   ├── errors.rb
│   │   │   │   ├── guest.rb
│   │   │   │   ├── host.rb
│   │   │   │   ├── manager.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── provider.rb
│   │   │   │   └── provisioner.rb
│   │   │   ├── v1.rb
│   │   │   ├── v2/
│   │   │   │   ├── command.rb
│   │   │   │   ├── communicator.rb
│   │   │   │   ├── components.rb
│   │   │   │   ├── config.rb
│   │   │   │   ├── errors.rb
│   │   │   │   ├── guest.rb
│   │   │   │   ├── host.rb
│   │   │   │   ├── manager.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── provider.rb
│   │   │   │   ├── provisioner.rb
│   │   │   │   ├── push.rb
│   │   │   │   ├── synced_folder.rb
│   │   │   │   └── trigger.rb
│   │   │   └── v2.rb
│   │   ├── plugin.rb
│   │   ├── registry.rb
│   │   ├── shared_helpers.rb
│   │   ├── ui.rb
│   │   ├── util/
│   │   │   ├── ansi_escape_code_remover.rb
│   │   │   ├── busy.rb
│   │   │   ├── caps.rb
│   │   │   ├── checkpoint_client.rb
│   │   │   ├── command_deprecation.rb
│   │   │   ├── counter.rb
│   │   │   ├── credential_scrubber.rb
│   │   │   ├── curl_helper.rb
│   │   │   ├── deep_merge.rb
│   │   │   ├── directory.rb
│   │   │   ├── downloader.rb
│   │   │   ├── env.rb
│   │   │   ├── experimental.rb
│   │   │   ├── file_checksum.rb
│   │   │   ├── file_mode.rb
│   │   │   ├── file_mutex.rb
│   │   │   ├── guest_hosts.rb
│   │   │   ├── guest_inspection.rb
│   │   │   ├── guest_networks.rb
│   │   │   ├── hash_with_indifferent_access.rb
│   │   │   ├── install_cli_autocomplete.rb
│   │   │   ├── io.rb
│   │   │   ├── ipv4_interfaces.rb
│   │   │   ├── is_port_open.rb
│   │   │   ├── keypair.rb
│   │   │   ├── line_buffer.rb
│   │   │   ├── line_ending_helpers.rb
│   │   │   ├── logging_formatter.rb
│   │   │   ├── map_command_options.rb
│   │   │   ├── mime.rb
│   │   │   ├── network_ip.rb
│   │   │   ├── numeric.rb
│   │   │   ├── platform.rb
│   │   │   ├── powershell.rb
│   │   │   ├── presence.rb
│   │   │   ├── retryable.rb
│   │   │   ├── safe_chdir.rb
│   │   │   ├── safe_env.rb
│   │   │   ├── safe_exec.rb
│   │   │   ├── safe_puts.rb
│   │   │   ├── scoped_hash_override.rb
│   │   │   ├── shell_quote.rb
│   │   │   ├── silence_warnings.rb
│   │   │   ├── ssh.rb
│   │   │   ├── stacked_proc_runner.rb
│   │   │   ├── string_block_editor.rb
│   │   │   ├── subprocess.rb
│   │   │   ├── template_renderer.rb
│   │   │   ├── uploader.rb
│   │   │   ├── which.rb
│   │   │   └── windows_path.rb
│   │   ├── util.rb
│   │   ├── vagrantfile.rb
│   │   └── version.rb
│   └── vagrant.rb
├── plugins/
│   ├── README.md
│   ├── commands/
│   │   ├── autocomplete/
│   │   │   ├── command/
│   │   │   │   ├── install.rb
│   │   │   │   └── root.rb
│   │   │   └── plugin.rb
│   │   ├── box/
│   │   │   ├── command/
│   │   │   │   ├── add.rb
│   │   │   │   ├── download_mixins.rb
│   │   │   │   ├── list.rb
│   │   │   │   ├── outdated.rb
│   │   │   │   ├── prune.rb
│   │   │   │   ├── remove.rb
│   │   │   │   ├── repackage.rb
│   │   │   │   ├── root.rb
│   │   │   │   └── update.rb
│   │   │   └── plugin.rb
│   │   ├── cap/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── cloud/
│   │   │   ├── auth/
│   │   │   │   ├── login.rb
│   │   │   │   ├── logout.rb
│   │   │   │   ├── middleware/
│   │   │   │   │   ├── add_authentication.rb
│   │   │   │   │   └── add_downloader_authentication.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── root.rb
│   │   │   │   └── whoami.rb
│   │   │   ├── box/
│   │   │   │   ├── create.rb
│   │   │   │   ├── delete.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── root.rb
│   │   │   │   ├── show.rb
│   │   │   │   └── update.rb
│   │   │   ├── client/
│   │   │   │   └── client.rb
│   │   │   ├── errors.rb
│   │   │   ├── list.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   ├── provider/
│   │   │   │   ├── create.rb
│   │   │   │   ├── delete.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── root.rb
│   │   │   │   ├── update.rb
│   │   │   │   └── upload.rb
│   │   │   ├── publish.rb
│   │   │   ├── root.rb
│   │   │   ├── search.rb
│   │   │   ├── util.rb
│   │   │   └── version/
│   │   │       ├── create.rb
│   │   │       ├── delete.rb
│   │   │       ├── plugin.rb
│   │   │       ├── release.rb
│   │   │       ├── revoke.rb
│   │   │       ├── root.rb
│   │   │       └── update.rb
│   │   ├── destroy/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── global-status/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── halt/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── help/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── init/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── list-commands/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── login/
│   │   │   └── plugin.rb
│   │   ├── package/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── plugin/
│   │   │   ├── action/
│   │   │   │   ├── expunge_plugins.rb
│   │   │   │   ├── install_gem.rb
│   │   │   │   ├── license_plugin.rb
│   │   │   │   ├── list_plugins.rb
│   │   │   │   ├── plugin_exists_check.rb
│   │   │   │   ├── repair_plugins.rb
│   │   │   │   ├── uninstall_plugin.rb
│   │   │   │   └── update_gems.rb
│   │   │   ├── action.rb
│   │   │   ├── command/
│   │   │   │   ├── base.rb
│   │   │   │   ├── expunge.rb
│   │   │   │   ├── install.rb
│   │   │   │   ├── license.rb
│   │   │   │   ├── list.rb
│   │   │   │   ├── mixin_install_opts.rb
│   │   │   │   ├── repair.rb
│   │   │   │   ├── root.rb
│   │   │   │   ├── uninstall.rb
│   │   │   │   └── update.rb
│   │   │   ├── gem_helper.rb
│   │   │   └── plugin.rb
│   │   ├── port/
│   │   │   ├── command.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   └── plugin.rb
│   │   ├── powershell/
│   │   │   ├── command.rb
│   │   │   ├── errors.rb
│   │   │   ├── plugin.rb
│   │   │   └── scripts/
│   │   │       ├── enable_psremoting.ps1
│   │   │       └── reset_trustedhosts.ps1
│   │   ├── provider/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── provision/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── push/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── rdp/
│   │   │   ├── command.rb
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   └── plugin.rb
│   │   ├── reload/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── resume/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── snapshot/
│   │   │   ├── command/
│   │   │   │   ├── delete.rb
│   │   │   │   ├── list.rb
│   │   │   │   ├── pop.rb
│   │   │   │   ├── push.rb
│   │   │   │   ├── push_shared.rb
│   │   │   │   ├── restore.rb
│   │   │   │   ├── root.rb
│   │   │   │   └── save.rb
│   │   │   └── plugin.rb
│   │   ├── ssh/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── ssh_config/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── status/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── suspend/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── up/
│   │   │   ├── command.rb
│   │   │   ├── middleware/
│   │   │   │   └── store_box_metadata.rb
│   │   │   ├── plugin.rb
│   │   │   └── start_mixins.rb
│   │   ├── upload/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── validate/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── version/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── winrm/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   └── winrm_config/
│   │       ├── command.rb
│   │       └── plugin.rb
│   ├── communicators/
│   │   ├── none/
│   │   │   ├── communicator.rb
│   │   │   └── plugin.rb
│   │   ├── ssh/
│   │   │   ├── communicator.rb
│   │   │   └── plugin.rb
│   │   ├── winrm/
│   │   │   ├── command_filter.rb
│   │   │   ├── command_filters/
│   │   │   │   ├── cat.rb
│   │   │   │   ├── chmod.rb
│   │   │   │   ├── chown.rb
│   │   │   │   ├── grep.rb
│   │   │   │   ├── mkdir.rb
│   │   │   │   ├── rm.rb
│   │   │   │   ├── test.rb
│   │   │   │   ├── uname.rb
│   │   │   │   └── which.rb
│   │   │   ├── communicator.rb
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── helper.rb
│   │   │   ├── plugin.rb
│   │   │   └── shell.rb
│   │   └── winssh/
│   │       ├── communicator.rb
│   │       ├── config.rb
│   │       └── plugin.rb
│   ├── guests/
│   │   ├── alma/
│   │   │   ├── cap/
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── alpine/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── nfs_client.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── smb.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── alt/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── flavor.rb
│   │   │   │   ├── network_scripts_dir.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── amazon/
│   │   │   ├── cap/
│   │   │   │   ├── configure_networks.rb
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── arch/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── smb.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── atomic/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   └── docker.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── bsd/
│   │   │   ├── cap/
│   │   │   │   ├── file_system.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_virtualbox_shared_folder.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   └── public_key.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── centos/
│   │   │   ├── cap/
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── coreos/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   └── docker.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── darwin/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── choose_addressable_ip_addr.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── darwin_version.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_smb_shared_folder.rb
│   │   │   │   ├── mount_vmware_shared_folder.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   ├── shell_expand_guest_path.rb
│   │   │   │   └── verify_vmware_hgfs.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── debian/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── smb.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── dragonflybsd/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── elementary/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── esxi/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_nfs_folder.rb
│   │   │   │   └── public_key.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── fedora/
│   │   │   ├── cap/
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── freebsd/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── mount_virtualbox_shared_folder.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── shell_expand_guest_path.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── funtoo/
│   │   │   ├── cap/
│   │   │   │   └── configure_networks.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── gentoo/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   └── configure_networks.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── haiku/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── insert_public_key.rb
│   │   │   │   ├── remove_public_key.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── kali/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── linux/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── choose_addressable_ip_addr.rb
│   │   │   │   ├── file_system.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_smb_shared_folder.rb
│   │   │   │   ├── mount_virtualbox_shared_folder.rb
│   │   │   │   ├── network_interfaces.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── persist_mount_shared_folder.rb
│   │   │   │   ├── port.rb
│   │   │   │   ├── public_key.rb
│   │   │   │   ├── read_ip_address.rb
│   │   │   │   ├── reboot.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── shell_expand_guest_path.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── mint/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── netbsd/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── shell_expand_guest_path.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── nixos/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   └── nfs_client.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── omnios/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── mount_nfs_folder.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── openbsd/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── shell_expand_guest_path.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── openwrt/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── insert_public_key.rb
│   │   │   │   ├── remove_public_key.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── photon/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   └── docker.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── pld/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── flavor.rb
│   │   │   │   └── network_scripts_dir.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── redhat/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── flavor.rb
│   │   │   │   ├── network_scripts_dir.rb
│   │   │   │   ├── nfs_client.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── smb.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── rocky/
│   │   │   ├── cap/
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── slackware/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   └── configure_networks.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── smartos/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── insert_public_key.rb
│   │   │   │   ├── mount_nfs.rb
│   │   │   │   ├── remove_public_key.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── config.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── solaris/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── file_system.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── insert_public_key.rb
│   │   │   │   ├── mount_virtualbox_shared_folder.rb
│   │   │   │   ├── remove_public_key.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── config.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── solaris11/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   └── configure_networks.rb
│   │   │   ├── config.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── suse/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── network_scripts_dir.rb
│   │   │   │   ├── nfs_client.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── tinycore/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_nfs.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── trisquel/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── ubuntu/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   └── windows/
│   │       ├── cap/
│   │       │   ├── change_host_name.rb
│   │       │   ├── choose_addressable_ip_addr.rb
│   │       │   ├── configure_networks.rb
│   │       │   ├── file_system.rb
│   │       │   ├── halt.rb
│   │       │   ├── mount_shared_folder.rb
│   │       │   ├── public_key.rb
│   │       │   ├── reboot.rb
│   │       │   └── rsync.rb
│   │       ├── config.rb
│   │       ├── errors.rb
│   │       ├── guest.rb
│   │       ├── guest_network.rb
│   │       ├── plugin.rb
│   │       └── scripts/
│   │           ├── mount_volume.ps1.erb
│   │           ├── reboot_detect.ps1
│   │           ├── set_work_network.ps1
│   │           └── winrs_v3_get_adapters.ps1
│   ├── hosts/
│   │   ├── alt/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── arch/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── bsd/
│   │   │   ├── cap/
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── path.rb
│   │   │   │   └── ssh.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── darwin/
│   │   │   ├── cap/
│   │   │   │   ├── configured_ip_addresses.rb
│   │   │   │   ├── fs_iso.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── path.rb
│   │   │   │   ├── provider_install_virtualbox.rb
│   │   │   │   ├── rdp.rb
│   │   │   │   ├── smb.rb
│   │   │   │   └── version.rb
│   │   │   ├── host.rb
│   │   │   ├── plugin.rb
│   │   │   └── scripts/
│   │   │       └── install_virtualbox.sh
│   │   ├── freebsd/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── gentoo/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── linux/
│   │   │   ├── cap/
│   │   │   │   ├── fs_iso.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── rdp.rb
│   │   │   │   └── ssh.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── null/
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── redhat/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── slackware/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── suse/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── void/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   └── windows/
│   │       ├── cap/
│   │       │   ├── configured_ip_addresses.rb
│   │       │   ├── fs_iso.rb
│   │       │   ├── nfs.rb
│   │       │   ├── provider_install_virtualbox.rb
│   │       │   ├── ps.rb
│   │       │   ├── rdp.rb
│   │       │   ├── smb.rb
│   │       │   └── ssh.rb
│   │       ├── host.rb
│   │       ├── plugin.rb
│   │       └── scripts/
│   │           ├── check_credentials.ps1
│   │           ├── host_info.ps1
│   │           ├── install_virtualbox.ps1
│   │           ├── set_share.ps1
│   │           ├── set_ssh_key_permissions.ps1
│   │           ├── unset_share.ps1
│   │           └── utils/
│   │               └── VagrantSSH/
│   │                   └── VagrantSSH.psm1
│   ├── kernel_v1/
│   │   ├── config/
│   │   │   ├── nfs.rb
│   │   │   ├── package.rb
│   │   │   ├── ssh.rb
│   │   │   ├── vagrant.rb
│   │   │   └── vm.rb
│   │   └── plugin.rb
│   ├── kernel_v2/
│   │   ├── config/
│   │   │   ├── cloud_init.rb
│   │   │   ├── disk.rb
│   │   │   ├── package.rb
│   │   │   ├── push.rb
│   │   │   ├── ssh.rb
│   │   │   ├── ssh_connect.rb
│   │   │   ├── trigger.rb
│   │   │   ├── vagrant.rb
│   │   │   ├── vm.rb
│   │   │   ├── vm_provisioner.rb
│   │   │   ├── vm_subvm.rb
│   │   │   └── vm_trigger.rb
│   │   └── plugin.rb
│   ├── providers/
│   │   ├── docker/
│   │   │   ├── action/
│   │   │   │   ├── build.rb
│   │   │   │   ├── compare_synced_folders.rb
│   │   │   │   ├── connect_networks.rb
│   │   │   │   ├── create.rb
│   │   │   │   ├── destroy.rb
│   │   │   │   ├── destroy_build_image.rb
│   │   │   │   ├── destroy_network.rb
│   │   │   │   ├── forwarded_ports.rb
│   │   │   │   ├── has_ssh.rb
│   │   │   │   ├── host_machine.rb
│   │   │   │   ├── host_machine_build_dir.rb
│   │   │   │   ├── host_machine_port_checker.rb
│   │   │   │   ├── host_machine_port_warning.rb
│   │   │   │   ├── host_machine_required.rb
│   │   │   │   ├── host_machine_sync_folders.rb
│   │   │   │   ├── host_machine_sync_folders_disable.rb
│   │   │   │   ├── init_state.rb
│   │   │   │   ├── is_build.rb
│   │   │   │   ├── is_host_machine_created.rb
│   │   │   │   ├── login.rb
│   │   │   │   ├── prepare_forwarded_port_collision_params.rb
│   │   │   │   ├── prepare_networks.rb
│   │   │   │   ├── prepare_nfs_settings.rb
│   │   │   │   ├── prepare_nfs_valid_ids.rb
│   │   │   │   ├── prepare_ssh.rb
│   │   │   │   ├── pull.rb
│   │   │   │   ├── start.rb
│   │   │   │   ├── stop.rb
│   │   │   │   └── wait_for_running.rb
│   │   │   ├── action.rb
│   │   │   ├── cap/
│   │   │   │   ├── has_communicator.rb
│   │   │   │   ├── proxy_machine.rb
│   │   │   │   └── public_address.rb
│   │   │   ├── command/
│   │   │   │   ├── exec.rb
│   │   │   │   ├── logs.rb
│   │   │   │   └── run.rb
│   │   │   ├── communicator.rb
│   │   │   ├── config.rb
│   │   │   ├── driver/
│   │   │   │   └── compose.rb
│   │   │   ├── driver.rb
│   │   │   ├── errors.rb
│   │   │   ├── executor/
│   │   │   │   ├── local.rb
│   │   │   │   └── vagrant.rb
│   │   │   ├── hostmachine/
│   │   │   │   └── Vagrantfile
│   │   │   ├── plugin.rb
│   │   │   ├── provider.rb
│   │   │   └── synced_folder.rb
│   │   ├── hyperv/
│   │   │   ├── action/
│   │   │   │   ├── check_access.rb
│   │   │   │   ├── check_enabled.rb
│   │   │   │   ├── configure.rb
│   │   │   │   ├── delete_vm.rb
│   │   │   │   ├── export.rb
│   │   │   │   ├── import.rb
│   │   │   │   ├── is_windows.rb
│   │   │   │   ├── message_will_not_destroy.rb
│   │   │   │   ├── net_set_mac.rb
│   │   │   │   ├── net_set_vlan.rb
│   │   │   │   ├── package.rb
│   │   │   │   ├── package_metadata_json.rb
│   │   │   │   ├── package_setup_files.rb
│   │   │   │   ├── package_setup_folders.rb
│   │   │   │   ├── package_vagrantfile.rb
│   │   │   │   ├── read_guest_ip.rb
│   │   │   │   ├── read_state.rb
│   │   │   │   ├── resume_vm.rb
│   │   │   │   ├── set_name.rb
│   │   │   │   ├── snapshot_delete.rb
│   │   │   │   ├── snapshot_restore.rb
│   │   │   │   ├── snapshot_save.rb
│   │   │   │   ├── start_instance.rb
│   │   │   │   ├── stop_instance.rb
│   │   │   │   ├── suspend_vm.rb
│   │   │   │   └── wait_for_ip_address.rb
│   │   │   ├── action.rb
│   │   │   ├── cap/
│   │   │   │   ├── cleanup_disks.rb
│   │   │   │   ├── configure_disks.rb
│   │   │   │   ├── public_address.rb
│   │   │   │   ├── snapshot_list.rb
│   │   │   │   └── validate_disk_ext.rb
│   │   │   ├── config.rb
│   │   │   ├── driver.rb
│   │   │   ├── errors.rb
│   │   │   ├── plugin.rb
│   │   │   ├── provider.rb
│   │   │   └── scripts/
│   │   │       ├── add_dvd.ps1
│   │   │       ├── attach_disk_drive.ps1
│   │   │       ├── check_hyperv.ps1
│   │   │       ├── check_hyperv_access.ps1
│   │   │       ├── clone_vhd.ps1
│   │   │       ├── configure_vm.ps1
│   │   │       ├── create_snapshot.ps1
│   │   │       ├── delete_snapshot.ps1
│   │   │       ├── delete_vm.ps1
│   │   │       ├── dismount_vhd.ps1
│   │   │       ├── export_vm.ps1
│   │   │       ├── file_sync.ps1
│   │   │       ├── get_network_config.ps1
│   │   │       ├── get_network_mac.ps1
│   │   │       ├── get_scsi_controller.ps1
│   │   │       ├── get_switches.ps1
│   │   │       ├── get_vhd.ps1
│   │   │       ├── get_vm_status.ps1
│   │   │       ├── has_vmcx_support.ps1
│   │   │       ├── import_vm.ps1
│   │   │       ├── list_hdds.ps1
│   │   │       ├── list_snapshots.ps1
│   │   │       ├── new_vhd.ps1
│   │   │       ├── remove_disk_drive.ps1
│   │   │       ├── remove_dvd.ps1
│   │   │       ├── resize_disk_drive.ps1
│   │   │       ├── restore_snapshot.ps1
│   │   │       ├── resume_vm.ps1
│   │   │       ├── set_enhanced_session_transport_type.ps1
│   │   │       ├── set_name.ps1
│   │   │       ├── set_network_mac.ps1
│   │   │       ├── set_network_vlan.ps1
│   │   │       ├── set_vm_integration_services.ps1
│   │   │       ├── start_vm.ps1
│   │   │       ├── stop_vm.ps1
│   │   │       ├── suspend_vm.ps1
│   │   │       └── utils/
│   │   │           ├── VagrantMessages/
│   │   │           │   └── VagrantMessages.psm1
│   │   │           └── VagrantVM/
│   │   │               └── VagrantVM.psm1
│   │   └── virtualbox/
│   │       ├── action/
│   │       │   ├── boot.rb
│   │       │   ├── check_accessible.rb
│   │       │   ├── check_created.rb
│   │       │   ├── check_guest_additions.rb
│   │       │   ├── check_running.rb
│   │       │   ├── check_virtualbox.rb
│   │       │   ├── clean_machine_folder.rb
│   │       │   ├── clear_forwarded_ports.rb
│   │       │   ├── clear_network_interfaces.rb
│   │       │   ├── created.rb
│   │       │   ├── customize.rb
│   │       │   ├── destroy.rb
│   │       │   ├── destroy_unused_network_interfaces.rb
│   │       │   ├── discard_state.rb
│   │       │   ├── export.rb
│   │       │   ├── forced_halt.rb
│   │       │   ├── forward_ports.rb
│   │       │   ├── import.rb
│   │       │   ├── import_master.rb
│   │       │   ├── is_paused.rb
│   │       │   ├── is_running.rb
│   │       │   ├── is_saved.rb
│   │       │   ├── match_mac_address.rb
│   │       │   ├── message_already_running.rb
│   │       │   ├── message_not_created.rb
│   │       │   ├── message_not_running.rb
│   │       │   ├── message_will_not_destroy.rb
│   │       │   ├── network.rb
│   │       │   ├── network_fix_ipv6.rb
│   │       │   ├── package.rb
│   │       │   ├── package_setup_files.rb
│   │       │   ├── package_setup_folders.rb
│   │       │   ├── package_vagrantfile.rb
│   │       │   ├── prepare_clone_snapshot.rb
│   │       │   ├── prepare_forwarded_port_collision_params.rb
│   │       │   ├── prepare_nfs_settings.rb
│   │       │   ├── prepare_nfs_valid_ids.rb
│   │       │   ├── resume.rb
│   │       │   ├── sane_defaults.rb
│   │       │   ├── set_default_nic_type.rb
│   │       │   ├── set_name.rb
│   │       │   ├── setup_package_files.rb
│   │       │   ├── snapshot_delete.rb
│   │       │   ├── snapshot_restore.rb
│   │       │   ├── snapshot_save.rb
│   │       │   └── suspend.rb
│   │       ├── action.rb
│   │       ├── cap/
│   │       │   ├── cleanup_disks.rb
│   │       │   ├── configure_disks.rb
│   │       │   ├── mount_options.rb
│   │       │   ├── public_address.rb
│   │       │   └── validate_disk_ext.rb
│   │       ├── cap.rb
│   │       ├── config.rb
│   │       ├── driver/
│   │       │   ├── base.rb
│   │       │   ├── meta.rb
│   │       │   ├── version_4_0.rb
│   │       │   ├── version_4_1.rb
│   │       │   ├── version_4_2.rb
│   │       │   ├── version_4_3.rb
│   │       │   ├── version_5_0.rb
│   │       │   ├── version_5_1.rb
│   │       │   ├── version_5_2.rb
│   │       │   ├── version_6_0.rb
│   │       │   ├── version_6_1.rb
│   │       │   ├── version_7_0.rb
│   │       │   ├── version_7_1.rb
│   │       │   └── version_7_2.rb
│   │       ├── model/
│   │       │   ├── forwarded_port.rb
│   │       │   ├── storage_controller.rb
│   │       │   └── storage_controller_array.rb
│   │       ├── plugin.rb
│   │       ├── provider.rb
│   │       ├── synced_folder.rb
│   │       └── util/
│   │           └── compile_forwarded_ports.rb
│   ├── provisioners/
│   │   ├── ansible/
│   │   │   ├── cap/
│   │   │   │   └── guest/
│   │   │   │       ├── alpine/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── arch/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── debian/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── facts.rb
│   │   │   │       ├── fedora/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── freebsd/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── pip/
│   │   │   │       │   └── pip.rb
│   │   │   │       ├── posix/
│   │   │   │       │   └── ansible_installed.rb
│   │   │   │       ├── redhat/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── suse/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       └── ubuntu/
│   │   │   │           └── ansible_install.rb
│   │   │   ├── config/
│   │   │   │   ├── base.rb
│   │   │   │   ├── guest.rb
│   │   │   │   └── host.rb
│   │   │   ├── constants.rb
│   │   │   ├── errors.rb
│   │   │   ├── helpers.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner/
│   │   │       ├── base.rb
│   │   │       ├── guest.rb
│   │   │       └── host.rb
│   │   ├── cfengine/
│   │   │   ├── cap/
│   │   │   │   ├── debian/
│   │   │   │   │   └── cfengine_install.rb
│   │   │   │   ├── linux/
│   │   │   │   │   ├── cfengine_installed.rb
│   │   │   │   │   └── cfengine_needs_bootstrap.rb
│   │   │   │   ├── redhat/
│   │   │   │   │   └── cfengine_install.rb
│   │   │   │   └── suse/
│   │   │   │       └── cfengine_install.rb
│   │   │   ├── config.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── chef/
│   │   │   ├── cap/
│   │   │   │   ├── debian/
│   │   │   │   │   └── chef_install.rb
│   │   │   │   ├── freebsd/
│   │   │   │   │   ├── chef_install.rb
│   │   │   │   │   └── chef_installed.rb
│   │   │   │   ├── linux/
│   │   │   │   │   └── chef_installed.rb
│   │   │   │   ├── omnios/
│   │   │   │   │   ├── chef_install.rb
│   │   │   │   │   └── chef_installed.rb
│   │   │   │   ├── redhat/
│   │   │   │   │   └── chef_install.rb
│   │   │   │   ├── suse/
│   │   │   │   │   └── chef_install.rb
│   │   │   │   └── windows/
│   │   │   │       ├── chef_install.rb
│   │   │   │       └── chef_installed.rb
│   │   │   ├── command_builder.rb
│   │   │   ├── config/
│   │   │   │   ├── base.rb
│   │   │   │   ├── base_runner.rb
│   │   │   │   ├── chef_apply.rb
│   │   │   │   ├── chef_client.rb
│   │   │   │   ├── chef_solo.rb
│   │   │   │   └── chef_zero.rb
│   │   │   ├── installer.rb
│   │   │   ├── omnibus.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner/
│   │   │       ├── base.rb
│   │   │       ├── chef_apply.rb
│   │   │       ├── chef_client.rb
│   │   │       ├── chef_solo.rb
│   │   │       └── chef_zero.rb
│   │   ├── container/
│   │   │   ├── client.rb
│   │   │   ├── config.rb
│   │   │   ├── installer.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── docker/
│   │   │   ├── cap/
│   │   │   │   ├── centos/
│   │   │   │   │   ├── docker_install.rb
│   │   │   │   │   └── docker_start_service.rb
│   │   │   │   ├── debian/
│   │   │   │   │   ├── docker_install.rb
│   │   │   │   │   └── docker_start_service.rb
│   │   │   │   ├── fedora/
│   │   │   │   │   └── docker_install.rb
│   │   │   │   ├── linux/
│   │   │   │   │   ├── docker_configure_vagrant_user.rb
│   │   │   │   │   ├── docker_daemon_running.rb
│   │   │   │   │   └── docker_installed.rb
│   │   │   │   └── windows/
│   │   │   │       └── docker_daemon_running.rb
│   │   │   ├── client.rb
│   │   │   ├── config.rb
│   │   │   ├── installer.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── file/
│   │   │   ├── config.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── podman/
│   │   │   ├── cap/
│   │   │   │   ├── centos/
│   │   │   │   │   └── podman_install.rb
│   │   │   │   ├── linux/
│   │   │   │   │   └── podman_installed.rb
│   │   │   │   └── redhat/
│   │   │   │       └── podman_install.rb
│   │   │   ├── client.rb
│   │   │   ├── config.rb
│   │   │   ├── installer.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── puppet/
│   │   │   ├── config/
│   │   │   │   ├── puppet.rb
│   │   │   │   └── puppet_server.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner/
│   │   │       ├── puppet.rb
│   │   │       └── puppet_server.rb
│   │   ├── salt/
│   │   │   ├── bootstrap_downloader.rb
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   └── shell/
│   │       ├── config.rb
│   │       ├── plugin.rb
│   │       └── provisioner.rb
│   ├── pushes/
│   │   ├── atlas/
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   └── push.rb
│   │   ├── ftp/
│   │   │   ├── adapter.rb
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   └── push.rb
│   │   ├── heroku/
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   └── push.rb
│   │   ├── local-exec/
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   └── push.rb
│   │   └── noop/
│   │       ├── config.rb
│   │       ├── plugin.rb
│   │       └── push.rb
│   └── synced_folders/
│       ├── nfs/
│       │   ├── action_cleanup.rb
│       │   ├── config.rb
│       │   ├── plugin.rb
│       │   └── synced_folder.rb
│       ├── rsync/
│       │   ├── command/
│       │   │   ├── rsync.rb
│       │   │   └── rsync_auto.rb
│       │   ├── default_unix_cap.rb
│       │   ├── helper.rb
│       │   ├── plugin.rb
│       │   └── synced_folder.rb
│       ├── smb/
│       │   ├── cap/
│       │   │   ├── default_fstab_modification.rb
│       │   │   └── mount_options.rb
│       │   ├── config.rb
│       │   ├── errors.rb
│       │   ├── plugin.rb
│       │   └── synced_folder.rb
│       └── unix_mount_helpers.rb
├── scripts/
│   ├── install_rvm
│   ├── setup_tests
│   ├── sign.sh
│   └── website_push_www.sh
├── tasks/
│   ├── acceptance.rake
│   ├── bundler.rake
│   └── test.rake
├── templates/
│   ├── commands/
│   │   ├── init/
│   │   │   ├── Vagrantfile.erb
│   │   │   └── Vagrantfile.min.erb
│   │   ├── ssh_config/
│   │   │   └── config.erb
│   │   └── winrm_config/
│   │       └── config.erb
│   ├── config/
│   │   ├── messages.erb
│   │   └── validation_failed.erb
│   ├── guests/
│   │   ├── alpine/
│   │   │   ├── network_dhcp.erb
│   │   │   └── network_static.erb
│   │   ├── alt/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_ipv4address.erb
│   │   │   ├── network_ipv4route.erb
│   │   │   └── network_static.erb
│   │   ├── arch/
│   │   │   ├── default_network/
│   │   │   │   ├── network_dhcp.erb
│   │   │   │   ├── network_static.erb
│   │   │   │   └── network_static6.erb
│   │   │   └── systemd_networkd/
│   │   │       ├── network_dhcp.erb
│   │   │       ├── network_static.erb
│   │   │       └── network_static6.erb
│   │   ├── coreos/
│   │   │   └── etcd.service.erb
│   │   ├── debian/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── freebsd/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── funtoo/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── gentoo/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   ├── network_static6.erb
│   │   │   └── network_systemd.erb
│   │   ├── linux/
│   │   │   └── etc_fstab.erb
│   │   ├── netbsd/
│   │   │   ├── network_dhcp.erb
│   │   │   └── network_static.erb
│   │   ├── nixos/
│   │   │   ├── hostname.erb
│   │   │   └── network.erb
│   │   ├── openbsd/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── redhat/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── slackware/
│   │   │   ├── network_dhcp.erb
│   │   │   └── network_static.erb
│   │   └── suse/
│   │       ├── network_dhcp.erb
│   │       ├── network_static.erb
│   │       └── network_static6.erb
│   ├── license/
│   │   ├── license.html.tmpl
│   │   ├── license.rtf.tmpl
│   │   └── license.tmpl
│   ├── locales/
│   │   ├── comm_winrm.yml
│   │   ├── command_ps.yml
│   │   ├── command_rdp.yml
│   │   ├── en.yml
│   │   ├── guest_windows.yml
│   │   ├── providers_docker.yml
│   │   ├── providers_hyperv.yml
│   │   └── synced_folder_smb.yml
│   ├── networking/
│   │   └── network_manager/
│   │       └── network_manager_device.erb
│   ├── nfs/
│   │   ├── exports_bsd.erb
│   │   ├── exports_darwin.erb
│   │   └── exports_linux.erb
│   ├── package_Vagrantfile.erb
│   ├── provisioners/
│   │   ├── chef_client/
│   │   │   └── client.erb
│   │   ├── chef_solo/
│   │   │   └── solo.erb
│   │   └── chef_zero/
│   │       └── zero.erb
│   └── rgloader.rb
├── test/
│   ├── acceptance/
│   │   ├── base.rb
│   │   ├── provider-docker/
│   │   │   └── lifecycle_spec.rb
│   │   ├── provider-virtualbox/
│   │   │   ├── linked_clone_spec.rb
│   │   │   └── network_intnet_spec.rb
│   │   ├── shared/
│   │   │   └── context_virtualbox.rb
│   │   └── skeletons/
│   │       ├── basic_docker/
│   │       │   └── Vagrantfile
│   │       ├── linked_clone/
│   │       │   └── Vagrantfile
│   │       └── network_intnet/
│   │           └── Vagrantfile
│   ├── config/
│   │   └── acceptance_boxes.yml
│   ├── support/
│   │   └── isolated_environment.rb
│   ├── unit/
│   │   ├── base.rb
│   │   ├── bin/
│   │   │   └── vagrant_test.rb
│   │   ├── plugins/
│   │   │   ├── commands/
│   │   │   │   ├── autocomplete/
│   │   │   │   │   └── commands/
│   │   │   │   │       └── install_test.rb
│   │   │   │   ├── box/
│   │   │   │   │   └── command/
│   │   │   │   │       ├── add_test.rb
│   │   │   │   │       ├── outdated_test.rb
│   │   │   │   │       ├── prune_test.rb
│   │   │   │   │       ├── remove_test.rb
│   │   │   │   │       ├── repackage_test.rb
│   │   │   │   │       └── update_test.rb
│   │   │   │   ├── cap/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── cloud/
│   │   │   │   │   ├── auth/
│   │   │   │   │   │   ├── login_test.rb
│   │   │   │   │   │   ├── logout_test.rb
│   │   │   │   │   │   ├── middleware/
│   │   │   │   │   │   │   ├── add_authentication_test.rb
│   │   │   │   │   │   │   └── add_downloader_authentication_test.rb
│   │   │   │   │   │   └── whoami_test.rb
│   │   │   │   │   ├── box/
│   │   │   │   │   │   ├── create_test.rb
│   │   │   │   │   │   ├── delete_test.rb
│   │   │   │   │   │   ├── show_test.rb
│   │   │   │   │   │   └── update_test.rb
│   │   │   │   │   ├── client_test.rb
│   │   │   │   │   ├── list_test.rb
│   │   │   │   │   ├── provider/
│   │   │   │   │   │   ├── create_test.rb
│   │   │   │   │   │   ├── delete_test.rb
│   │   │   │   │   │   ├── update_test.rb
│   │   │   │   │   │   └── upload_test.rb
│   │   │   │   │   ├── publish_test.rb
│   │   │   │   │   ├── search_test.rb
│   │   │   │   │   └── version/
│   │   │   │   │       ├── create_test.rb
│   │   │   │   │       ├── delete_test.rb
│   │   │   │   │       ├── release_test.rb
│   │   │   │   │       ├── revoke_test.rb
│   │   │   │   │       └── update_test.rb
│   │   │   │   ├── destroy/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── global-status/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── init/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── list-commands/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── package/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── plugin/
│   │   │   │   │   └── action/
│   │   │   │   │       ├── expunge_plugins_test.rb
│   │   │   │   │       ├── install_gem_test.rb
│   │   │   │   │       ├── plugin_exists_check_test.rb
│   │   │   │   │       ├── uninstall_plugin_test.rb
│   │   │   │   │       └── update_gems_test.rb
│   │   │   │   ├── port/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── powershell/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── provider/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── push/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── reload/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── snapshot/
│   │   │   │   │   └── command/
│   │   │   │   │       ├── delete_test.rb
│   │   │   │   │       ├── list_test.rb
│   │   │   │   │       ├── pop_test.rb
│   │   │   │   │       ├── push_test.rb
│   │   │   │   │       ├── restore_test.rb
│   │   │   │   │       ├── root_test.rb
│   │   │   │   │       └── save_test.rb
│   │   │   │   ├── ssh_config/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── suspend/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── up/
│   │   │   │   │   ├── command_test.rb
│   │   │   │   │   └── middleware/
│   │   │   │   │       └── store_box_metadata_test.rb
│   │   │   │   ├── upload/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── validate/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── winrm/
│   │   │   │   │   └── command_test.rb
│   │   │   │   └── winrm_config/
│   │   │   │       └── command_test.rb
│   │   │   ├── communicators/
│   │   │   │   ├── none/
│   │   │   │   │   └── communicator_test.rb
│   │   │   │   ├── ssh/
│   │   │   │   │   └── communicator_test.rb
│   │   │   │   ├── winrm/
│   │   │   │   │   ├── command_filter_test.rb
│   │   │   │   │   ├── communicator_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── helper_test.rb
│   │   │   │   │   ├── plugin_test.rb
│   │   │   │   │   └── shell_test.rb
│   │   │   │   └── winssh/
│   │   │   │       └── communicator_test.rb
│   │   │   ├── guests/
│   │   │   │   ├── alma/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── flavor_test.rb
│   │   │   │   ├── alpine/
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   ├── change_host_name_test.rb
│   │   │   │   │   │   ├── configure_networks_test.rb
│   │   │   │   │   │   ├── halt_test.rb
│   │   │   │   │   │   ├── nfs_client_test.rb
│   │   │   │   │   │   └── rsync_test.rb
│   │   │   │   │   └── plugin_test.rb
│   │   │   │   ├── alt/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── flavor_test.rb
│   │   │   │   │       ├── network_scripts_dir_test.rb
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── amazon/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       └── flavor_test.rb
│   │   │   │   ├── arch/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── smb_test.rb
│   │   │   │   ├── atomic/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       └── docker_test.rb
│   │   │   │   ├── bsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── file_system_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── insert_public_key_test.rb
│   │   │   │   │       ├── mount_virtual_box_shared_folder_test.rb
│   │   │   │   │       ├── nfs_test.rb
│   │   │   │   │       └── remove_public_key_test.rb
│   │   │   │   ├── centos/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── flavor_test.rb
│   │   │   │   ├── coreos/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       └── docker_test.rb
│   │   │   │   ├── darwin/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── choose_addressable_ip_addr_test.rb
│   │   │   │   │       ├── darwin_version_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── mount_vmware_shared_folder_test.rb
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── debian/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── nfs_client_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── smb_test.rb
│   │   │   │   ├── esxi/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       └── public_key_test.rb
│   │   │   │   ├── freebsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── mount_virtual_box_shared_folder_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── gentoo/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── change_host_name_test.rb
│   │   │   │   ├── haiku/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── linux/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── choose_addressable_ip_addr_test.rb
│   │   │   │   │       ├── file_system_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── insert_public_key_test.rb
│   │   │   │   │       ├── mount_nfs_test.rb
│   │   │   │   │       ├── mount_shared_folder_test.rb
│   │   │   │   │       ├── mount_smb_shared_folder_test.rb
│   │   │   │   │       ├── mount_virtual_box_shared_folder_test.rb
│   │   │   │   │       ├── network_interfaces_test.rb
│   │   │   │   │       ├── nfs_client_test.rb
│   │   │   │   │       ├── persist_mount_shared_folder_test.rb
│   │   │   │   │       ├── port_test.rb
│   │   │   │   │       ├── reboot_test.rb
│   │   │   │   │       ├── remove_public_key_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── netbsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── omnios/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── mount_nfs_folder_test.rb
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── openbsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── openwrt/
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   ├── change_host_name_test.rb
│   │   │   │   │   │   ├── halt_test.rb
│   │   │   │   │   │   ├── insert_public_key_test.rb
│   │   │   │   │   │   ├── remove_public_key_test.rb
│   │   │   │   │   │   └── rsync_test.rb
│   │   │   │   │   └── guest_test.rb
│   │   │   │   ├── photon/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       └── docker_test.rb
│   │   │   │   ├── pld/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── flavor_test.rb
│   │   │   │   │       └── network_scripts_dir_test.rb
│   │   │   │   ├── redhat/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── flavor_test.rb
│   │   │   │   │       ├── network_scripts_dir_test.rb
│   │   │   │   │       ├── nfs_client_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── smb_test.rb
│   │   │   │   ├── rocky/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── flavor_test.rb
│   │   │   │   ├── slackware/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       └── configure_networks_test.rb
│   │   │   │   ├── smartos/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── insert_public_key_test.rb
│   │   │   │   │       ├── mount_nfs_test.rb
│   │   │   │   │       ├── remove_public_key_test.rb
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── solaris/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── file_system_test.rb
│   │   │   │   │       └── halt_test.rb
│   │   │   │   ├── solaris11/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       └── configure_networks_test.rb
│   │   │   │   ├── suse/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── network_scripts_dir_test.rb
│   │   │   │   │       ├── nfs_client_test.rb
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── tinycore/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       └── halt_test.rb
│   │   │   │   └── windows/
│   │   │   │       ├── cap/
│   │   │   │       │   ├── change_host_name_test.rb
│   │   │   │       │   ├── file_system_test.rb
│   │   │   │       │   ├── halt_test.rb
│   │   │   │       │   ├── insert_public_key_test.rb
│   │   │   │       │   ├── mount_shared_folder_test.rb
│   │   │   │       │   ├── reboot_test.rb
│   │   │   │       │   ├── remove_public_key_test.rb
│   │   │   │       │   └── rsync_test.rb
│   │   │   │       ├── config_test.rb
│   │   │   │       └── guest_network_test.rb
│   │   │   ├── hosts/
│   │   │   │   ├── bsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── nfs_test.rb
│   │   │   │   │       ├── path_test.rb
│   │   │   │   │       └── ssh_test.rb
│   │   │   │   ├── darwin/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── configured_ip_addresses_test.rb
│   │   │   │   │       ├── fs_iso_test.rb
│   │   │   │   │       ├── nfs_test.rb
│   │   │   │   │       ├── path_test.rb
│   │   │   │   │       ├── rdp_test.rb
│   │   │   │   │       ├── smb_test.rb
│   │   │   │   │       └── version_test.rb
│   │   │   │   ├── linux/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── fs_iso_test.rb
│   │   │   │   │       ├── nfs_test.rb
│   │   │   │   │       └── ssh_test.rb
│   │   │   │   ├── void/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── nfs_test.rb
│   │   │   │   └── windows/
│   │   │   │       └── cap/
│   │   │   │           ├── configure_ip_addresses_test.rb
│   │   │   │           ├── fs_iso_test.rb
│   │   │   │           ├── smb_test.rb
│   │   │   │           └── ssh_test.rb
│   │   │   ├── kernel_v2/
│   │   │   │   └── config/
│   │   │   │       ├── cloud_init_test.rb
│   │   │   │       ├── disk_test.rb
│   │   │   │       ├── package_test.rb
│   │   │   │       ├── push_test.rb
│   │   │   │       ├── ssh_connect_test.rb
│   │   │   │       ├── ssh_test.rb
│   │   │   │       ├── trigger_test.rb
│   │   │   │       ├── vagrant_test.rb
│   │   │   │       ├── vm_test.rb
│   │   │   │       └── vm_trigger_test.rb
│   │   │   ├── providers/
│   │   │   │   ├── docker/
│   │   │   │   │   ├── action/
│   │   │   │   │   │   ├── compare_synced_folders_test.rb
│   │   │   │   │   │   ├── connect_networks_test.rb
│   │   │   │   │   │   ├── create_test.rb
│   │   │   │   │   │   ├── destroy_network_test.rb
│   │   │   │   │   │   ├── host_machine_sync_folders_test.rb
│   │   │   │   │   │   ├── login_test.rb
│   │   │   │   │   │   └── prepare_networks_test.rb
│   │   │   │   │   ├── command/
│   │   │   │   │   │   └── exec_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── driver_compose_test.rb
│   │   │   │   │   ├── driver_test.rb
│   │   │   │   │   ├── provider_test.rb
│   │   │   │   │   └── synced_folder_test.rb
│   │   │   │   ├── hyperv/
│   │   │   │   │   ├── action/
│   │   │   │   │   │   ├── check_enabled_test.rb
│   │   │   │   │   │   ├── configure_test.rb
│   │   │   │   │   │   ├── delete_vm_test.rb
│   │   │   │   │   │   ├── export_test.rb
│   │   │   │   │   │   ├── import_test.rb
│   │   │   │   │   │   ├── is_windows_test.rb
│   │   │   │   │   │   ├── net_set_mac_test.rb
│   │   │   │   │   │   ├── net_set_vlan_test.rb
│   │   │   │   │   │   ├── read_guest_ip_test.rb
│   │   │   │   │   │   ├── read_state_test.rb
│   │   │   │   │   │   ├── set_name_test.rb
│   │   │   │   │   │   └── wait_for_ip_address_test.rb
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   ├── cleanup_disks_test.rb
│   │   │   │   │   │   └── configure_disks_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── driver_test.rb
│   │   │   │   │   └── provider_test.rb
│   │   │   │   └── virtualbox/
│   │   │   │       ├── action/
│   │   │   │       │   ├── clean_machine_folder_test.rb
│   │   │   │       │   ├── import_test.rb
│   │   │   │       │   ├── match_mac_address_test.rb
│   │   │   │       │   ├── network_fix_ipv6_test.rb
│   │   │   │       │   ├── network_test.rb
│   │   │   │       │   ├── prepare_nfs_settings_test.rb
│   │   │   │       │   ├── prepare_nfs_valid_ids_test.rb
│   │   │   │       │   └── set_default_nic_type_test.rb
│   │   │   │       ├── base.rb
│   │   │   │       ├── cap/
│   │   │   │       │   ├── cleanup_disks_test.rb
│   │   │   │       │   ├── configure_disks_test.rb
│   │   │   │       │   ├── mount_options_test.rb
│   │   │   │       │   └── public_address_test.rb
│   │   │   │       ├── cap_test.rb
│   │   │   │       ├── config_test.rb
│   │   │   │       ├── driver/
│   │   │   │       │   ├── base.rb
│   │   │   │       │   ├── version_4_0_test.rb
│   │   │   │       │   ├── version_4_1_test.rb
│   │   │   │       │   ├── version_4_2_test.rb
│   │   │   │       │   ├── version_4_3_test.rb
│   │   │   │       │   ├── version_5_0_test.rb
│   │   │   │       │   ├── version_6_0_test.rb
│   │   │   │       │   ├── version_6_1_test.rb
│   │   │   │       │   ├── version_7_0_test.rb
│   │   │   │       │   ├── version_7_1_test.rb
│   │   │   │       │   └── version_7_2_test.rb
│   │   │   │       ├── model/
│   │   │   │       │   ├── storage_controller_array_test.rb
│   │   │   │       │   └── storage_controller_test.rb
│   │   │   │       ├── provider_test.rb
│   │   │   │       ├── support/
│   │   │   │       │   └── shared/
│   │   │   │       │       ├── virtualbox_driver_version_4_x_examples.rb
│   │   │   │       │       ├── virtualbox_driver_version_5_x_examples.rb
│   │   │   │       │       ├── virtualbox_driver_version_6_x_examples.rb
│   │   │   │       │       └── virtualbox_driver_version_7_x_examples.rb
│   │   │   │       └── synced_folder_test.rb
│   │   │   ├── provisioners/
│   │   │   │   ├── ansible/
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   └── guest/
│   │   │   │   │   │       ├── alpine/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── arch/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── debian/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── freebsd/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── pip/
│   │   │   │   │   │       │   └── pip_test.rb
│   │   │   │   │   │       ├── redhat/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── shared/
│   │   │   │   │   │       │   └── pip_ansible_install_examples.rb
│   │   │   │   │   │       ├── suse/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       └── ubuntu/
│   │   │   │   │   │           └── ansible_install_test.rb
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── guest_test.rb
│   │   │   │   │   │   ├── host_test.rb
│   │   │   │   │   │   └── shared.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── chef/
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   ├── freebsd/
│   │   │   │   │   │   │   └── chef_installed_test.rb
│   │   │   │   │   │   ├── linux/
│   │   │   │   │   │   │   └── chef_installed_test.rb
│   │   │   │   │   │   ├── omnios/
│   │   │   │   │   │   │   └── chef_installed_test.rb
│   │   │   │   │   │   └── windows/
│   │   │   │   │   │       └── chef_installed_test.rb
│   │   │   │   │   ├── command_builder_test.rb
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── base_runner_test.rb
│   │   │   │   │   │   ├── base_test.rb
│   │   │   │   │   │   ├── chef_apply_test.rb
│   │   │   │   │   │   ├── chef_client_test.rb
│   │   │   │   │   │   ├── chef_solo_test.rb
│   │   │   │   │   │   └── chef_zero_test.rb
│   │   │   │   │   ├── omnibus_test.rb
│   │   │   │   │   └── provisioner/
│   │   │   │   │       ├── base_test.rb
│   │   │   │   │       └── chef_solo_test.rb
│   │   │   │   ├── container/
│   │   │   │   │   ├── client_test.rb
│   │   │   │   │   └── config_test.rb
│   │   │   │   ├── docker/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── installer_test.rb
│   │   │   │   │   ├── plugin_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── file/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── podman/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── installer_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── puppet/
│   │   │   │   │   └── provisioner/
│   │   │   │   │       └── puppet_test.rb
│   │   │   │   ├── salt/
│   │   │   │   │   ├── bootstrap_downloader_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── shell/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   └── support/
│   │   │   │       └── shared/
│   │   │   │           └── config.rb
│   │   │   ├── pushes/
│   │   │   │   ├── atlas/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── push_test.rb
│   │   │   │   ├── ftp/
│   │   │   │   │   ├── adapter_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── push_test.rb
│   │   │   │   ├── heroku/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── push_test.rb
│   │   │   │   ├── local-exec/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── push_test.rb
│   │   │   │   └── noop/
│   │   │   │       └── config_test.rb
│   │   │   └── synced_folders/
│   │   │       ├── nfs/
│   │   │       │   ├── action_cleanup_test.rb
│   │   │       │   └── config_test.rb
│   │   │       ├── rsync/
│   │   │       │   ├── command/
│   │   │       │   │   ├── rsync_auto_test.rb
│   │   │       │   │   └── rsync_test.rb
│   │   │       │   ├── default_unix_cap_test.rb
│   │   │       │   ├── helper_test.rb
│   │   │       │   └── synced_folder_test.rb
│   │   │       ├── smb/
│   │   │       │   ├── caps/
│   │   │       │   │   └── mount_options_test.rb
│   │   │       │   └── synced_folder_test.rb
│   │   │       └── unix_mount_helpers_test.rb
│   │   ├── support/
│   │   │   ├── dummy_communicator.rb
│   │   │   ├── dummy_provider.rb
│   │   │   ├── isolated_environment.rb
│   │   │   └── shared/
│   │   │       ├── action_synced_folders_context.rb
│   │   │       ├── base_context.rb
│   │   │       ├── capability_helpers_context.rb
│   │   │       ├── plugin_command_context.rb
│   │   │       └── virtualbox_context.rb
│   │   ├── templates/
│   │   │   ├── commands/
│   │   │   │   └── init/
│   │   │   │       └── Vagrantfile.erb
│   │   │   ├── guests/
│   │   │   │   ├── arch/
│   │   │   │   │   ├── default_network/
│   │   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   │   └── network_static_test.rb
│   │   │   │   │   └── systemd_networkd/
│   │   │   │   │       ├── network_dhcp_test.rb
│   │   │   │   │       └── network_static_test.rb
│   │   │   │   ├── debian/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   ├── freebsd/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   ├── funtoo/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   ├── gentoo/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   ├── network_static_test.rb
│   │   │   │   │   └── systemd_network_test.rb
│   │   │   │   ├── netbsd/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   ├── nixos/
│   │   │   │   │   └── network_test.rb
│   │   │   │   ├── redhat/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   └── suse/
│   │   │   │       ├── network_dhcp_test.rb
│   │   │   │       ├── network_static6_test.rb
│   │   │   │       └── network_static_test.rb
│   │   │   └── nfs/
│   │   │       └── exports_darwin_test.rb
│   │   ├── vagrant/
│   │   │   ├── action/
│   │   │   │   ├── builder_test.rb
│   │   │   │   ├── builtin/
│   │   │   │   │   ├── box_add_test.rb
│   │   │   │   │   ├── box_check_outdated_test.rb
│   │   │   │   │   ├── box_remove_test.rb
│   │   │   │   │   ├── call_test.rb
│   │   │   │   │   ├── cleanup_disks_test.rb
│   │   │   │   │   ├── cloud_init_setup_test.rb
│   │   │   │   │   ├── cloud_init_wait_test.rb
│   │   │   │   │   ├── confirm_test.rb
│   │   │   │   │   ├── delayed_test.rb
│   │   │   │   │   ├── disk_test.rb
│   │   │   │   │   ├── env_set_test.rb
│   │   │   │   │   ├── graceful_halt_test.rb
│   │   │   │   │   ├── handle_box_test.rb
│   │   │   │   │   ├── handle_forwarded_port_collisions_test.rb
│   │   │   │   │   ├── has_provisioner_test.rb
│   │   │   │   │   ├── is_env_set_test.rb
│   │   │   │   │   ├── is_state_test.rb
│   │   │   │   │   ├── lock_test.rb
│   │   │   │   │   ├── message_test.rb
│   │   │   │   │   ├── mixin_provisioners_test.rb
│   │   │   │   │   ├── mixin_synced_folders_test.rb
│   │   │   │   │   ├── provision_test.rb
│   │   │   │   │   ├── provisioner_cleanup_test.rb
│   │   │   │   │   ├── set_hostname_test.rb
│   │   │   │   │   ├── ssh_exec_test.rb
│   │   │   │   │   ├── ssh_run_test.rb
│   │   │   │   │   ├── synced_folder_cleanup_test.rb
│   │   │   │   │   ├── synced_folders_test.rb
│   │   │   │   │   ├── trigger_test.rb
│   │   │   │   │   └── wait_for_communicator_test.rb
│   │   │   │   ├── general/
│   │   │   │   │   └── package_test.rb
│   │   │   │   ├── hook_test.rb
│   │   │   │   ├── runner_test.rb
│   │   │   │   └── warden_test.rb
│   │   │   ├── alias_test.rb
│   │   │   ├── batch_action_test.rb
│   │   │   ├── box_collection_test.rb
│   │   │   ├── box_metadata_test.rb
│   │   │   ├── box_test.rb
│   │   │   ├── bundler_test.rb
│   │   │   ├── capability_host_test.rb
│   │   │   ├── cli_test.rb
│   │   │   ├── config/
│   │   │   │   ├── loader_test.rb
│   │   │   │   ├── v1/
│   │   │   │   │   ├── dummy_config_test.rb
│   │   │   │   │   ├── loader_test.rb
│   │   │   │   │   └── root_test.rb
│   │   │   │   └── v2/
│   │   │   │       ├── dummy_config_test.rb
│   │   │   │       ├── loader_test.rb
│   │   │   │       ├── root_test.rb
│   │   │   │       └── util_test.rb
│   │   │   ├── config_test.rb
│   │   │   ├── environment_test.rb
│   │   │   ├── errors_test.rb
│   │   │   ├── guest_test.rb
│   │   │   ├── host_test.rb
│   │   │   ├── machine_index_test.rb
│   │   │   ├── machine_state_test.rb
│   │   │   ├── machine_test.rb
│   │   │   ├── plugin/
│   │   │   │   ├── manager_test.rb
│   │   │   │   ├── state_file_test.rb
│   │   │   │   ├── v1/
│   │   │   │   │   ├── command_test.rb
│   │   │   │   │   ├── communicator_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── host_test.rb
│   │   │   │   │   ├── manager_test.rb
│   │   │   │   │   ├── plugin_test.rb
│   │   │   │   │   └── provider_test.rb
│   │   │   │   └── v2/
│   │   │   │       ├── command_test.rb
│   │   │   │       ├── communicator_test.rb
│   │   │   │       ├── components_test.rb
│   │   │   │       ├── config_test.rb
│   │   │   │       ├── host_test.rb
│   │   │   │       ├── manager_test.rb
│   │   │   │       ├── plugin_test.rb
│   │   │   │       ├── provider_test.rb
│   │   │   │       ├── synced_folder_test.rb
│   │   │   │       └── trigger_test.rb
│   │   │   ├── registry_test.rb
│   │   │   ├── shared_helpers_test.rb
│   │   │   ├── ui_test.rb
│   │   │   ├── util/
│   │   │   │   ├── ansi_escape_code_remover_test.rb
│   │   │   │   ├── caps_test.rb
│   │   │   │   ├── checkpoint_client_test.rb
│   │   │   │   ├── command_deprecation_test.rb
│   │   │   │   ├── credential_scrubber_test.rb
│   │   │   │   ├── curl_helper_test.rb
│   │   │   │   ├── deep_merge_test.rb
│   │   │   │   ├── directory_test.rb
│   │   │   │   ├── downloader_test.rb
│   │   │   │   ├── env_test.rb
│   │   │   │   ├── experimental_test.rb
│   │   │   │   ├── file_checksum_test.rb
│   │   │   │   ├── file_mutex_test.rb
│   │   │   │   ├── guest_hosts_test.rb
│   │   │   │   ├── guest_inspection_test.rb
│   │   │   │   ├── guest_networks_spec.rb
│   │   │   │   ├── hash_with_indifferent_access_test.rb
│   │   │   │   ├── install_cli_autocomplete_test.rb
│   │   │   │   ├── io_test.rb
│   │   │   │   ├── ipv4_interfaces_test.rb
│   │   │   │   ├── is_port_open_test.rb
│   │   │   │   ├── keypair_test.rb
│   │   │   │   ├── line_buffer_test.rb
│   │   │   │   ├── line_endings_helper_test.rb
│   │   │   │   ├── map_command_options_test.rb
│   │   │   │   ├── mime_test.rb
│   │   │   │   ├── network_ip_test.rb
│   │   │   │   ├── numeric_test.rb
│   │   │   │   ├── platform_test.rb
│   │   │   │   ├── powershell_test.rb
│   │   │   │   ├── presence_test.rb
│   │   │   │   ├── retryable_test.rb
│   │   │   │   ├── safe_chdir_test.rb
│   │   │   │   ├── scoped_hash_override_test.rb
│   │   │   │   ├── shell_quote_test.rb
│   │   │   │   ├── ssh_test.rb
│   │   │   │   ├── string_block_editor_test.rb
│   │   │   │   ├── subprocess_test.rb
│   │   │   │   ├── uploader_test.rb
│   │   │   │   └── which_test.rb
│   │   │   └── vagrantfile_test.rb
│   │   └── vagrant_test.rb
│   └── vagrant-spec/
│       ├── .runner-vmware.sh
│       ├── Vagrantfile.spec
│       ├── boxes/
│       │   └── .keep
│       ├── configs/
│       │   ├── vagrant-spec.config.docker.rb
│       │   └── vagrant-spec.config.virtualbox.rb
│       ├── readme.md
│       └── scripts/
│           ├── centos-run.virtualbox.sh
│           ├── centos-setup.virtualbox.sh
│           ├── ubuntu-install-vagrant.sh
│           ├── ubuntu-run.docker.sh
│           ├── ubuntu-run.virtualbox.sh
│           ├── ubuntu-setup.docker.sh
│           ├── ubuntu-setup.virtualbox.sh
│           ├── windows-run.virtualbox.ps1
│           └── windows-setup.virtualbox.ps1
├── vagrant-spec.config.example.rb
├── vagrant.gemspec
├── version.txt
└── website/
    ├── .editorconfig
    ├── .env
    ├── .eslintrc.js
    ├── .gitignore
    ├── .nvmrc
    ├── .stylelintrc.js
    ├── LICENSE.md
    ├── Makefile
    ├── README.md
    ├── content/
    │   ├── docs/
    │   │   ├── boxes/
    │   │   │   ├── base.mdx
    │   │   │   ├── box_repository.mdx
    │   │   │   ├── format.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── info.mdx
    │   │   │   └── versioning.mdx
    │   │   ├── cli/
    │   │   │   ├── aliases.mdx
    │   │   │   ├── box.mdx
    │   │   │   ├── cloud.mdx
    │   │   │   ├── connect.mdx
    │   │   │   ├── destroy.mdx
    │   │   │   ├── global-status.mdx
    │   │   │   ├── halt.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── init.mdx
    │   │   │   ├── login.mdx
    │   │   │   ├── machine-readable.mdx
    │   │   │   ├── non-primary.mdx
    │   │   │   ├── package.mdx
    │   │   │   ├── plugin.mdx
    │   │   │   ├── port.mdx
    │   │   │   ├── powershell.mdx
    │   │   │   ├── provision.mdx
    │   │   │   ├── rdp.mdx
    │   │   │   ├── reload.mdx
    │   │   │   ├── resume.mdx
    │   │   │   ├── rsync-auto.mdx
    │   │   │   ├── rsync.mdx
    │   │   │   ├── share.mdx
    │   │   │   ├── snapshot.mdx
    │   │   │   ├── ssh.mdx
    │   │   │   ├── ssh_config.mdx
    │   │   │   ├── status.mdx
    │   │   │   ├── suspend.mdx
    │   │   │   ├── up.mdx
    │   │   │   ├── upload.mdx
    │   │   │   ├── validate.mdx
    │   │   │   ├── version.mdx
    │   │   │   ├── winrm.mdx
    │   │   │   └── winrm_config.mdx
    │   │   ├── cloud-init/
    │   │   │   ├── configuration.mdx
    │   │   │   ├── index.mdx
    │   │   │   └── usage.mdx
    │   │   ├── disks/
    │   │   │   ├── configuration.mdx
    │   │   │   ├── hyperv/
    │   │   │   │   ├── common-issues.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   └── usage.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── usage.mdx
    │   │   │   ├── virtualbox/
    │   │   │   │   ├── common-issues.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   └── usage.mdx
    │   │   │   └── vmware/
    │   │   │       ├── common-issues.mdx
    │   │   │       ├── index.mdx
    │   │   │       └── usage.mdx
    │   │   ├── experimental/
    │   │   │   └── index.mdx
    │   │   ├── index.mdx
    │   │   ├── installation/
    │   │   │   ├── backwards-compatibility.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── source.mdx
    │   │   │   ├── uninstallation.mdx
    │   │   │   ├── upgrading-from-1-0.mdx
    │   │   │   └── upgrading.mdx
    │   │   ├── multi-machine.mdx
    │   │   ├── networking/
    │   │   │   ├── basic_usage.mdx
    │   │   │   ├── forwarded_ports.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── private_network.mdx
    │   │   │   └── public_network.mdx
    │   │   ├── other/
    │   │   │   ├── debugging.mdx
    │   │   │   ├── environmental-variables.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── macos-catalina.mdx
    │   │   │   └── wsl.mdx
    │   │   ├── plugins/
    │   │   │   ├── action-hooks.mdx
    │   │   │   ├── commands.mdx
    │   │   │   ├── configuration.mdx
    │   │   │   ├── development-basics.mdx
    │   │   │   ├── go-plugins/
    │   │   │   │   ├── guests.mdx
    │   │   │   │   └── index.mdx
    │   │   │   ├── guest-capabilities.mdx
    │   │   │   ├── guests.mdx
    │   │   │   ├── host-capabilities.mdx
    │   │   │   ├── hosts.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── packaging.mdx
    │   │   │   ├── providers.mdx
    │   │   │   ├── provisioners.mdx
    │   │   │   └── usage.mdx
    │   │   ├── providers/
    │   │   │   ├── basic_usage.mdx
    │   │   │   ├── configuration.mdx
    │   │   │   ├── custom.mdx
    │   │   │   ├── default.mdx
    │   │   │   ├── docker/
    │   │   │   │   ├── basics.mdx
    │   │   │   │   ├── boxes.mdx
    │   │   │   │   ├── commands.mdx
    │   │   │   │   ├── configuration.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   └── networking.mdx
    │   │   │   ├── hyperv/
    │   │   │   │   ├── boxes.mdx
    │   │   │   │   ├── configuration.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   ├── limitations.mdx
    │   │   │   │   └── usage.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── installation.mdx
    │   │   │   ├── virtualbox/
    │   │   │   │   ├── boxes.mdx
    │   │   │   │   ├── common-issues.mdx
    │   │   │   │   ├── configuration.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   ├── networking.mdx
    │   │   │   │   └── usage.mdx
    │   │   │   └── vmware/
    │   │   │       ├── boxes.mdx
    │   │   │       ├── configuration.mdx
    │   │   │       ├── faq.mdx
    │   │   │       ├── index.mdx
    │   │   │       ├── installation.mdx
    │   │   │       ├── known-issues.mdx
    │   │   │       ├── usage.mdx
    │   │   │       └── vagrant-vmware-utility.mdx
    │   │   ├── provisioning/
    │   │   │   ├── ansible.mdx
    │   │   │   ├── ansible_common.mdx
    │   │   │   ├── ansible_intro.mdx
    │   │   │   ├── ansible_local.mdx
    │   │   │   ├── basic_usage.mdx
    │   │   │   ├── cfengine.mdx
    │   │   │   ├── chef_apply.mdx
    │   │   │   ├── chef_client.mdx
    │   │   │   ├── chef_common.mdx
    │   │   │   ├── chef_solo.mdx
    │   │   │   ├── chef_zero.mdx
    │   │   │   ├── docker.mdx
    │   │   │   ├── file.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── podman.mdx
    │   │   │   ├── puppet_agent.mdx
    │   │   │   ├── puppet_apply.mdx
    │   │   │   ├── salt.mdx
    │   │   │   └── shell.mdx
    │   │   ├── push/
    │   │   │   ├── ftp.mdx
    │   │   │   ├── heroku.mdx
    │   │   │   ├── index.mdx
    │   │   │   └── local-exec.mdx
    │   │   ├── share/
    │   │   │   ├── connect.mdx
    │   │   │   ├── http.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── provider.mdx
    │   │   │   ├── security.mdx
    │   │   │   └── ssh.mdx
    │   │   ├── synced-folders/
    │   │   │   ├── basic_usage.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── nfs.mdx
    │   │   │   ├── rsync.mdx
    │   │   │   ├── smb.mdx
    │   │   │   └── virtualbox.mdx
    │   │   ├── triggers/
    │   │   │   ├── configuration.mdx
    │   │   │   ├── index.mdx
    │   │   │   └── usage.mdx
    │   │   └── vagrantfile/
    │   │       ├── index.mdx
    │   │       ├── machine_settings.mdx
    │   │       ├── ssh_settings.mdx
    │   │       ├── tips.mdx
    │   │       ├── vagrant_settings.mdx
    │   │       ├── vagrant_version.mdx
    │   │       ├── version.mdx
    │   │       ├── winrm_settings.mdx
    │   │       └── winssh_settings.mdx
    │   ├── intro/
    │   │   ├── contributing-guide.mdx
    │   │   ├── index.mdx
    │   │   ├── support.mdx
    │   │   └── vs/
    │   │       ├── cli-tools.mdx
    │   │       ├── docker.mdx
    │   │       ├── index.mdx
    │   │       └── terraform.mdx
    │   ├── vagrant-cloud/
    │   │   ├── api/
    │   │   │   ├── v1.mdx
    │   │   │   └── v2.mdx
    │   │   ├── boxes/
    │   │   │   ├── architecture.mdx
    │   │   │   ├── catalog.mdx
    │   │   │   ├── create-version.mdx
    │   │   │   ├── create.mdx
    │   │   │   ├── distributing.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── lifecycle.mdx
    │   │   │   ├── private.mdx
    │   │   │   ├── release-workflow.mdx
    │   │   │   └── using.mdx
    │   │   ├── hcp-vagrant/
    │   │   │   ├── migration-guide.mdx
    │   │   │   ├── post-migration-guide.mdx
    │   │   │   └── troubleshooting.mdx
    │   │   ├── index.mdx
    │   │   ├── organizations/
    │   │   │   ├── authentication-policy.mdx
    │   │   │   ├── create.mdx
    │   │   │   ├── index.mdx
    │   │   │   └── migrate.mdx
    │   │   ├── request-limits.mdx
    │   │   ├── support.mdx
    │   │   └── users/
    │   │       ├── authentication.mdx
    │   │       ├── index.mdx
    │   │       └── recovery.mdx
    │   └── vmware/
    │       └── index.mdx
    ├── data/
    │   ├── alert-banner.js
    │   ├── docs-nav-data.json
    │   ├── intro-nav-data.json
    │   ├── metadata.js
    │   ├── subnav.js
    │   ├── vagrant-cloud-nav-data.json
    │   ├── version.json
    │   └── vmware-nav-data.json
    ├── jsconfig.json
    ├── package.json
    ├── prettier.config.js
    ├── public/
    │   └── ie-warning.js
    ├── redirects.js
    ├── scripts/
    │   ├── should-build.sh
    │   ├── website-build.sh
    │   └── website-start.sh
    └── vercel.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .ci/.ci-utility-files/common.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2019, 2025
# SPDX-License-Identifier: MPL-2.0
#
# shellcheck disable=SC2119
# shellcheck disable=SC2164

# If the bash version isn't at least 4, bail
if [ "${BASH_VERSINFO:-0}" -lt "4" ]; then
    printf "ERROR: Expected bash version >= 4 (is: %d)" "${BASH_VERSINFO:-0}"
    exit 1
fi

# Lets have some emojis
WARNING_ICON="⚠️"
ERROR_ICON="🛑"

# Coloring
# shellcheck disable=SC2034
TEXT_BOLD='\e[1m'
TEXT_RED='\e[31m'
# shellcheck disable=SC2034
TEXT_GREEN='\e[32m'
TEXT_YELLOW='\e[33m'
TEXT_CYAN='\e[36m'
TEXT_CLEAR='\e[0m'

# Common variables
export full_sha="${GITHUB_SHA}"
export short_sha="${full_sha:0:8}"
export ident_ref="${GITHUB_REF#*/*/}"
export repository="${GITHUB_REPOSITORY}"
export repo_owner="${repository%/*}"
export repo_name="${repository#*/}"
# shellcheck disable=SC2153
export asset_cache="${ASSETS_PRIVATE_SHORTTERM}/${repository}/${GITHUB_ACTION}"
export run_number="${GITHUB_RUN_NUMBER}"
export run_id="${GITHUB_RUN_ID}"
export job_id="${run_id}-${run_number}"
readonly hc_releases_metadata_filename="release-meta.json"
# This value is used in our cleanup trap to restore the value in cases
# where a function call may have failed and did not restore it
readonly _repository_backup="${repository}"

if [ -z "${ci_bin_dir}" ]; then
    if ci_bin_dir="$(realpath ./.ci-bin)"; then
        export ci_bin_dir
    else
        echo "ERROR: Failed to create the local CI bin directory"
        exit 1
    fi
fi

# We are always noninteractive
export DEBIAN_FRONTEND=noninteractive

# If we are on a runner and debug mode is enabled,
# enable debug mode for ourselves too
if [ -n "${RUNNER_DEBUG}" ]; then
    DEBUG=1
fi

# If DEBUG is enabled and we are running tests,
# flag it so we can adjust where output is sent.
if [ -n "${DEBUG}" ] && [ -n "${BATS_TEST_FILENAME}" ]; then
    DEBUG_WITH_BATS=1
fi

# Write debug output to stderr. Message template
# and arguments are passed to `printf` for formatting.
#
# $1: message template
# $#: message arguments
#
# NOTE: Debug output is only displayed when DEBUG is set
function debug() {
    if [ -n "${DEBUG}" ]; then
        local msg_template="${1}"
        local i=$(( ${#} - 1 ))
        local msg_args=("${@:2:$i}")
        # Update template to include caller information
        msg_template=$(printf "<%s(%s:%d)> %s" "${FUNCNAME[1]}" "${BASH_SOURCE[1]}" "${BASH_LINENO[0]}" "${msg_template}")
        #shellcheck disable=SC2059
        msg="$(printf "${msg_template}" "${msg_args[@]}")"

        if [ -n "${DEBUG_WITH_BATS}" ]; then
            printf "%b%s%b\n" "${TEXT_CYAN}" "${msg}" "${TEXT_CLEAR}" >&3
        else
            printf "%b%s%b\n" "${TEXT_CYAN}" "${msg}" "${TEXT_CLEAR}" >&2
        fi
    fi
}

# Wrap the pushd command so we fail
# if the pushd command fails. Arguments
# are just passed through.
function pushd() {
    debug "executing 'pushd %s'" "${*}"
    command builtin pushd "${@}" > /dev/null || exit 1
}

# Wrap the popd command so we fail
# if the popd command fails. Arguments
# are just passed through.
# shellcheck disable=SC2120
function popd() {
    debug "executing 'popd %s'" "${*}"
    command builtin popd "${@}" || exit 1
}

# Wraps the aws CLI command to support
# role based access. It will check for
# expected environment variables when
# a role has been assumed. If they are
# not found, it will assume the configured
# role. If the role has already been
# assumed, it will check that the credentials
# have not timed out, and re-assume the
# role if so. If no role information is
# provided, it will just pass the command
# through directly
#
# NOTE: Required environment variable: AWS_ASSUME_ROLE_ARN
# NOTE: This was a wrapper for the AWS command that would properly
#       handle the assume role process and and automatically refresh
#       if close to expiry. With credentials being handled by the doormat
#       action now, this is no longer needed but remains in case it's
#       needed for some reason in the future.
function aws_deprecated() {
    # Grab the actual aws cli path
    if ! aws_path="$(which aws)"; then
        (>&2 echo "AWS error: failed to locate aws cli executable")
        return 1
    fi
    # First, check if the role ARN environment variable is
    # configured. If it is not, just pass through.
    if [ "${AWS_ASSUME_ROLE_ARN}" = "" ]; then
        "${aws_path}" "${@}"
        return $?
    fi
    # Check if a role has already been assumed. If it
    # has, validate the credentials have not timed out
    # and pass through.
    if [ "${AWS_SESSION_TOKEN}" != "" ]; then
        # Cut off part of the expiration so we don't end up hitting
        # the expiration just as we make our call
        expires_at=$(date -d "${AWS_SESSION_EXPIRATION} - 20 sec" "+%s")
        if (( "${expires_at}" > $(date +%s) )); then
            "${aws_path}" "${@}"
            return $?
        fi
        # If we are here then the credentials were not
        # valid so clear the session token and restore
        # original credentials
        unset AWS_SESSION_TOKEN
        unset AWS_SESSION_EXPIRATION
        export AWS_ACCESS_KEY_ID="${CORE_AWS_ACCESS_KEY_ID}"
        export AWS_SECRET_ACCESS_KEY="${CORE_AWS_SECRET_ACCESS_KEY}"
    fi
    # Now lets assume the role
    if aws_output="$("${aws_path}" sts assume-role --role-arn "${AWS_ASSUME_ROLE_ARN}" --role-session-name "VagrantCI@${repo_name}-${job_id}")"; then
        export CORE_AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID}"
        export CORE_AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY}"
        id="$(printf '%s' "${aws_output}" | jq -r .Credentials.AccessKeyId)" || failed=1
        key="$(printf '%s' "${aws_output}" | jq -r .Credentials.SecretAccessKey)" || failed=1
        token="$(printf '%s' "${aws_output}" | jq -r .Credentials.SessionToken)" || failed=1
        expire="$(printf '%s' "${aws_output}" | jq -r .Credentials.Expiration)" || failed=1
        if [ "${failed}" = "1" ]; then
            (>&2 echo "Failed to extract assume role credentials")
            return 1
        fi
        unset aws_output
        export AWS_ACCESS_KEY_ID="${id}"
        export AWS_SECRET_ACCESS_KEY="${key}"
        export AWS_SESSION_TOKEN="${token}"
        export AWS_SESSION_EXPIRATION="${expire}"
    else
        (>&2 echo "AWS assume role error: ${aws_output}")
        return 1
    fi
    # And we can execute!
    "${aws_path}" "${@}"
}

# Path to file used for output redirect
# and extracting messages for warning and
# failure information sent to slack
function output_file() {
    if [ "${1}" = "clean" ] && [ -f "${ci_output_file_path}" ]; then
        rm -f "${ci_output_file_path}"
        unset ci_output_file_path
    fi
    if [ -z "${ci_output_file_path}" ] || [ ! -f "${ci_output_file_path}" ]; then
        ci_output_file_path="$(mktemp)"
    fi

    printf "%s" "${ci_output_file_path}"
}

# Write failure message, send error to configured
# slack, and exit with non-zero status. If an
# "$(output_file)" file exists, the last 5 lines will be
# included in the slack message.
#
# $1: Failure message
function failure() {
    local msg_template="${1}"
    local i=$(( ${#} - 1 ))
    local msg_args=("${@:2:$i}")

    # Update template to include caller information if in DEBUG mode
    if [ -n "${DEBUG}" ]; then
        msg_template=$(printf "<%s(%s:%d)> %s" "${FUNCNAME[1]}" "${BASH_SOURCE[1]}" "${BASH_LINENO[0]}" "${msg_template}")
    fi
    #shellcheck disable=SC2059
    msg="$(printf "${msg_template}" "${msg_args[@]}")"

    if [ -n "${DEBUG_WITH_BATS}" ]; then
        printf "%s %b%s%b\n" "${ERROR_ICON}" "${TEXT_RED}" "${msg}" "${TEXT_CLEAR}" >&3
    else
        printf "%s %b%s%b\n" "${ERROR_ICON}" "${TEXT_RED}" "${msg}" "${TEXT_CLEAR}" >&2
    fi

    if [ -n "${SLACK_WEBHOOK}" ]; then
        if [ -f "$(output_file)" ]; then
            slack -s error -m "ERROR: ${msg}" -f "$(output_file)" -T 5
        else
            slack -s error -m "ERROR: ${msg}"
        fi
    fi
    exit 1
}

# Write warning message, send warning to configured
# slack
#
# $1: Warning message
function warn() {
    local msg_template="${1}"
    local i=$(( ${#} - 1 ))
    local msg_args=("${@:2:$i}")

    #shellcheck disable=SC2059
    msg="$(printf "${msg_template}" "${msg_args[@]}")"

    printf "%s %b%s%b\n" "${WARNING_ICON}" "${TEXT_YELLOW}" "${msg}" "${TEXT_CLEAR}" >&2

    if [ -n "${SLACK_WEBHOOK}" ]; then
        if [ -f "$(output_file)" ]; then
            slack -s warn -m "WARNING: ${msg}" -f "$(output_file)"
        else
            slack -s warn -m "WARNING: ${msg}"
        fi
    fi
}

# Write an informational message
function info() {
    local msg_template="${1}\n"
    local i=$(( ${#} - 1 ))
    local msg_args=("${@:2:$i}")

    #shellcheck disable=SC2059
    printf "${msg_template}" "${msg_args[@]}" >&2
}

# Execute command while redirecting all output to
# a file (file is used within fail mesage on when
# command is unsuccessful). Final argument is the
# error message used when the command fails.
#
# $@{1:$#-1}: Command to execute
# $@{$#}: Failure message
function wrap() {
    local i=$((${#} - 1))
    if ! wrap_raw "${@:1:$i}"; then
        cat "$(output_file)"
        failure "${@:$#}"
    fi
    rm "$(output_file)"
}

# Execute command while redirecting all output to
# a file. Exit status is returned.
function wrap_raw() {
    output_file "clean" > /dev/null 2>&1
    "${@}" > "$(output_file)" 2>&1
    return $?
}

# Execute command while redirecting all output to
# a file (file is used within fail mesage on when
# command is unsuccessful). Command output will be
# streamed during execution. Final argument is the
# error message used when the command fails.
#
# $@{1:$#-1}: Command to execute
# $@{$#}: Failure message
function wrap_stream() {
    i=$((${#} - 1))
    if ! wrap_stream_raw "${@:1:$i}"; then
        failure "${@:$#}"
    fi
    rm "$(output_file)"
}

# Execute command while redirecting all output
# to a file. Command output will be streamed
# during execution. Exit status is returned
function wrap_stream_raw() {
    output_file "clean"
    "${@}" > "$(output_file)" 2>&1 &
    pid=$!
    until [ -f "$(output_file)" ]; do
        sleep 0.1
    done
    tail -f --quiet --pid "${pid}" "$(output_file)"
    wait "${pid}"
    return $?
}


# Send command to packet device and wrap
# execution
# $@{1:$#-1}: Command to execute
# $@{$#}: Failure message
function pkt_wrap() {
    wrap packet-exec run -quiet -- "${@}"
}

# Send command to packet device and wrap
# execution
# $@: Command to execute
function pkt_wrap_raw() {
    wrap_raw packet-exec run -quiet -- "${@}"
}

# Send command to packet device and wrap
# execution with output streaming
# $@{1:$#-1}: Command to execute
# $@{$#}: Failure message
function pkt_wrap_stream() {
    wrap_stream packet-exec run -quiet -- "${@}"
}

# Send command to packet device and wrap
# execution with output streaming
# $@: Command to execute
function pkt_wrap_stream_raw() {
    wrap_stream_raw packet-exec run -quiet -- "${@}"
}

# Get the full path directory for a given
# file path. File is not required to exist.
# NOTE: Parent directories of given path will
#       be created.
#
# $1: file path
function file_directory() {
    local path="${1?File path is required}"
    local dir
    if [[ "${path}" != *"/"* ]]; then
        dir="."
    else
        dir="${path%/*}"
    fi
    if [ ! -d "${dir}" ]; then
        mkdir -p "${dir}" ||
            failure "Could not create directory (%s)" "${dir}"
    fi
    pushd "${dir}"
    dir="$(pwd)" ||
        failure "Could not read directory path (%s)" "${dir}"
    popd
    printf "%s" "${dir}"
}

# Wait until the number of background jobs falls below
# the maximum number provided. If the max number was reached
# and waiting was performed until a process completed, the
# string "waited" will be printed to stdout.
#
# NOTE: using `wait -n` would be cleaner but only became
#       available in bash as of 4.3
#
# $1: maximum number of jobs
function background_jobs_limit() {
    local max="${1}"
    if [ -z "${max}" ] || [[ "${max}" = *[!0123456789]* ]]; then
        failure "Maximum number of background jobs required"
    fi

    local debug_printed
    local jobs
    mapfile -t jobs <<< "$(jobs -p)" ||
        failure "Could not read background job list"
    while [ "${#jobs[@]}" -ge "${max}" ]; do
        if [ -z "${debug_printed}" ]; then
            debug "max background jobs reached (%d), waiting for free process" "${max}"
            debug_printed="1"
        fi
        sleep 1
        jobs=()
        local j_pids
        mapfile -t j_pids <<< "$(jobs -p)" ||
            failure "Could not read background job list"
        for j in "${j_pids[@]}"; do
            if kill -0 "${j}" > /dev/null 2>&1; then
                jobs+=( "${j}" )
            fi
        done
    done
    if [ -n "${debug_printed}" ]; then
        debug "background jobs count (%s) under max, continuing" "${#jobs[@]}"
        printf "waited"
    fi
}

# Reap a completed background process. If the process is
# not complete, the process is ignored. The success/failure
# returned from this function only applies to the process
# identified by the provided PID _if_ the matching PID value
# was written to stdout
#
# $1: PID
function reap_completed_background_job() {
    local pid="${1}"
    if [ -z "${pid}" ]; then
        failure "PID of process to reap is required"
    fi
    if kill -0 "${pid}" > /dev/null 2>&1; then
        debug "requested pid to reap (%d) has not completed, ignoring" "${pid}"
        return 0
    fi
    # The pid can be reaped so output the pid to indicate
    # any error is from the job
    printf "%s" "${pid}"
    if ! wait "${pid}"; then
        local code="${?}"
        debug "wait error code %d returned for pid %d" "${code}" "${pid}"
        return "${code}"
    fi

    return 0
}

# Creates a cache and adds the provided items
#
# -d Optional description
# -f Force cache (deletes cache if already exists)
#
# $1: name of cache
# $2: artifact(s) to cache (path to artifact or directory containing artifacts)
function create-cache() {
    local body
    local force
    local opt
    while getopts ":d:f" opt; do
        case "${opt}" in
            "d") body="${OPTARG}" ;;
            "f") force="1" ;;
            *) failure "Invalid flag provided" ;;
        esac
    done
    shift $((OPTIND-1))

    cache_name="${1}"
    artifact_path="${2}"

    if [ -z "${cache_name}" ]; then
        failure "Cache name is required"
    fi
    if [ -z "${artifact_path}" ]; then
        failure "Artifact path is required"
    fi

    # Check for the cache
    if github_draft_release_exists "${repo_name}" "${cache_name}"; then
        # If forcing, delete the cache
        if [ -n "${force}" ]; then
            debug "cache '%s' found and force is set, removing"
            github_delete_draft_release "${cache_name}"
        else
            failure "Cache already exists (name: %s repo: %s)" "${cache_name}" "${repo_name}"
        fi
    fi

    # If no description is provided, then provide a default
    if [ -z "${body}" ]; then
        body="Cache name: %s\nCreate time: %s\nSource run: %s/%s/actions/runs/%s" \
            "${cache_name}" "$(date)" "${GITHUB_SERVER_URL}" "${GITHUB_REPOSITORY}" "${GITHUB_RUN_ID}"
    fi

    # Make sure body is formatted
    if [ -n "${body}" ]; then
        body="$(printf "%b" "${body}")"
    fi

    response="$(github_create_release -o "${repo_owner}" -r "${repo_name}" -n "${cache_name}" -b "${body}")" ||
        failure "Failed to create GitHub release"
}

# Retrieve items from cache
#
# -r Require cache to exist (failure if not found)
#
# $1: cache name
# $2: destination directory
function restore-cache() {
    local required

    while getopts ":r" opt; do
        case "${opt}" in
            "r") required="1" ;;
            *) failure "Invalid flag provided" ;;
        esac
    done
    shift $((OPTIND-1))

    cache_name="${1}"
    destination="${2}"

    if [ -z "${cache_name}" ]; then
        failure "Cache name is required"
    fi
    if [ -z "${destination}" ]; then
        failure "Destination is required"
    fi

    # If required, check for the draft release and error if not found
    if [ -n "${required}" ]; then
        if ! github_draft_release_exists "${repo_name}" "${cache_name}"; then
            failure "Cache '%s' does not exist" "${cache_name}"
        fi
    fi

    mkdir -p "${destination}" ||
        failure "Could not create destination directory (%s)" "${destination}"

    pushd "${destination}"
    github_draft_release_assets "${repo_name}" "${cache_name}"
    popd
}

# Submit given file to Apple's notarization service and
# staple the notarization ticket.
#
# -i UUID: app store connect issuer ID (optional)
# -j PATH: JSON file containing API key
# -k ID:   app store connect API key ID (optional)
# -m SECS: maximum number of seconds to wait (optional, defaults to 600)
# -o PATH: path to write notarized file (optional, will modify input by default)
#
# $1: file to notarize
function notarize_file() {
    local creds_api_key_id
    local creds_api_key_path
    local creds_issuer_id
    local output_file
    local max_wait="600"

    local opt
    while getopts ":i:j:k:m:o:" opt; do
        case "${opt}" in
            "i") creds_api_key_id="${OPTARG}" ;;
            "j") creds_api_key_path="${OPTARG}" ;;
            "k") creds_issuer_id="${OPTARG}" ;;
            "m") max_wait="${OPTARG}" ;;
            "o") output_file="${OPTARG}" ;;
            *) failure "Invalid flag provided" ;;
        esac
    done
    shift $((OPTIND-1))

    # Validate credentials were provided
    if [ -z "${creds_api_key_path}" ]; then
        failure "App store connect key path required for notarization"
    fi
    if [ ! -f "${creds_api_key_path}" ]; then
        failure "Invalid path provided for app store connect key path (%s)" "${creds_api_key_path}"
    fi

    # Collect auth related arguments
    local base_args=( "--api-key-path" "${creds_api_key_path}" )
    if [ -n "${creds_api_key_id}" ]; then
        base_args+=( "--api-key" "${creds_api_key_id}" )
    fi
    if [ -n "${creds_issuer_id}" ]; then
        base_args+=( "--api-issuer" "${creds_issuer_id}" )
    fi

    local input_file="${1}"

    # Validate the input file
    if [ -z "${input_file}" ]; then
        failure "Input file is required for signing"
    fi
    if [ ! -f "${input_file}" ]; then
        failure "Cannot find input file (%s)" "${input_file}"
    fi

    # Check that rcodesign is available, and install
    # it if it is not
    if ! command -v rcodesign > /dev/null; then
        debug "rcodesign executable not found, installing..."
        install_github_tool "indygreg" "apple-platform-rs" "rcodesign"
    fi
    
    local notarize_file
    # If an output file path was defined, copy file
    # to output location before notarizing
    if [ -n "${output_file}" ]; then
        file_directory "${output_file}"
        # Remove file if it already exists
        rm -f "${output_file}" ||
            failure "Could not modify output file (%s)" "${output_file}"
        cp -f "${input_file}" "${output_file}" ||
            failure "Could not write to output file (%s)" "${output_file}"
        notarize_file="${output_file}"
        debug "notarizing file '%s' and writing to '%s'" "${input_file}" "${output_file}"
    else
        notarize_file="${input_file}"
        debug "notarizing file in place '%s'" "${input_file}"
    fi

    # Notarize the file
    local notarize_output
    if notarize_output="$(rcodesign \
        notary-submit \
        "${base_args[@]}" \
        --max-wait-seconds "${max_wait}" \
        --staple \
        "${notarize_file}" 2>&1)"; then
        return 0
    fi

    debug "notarization output: %s" "${notarize_output}"

    # Still here means notarization failure. Pull
    # the logs from the service before failing
    local submission_id="${notarize_output##*submission ID: }"
    submission_id="${submission_id%%$'\n'*}"
    rcodesign \
        notary-log \
        "${base_args[@]}" \
        "${submission_id}"

    failure "Failed to notarize file (%s)" "${input_file}"
}

# Sign a file using signore. Will automatically apply
# modified retry settings when larger files are submitted.
#
# -b NAME: binary identifier (macOS only)
# -e PATH: path to entitlements file (macOS only)
# -o PATH: path to write signed file (optional, will overwrite input by default)
# $1: file to sign
#
# NOTE: If signore is not installed, a HASHIBOT_TOKEN is
#       required for downloading the signore release. The
#       token can also be set in SIGNORE_GITHUB_TOKEN if
#       the HASHIBOT_TOKEN is already set
#
# NOTE: SIGNORE_CLIENT_ID, SIGNORE_CLIENT_SECRET, and SIGNORE_SIGNER
#       environment variables must be set prior to calling this function
function sign_file() {
    # Set 50M to be a largish file
    local largish_file_size="52428800"

    # Signore environment variables are required. Check
    # that they are set.
    if [ -z "${SIGNORE_CLIENT_ID}" ]; then
        failure "Cannot sign file, SIGNORE_CLIENT_ID is not set"
    fi
    if [ -z "${SIGNORE_CLIENT_SECRET}" ]; then
        failure "Cannot sign file, SIGNORE_CLIENT_SECRET is not set"
    fi
    if [ -z "${SIGNORE_SIGNER}" ]; then
        failure "Cannot sign file, SIGNORE_SIGNER is not set"
    fi

    local binary_identifier=""
    local entitlements=""
    local output_file=""

    local opt
    while getopts ":b:e:o:" opt; do
        case "${opt}" in
            "b") binary_identifier="${OPTARG}" ;;
            "e") entitlements="${OPTARG}" ;;
            "o") output_file="${OPTARG}" ;;
            *) failure "Invalid flag provided" ;;
        esac
    done
    shift $((OPTIND-1))

    local input_file="${1}"

    # Check that a good input file was given
    if [ -z "${input_file}" ]; then
        failure "Input file is required for signing"
    fi
    if [ ! -f "${input_file}" ]; then
        failure "Cannot find input file (%s)" "${input_file}"
    fi

    # If the output file is not set it's a replacement
    if [ -z "${output_file}" ]; then
        debug "output file is unset, will replace input file (%s)" "${input_file}"
        output_file="${input_file}"
    fi

    # This will ensure parent directories exist
    file_directory "${output_file}" > /dev/null

    # If signore command is not installed, install it
    if ! command -v "signore" > /dev/null; then
        local hashibot_token_backup="${HASHIBOT_TOKEN}"
        # If the signore github token is set, apply it
        if [ -n "${SIGNORE_GITHUB_TOKEN}" ]; then
            HASHIBOT_TOKEN="${SIGNORE_GITHUB_TOKEN}"
        fi

        install_hashicorp_tool "signore"

        # Restore the hashibot token if it was modified
        HASHIBOT_TOKEN="${hashibot_token_backup}"
    fi

    # Define base set of arguments
    local signore_args=( "sign" "--file" "${input_file}" "--out" "${output_file}" "--match-file-mode" )

    # Check the size of the file to be signed. If it's relatively
    # large, push up the max retries and lengthen the retry interval
    # NOTE: Only checked if `wc` is available
    local file_size="0"
    if command -v wc > /dev/null; then
        file_size="$(wc -c <"${input_file}")" ||
            failure "Could not determine input file size"
    fi

    if [ "${file_size}" -gt "${largish_file_size}" ]; then
        debug "largish file detected, adjusting retry settings"
        signore_args+=( "--max-retries" "30" "--retry-interval" "10s" )
    fi

    # If a binary identifier was provided then it's a macos signing
    if [ -n "${binary_identifier}" ]; then
        # shellcheck disable=SC2016
        template='{type: "macos", input_format: "EXECUTABLE", binary_identifier: $identifier}'
        payload="$(jq -n --arg identifier "${binary_identifier}" "${template}")" ||
            failure "Could not create signore payload for macOS signing"
        signore_args+=( "--signer-options" "${payload}" )
    fi

    # If an entitlement was provided, validate the path
    # and add it to the args
    if [ -n "${entitlements}" ]; then
        if [ ! -f "${entitlements}" ]; then
            failure "Invalid path for entitlements provided (%s)" "${entitlements}"
        fi
        signore_args+=( "--entitlements" "${entitlements}" )
    fi

    debug "signing file '%s' with arguments - %s" "${input_file}" "${signore_args[*]}"

    signore "${signore_args[@]}" ||
        failure "Failed to sign file '%s'" "${input_file}"

    info "successfully signed file (%s)" "${input_file}"
}

# Create a GPG signature. This uses signore to generate a
# gpg signature for a given file. If the destination
# path for the signature is not provided, it will
# be stored at the origin path with a .sig suffix
#
# $1: Path to origin file
# $2: Path to store signature (optional)
function gpg_sign_file() {
    # Check that we have something to sign
    if [ -z "${1}" ]; then
        failure "Origin file is required for signing"
    fi

    if [ ! -f "${1}" ]; then
        failure "Origin file does not exist (${1})"
    fi

    # Validate environment has required signore variables set
    if [ -z "${SIGNORE_CLIENT_ID}" ]; then
        failure "Cannot sign file, SIGNORE_CLIENT_ID is not set"
    fi
    if [ -z "${SIGNORE_CLIENT_SECRET}" ]; then
        failure "Cannot sign file, SIGNORE_CLIENT_SECRET is not set"
    fi
    if [ -z "${SIGNORE_SIGNER}" ]; then
        failure "Cannot sign file, SIGNORE_SIGNER is not set"
    fi

    local origin="${1}"
    local destination="${2}"
    if [ -z "${destination}" ]; then
        destination="${origin}.sig"
        debug "destination automatically set (%s)" "${destination}"
    fi

    if ! command -v signore; then
        debug "installing signore tool"
        install_hashicorp_tool "signore"
    fi

    if [ -e "${destination}" ]; then
        failure "File already exists at signature destination path (${destination})"
    fi

    wrap_stream signore sign --dearmor --file "${origin}" --out "${destination}" \
        "Failed to sign file"
}

# Validate arguments for GitHub release. Checks for
# two arguments and that second argument is an exiting
# file asset, or directory.
#
# $1: GitHub tag name
# $2: Asset file or directory of assets
function release_validate() {
    if [ "${1}" = "" ]; then
        failure "Missing required position 1 argument (TAG) for release"
    fi
    if [ "${2}" = "" ]; then
        failure "Missing required position 2 argument (PATH) for release"
    fi
    if [ ! -e "${2}" ]; then
        failure "Path provided for release (${2}) does not exist"
    fi
}

# Generate a GitHub release
#
# $1: GitHub tag name
# $2: Asset file or directory of assets
function release() {
    release_validate "${@}"
    local tag_name="${1}"
    local assets="${2}"
    local body

    if [ -z "${body}" ]; then
        body="$(release_details "${tag_name}")"
    fi

    response="$(github_create_release -o "${repo_owner}" -r "${repo_name}" -t "${tag_name}" -n "${tag_name}" -b "${body}")" ||
        failure "Failed to create GitHub release"
    local release_id
    release_id="$(printf "%s" "${response}" | jq -r '.id')" ||
        failure "Failed to extract release ID from response for %s on %s" "${tag_name}" "${repository}"

    github_upload_release_artifacts "${repo_name}" "${release_id}" "${assets}"
}

# Generate a GitHub prerelease
#
# $1: GitHub tag name
# $2: Asset file or directory of assets
function prerelease() {
    release_validate "${@}"
    local ptag
    if [[ "${1}" != *"+"* ]]; then
        ptag="${1}+${short_sha}"
    else
        ptag="${1}"
    fi
    local assets="${2}"

    response="$(github_create_release -o "${repo_owner}" -r "${repo_name}" -t "${ptag}" -n "${ptag}" -b "${body}" -p -m)" ||
        failure "Failed to create GitHub prerelease"
    local release_id
    release_id="$(printf "%s" "${response}" | jq -r '.id')" ||
        failure "Failed to extract prerelease ID from response for %s on %s" "${tag_name}" "${repository}"

    github_upload_release_artifacts "${repo_name}" "${release_id}" "${assets}"

    printf "New prerelease published to %s @ %s\n" "${repo_name}" "${ptag}" >&2

    printf "%s" "${ptag}"
}

# Generate a GitHub draft release
#
# $1: GitHub release name
# $2: Asset file or directory of assets
function draft_release() {
    local ptag="${1}"
    local assets="${2}"

    response="$(github_create_release -o "${repo_owner}" -r "${repo_name}" -t "${ptag}" -n "${ptag}" -b "${body}" -d)" ||
        failure "Failed to create GitHub draft release"
    local release_id
    release_id="$(printf "%s" "${response}" | jq -r '.id')" ||
        failure "Failed to extract draft release ID from response for %s on %s" "${tag_name}" "${repository}"

    github_upload_release_artifacts "${repo_name}" "${release_id}" "${assets}"

    printf "%s" "${ptag}"
}


# Generate details of the release. This will consist
# of a link to the changelog if we can properly detect
# it based on current location.
#
# $1: Tag name
#
# Returns: details content
function release_details() {
    local tag_name="${1}"
    local proj_root
    if ! proj_root="$(git rev-parse --show-toplevel)"; then
        return
    fi
    if [ -z "$(git tag -l "${tag_name}")" ] || [ ! -f "${proj_root}/CHANGELOG.md" ]; then
        return
    fi
    printf "CHANGELOG:\n\nhttps://github.com/%s/blob/%s/CHANGELOG.md" "${repository}" "${tag_name}"
}

# Check if version string is valid for release
#
# $1: Version
# Returns: 0 if valid, 1 if invalid
function valid_release_version() {
    if [[ "${1}" =~ ^v?[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        return 0
    else
        return 1
    fi
}

# Validate arguments for HashiCorp release. Ensures asset
# directory exists, and checks that the SHASUMS and SHASUM.sig
# files are present.
#
# $1: Asset directory
function hashicorp_release_validate() {
    local directory="${1}"
    local sums
    local sigs

    # Directory checks
    debug "checking asset directory was provided"
    if [ -z "${directory}" ]; then
        failure "No asset directory was provided for HashiCorp release"
    fi
    debug "checking that asset directory exists"
    if [ ! -d "${directory}" ]; then
        failure "Asset directory for HashiCorp release does not exist (${directory})"
    fi

    # SHASUMS checks
    debug "checking for shasums file"
    sums=("${directory}/"*SHA256SUMS)
    if [ ${#sums[@]} -lt 1 ]; then
        failure "Asset directory is missing SHASUMS file"
    fi
    debug "checking for shasums signature file"
    sigs=("${directory}/"*SHA256SUMS.sig)
    if [ ${#sigs[@]} -lt 1 ]; then
        failure "Asset directory is missing SHASUMS signature file"
    fi
}

# Verify release assets by validating checksum properly match
# and that signature file is valid
#
# $1: Asset directory
function hashicorp_release_verify() {
    if [ -z "${HASHICORP_PUBLIC_GPG_KEY_ID}" ]; then
        failure "Cannot verify release without GPG key ID. Set HASHICORP_PUBLIC_GPG_KEY_ID."
    fi

    local directory="${1}"
    local gpghome

    pushd "${directory}"

    # First do a checksum validation
    debug "validating shasums are correct"
    wrap shasum -a 256 -c ./*_SHA256SUMS \
        "Checksum validation of release assets failed"
    # Next check that the signature is valid
    gpghome=$(mktemp -qd)
    export GNUPGHOME="${gpghome}"
    debug "verifying shasums signature file using key: %s" "${HASHICORP_PUBLIC_GPG_KEY_ID}"
    wrap gpg --keyserver keyserver.ubuntu.com --recv "${HASHICORP_PUBLIC_GPG_KEY_ID}" \
        "Failed to import HashiCorp public GPG key"
    wrap gpg --verify ./*SHA256SUMS.sig ./*SHA256SUMS \
        "Validation of SHA256SUMS signature failed"
    rm -rf "${gpghome}"
    popd
}

# Generate releases-api metadata
#
# $1: Product Version
# $2: Asset directory
function hashicorp_release_generate_release_metadata() {
    local version="${1}"
    local directory="${2}"

    if ! command -v bob; then
        debug "bob executable not found, installing"
        install_hashicorp_tool "bob"
    fi

    local hc_releases_input_metadata="input-meta.json"
    # The '-metadata-file' flag expects valid json. Contents are not used for Vagrant.
    echo "{}" > "${hc_releases_input_metadata}"

    debug "generating release metadata information"
    wrap_stream bob generate-release-metadata \
        -metadata-file "${hc_releases_input_metadata}" \
        -in-dir "${directory}" \
        -version "${version}" \
        -out-file "${hc_releases_metadata_filename}" \
        "Failed to generate release metadata"

    rm -f "${hc_releases_input_metadata}"
}

# Upload release metadata and assets to the staging api
#
# $1: Product Name (e.g. "vagrant")
# $2: Product Version
# $3: Asset directory
function hashicorp_release_upload_to_staging() {
    local product="${1}"
    local version="${2}"
    local directory="${3}"

    if ! command -v "hc-releases"; then
        debug "releases-api executable not found, installing"
        install_hashicorp_tool "releases-api"
    fi

    if [ -z "${HC_RELEASES_STAGING_HOST}" ]; then
        failure "Missing required environment variable HC_RELEASES_STAGING_HOST"
    fi
    if [ -z "${HC_RELEASES_STAGING_KEY}" ]; then
       failure "Missing required environment variable HC_RELEASES_STAGING_KEY"
    fi

    export HC_RELEASES_HOST="${HC_RELEASES_STAGING_HOST}"
    export HC_RELEASES_KEY="${HC_RELEASES_STAGING_KEY}"

    pushd "${directory}"

    # Create -file parameter list for hc-releases upload
    local fileParams=()
    for file in *; do
        fileParams+=("-file=${file}")
    done

    debug "uploading release assets to staging"
    wrap_stream hc-releases upload \
        -product "${product}" \
        -version "${version}" \
        "${fileParams[@]}" \
        "Failed to upload HashiCorp release assets"

    popd

    debug "creating release metadata"

    wrap_stream hc-releases metadata create \
        -product "${product}" \
        -input "${hc_releases_metadata_filename}" \
        "Failed to create metadata for HashiCorp release"

    unset HC_RELEASES_HOST
    unset HC_RELEASES_KEY
}

# Promote release from staging to production
#
# $1: Product Name (e.g. "vagrant")
# $2: Product Version
function hashicorp_release_promote_to_production() {
    local product="${1}"
    local version="${2}"

    if ! command -v "hc-releases"; then
        debug "releases-api executable not found, installing"
        install_hashicorp_tool "releases-api"
    fi

    if [ -z "${HC_RELEASES_PROD_HOST}" ]; then
        failure "Missing required environment variable HC_RELEASES_PROD_HOST"
    fi
    if [ -z "${HC_RELEASES_PROD_KEY}" ]; then
       failure "Missing required environment variable HC_RELEASES_PROD_KEY"
    fi
    if [ -z "${HC_RELEASES_STAGING_KEY}" ]; then
       failure "Missing required environment variable HC_RELEASES_STAGING_KEY"
    fi

    export HC_RELEASES_HOST="${HC_RELEASES_PROD_HOST}"
    export HC_RELEASES_KEY="${HC_RELEASES_PROD_KEY}"
    export HC_RELEASES_SOURCE_ENV_KEY="${HC_RELEASES_STAGING_KEY}"

    debug "promoting release to production"
    wrap_stream hc-releases promote \
        -product "${product}" \
        -version "${version}" \
        -source-env staging \
        "Failed to promote HashiCorp release to Production"

    unset HC_RELEASES_HOST
    unset HC_RELEASES_KEY
    unset HC_RELEASES_SOURCE_ENV_KEY
}

# Send the post-publish sns message
#
# $1: Product name (e.g. "vagrant") defaults to $repo_name
# $2: AWS Region of SNS (defaults to us-east-1)
function hashicorp_release_sns_publish() {
    local message
    local product="${1}"
    local region="${2}"

    if [ -z "${product}" ]; then
        product="${repo_name}"
    fi

    if [ -z "${region}" ]; then
        region="us-east-1"
    fi

    # Validate the creds properly assume role and function
    wrap aws_deprecated configure list \
        "Failed to reconfigure AWS credentials for release notification"

    # Now send the release notification
    debug "sending release notification to package repository"
    message=$(jq --null-input --arg product "$product" '{"product": $product}')
    wrap_stream aws sns publish --region "${region}" --topic-arn "${HC_RELEASES_PROD_SNS_TOPIC}" --message "${message}" \
        "Failed to send SNS message for package repository update"

    return 0
}

# Check if a release for the given version
# has been published to the HashiCorp
# releases site.
#
# $1: Product Name
# $2: Product Version
function hashicorp_release_exists() {
    local product="${1}"
    local version="${2}"

    if curl --silent --fail --head "https://releases.hashicorp.com/${product}/${product}_${version}/" > /dev/null ; then
        debug "hashicorp release of %s@%s found" "${product}" "${version}"
        return 0
    fi
    debug "hashicorp release of %s@%s not found" "${product}" "${version}"
    return 1
}

# Generate the SHA256SUMS file for assets
# in a given directory.
#
# $1: Asset Directory
# $2: Product Name
# $3: Product Version
function generate_shasums() {
    local directory="${1}"
    local product="${2}"
    local version="${3}"

    pushd "${directory}"

    local shacontent
    debug "generating shasums file for %s@%s" "${product}" "${version}"
    shacontent="$(shasum -a256 ./*)" ||
        failure "Failed to generate shasums in ${directory}"

    sed 's/\.\///g' <( printf "%s" "${shacontent}" ) > "${product}_${version}_SHA256SUMS" ||
        failure "Failed to write shasums file"

    popd
}

# Generate a HashiCorp releases-api compatible release
#
# $1: Asset directory
# $2: Product Name (e.g. "vagrant")
# $3: Product Version
function hashicorp_release() {
    local directory="${1}"
    local product="${2}"
    local version="${3}"

    # If the version is provided, use the discovered release version
    if [[ "${version}" == "" ]]; then
        version="${release_version}"
    fi

    debug "creating hashicorp release - product: %s version: %s assets: %s" "${product}" "${version}" "${directory}"

    if ! hashicorp_release_exists "${product}" "${version}"; then
        # Jump into our artifact directory
        pushd "${directory}"

        # If any sig files happen to have been included in here,
        # just remove them as they won't be using the correct
        # signing key
        rm -f ./*.sig

        # Generate our shasums file
        debug "generating shasums file for %s@%s" "${product}" "${version}"
        generate_shasums ./ "${product}" "${version}"

        # Grab the shasums file and sign it
        local shasum_files=(./*SHA256SUMS)
        local shasum_file="${shasum_files[0]}"
        # Remove relative prefix if found
        shasum_file="${shasum_file##*/}"
        debug "signing shasums file for %s@%s" "${product}" "${version}"
        gpg_sign_file "${shasum_file[0]}"

        # Jump back out of our artifact directory
        popd

        # Run validation and verification on release assets before
        # we actually do the release.
        debug "running release validation for %s@%s" "${product}" "${version}"
        hashicorp_release_validate "${directory}"
        debug "running release verification for %s@%s" "${product}" "${version}"
        hashicorp_release_verify "${directory}"

        # Now that the assets have been validated and verified,
        # peform the release setps
        debug "generating release metadata for %s@%s" "${product}" "${version}"
        hashicorp_release_generate_release_metadata "${version}" "${directory}"
        debug "uploading release artifacts to staging for %s@%s" "${product}" "${version}"
        hashicorp_release_upload_to_staging "${product}" "${version}" "${directory}"
        debug "promoting release to production for %s@%s" "${product}" "${version}"
        hashicorp_release_promote_to_production "${product}" "${version}"

        printf "HashiCorp release created (%s@%s)\n" "${product}" "${version}"
    else
        printf "hashicorp release not published, already exists (%s@%s)\n" "${product}" "${version}"
    fi

    # Send a notification to update the package repositories
    # with the new release.
    debug "sending packaging notification for %s@%s" "${product}" "${version}"
    hashicorp_release_sns_publish "${product}"
}

# Check if gem version is already published to RubyGems
#
# $1: Name of RubyGem
# $2: Verision of RubyGem
# $3: Custom gem server to search (optional)
function is_version_on_rubygems() {
    local name="${1}"
    local version="${2}"
    local gemstore="${3}"

    if [ -z "${name}" ]; then
        failure "Name is required for version check on %s" "${gemstore:-RubyGems.org}"
    fi

    if [ -z "${version}" ]; then
        failure "Version is required for version check on %s" "${gemstore:-RubyGems.org}"
    fi

    debug "checking rubygem %s at version %s is currently published" "${name}" "${version}"
    local cmd_args=("gem" "search")
    if [ -n "${gemstore}" ]; then
        debug "checking rubygem publication at custom source: %s" "${gemstore}"
        cmd_args+=("--clear-sources" "--source" "${gemstore}")
    fi
    cmd_args+=("--remote" "--exact" "--all")

    local result
    result="$("${cmd_args[@]}" "${name}")" ||
        failure "Failed to retreive remote version list from RubyGems"
    local versions="${result##*\(}"
    local versions="${versions%%)*}"
    local oifs="${IFS}"
    IFS=', '
    local r=1
    for v in $versions; do
        if [ "${v}" = "${version}" ]; then
            r=0
            debug "rubygem %s at version %s was found" "${name}" "${version}"
            break
        fi
    done
    IFS="${oifs}"
    return $r
}

# Check if gem version is already published to hashigems
#
# $1: Name of RubyGem
# $2: Verision of RubyGem
function is_version_on_hashigems() {
    is_version_on_rubygems "${1}" "${2}" "https://gems.hashicorp.com"
}

# Build and release project gem to RubyGems
function publish_to_rubygems() {
    if [ -z "${RUBYGEMS_API_KEY}" ]; then
        failure "RUBYGEMS_API_KEY is required for publishing to RubyGems.org"
    fi

    local gem_file="${1}"

    if [ -z "${gem_file}" ]; then
        failure "RubyGem file is required for publishing to RubyGems.org"
    fi

    if [ ! -f "${gem_file}" ]; then
        failure "Path provided does not exist or is not a file (%s)" "${gem_file}"
    fi

    # NOTE: Newer versions of rubygems support setting the
    #       api key via the GEM_HOST_API_KEY environment
    #       variable. Config file is still used so that older
    #       versions can be used for doing pushes.
    gem_config="$(mktemp -p ./)" ||
        failure "Could not create gem configuration file"
    # NOTE: The `--` are required due to the double dash
    #       start of the first argument
    printf -- "---\n:rubygems_api_key: %s\n" "${RUBYGEMS_API_KEY}" > "${gem_config}"

    gem push --config-file "${gem_config}" "${gem_file}" ||
        failure "Failed to publish RubyGem at '%s' to RubyGems.org" "${gem_file}"
    rm -f "${gem_config}"
}

# Publish gem to the hashigems repository
#
# $1: Path to gem file to publish
function publish_to_hashigems() {
    local path="${1}"
    if [ -z "${path}" ]; then
        failure "Path to built gem required for publishing to hashigems"
    fi

    debug "publishing '%s' to hashigems" "${path}"

    # Define all the variables we'll need
    local user_bin
    local reaper
    local invalid
    local invalid_id

    wrap_stream gem install --user-install --no-document reaper-man \
        "Failed to install dependency for hashigem generation"
    user_bin="$(ruby -e 'puts Gem.user_dir')/bin"
    reaper="${user_bin}/reaper-man"

    debug "using reaper-man installation at: %s" "${reaper}"

    # Create a temporary directory to work from
    local tmpdir
    tmpdir="$(mktemp -d -p ./)" ||
        failure "Failed to create working directory for hashigems publish"
    mkdir -p "${tmpdir}/hashigems/gems" ||
        failure "Failed to create gems directory"
    wrap cp "${path}" "${tmpdir}/hashigems/gems" \
        "Failed to copy gem to working directory"
    pushd "${tmpdir}"

    # Run quick test to ensure bucket is accessible
    wrap aws s3 ls "s3://${HASHIGEMS_METADATA_BUCKET}" \
        "Failed to access hashigems asset bucket"

    # Grab our remote metadata. If the file doesn't exist, that is always an error.
    debug "fetching hashigems metadata file from %s" "${HASHIGEMS_METADATA_BUCKET}"
    wrap aws s3 cp "s3://${HASHIGEMS_METADATA_BUCKET}/vagrant-rubygems.list" ./ \
        "Failed to retrieve hashigems metadata list"

    # Add the new gem to the metadata file
    debug "adding new gem to the metadata file"
    wrap_stream "${reaper}" package add -S rubygems -p vagrant-rubygems.list ./hashigems/gems/*.gem \
        "Failed to add new gem to hashigems metadata list"
    # Generate the repository
    debug "generating the new hashigems repository content"
    wrap_stream "${reaper}" repo generate -p vagrant-rubygems.list -o hashigems -S rubygems \
        "Failed to generate the hashigems repository"
    # Upload the updated repository
    pushd ./hashigems
    debug "uploading new hashigems repository content to %s" "${HASHIGEMS_PUBLIC_BUCKET}"
    wrap_stream aws s3 sync . "s3://${HASHIGEMS_PUBLIC_BUCKET}" \
        "Failed to upload the hashigems repository"
    # Store the updated metadata
    popd
    debug "uploading updated hashigems metadata file to %s" "${HASHIGEMS_METADATA_BUCKET}"
    wrap_stream aws s3 cp vagrant-rubygems.list "s3://${HASHIGEMS_METADATA_BUCKET}/vagrant-rubygems.list" \
        "Failed to upload the updated hashigems metadata file"

    # Invalidate cloudfront so the new content is available
    local invalid
    debug "invalidating hashigems cloudfront distribution (%s)" "${HASHIGEMS_CLOUDFRONT_ID}"
    invalid="$(aws cloudfront create-invalidation --distribution-id "${HASHIGEMS_CLOUDFRONT_ID}" --paths "/*")" ||
        failure "Invalidation of hashigems CDN distribution failed"
    local invalid_id
    invalid_id="$(printf '%s' "${invalid}" | jq -r ".Invalidation.Id")"
    if [ -z "${invalid_id}" ]; then
        failure "Failed to determine the ID of the hashigems CDN invalidation request"
    fi
    debug "hashigems cloudfront distribution invalidation identifer - %s" "${invalid_id}"

    # Wait for the invalidation process to complete
    debug "starting wait for hashigems cloudfront distribution invalidation to complete (id: %s)" "${invalid_id}"
    wrap aws cloudfront wait invalidation-completed --distribution-id "${HASHIGEMS_CLOUDFRONT_ID}" --id "${invalid_id}" \
        "Failure encountered while waiting for hashigems CDN invalidation request to complete (ID: ${invalid_id})"
    debug "hashigems cloudfront distribution invalidation complete (id: %s)" "${invalid_id}"

    # Clean up and we are done
    popd
    rm -rf "${tmpdir}"
}

# Configures git for hashibot usage
function hashibot_git() {
    wrap git config user.name "${HASHIBOT_USERNAME}" \
        "Failed to setup git for hashibot usage (username)"
    wrap git config user.email "${HASHIBOT_EMAIL}" \
        "Failed to setup git for hashibot usage (email)"
    wrap git remote set-url origin "https://${HASHIBOT_USERNAME}:${HASHIBOT_TOKEN}@github.com/${repository}" \
        "Failed to setup git for hashibot usage (remote)"
}

# Get the default branch name for the current repository
function default_branch() {
    local s
    s="$(git symbolic-ref refs/remotes/origin/HEAD)" ||
        failure "Failed to determine default branch (is working directory git repository?)"
    printf "%s" "${s##*origin/}"
}


# Send a notification to slack. All flag values can be set with
# environment variables using the upcased name prefixed with SLACK_,
# for example: --channel -> SLACK_CHANNEL
#
# -c --channel CHAN        Send to channel
# -u --username USER       Send as username
# -i --icon URL            User icon image
# -s --state STATE         Message state (success, warn, error, or color code)
# -m --message MESSAGE     Message to send
# -M --message-file PATH   Use file contents as message
# -f --file PATH           Send raw contents of file in message (displayed in code block)
# -t --title TITLE         Message title
# -T --tail NUMBER         Send last NUMBER lines of content from raw message file
# -w --webhook URL         Slack webhook
function slack() {
    # Convert any long names to short names
    for arg in "$@"; do
        shift
        case "${arg}" in
            "--channel") set -- "${@}" "-c" ;;
            "--username") set -- "${@}" "-u" ;;
            "--icon") set -- "${@}" "-i" ;;
            "--state") set -- "${@}" "-s" ;;
            "--message") set -- "${@}" "-m" ;;
            "--message-file") set -- "${@}" "-M" ;;
            "--file") set -- "${@}" "-f" ;;
            "--title") set -- "${@}" "-t" ;;
            "--tail") set -- "${@}" "-T" ;;
            "--webhook") set -- "${@}" "-w"  ;;
            *) set -- "${@}" "${arg}" ;;
        esac
    done
    local OPTIND opt
    # Default all options to values provided by environment variables
    local channel="${SLACK_CHANNEL}"
    local username="${SLACK_USERNAME}"
    local icon="${SLACK_ICON}"
    local state="${SLACK_STATE}"
    local message="${SLACK_MESSAGE}"
    local message_file="${SLACK_MESSAGE_FILE}"
    local file="${SLACK_FILE}"
    local title="${SLACK_TITLE}"
    local tail="${SLACK_TAIL}"
    local webhook="${SLACK_WEBHOOK}"
    while getopts ":c:u:i:s:m:M:f:t:T:w:" opt; do
        case "${opt}" in
            "c") channel="${OPTARG}" ;;
            "u") username="${OPTARG}" ;;
            "i") icon="${OPTARG}" ;;
            "s") state="${OPTARG}" ;;
            "m") message="${OPTARG}" ;;
            "M") message_file="${OPTARG}" ;;
            "f") file="${OPTARG}" ;;
            "t") title="${OPTARG}" ;;
            "T") tail="${OPTARG}" ;;
            "w") webhook="${OPTARG}" ;;
            *) failure "Invalid flag provided to slack" ;;
        esac
    done
    shift $((OPTIND-1))

    # If we don't have a webhook provided, stop here
    if [ -z "${webhook}" ]; then
        (>&2 echo "ERROR: Cannot send Slack notification, webhook unset")
        return 1
    fi

    local footer footer_icon ts

    # If we are using GitHub actions, format the footer
    if [ -n "${GITHUB_ACTIONS}" ]; then
        if [ -z "${icon}" ]; then
            icon="https://ca.slack-edge.com/T024UT03C-WG8NDATGT-f82ae03b9fca-48"
        fi
        if [ -z "${username}" ]; then
            username="GitHub"
        fi
        footer_icon="https://ca.slack-edge.com/T024UT03C-WG8NDATGT-f82ae03b9fca-48"
        footer="Actions - <https://github.com/${GITHUB_REPOSITORY}/commit/${GITHUB_SHA}/checks|${GITHUB_REPOSITORY}>"
    fi

    # If no state was provided, default to good state
    if [ -z "${state}" ]; then
        state="good"
    fi

    # Convert state aliases
    case "${state}" in
        "success" | "good")
            state="good";;
        "warn" | "warning")
            state="warning";;
        "error" | "danger")
            state="danger";;
    esac

    # If we have a message file, read it
    if [ -n "${message_file}" ]; then
        local message_file_content
        message_file_content="$(<"${message_file}")"
        if [ -z "${message}" ]; then
            message="${message_file_content}"
        else
            message="${message}\n\n${message_file_content}"
        fi
    fi

    # If we have a file to include, add it now. Files are
    # displayed as raw content, so be sure to wrap with
    # backticks
    if [ -n "${file}" ]; then
        local file_content
        # If tail is provided, then only include the last n number
        # of lines in the file
        if [ -n "${tail}" ]; then
            if ! file_content="$(tail -n "${tail}" "${file}")"; then
                file_content="UNEXPECTED ERROR: Failed to tail content in file ${file}"
            fi
        else
            file_content="$(<"${file}")"
        fi
        if [ -n "${file_content}" ]; then
            message="${message}\n\n\`\`\`\n${file_content}\n\`\`\`"
        fi
    fi

    local attach attach_template payload payload_template ts
    ts="$(date '+%s')"

    # shellcheck disable=SC2016
    attach_template='{text: $msg, color: $state, mrkdwn_in: ["text"], ts: $time'
    if [ -n "${title}" ]; then
        # shellcheck disable=SC2016
        attach_template+=', title: $title'
    fi
    if [ -n "${footer}" ]; then
        # shellcheck disable=SC2016
        attach_template+=', footer: $footer'
    fi
    if [ -n "${footer_icon}" ]; then
        # shellcheck disable=SC2016
        attach_template+=', footer_icon: $footer_icon'
    fi
    attach_template+='}'

    attach=$(jq -n \
        --arg msg "$(printf "%b" "${message}")" \
        --arg title "${title}" \
        --arg state "${state}" \
        --arg time "${ts}" \
        --arg footer "${footer}" \
        --arg footer_icon "${footer_icon}" \
        "${attach_template}" \
        )

    # shellcheck disable=SC2016
    payload_template='{attachments: [$attachment]'
    if [ -n "${username}" ]; then
        # shellcheck disable=SC2016
        payload_template+=', username: $username'
    fi
    if [ -n "${channel}" ]; then
        # shellcheck disable=SC2016
        payload_template+=', channel: $channel'
    fi
    if [ -n "${icon}" ]; then
        # shellcheck disable=SC2016
        payload_template+=', icon_url: $icon'
    fi
    payload_template+='}'

    payload=$(jq -n \
        --argjson attachment "${attach}" \
        --arg username "${username}" \
        --arg channel "${channel}" \
        --arg icon "${icon}" \
        "${payload_template}" \
        )

    debug "sending slack message with payload: %s" "${payload}"
    wrap curl -SsL --fail -X POST -H "Content-Type: application/json" -d "${payload}" "${webhook}" \
        "Failed to send slack notification"
}

# Install internal HashiCorp tools. These tools are expected to
# be located in private (though not required) HashiCorp repositories.
# It will attempt to download the correct artifact for the current
# platform based on HashiCorp naming conventions. It expects that
# the name of the repository is the name of the tool.
#
# $1: Name of repository
function install_hashicorp_tool() {
    local tool_name="${1}"
    local extensions=("zip" "tar.gz")
    local asset release_content tmp

    if [ -z "${tool_name}" ]; then
        failure "Repository name is required for hashicorp tool install"
    fi

    debug "installing hashicorp tool: %s" "${tool_name}"

    # Swap out repository to force correct github token
    local repository_bak="${repository}"
    repository="${repo_owner}/${release_repo}"

    tmp="$(mktemp -d --tmpdir vagrantci-XXXXXX)" ||
        failure "Failed to create temporary working directory"
    pushd "${tmp}"

    local platform
    platform="$(uname -s)" || failure "Failed to get local platform name"
    platform="${platform,,}" # downcase the platform name

    local arches=()

    local arch
    arch="$(uname -m)" || failure "Failed to get local platform architecture"
    arches+=("${arch}")

    # If the architecture is listed as x86_64, add amd64 to the
    # arches collection. Hashicorp naming scheme is to use amd64 in
    # the file name, but isn't always followed
    if [ "${arch}" = "x86_64" ]; then
        arches+=("amd64")
    fi

    release_content=$(github_request -H "Content-Type: application/json" \
        "https://api.github.com/repos/hashicorp/${tool_name}/releases/latest") ||
      failure "Failed to request latest releases for hashicorp/${tool_name}"

    local exten
    for exten in "${extensions[@]}"; do
        for arch in "${arches[@]}"; do
            local suffix="${platform}_${arch}.${exten}"
            debug "checking for release artifact with suffix: %s" "${suffix}"
            asset=$(printf "%s" "${release_content}" | jq -r \
                '.assets[] | select(.name | contains("'"${suffix}"'")) | .url')
            if [ -n "${asset}" ]; then
                debug "release artifact found: %s" "${asset}"
               break
            fi
        done
        if [ -n "${asset}" ]; then
            break
        fi
    done

    if [ -z "${asset}" ]; then
        failure "Failed to find release of hashicorp/${tool_name} for ${platform} ${arch[0]}"
    fi

    debug "tool artifact match found for install: %s" "${asset}"

    github_request -o "${tool_name}.${exten}" \
        -H "Accept: application/octet-stream" "${asset}" ||
        "Failed to download latest release for hashicorp/${tool_name}"

    if [ "${exten}" = "zip" ]; then
        wrap unzip "${tool_name}.${exten}" \
            "Failed to unpack latest release for hashicorp/${tool_name}"
    else
        wrap tar xf "${tool_name}.${exten}" \
            "Failed to unpack latest release for hashicorp/${tool_name}"
    fi

    rm -f "${tool_name}.${exten}"

    local files=( ./* )
    wrap chmod 0755 ./* \
        "Failed to change mode on latest release for hashicorp/${tool_name}"

    wrap mv ./* "${ci_bin_dir}" \
        "Failed to install latest release for hashicorp/${tool_name}"

    debug "new files added to path: %s" "${files[*]}"
    popd
    rm -rf "${tmp}"

    repository="${repository_bak}" # restore the repository value
}

# Install tool from GitHub releases. It will fetch the latest release
# of the tool and install it. The proper release artifact will be matched
# by a "linux_amd64" string. This command is best effort and may not work.
#
# $1: Organization name
# $2: Repository name
# $3: Tool name (optional)
function install_github_tool() {
    local org_name="${1}"
    local r_name="${2}"
    local tool_name="${3}"

    if [ -z "${tool_name}" ]; then
        tool_name="${r_name}"
    fi

    local asset release_content tmp
    local artifact_list artifact basen

    tmp="$(mktemp -d --tmpdir vagrantci-XXXXXX)" ||
        failure "Failed to create temporary working directory"
    pushd "${tmp}"

    debug "installing github tool %s from %s/%s" "${tool_name}" "${org_name}" "${r_name}"

    release_content=$(github_request -H "Content-Type: application/json" \
        "https://api.github.com/repos/${org_name}/${r_name}/releases/latest") ||
        failure "Failed to request latest releases for ${org_name}/${r_name}"

    asset=$(printf "%s" "${release_content}" | jq -r \
        '.assets[] | select( ( (.name | contains("amd64")) or (.name | contains("x86_64")) or (.name | contains("x86-64")) ) and (.name | contains("linux")) and (.name | endswith("sha256") | not) and (.name | endswith("sig") | not))  | .url') ||
        failure "Failed to detect latest release for ${org_name}/${r_name}"

    artifact="${asset##*/}"
    github_request -o "${artifact}" -H "Accept: application/octet-stream" "${asset}" ||
        "Failed to download latest release for ${org_name}/${r_name}"

    basen="${artifact##*.}"
    if [ "${basen}" = "zip" ]; then
        wrap unzip "${artifact}" \
            "Failed to unpack latest release for ${org_name}/${r_name}"
        rm -f "${artifact}"
    elif [ -n "${basen}" ]; then
        wrap tar xf "${artifact}" \
            "Failed to unpack latest release for ${org_name}/${r_name}"
        rm -f "${artifact}"
    fi

    artifact_list=(./*)

    # If the artifact only contained a directory, get
    # the contents of the directory
    if [ "${#artifact_list[@]}" -eq "1" ] && [ -d "${artifact_list[0]}" ]; then
        debug "unpacked artifact contained only directory, inspecting contents"
        artifact_list=( "${artifact_list[0]}/"* )
    fi

    local tool_match tool_glob_match executable_match
    local item
    for item in "${artifact_list[@]}"; do
        if [ "${item##*/}" = "${tool_name}" ]; then
            debug "tool name match found: %s" "${item}"
            tool_match="${item}"
        elif [ -e "${item}" ]; then
            debug "executable match found: %s" "${item}"
            executable_match="${item}"
        elif [[ "${item}" = "${tool_name}"* ]]; then
            debug "tool name glob match found: %s" "${item}"
            tool_glob_match="${item}"
        fi
    done

    # Install based on best match to worst match
    if [ -n "${tool_match}" ]; then
        debug "installing %s from tool name match (%s)" "${tool_name}" "${tool_match}"
        mv -f "${tool_match}" "${ci_bin_dir}/${tool_name}" ||
            "Failed to install latest release of %s from %s/%s" "${tool_name}" "${org_name}" "${r_name}"
    elif [ -n "${tool_glob_match}" ]; then
        debug "installing %s from tool name glob match (%s)" "${tool_name}" "${tool_glob_match}"
        mv -f "${tool_glob_match}" "${ci_bin_dir}/${tool_name}" ||
            "Failed to install latest release of %s from %s/%s" "${tool_name}" "${org_name}" "${r_name}"
    elif [ -n "${executable_match}" ]; then
        debug "installing %s from executable file match (%s)" "${tool_name}" "${executable_match}"
        mv -f "${executable_match}" "${ci_bin_dir}/${tool_name}" ||
            "Failed to install latest release of %s from %s/%s" "${tool_name}" "${org_name}" "${r_name}"
    else
        failure "Failed to locate tool '%s' in latest release from %s/%s" "${org_name}" "${r_name}"
    fi

    popd
    rm -rf "${tmp}"
}

# Prepare host for packet use. It will validate the
# required environment variables are set, ensure
# packet-exec is installed, and setup the SSH key.
function packet-setup() {
    # First check that we have the environment variables
    if [ -z "${PACKET_EXEC_TOKEN}" ]; then
        failure "Cannot setup packet, missing token"
    fi
    if [ -z "${PACKET_EXEC_PROJECT_ID}" ]; then
        failure "Cannot setup packet, missing project"
    fi
    if [ -z "${PACKET_SSH_KEY_CONTENT}" ]; then
        failure "Cannot setup packet, missing ssh key"
    fi

    install_hashicorp_tool "packet-exec"

    # Write the ssh key to disk
    local content
    content="$(base64 --decode - <<< "${PACKET_SSH_KEY_CONTENT}")" ||
        failure "Cannot setup packet, failed to decode key"
    touch ./packet-key
    chmod 0600 ./packet-key
    printf "%s" "${content}" > ./packet-key
    local working_directory
    working_directory="$(pwd)" ||
        failure "Cannot setup packet, failed to determine working directory"
    export PACKET_EXEC_SSH_KEY="${working_directory}/packet-key"
}

# Download artifact(s) from GitHub release. The artifact pattern is simply
# a substring that is matched against the artifact download URL. Artifact(s)
# will be downloaded to the working directory.
#
# $1: repository name
# $2: release tag name
# $3: artifact pattern (optional, all artifacts downloaded if omitted)
function github_release_assets() {
    local req_args
    req_args=()

    local  asset_pattern
    local release_repo="${1}"
    local release_name="${2}"
    local asset_pattern="${3}"

    # Swap out repository to force correct github token
    local repository_bak="${repository}"
    repository="${repo_owner}/${release_repo}"

    req_args+=("-H" "Accept: application/vnd.github+json")
    req_args+=("https://api.github.com/repos/${repository}/releases/tags/${release_name}")

    debug "fetching release asset list for release %s on %s" "${release_name}" "${repository}"

    local release_content
    release_content=$(github_request "${req_args[@]}") ||
        failure "Failed to request release (${release_name}) for ${repository}"

    local query=".assets[]"
    if [ -n "${asset_pattern}" ]; then
        debug "applying release asset list filter %s" "${asset_pattern}"
        query+="$(printf ' | select(.name | contains("%s"))' "${asset_pattern}")"
    fi

    local asset_list
    asset_list=$(printf "%s" "${release_content}" | jq -r "${query} | .url") ||
        failure "Failed to detect asset in release (${release_name}) for ${release_repo}"

    local name_list
    name_list=$(printf "%s" "${release_content}" | jq -r "${query} | .name") ||
        failure "Failed to detect asset in release (${release_name}) for ${release_repo}"

    req_args=()
    req_args+=("-H" "Accept: application/octet-stream")

    local assets asset_names
    readarray -t assets <  <(printf "%s" "${asset_list}")
    readarray -t asset_names < <(printf "%s" "${name_list}")

    local idx
    for ((idx=0; idx<"${#assets[@]}"; idx++ )); do
        local asset="${assets[$idx]}"
        local artifact="${asset_names[$idx]}"

        github_request "${req_args[@]}" -o "${artifact}" "${asset}" ||
            "Failed to download asset (${artifact}) in release ${release_name} for ${repository}"
        printf "downloaded release asset %s from release %s on %s\n" "${artifact}" "${release_name}" "${repository}"
    done

    repository="${repository_bak}" # restore the repository value
}

# Basic helper to create a GitHub prerelease
#
# $1: repository name
# $2: tag name for release
# $3: path to artifact(s) - single file or directory
function github_prerelease() {
    local prerelease_repo="${1}"
    local tag_name="${2}"
    local artifacts="${3}"

    if [ -z "${prerelease_repo}" ]; then
        failure "Name of repository required for prerelease release"
    fi

    if [ -z "${tag_name}" ]; then
        failure "Name is required for prerelease release"
    fi

    if [ -z "${artifacts}" ]; then
        failure "Artifacts path is required for prerelease release"
    fi

    if [ ! -e "${artifacts}" ]; then
        failure "No artifacts found at provided path (${artifacts})"
    fi

    local prerelease_target="${repo_owner}/${prerelease_repo}"

    # Create the prerelease
    local response
    response="$(github_create_release -p -t "${tag_name}" -o "${repo_owner}" -r "${prerelease_repo}" )" ||
        failure "Failed to create prerelease on %s/%s" "${repo_owner}" "${prerelease_repo}"

    # Extract the release ID from the response
    local release_id
    release_id="$(printf "%s" "${response}" | jq -r '.id')" ||
        failure "Failed to extract prerelease ID from response for ${tag_name} on ${prerelease_target}"

    github_upload_release_artifacts "${prerelease_repo}" "${release_id}" "${artifacts}"

}

# Upload artifacts to a release
#
# $1: target repository name
# $2: release ID
# $3: path to artifact(s) - single file or directory
function github_upload_release_artifacts() {
    local target_repo_name="${1}"
    local release_id="${2}"
    local artifacts="${3}"

    if [ -z "${target_repo_name}" ]; then
        failure "Repository name required for release artifact upload"
    fi

    if [ -z "${release_id}" ]; then
        failure "Release ID require for release artifact upload"
    fi

    if [ -z "${artifacts}" ]; then
        failure "Artifacts required for release artifact upload"
    fi

    if [ ! -e "${artifacts}" ]; then
        failure "No artifacts found at provided path for release artifact upload (%s)" "${artifacts}"
    fi

    # Swap out repository to force correct github token
    local repository_bak="${repository}"
    repository="${repo_owner}/${target_repo_name}"

    local req_args=("-X" "POST" "-H" "Content-Type: application/octet-stream")

    # Now upload the artifacts to the draft release
    local artifact_name
    if [ -f "${artifacts}" ]; then
        debug "uploading %s to release ID %s on %s" "${artifact}" "${release_id}" "${repository}"
        artifact_name="${artifacts##*/}"
        req_args+=("https://uploads.github.com/repos/${repository}/releases/${release_id}/assets?name=${artifact_name}"
                   "--data-binary" "@${artifacts}")
        if ! github_request "${req_args[@]}" > /dev/null ; then
            failure "Failed to upload artifact '${artifacts}' to draft release on ${repository}"
        fi
        printf "Uploaded release artifact: %s\n" "${artifact_name}" >&2
        # Everything is done so get on outta here
        return 0
    fi

    # Push into the directory
    pushd "${artifacts}"

    local artifact_path
    # Walk through each item and upload
    for artifact_path in * ; do
        if [ ! -f "${artifact_path}" ]; then
            debug "skipping '%s' as it is not a file" "${artifact_path}"
            continue
        fi
        artifact_name="${artifact_path##*/}"
        debug "uploading %s/%s to release ID %s on %s" "${artifacts}" "${artifact_name}" "${release_id}" "${repository}"
        local r_args=( "${req_args[@]}" )
        r_args+=("https://uploads.github.com/repos/${repository}/releases/${release_id}/assets?name=${artifact_name}"
                   "--data-binary" "@${artifact_path}")
        if ! github_request "${r_args[@]}" > /dev/null ; then
            failure "Failed to upload artifact '${artifact_name}' in '${artifacts}' to draft release on ${repository}"
        fi
        printf "Uploaded release artifact: %s\n" "${artifact_name}" >&2
    done

    repository="${repository_bak}"
}

# Basic helper to create a GitHub draft release
#
# $1: repository name
# $2: tag name for release
# $3: path to artifact(s) - single file or directory
function github_draft_release() {
    local draft_repo="${1}"
    local tag_name="${2}"
    local artifacts="${3}"

    if [ -z "${draft_repo}" ]; then
        failure "Name of repository required for draft release"
    fi

    if [ -z "${tag_name}" ]; then
        failure "Name is required for draft release"
    fi

    if [ -z "${artifacts}" ]; then
        failure "Artifacts path is required for draft release"
    fi

    if [ ! -e "${artifacts}" ]; then
        failure "No artifacts found at provided path (%s)" "${artifacts}"
    fi

    # Create the draft release
    local response
    response="$(github_create_release -d -t "${tag_name}" -o "${repo_owner}" -r "${draft_repo}" )" ||
        failure "Failed to create draft release on %s" "${repo_owner}/${draft_repo}"

    # Extract the release ID from the response
    local release_id
    release_id="$(printf "%s" "${response}" | jq -r '.id')" ||
        failure "Failed to extract draft release ID from response for %s on %s" "${tag_name}" "${repo_owner}/${draft_repo}"

    github_upload_release_artifacts "${draft_repo}" "${release_id}" "${artifacts}"
}

# Create a GitHub release
#
# -b BODY - body of release
# -c COMMITISH - commitish of release
# -n NAME - name of the release
# -o OWNER - repository owner (required)
# -r REPO - repository name (required)
# -t TAG_NAME - tag name for release (required)
# -d - draft release
# -p - prerelease
# -g - generate release notes
# -m - make release latest
#
# NOTE: Artifacts for release must be uploaded using `github_upload_release_artifacts`
function github_create_release() {
    local OPTIND opt owner repo tag_name
    # Values that can be null
    local body commitish name
    # Values we default
    local draft="false"
    local generate_notes="false"
    local make_latest="false"
    local prerelease="false"

    while getopts ":b:c:n:o:r:t:dpgm" opt; do
        case "${opt}" in
            "b") body="${OPTARG}" ;;
            "c") commitish="${OPTARG}" ;;
            "n") name="${OPTARG}" ;;
            "o") owner="${OPTARG}" ;;
            "r") repo="${OPTARG}" ;;
            "t") tag_name="${OPTARG}" ;;
            "d") draft="true" ;;
            "p") prerelease="true" ;;
            "g") generate_notes="true" ;;
            "m") make_latest="true" ;;
            *) failure "Invalid flag provided to github_create_release" ;;
        esac
    done
    shift $((OPTIND-1))

    # Sanity check
    if [ -z "${owner}" ]; then
        failure "Repository owner value is required for GitHub release"
    fi

    if [ -z "${repo}" ]; then
        failure "Repository name is required for GitHub release"
    fi

    if [ -z "${tag_name}" ] && [ "${draft}" != "true" ]; then
        failure "Tag name is required for GitHub release"
    fi

    if [ "${draft}" = "true" ] && [ "${prerelease}" = "true" ]; then
        failure "Release cannot be both draft and prerelease"
    fi

    # If no name is provided, use the tag name value
    if [ -z "${name}" ]; then
        name="${tag_name}"
    fi

    # shellcheck disable=SC2016
    local payload_template='{tag_name: $tag_name, draft: $draft, prerelease: $prerelease, generate_release_notes: $generate_notes, make_latest: $make_latest'
    local jq_args=("-n"
                   "--arg" "tag_name" "${tag_name}"
                   "--arg" "make_latest" "${make_latest}"
                   "--argjson" "draft" "${draft}"
                   "--argjson" "generate_notes" "${generate_notes}"
                   "--argjson" "prerelease" "${prerelease}"
                  )

    if [ -n "${commitish}" ]; then
        # shellcheck disable=SC2016
        payload_template+=', target_commitish: $commitish'
        jq_args+=("--arg" "commitish" "${commitish}")
    fi
    if [ -n "${name}" ]; then
        # shellcheck disable=SC2016
        payload_template+=', name: $name'
        jq_args+=("--arg" "name" "${name}")
    fi
    if [ -n "${body}" ]; then
        # shellcheck disable=SC2016
        payload_template+=', body: $body'
        jq_args+=("--arg" "body" "${body}")
    fi
    payload_template+='}'

    # Generate the payload
    local payload
    payload="$(jq "${jq_args[@]}" "${payload_template}" )" ||
        failure "Could not generate GitHub release JSON payload"

    local target_repo="${owner}/${repo}"
    # Set repository to get correct token behavior on request
    local repository_bak="${repository}"
    repository="${target_repo}"

    # Craft our request arguments
    local req_args=("-X" "POST" "https://api.github.com/repos/${target_repo}/releases" "-d" "${payload}")

    # Create the draft release
    local response
    if ! response="$(github_request "${req_args[@]}")"; then
        failure "Could not create github release on ${target_repo}"
    fi

    # Restore the repository
    repository="${repository_bak}"

    local rel_type
    if [ "${draft}" = "true" ]; then
        rel_type="draft release"
    elif [ "${prerelease}" = "true" ]; then
        rel_type="prerelease"
    else
        rel_type="release"
    fi

    # Report new draft release was created
    printf "New %s '%s' created on '%s'\n" "${rel_type}" "${tag_name}" "${target_repo}" >&2

    # Print the response
    printf "%s" "${response}"
}

# Check if a github release exists by tag name
# NOTE: This can be used for release and prerelease checks.
#       Draft releases must use the github_draft_release_exists
#       function.
#
# $1: repository name
# $2: release tag name
function github_release_exists() {
    local release_repo="${1}"
    local release_name="${2}"

    if [ -z "${release_repo}" ]; then
        failure "Repository name required for release lookup"
    fi
    if [ -z "${release_name}" ]; then
        failure "Release name required for release lookup"
    fi

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${release_repo}"

    local result="1"
    if github_request \
        -H "Accept: application/vnd.github+json" \
        "https://api.github.com/repos/${repository}/releases/tags/${release_name}" > /dev/null; then
        debug "release '${release_name}' found in ${repository}"
        result="0"
    else
        debug "release '${release_name}' not found in ${repository}"
    fi

    # Restore repository value
    repository="${repository_bak}"

    return "${result}"
}

# Check if a github release exists using fuzzy match
#
# $1: repository name
# $2: release name
function github_release_exists_fuzzy() {
    local release_repo="${1}"
    local release_name="${2}"

    if [ -z "${release_repo}" ]; then
        failure "Repository name required for draft release lookup"
    fi
    if [ -z "${release_name}" ]; then
        failure "Release name required for draft release lookup"
    fi

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${release_repo}"

    local page=$((1))
    local matched_name

    while [ -z "${release_content}" ]; do
        local release_list
        release_list="$(github_request \
            -H "Content-Type: application/json" \
            "https://api.github.com/repos/${repository}/releases?per_page=100&page=${page}")" ||
            failure "Failed to request releases list for ${repository}"

        # If there's no more results, just bust out of the loop
        if [ "$(jq 'length' <( printf "%s" "${release_list}" ))" -lt "1" ]; then
            break
        fi

        local names name_list n matched_name
        name_list="$(printf "%s" "${release_list}" | jq '.[] | .name')" ||
            failure "Could not generate name list"

        # shellcheck disable=SC2206
        names=( $name_list )
        for n in "${names[@]}"; do
            if [[ "${n}" =~ $release_name ]]; then
                matched_name="${n}"
                break
            fi
        done

        if [ -n "${matched_name}" ]; then
            break
        fi

        ((page++))
    done

    # Restore the $repository value
    repository="${repository_bak}"

    if [ -z "${matched_name}" ]; then
        debug "did not locate release named %s for %s" "${release_name}" "${repo_owner}/${release_repo}"
        return 1
    fi

    debug "found release name %s in %s (pattern: %s)" "${matched_name}" "${repo_owner}/${release_repo}" "${release_name}"
    return 0
}

# Check if a draft release exists by name
#
# $1: repository name
# $2: release name
function github_draft_release_exists() {
    local release_repo="${1}"
    local release_name="${2}"

    if [ -z "${release_repo}" ]; then
        failure "Repository name required for draft release lookup"
    fi
    if [ -z "${release_name}" ]; then
        failure "Release name required for draft release lookup"
    fi

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${release_repo}"

    local page=$((1))
    local release_content

    while [ -z "${release_content}" ]; do
        local release_list
        release_list="$(github_request \
            -H "Content-Type: application/json" \
            "https://api.github.com/repos/${repository}/releases?per_page=100&page=${page}")" ||
            failure "Failed to request releases list for ${repository}"

        # If there's no more results, just bust out of the loop
        if [ "$(jq 'length' <( printf "%s" "${release_list}" ))" -lt "1" ]; then
            break
        fi

        query="$(printf '.[] | select(.name == "%s")' "${release_name}")"

        release_content=$(printf "%s" "${release_list}" | jq -r "${query}")

        ((page++))
    done

    # Restore the $repository value
    repository="${repository_bak}"

    if [ -z "${release_content}" ]; then
        debug "did not locate draft release named %s for %s" "${release_name}" "${repo_owner}/${release_repo}"
        return 1
    fi

    debug "found draft release name %s in %s" "${release_name}" "${repo_owner}/${release_repo}"
    return 0
}

# Download artifact(s) from GitHub draft release. A draft release is not
# attached to a tag and therefore is referenced by the release name directly.
# The artifact pattern is simply a substring that is matched against the
# artifact download URL. Artifact(s) will be downloaded to the working directory.
#
# $1: repository name
# $2: release name
# $3: artifact pattern (optional, all artifacts downloaded if omitted)
function github_draft_release_assets() {
    local release_repo_name="${1}"
    local release_name="${2}"
    local asset_pattern="${3}"

    if [ -z "${release_repo_name}" ]; then
        failure "Repository name is required for draft release asset fetching"
    fi
    if [ -z "${release_name}" ]; then
        failure "Draft release name is required for draft release asset fetching"
    fi

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${release_repo_name}"

    local page=$((1))
    local release_content query
    while [ -z "${release_content}" ]; do
        local release_list
        release_list=$(github_request -H "Content-Type: application/json" \
            "https://api.github.com/repos/${repository}/releases?per_page=100&page=${page}") ||
            failure "Failed to request releases list for ${repository}"

        # If there's no more results, just bust out of the loop
        if [ "$(jq 'length' <( printf "%s" "${release_list}" ))" -lt "1" ]; then
            debug "did not locate draft release named %s in %s" "${release_name}" "${repository}"
            break
        fi

        query="$(printf '.[] | select(.name == "%s")' "${release_name}")"
        release_content=$(printf "%s" "${release_list}" | jq -r "${query}")

        ((page++))
    done

    query=".assets[]"
    if [ -n "${asset_pattern}" ]; then
        debug "apply pattern filter to draft assets: %s" "${asset_pattern}"
        query+="$(printf ' | select(.name | contains("%s"))' "${asset_pattern}")"
    fi

    local asset_list
    asset_list=$(printf "%s" "${release_content}" | jq -r "${query} | .url") ||
        failure "Failed to detect asset in release (${release_name}) for ${repository}"

    local name_list
    name_list=$(printf "%s" "${release_content}" | jq -r "${query} | .name") ||
        failure "Failed to detect asset in release (${release_name}) for ${repository}"

    debug "draft release assets list: %s" "${name_list}"

    local assets asset_names
    readarray -t assets <  <(printf "%s" "${asset_list}")
    readarray -t asset_names < <(printf "%s" "${name_list}")

    if [ "${#assets[@]}" -ne "${#asset_names[@]}" ]; then
        failure "Failed to match download assets with names in release list for ${repository}"
    fi

    local idx
    for ((idx=0; idx<"${#assets[@]}"; idx++ )); do
        local asset="${assets[$idx]}"
        local artifact="${asset_names[$idx]}"
        github_request -o "${artifact}" \
            -H "Accept: application/octet-stream" "${asset}" ||
            "Failed to download asset in release (${release_name}) for ${repository} - ${artifact}"

        printf "downloaded draft release asset at %s\n" "${artifact}" >&2
    done

    repository_bak="${repository}" # restore repository value
}

# This function is identical to the github_draft_release_assets
# function above with one caveat: it does not download the files.
# Each file that would be downloaded is simply touched in the
# current directory. This provides an easy way to check the
# files that would be downloaded without actually downloading
# them.
#
# An example usage of this can be seen in the vagrant package
# building where we use this to enable building missing substrates
# or packages on re-runs and only download the artifacts if
# actually needed.
function github_draft_release_asset_names() {
    local release_reponame="${1}"
    local release_name="${2}"
    local asset_pattern="${3}"

    if [ -z "${release_reponame}" ]; then
        failure "Repository name is required for draft release assets names"
    fi

    if [ -z "${release_name}" ]; then
        failure "Release name is required for draft release asset names"
    fi

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${release_reponame}"

    local page=$((1))
    local release_content query
    while [ -z "${release_content}" ]; do
        local release_list
        release_list=$(github_request H "Content-Type: application/json" \
            "https://api.github.com/repos/${repository}/releases?per_page=100&page=${page}") ||
            failure "Failed to request releases list for ${repository}"

        # If there's no more results, just bust out of the loop
        if [ "$(jq 'length' <( printf "%s" "${release_list}" ))" -lt "1" ]; then
            debug "did not locate draft release named %s in %s" "${release_name}" "${repository}"
            break
        fi

        query="$(printf '.[] | select(.name == "%s")' "${release_name}")"
        release_content=$(printf "%s" "${release_list}" | jq -r "${query}")

        ((page++))
    done

    query=".assets[]"
    if [ -n "${asset_pattern}" ]; then
        debug "apply pattern filter to draft assets: %s" "${asset_pattern}"
        query+="$(printf ' | select(.name | contains("%s"))' "${asset_pattern}")"
    fi

    local name_list
    name_list=$(printf "%s" "${release_content}" | jq -r "${query} | .name") ||
        failure "Failed to detect asset in release (${release_name}) for ${repository}"

    debug "draft release assets list: %s" "${name_list}"

    local asset_names
    readarray -t asset_names < <(printf "%s" "${name_list}")

    local idx
    for ((idx=0; idx<"${#asset_names[@]}"; idx++ )); do
        local artifact="${asset_names[$idx]}"
        touch "${artifact}" ||
            failure "Failed to touch release asset at path: %s" "${artifact}"
        printf "touched draft release asset at %s\n" "${artifact}" >&2
    done

    repository_bak="${repository}" # restore repository value
}

# Delete a github release by tag name
# NOTE: Releases and prereleases can be deleted using this
#       function. For draft releases use github_delete_draft_release
#
# $1: tag name of release
# $2: repository name (optional, defaults to current repository name)
function github_delete_release() {
    local release_name="${1}"
    local release_repo="${2:-$repo_name}"

    if [ -z "${release_name}" ]; then
        failure "Release name is required for deletion"
    fi
    if [ -z "${release_repo}" ]; then
        failure "Repository is required for release deletion"
    fi

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${release_repo}"

    # Fetch the release first
    local release_content
    release_content="$(github_request \
        -H "Accept: application/vnd.github+json" \
        "https://api.github.com/repos/${repository}/releases/tags/${release_name}")" ||
        failure "Failed to fetch release information for '${release_name}' in ${repository}"

    # Get the release id to reference in delete request
    local rel_id
    rel_id="$(jq -r '.id' <( printf "%s" "${release_content}" ) )" ||
        failure "Failed to read release id for '${release_name}' in ${repository}"

    debug "deleting github release '${release_name}' in ${repository} with id ${rel_id}"

    # Send the deletion request
    github_request \
        -X "DELETE" \
        -H "Accept: application/vnd.github+json" \
        "https://api.github.com/repos/${repository}/releases/${rel_id}" > /dev/null ||
        failure "Failed to delete release '${release_name}' in ${repository}"

    # Restore repository value
    repository="${repository_bak}"
}

# Delete draft release with given name
#
# $1: name of draft release
# $2: repository name (optional, defaults to current repository name)
function github_delete_draft_release() {
    local draft_name="${1}"
    local delete_repo="${2:-$repo_name}"

    if [ -z "${draft_name}" ]; then
        failure "Draft name is required for deletion"
    fi

    if [ -z "${delete_repo}" ]; then
        failure "Repository is required for draft deletion"
    fi

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${delete_repo}"

    local draft_ids=()
    local page=$((1))
    while true; do
        local release_list list_length
        release_list=$(github_request -H "Content-Type: application/json" \
            "https://api.github.com/repos/${repository}/releases?per_page=100&page=${page}") ||
            failure "Failed to request releases list for draft deletion on ${repository}"
        list_length="$(jq 'length' <( printf "%s" "${release_list}" ))" ||
            failure "Failed to calculate release length for draft deletion on ${repository}"

        # If the list is empty then there are no more releases to process
        if [ -z "${list_length}" ] || [ "${list_length}" -lt 1 ]; then
            debug "no releases returned for page %d in repository %s" "${page}" "${repository}"
            break
        fi

        local entry i release_draft release_id release_name
        for (( i=0; i < "${list_length}"; i++ )); do
            entry="$(jq ".[$i]" <( printf "%s" "${release_list}" ))" ||
                failure "Failed to read entry for draft deletion on ${repository}"
            release_draft="$(jq -r '.draft' <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry draft for draft deletion on ${repository}"
            release_id="$(jq -r '.id' <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry ID for draft deletion on ${repository}"
            release_name="$(jq -r '.name' <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry name for draft deletion on ${repository}"

            # If the names don't match, skip
            if [ "${release_name}" != "${draft_name}" ]; then
                debug "skipping release deletion, name mismatch (%s != %s)" "${release_name}" "${draft_name}"
                continue
            fi

            # If the release is not a draft, fail
            if [ "${release_draft}" != "true" ]; then
                debug "skipping release '%s' (ID: %s) from '%s' - release is not a draft" "${draft_name}" "${release_id}" "${repository}"
                continue
            fi

            # If we are here, we found a match
            draft_ids+=( "${release_id}" )
        done
        ((page++))
    done

    # If no draft ids were found, the release was not found
    # so we can just return success
    if [ "${#draft_ids[@]}" -lt "1" ]; then
        debug "no draft releases found matching name %s in %s" "${draft_name}" "${repository}"
        repository="${repository_bak}" # restore repository value before return
        return 0
    fi

    # Still here? Okay! Delete the draft(s)
    local draft_id
    for draft_id in "${draft_ids[@]}"; do
        info "Deleting draft release %s from %s (ID: %d)\n" "${draft_name}" "${repository}" "${draft_id}"
        github_request -X DELETE "https://api.github.com/repos/${repository}/releases/${draft_id}" ||
            failure "Failed to prune draft release ${draft_name} from ${repository}"
    done

    repository="${repository_bak}" # restore repository value before return
}

# Delete prerelease with given name
#
# $1: tag name of prerelease
# $2: repository name (optional, defaults to current repository name)
function github_delete_prerelease() {
    local tag_name="${1}"
    local delete_repo="${2:-$repo_name}"

    if [ -z "${tag_name}" ]; then
        failure "Tag name is required for deletion"
    fi

    if [ -z "${delete_repo}" ]; then
        failure "Repository is required for prerelease deletion"
    fi

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${delete_repo}"

    local prerelease
    prerelease=$(github_request -H "Content-Type: application/vnd.github+json" \
        "https://api.github.com/repos/${repository}/releases/tags/${tag_name}") ||
        failure "Failed to get prerelease %s from %s" "${tag_name}" "${repository}"
    local prerelease_id
    prerelease_id="$(jq -r '.id' <( printf "%s" "${prerelease}" ))" ||
        failure "Failed to read prerelease ID for %s on %s" "${tag_name}" "${repository}"
    local is_prerelease
    is_prerelease="$(jq -r '.prerelease' <( printf "%s" "${prerelease}" ))" ||
        failure "Failed to read prerelease status for %s on %s" "${tag_name}" "${repository}"

    # Validate the matched release is a prerelease
    if [ "${is_prerelease}" != "true" ]; then
        failure "Prerelease %s on %s is not marked as a prerelease, cannot delete" "${tag_name}" "${repository}"
    fi

    info "Deleting prerelease %s from repository %s" "${tag_name}" "${repository}"
    github_request -X DELETE "https://api.github.com/repos/${repository}/releases/${prerelease_id}" ||
        failure "Failed to delete prerelease %s from %s" "${tag_name}" "${repository}"

    repository="${repository_bak}" # restore repository value before return
}

# Delete any draft releases that are older than the
# given number of days
#
# $1: days
# $2: repository name (optional, defaults to current repository name)
function github_draft_release_prune() {
    github_release_prune "draft" "${@}"
}

# Delete any prereleases that are older than the
# given number of days
#
# $1: days
# $2: repository name (optional, defaults to current repository name)
function github_prerelease_prune() {
    github_release_prune "prerelease" "${@}"
}

# Delete any releases of provided type that are older than the
# given number of days
#
# $1: type (prerelease or draft)
# $2: days
# $3: repository name (optional, defaults to current repository name)
function github_release_prune() {
    local prune_type="${1}"
    if [ -z "${prune_type}" ]; then
        failure "Type is required for release pruning"
    fi
    if [ "${prune_type}" != "draft" ] && [ "${prune_type}" != "prerelease" ]; then
        failure "Invalid release pruning type provided '%s' (supported: draft or prerelease)" "${prune_type}"
    fi

    local days="${2}"
    if [ -z "${days}" ]; then
        failure "Number of days to retain is required for pruning"
    fi
    if [[ "${days}" = *[!0123456789]* ]]; then
        failure "Invalid value provided for days to retain when pruning (%s)" "${days}"
    fi

    local prune_repo="${3:-$repo_name}"
    if [ -z "${prune_repo}" ]; then
        failure "Repository name is required for pruning"
    fi

    local prune_seconds now
    now="$(date '+%s')"
    prune_seconds=$(("${now}"-("${days}" * 86400)))

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${prune_repo}"

    debug "deleting %ss over %d days old from %s" "${prune_type}" "${days}" "${repository}"

    local page=$((1))
    while true; do
        local release_list list_length

        release_list=$(github_request -H "Accept: application/vnd.github+json" \
            "https://api.github.com/repos/${repository}/releases?per_page=100&page=${page}") ||
            failure "Failed to request releases list for pruning on ${repository}"

        list_length="$(jq 'length' <( printf "%s" "${release_list}" ))" ||
            failure "Failed to calculate release length for pruning on ${repository}"

        if [ -z "${list_length}" ] || [ "${list_length}" -lt "1" ]; then
            debug "releases listing page %d for %s is empty" "${page}" "${repository}"
            break
        fi

        local entry i release_type release_name release_id release_create date_check
        for (( i=0; i < "${list_length}"; i++ )); do
            entry="$(jq ".[${i}]" <( printf "%s" "${release_list}" ))" ||
                failure "Failed to read entry for pruning on %s" "${repository}"
            release_type="$(jq -r ".${prune_type}" <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry %s for pruning on %s" "${prune_type}" "${repository}"
            release_name="$(jq -r '.name' <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry name for pruning on %s" "${repository}"
            release_id="$(jq -r '.id' <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry ID for pruning on %s" "${repository}"
            release_create="$(jq -r '.created_at' <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry created date for pruning on %s" "${repository}"
            date_check="$(date --date="${release_create}" '+%s')" ||
                failure "Failed to parse entry created date for pruning on %s" "${repository}"

            if [ "${release_type}" != "true" ]; then
                debug "Skipping %s on %s because release is not a %s" "${release_name}" "${repository}" "${prune_type}"
                continue
            fi

            if [ "$(( "${date_check}" ))" -lt "${prune_seconds}" ]; then
                info "Deleting release %s from %s\n" "${release_name}" "${prune_repo}"
                github_request -X DELETE "https://api.github.com/repos/${repository}/releases/${release_id}" ||
                    failure "Failed to prune %s %s from %s" "${prune_type}" "${release_name}" "${repository}"
            fi
        done
        ((page++))
    done

    repository="${repository_bak}" # restore the repository value
}

# Delete all but the latest N number of releases of the provided type
#
# $1: type (prerelease or draft)
# $2: number of releases to retain
# $3: repository name (optional, defaults to current repository name)
function github_release_prune_retain() {
    local prune_type="${1}"
    if [ -z "${prune_type}" ]; then
        failure "Type is required for release pruning"
    fi
    if [ "${prune_type}" != "draft" ] && [ "${prune_type}" != "prerelease" ]; then
        failure "Invalid release pruning type provided '%s' (supported: draft or prerelease)" "${prune_type}"
    fi

    local retain="${2}"
    if [ -z "${retain}" ]; then
        failure "Number of releases to retain is required for pruning"
    fi
    if [[ "${retain}" = *[!0123456789]* ]]; then
        failure "Invalid value provided for number of releases to retain when pruning (%s)" "${days}"
    fi

    local prune_repo="${3:-$repo_name}"
    if [ -z "${prune_repo}" ]; then
        failure "Repository name is required for pruning"
    fi

    # Override repository value to get correct token automatically
    local repository_bak="${repository}"
    repository="${repo_owner}/${prune_repo}"

    debug "pruning all %s type releases except latest %d releases" "${prune_type}" "${retain}"
    local prune_list=()
    local page=$((1))
    while true; do
        local release_list list_length

        release_list=$(github_request -H "Accept: application/vnd.github+json" \
            "https://api.github.com/repos/${repository}/releases?per_page=100&page=${page}&sort=created_at&direction=desc") ||
            failure "Failed to request releases list for pruning on ${repository}"
        list_length="$(jq 'length' <( printf "%s" "${release_list}" ))" ||
            failure "Failed to calculate release length for pruning on ${repository}"
        if [ -z "${list_length}" ] || [ "${list_length}" -lt "1" ]; then
            debug "releases listing page %d for %s is empty" "${page}" "${repository}"
            break
        fi

        local entry i release_type release_name release_id release_create date_check
        for (( i=0; i < "${list_length}"; i++ )); do
            entry="$(jq ".[${i}]" <( printf "%s" "${release_list}" ))" ||
                failure "Failed to read entry for pruning on %s" "${repository}"
            release_type="$(jq -r ".${prune_type}" <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry %s for pruning on %s" "${prune_type}" "${repository}"
            release_name="$(jq -r '.name' <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry name for pruning on %s" "${repository}"
            release_id="$(jq -r '.id' <( printf "%s" "${entry}" ))" ||
                failure "Failed to read entry ID for pruning on %s" "${repository}"

            if [ "${release_type}" != "true" ]; then
                debug "Skipping %s on %s because release is not a %s" "${release_name}" "${repository}" "${prune_type}"
                continue
            fi

            debug "adding %s '%s' to prune list (ID: %s)" "${prune_type}" "${release_name}" "${release_id}"
            prune_list+=( "${release_id}" )
        done
        (( page++ ))
    done

    local prune_count="${#prune_list[@]}"
    local prune_trim=$(( "${prune_count}" - "${retain}" ))

    # If there won't be any remaining items in the list, bail
    if [ "${prune_trim}" -le 0 ]; then
        debug "no %ss in %s to prune" "${prune_type}" "${repository}"
        repository="${repository_bak}" # restore the repository value
        return 0
    fi

    # Trim down the list to what should be deleted
    prune_list=("${prune_list[@]:$retain:$prune_trim}")

    # Now delete what is left in the list
    local r_id
    for r_id in "${prune_list[@]}"; do
        debug "deleting release (ID: %s) from %s" "${r_id}" "${repository}"
        github_request -X DELETE "https://api.github.com/repos/${repository}/releases/${r_id}" ||
            failure "Failed to prune %s %s from %s" "${prune_type}" "${r_id}" "${repository}"
    done

    repository="${repository_bak}" # restore the repository value
}

# Grab the correct github token to use for authentication. The
# rules used for the token to return are as follows:
#
# * only $GITHUB_TOKEN is set: $GITHUB_TOKEN
# * only $HASHIBOT_TOKEN is set: $HASHIBOT_TOKEN
#
# when both $GITHUB_TOKEN and $HASHIBOT_TOKEN are set:
#
# * $repository value matches $GITHUB_REPOSITORY: $GITHUB_TOKEN
# * $repository value does not match $GITHUB_REPOSITORY: $HASHIBOT_TOKEN
#
# Will return `0` when a token is returned, `1` when no token is returned
function github_token() {
    local gtoken

    # Return immediately if no tokens are available
    if [ -z "${GITHUB_TOKEN}" ] && [ -z "${HASHIBOT_TOKEN}" ]; then
        debug "no github or hashibot token set"
        return 1
    fi

    # Return token if only one token exists
    if [ -n "${GITHUB_TOKEN}" ] && [ -z "${HASHIBOT_TOKEN}" ]; then
        debug "only github token set"
        printf "%s\n" "${GITHUB_TOKEN}"
        return 0
    elif [ -n "${HASHIBOT_TOKEN}" ] && [ -z "${GITHUB_TOKEN}" ]; then
        debug "only hashibot token set"
        printf "%s\n" "${HASHIBOT_TOKEN}"
        return 0
    fi

    # If the $repository matches the original $GITHUB_REPOSITORY use the local token
    if [ "${repository}" = "${GITHUB_REPOSITORY}" ]; then
        debug "prefer github token "
        printf "%s\n" "${GITHUB_TOKEN}"
        return 0
    fi

    # Still here, then we send back that hashibot token
    printf "%s\n" "${HASHIBOT_TOKEN}"
    return 0
}

# This function is used to make requests to the GitHub API. It
# accepts the same argument list that would be provided to the
# curl executable. It will check the response status and if a
# 429 is received (rate limited) it will pause until the defined
# rate limit reset time and then try again.
#
# NOTE: Informative information (like rate limit pausing) will
# be printed to stderr. The response body will be printed to
# stdout. Return value of the function will be the exit code
# from the curl process.
function github_request() {
    local request_exit=0
    local info_prefix="__info__"
    local info_tmpl="${info_prefix}:code=%{response_code}:header=%{size_header}:download=%{size_download}:file=%{filename_effective}"
    local raw_response_content

    local curl_cmd=("curl" "-w" "${info_tmpl}" "-i" "-SsL" "--fail")
    local gtoken

    # Only add the authentication token if we have one
    if gtoken="$(github_token)"; then
        curl_cmd+=("-H" "Authorization: token ${gtoken}")
    fi

    # Attach the rest of the arguments
    curl_cmd+=("${@#}")

    debug "initial request: %s" "${curl_cmd[*]}"

    # Make our request
    raw_response_content="$("${curl_cmd[@]}")" || request_exit="${?}"

    # Define the status here since we will set it in
    # the conditional below of something weird happens
    local status

    # Check if our response content starts with the info prefix.
    # If it does, we need to extract the headers from the file.
    if [[ "${raw_response_content}" = "${info_prefix}"* ]]; then
        debug "extracting request information from: %s" "${raw_response_content}"
        raw_response_content="${raw_response_content#"${info_prefix}":code=}"
        local response_code="${raw_response_content%%:*}"
        debug "response http code: %s" "${response_code}"
        raw_response_content="${raw_response_content#*:header=}"
        local header_size="${raw_response_content%%:*}"
        debug "response header size: %s" "${header_size}"
        raw_response_content="${raw_response_content#*:download=}"
        local download_size="${raw_response_content%%:*}"
        debug "response file size: %s" "${download_size}"
        raw_response_content="${raw_response_content#*:file=}"
        local file_name="${raw_response_content}"
        debug "response file name: %s" "${file_name}"
        if [ -f "${file_name}" ]; then
            # Read the headers from the file and place them in the
            # raw_response_content to be processed
            local download_fd
            exec {download_fd}<"${file_name}"
            debug "file descriptor created for header grab (source: %s): %q" "${file_name}" "${download_fd}"
            debug "reading response header content from %s" "${file_name}"
            read -r -N "${header_size}" -u "${download_fd}" raw_response_content
            # Close our descriptor
            debug "closing file descriptor: %q" "${download_fd}"
            exec {download_fd}<&-
            # Now trim the headers from the file content
            debug "trimming response header content from %s" "${file_name}"
            tail -c "${download_size}" "${file_name}" > "${file_name}.trimmed" ||
                failure "Could not trim headers from downloaded file (%s)" "${file_name}"
            mv -f "${file_name}.trimmed" "${file_name}" ||
                failure "Could not replace downloaded file with trimmed file (%s)" "${file_name}"
        else
            debug "expected file not found (%s)" "${file_name}"
            status="${response_code}"
        fi
    else
        # Since the response wasn't written to a file, trim the
        # info from the end of the response
        if [[ "${raw_response_content}" != *"${info_prefix}"* ]]; then
            debug "github request response does not include information footer"
            failure "Unexpected error encountered, partial GitHub response returned"
        fi
        raw_response_content="${raw_response_content%"${info_prefix}"*}"
    fi

    local ratelimit_reset
    local ratelimit_remaining
    local response_content=""

    # Read the response into lines for processing
    local lines
    mapfile -t lines < <( printf "%s" "${raw_response_content}" )

    # Process the lines to extract out status and rate
    # limit information. Populate the response_content
    # variable with the actual response value
    local i
    for (( i=0; i < "${#lines[@]}"; i++ )); do
        # The line will have a trailing `\r` so just
        # trim it off
        local line="${lines[$i]%%$'\r'*}"
        # strip any leading/trailing whitespace characters
        read -rd '' line <<< "${line}"

        if [ -z "${line}" ] && [[ "${status}" = "2"* ]]; then
            local start="$(( i + 1 ))"
            local remain="$(( "${#lines[@]}" - "${start}" ))"
            local response_lines=("${lines[@]:$start:$remain}")
            response_content="${response_lines[*]}"
            break
        fi

        if [[ "${line}" == "HTTP/"* ]]; then
            status="${line##* }"
            debug "http status found: %d" "${status}"
        fi
        if [[ "${line}" == "x-ratelimit-reset"* ]]; then
            ratelimit_reset="${line##*ratelimit-reset: }"
            debug "ratelimit reset time found: %s" "${ratelimit_reset}"
        fi
        if [[ "${line}" == "x-ratelimit-remaining"* ]]; then
            ratelimit_remaining="${line##*ratelimit-remaining: }"
            debug "ratelimit requests remaining: %d" "${ratelimit_remaining}"
        fi
    done

    # If the status was not detected, force an error
    if [ -z "${status}" ]; then
        failure "Failed to detect response status for GitHub request"
    fi

    # If the status was a 2xx code then everything is good
    # and we can return the response and be done
    if [[ "${status}" = "2"* ]]; then
        printf "%s" "${response_content}"
        return 0
    fi

    # If we are being rate limited, print a notice and then
    # wait until the rate limit will be reset
    if [[ "${status}" = "429" ]] || [[ "${status}" = "403" ]]; then
        debug "request returned %d status, checking for rate limiting" "${status}"

        # If the ratelimit reset was not detected force an error
        if [ -z "${ratelimit_reset}" ]; then
            failure "Failed to detect rate limit reset time for GitHub request"
        fi

        # If there are requests still available against the ratelimt
        # and the status is a 403, then it's an actual 403 and not
        # a ratelimit
        if [[ "${status}" = "403" ]] && [[ "${ratelimit_remaining}" -gt 0 ]]; then
            failure "Request failed with 403 status response"
        fi

        debug "rate limiting has been detected on request"

        local reset_date
        reset_date="$(date --date="@${ratelimit_reset}")" ||
            failure "Failed to GitHub parse ratelimit reset timestamp (${ratelimit_reset})"

        local now
        now="$( date '+%s' )" || failure "Failed to get current timestamp in ratelimit check"
        local reset_wait="$(( "${ratelimit_reset}" - "${now}" + 2))"

        printf "GitHub rate limit encountered, reset at %s (waiting %d seconds)\n" \
            "${reset_date}" "${reset_wait}" >&2

        sleep "${reset_wait}" || failure "Pause for GitHub rate limited request retry failed"

        github_request "${@}"
        return "${?}"
    fi

    # At this point we just need to return error information
    printf "GitHub request returned HTTP status: %d\n" "${status}" >&2
    printf "Response body: %s\n" "${response_content}" >&2

    return "${request_exit}"
}

# Lock issues which have been closed for longer than
# provided number of days. A date can optionally be
# provided which will be used as the earliest date to
# search. A message can optionally be provided which
# will be added as a comment in the issue before locking.
#
# -d: number of days
# -m: message to include when locking the issue (optional)
# -s: date to begin searching from (optional)
function lock_issues() {
    local OPTIND opt days start since message
    while getopts ":d:s:m:" opt; do
        case "${opt}" in
            "d") days="${OPTARG}" ;;
            "s") start="${OPTARG}" ;;
            "m") message="${OPTARG}" ;;
            *) failure "Invalid flag provided to lock_issues" ;;
        esac
    done
    shift $((OPTIND-1))

    # If days where not provided, return error
    if [ -z "${days}" ]; then
        failure "Number of days since closed required for locking issues"
    fi
    # If a start date was provided, check that it is a format we can read
    if [ -n "${start}" ]; then
        if ! since="$(date --iso-8601=seconds --date="${start}" 2> /dev/null)"; then
            failure "$(printf "Start date provided for issue locking could not be parsed (%s)" "${start}")"
        fi
    fi

    debug "locking issues that have been closed for at least %d days" "${days}"

    local req_args=()
    # Start with basic setup
    req_args+=("-H" "Accept: application/vnd.github+json")
    # Add authorization header
    req_args+=("-H" "Authorization: token ${GITHUB_TOKEN}")
    # Construct our request endpoint
    local req_endpoint="https://api.github.com/repos/${repository}/issues"
    # Page counter for requests
    local page=$(( 1 ))
    # Request arguments
    local req_params=("per_page=20" "state=closed")

    # If we have a start time, include it
    if [ -n "${since}" ]; then
        req_params+=("since=${since}")
    fi

    # Compute upper bound for issues we can close
    local lock_seconds now
    now="$(date '+%s')"
    lock_seconds=$(("${now}"-("${days}" * 86400)))

    while true; do
        # Join all request parameters with '&'
        local IFS_BAK="${IFS}"
        IFS="&"
        local all_params=("${req_params[*]}" "page=${page}")
        local params="${all_params[*]}"
        IFS="${IFS_BAK}"

        local issue_list issue_count
        # Make our request to get a page of issues
        issue_list="$(github_request "${req_args[@]}" "${req_endpoint}?${params}")" ||
            failure "Failed to get repository issue list for ${repository}"
        issue_count="$(jq 'length' <( printf "%s" "${issue_list}" ))" ||
            failure "Failed to compute count of issues in list for ${repository}"

        if [ -z "${issue_count}" ] || [ "${issue_count}" -lt 1 ]; then
            break
        fi

        # Iterate through the list
        local i
        for (( i=0; i < "${issue_count}"; i++ )); do
            # Extract the issue we are going to process
            local issue
            issue="$(jq ".[${i}]" <( printf "%s" "${issue_list}" ))" ||
                failure "Failed to extract issue from list for ${repository}"

            # Grab the ID of this issue
            local issue_id
            issue_id="$(jq -r '.id' <( printf "%s" "${issue}" ))" ||
                failure "Failed to read ID of issue for ${repository}"

            # First check if issue is already locked
            local issue_locked
            issue_locked="$(jq -r '.locked' <( printf "%s" "${issue}" ))" ||
                failure "Failed to read locked state of issue for ${repository}"

            if [ "${issue_locked}" == "true" ]; then
                debug "Skipping %s#%s because it is already locked" "${repository}" "${issue_id}"
                continue
            fi

            # Get the closed date
            local issue_closed
            issue_closed="$(jq -r '.closed_at' <( printf "%s" "${issue}" ))" ||
                failure "Failed to read closed at date of issue for ${repository}"

            # Convert closed date to unix timestamp
            local date_check
            date_check="$( date --date="${issue_closed}" '+%s' )" ||
                failure "Failed to parse closed at date of issue for ${repository}"

            # Check if the issue is old enough to be locked
            if [ "$(( "${date_check}" ))" -lt "${lock_seconds}" ]; then
                printf "Locking issue %s#%s\n" "${repository}" "${issue_id}" >&2

                # If we have a comment to add before locking, do that now
                if [ -n "${message}" ]; then
                    local message_json
                    message_json=$(jq -n \
                        --arg msg "$(printf "%b" "${message}")" \
                        '{body: $msg}'
                        ) || failure "Failed to create issue comment JSON content for ${repository}"

                    debug "adding issue comment before locking on %s#%s" "${repository}" "${issue_id}"

                    github_request "${req_args[@]}" -X POST "${req_endpoint}/${issue_id}/comments" -d "${message_json}" ||
                        failure "Failed to create issue comment on ${repository}#${issue_id}"
                fi

                # Lock the issue
                github_request "${req_args[@]}" -X PUT "${req_endpoint}/${issue_id}/lock" -d '{"lock_reason":"resolved"}' ||
                    failure "Failed to lock issue ${repository}#${issue_id}"
            fi
        done

        ((page++))
    done
}

# Send a repository dispatch to the defined repository
#
# $1: repository name
# $2: event type (single word string)
# $n: "key=value" pairs to build payload (optional)
#
function github_repository_dispatch() {
    local drepo_name="${1}"
    local event_type="${2}"

    if [ -z "${drepo_name}" ]; then
        failure "Repository name is required for repository dispatch"
    fi

    # shellcheck disable=SC2016
    local payload_template='{"vagrant-ci": $vagrant_ci'
    local jqargs=("--arg" "vagrant_ci" "true")
    local arg
    for arg in "${@:3}"; do
        local payload_key="${arg%%=*}"
        local payload_value="${arg##*=}"
        payload_template+=", \"${payload_key}\": \$${payload_key}"
        # shellcheck disable=SC2089
        jqargs+=("--arg" "${payload_key}" "${payload_value}")
    done
    payload_template+="}"

    # NOTE: we want the arguments to be expanded below
    local payload
    payload=$(jq -n "${jqargs[@]}" "${payload_template}" ) ||
        failure "Failed to generate repository dispatch payload"

    # shellcheck disable=SC2016
    local msg_template='{event_type: $event_type, client_payload: $payload}'
    local msg
    msg=$(jq -n \
        --argjson payload "${payload}" \
        --arg event_type "${event_type}" \
        "${msg_template}" \
        ) || failure "Failed to generate repository dispatch message"

    # Update repository value to get correct token
    local repository_bak="${repository}"
    repository="${repo_owner}/${drepo_name}"

    github_request -X "POST" \
        -H 'Accept: application/vnd.github.everest-v3+json' \
        --data "${msg}" \
        "https://api.github.com/repos/${repo_owner}/${drepo_name}/dispatches" ||
        failure "Repository dispatch to ${repo_owner}/${drepo_name} failed"

    # Restore the repository value
    repository="${repository_bak}"
}

# Copy a function to a new name
#
# $1: Original function name
# $2: Copy function name
function copy_function() {
    local orig="${1}"
    local new="${2}"
    local fn
    fn="$(declare -f "${orig}")" ||
        failure "Orignal function (${orig}) not defined"
    fn="${new}${fn#*"${orig}"}"
    eval "${fn}"
}

# Rename a function to a new name
#
# $1: Original function name
# $2: New function name
function rename_function() {
    local orig="${1}"
    copy_function "${@}"
    unset -f "${orig}"
}

# Cleanup wrapper so we get some output that cleanup is starting
function _cleanup() {
    debug "* Running cleanup task..."
    # Always restore this value for cases where a failure
    # happened within a function while this value was in
    # a modified state
    repository="${_repository_backup}"
    cleanup
}

# Stub cleanup method which can be redefined
# within actual script
function cleanup() {
    debug "** No cleanup tasks defined"
}

# Only setup our cleanup trap and fail alias when not in testing
if [ -z "${BATS_TEST_FILENAME}" ]; then
    trap _cleanup EXIT
    # This is a compatibility alias for existing scripts which
    # use the common.sh library. BATS support defines a `fail`
    # function so it has been renamed `failure` to prevent the
    # name collision. When not running under BATS we enable the
    # `fail` function so any scripts that have not been updated
    # will not be affected.
    copy_function "failure" "fail"
fi

# Make sure the CI bin directory exists
if [ ! -d "${ci_bin_dir}" ]; then
    wrap mkdir -p "${ci_bin_dir}" \
        "Failed to create CI bin directory"
fi

# Always ensure CI bin directory is in PATH
if [[ "${PATH}" != *"${ci_bin_dir}"* ]]; then
    export PATH="${PATH}:${ci_bin_dir}"
fi

# Enable debugging. This needs to be enabled with
# extreme caution when used on public repositories.
# Output with debugging enabled will likely include
# secret values which should not be publicly exposed.
#
# If repository is public, FORCE_PUBLIC_DEBUG environment
# variable must also be set.

priv_args=("-H" "Accept: application/json")
# If we have a token available, use it for the check query
if [ -n "${HASHIBOT_TOKEN}" ]; then
    priv_args+=("-H" "Authorization: token ${GITHUB_TOKEN}")
elif [ -n "${GITHUB_TOKEN}" ]; then
    priv_args+=("-H" "Authorization: token ${HASHIBOT_TOKEN}")
fi

if [ -n "${GITHUB_ACTIONS}" ]; then
    priv_check="$(curl "${priv_args[@]}" -s "https://api.github.com/repos/${GITHUB_REPOSITORY}" | jq .private)" ||
        failure "Repository visibility check failed"
fi

# If the value wasn't true we unset it to indicate not private. The
# repository might actually be private but we weren't supplied a
# token (or one with correct permissions) so we fallback to the safe
# assumption of not private.
if [ "${priv_check}" != "true" ]; then
    readonly is_public="1"
    readonly is_private=""
else
    # shellcheck disable=SC2034
    readonly is_public=""
    # shellcheck disable=SC2034
    readonly is_private="1"
fi

# Check if we are running a job created by a tag. If so,
# mark this as being a release job and set the release_version
if [[ "${GITHUB_REF}" == *"refs/tags/"* ]]; then
    export tag="${GITHUB_REF##*tags/}"
    if valid_release_version "${tag}"; then
        readonly release=1
        export release_version="${tag##*v}"
    else
        readonly release
    fi
else
    # shellcheck disable=SC2034
    readonly release
fi

# Seed an initial output file
output_file > /dev/null 2>&1


================================================
FILE: .ci/build
================================================
#!/usr/bin/env bash

csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../" && pwd )"

. "${root}/.ci/load-ci.sh"

if [ "${#}" -ne 1 ]; then
      printf "Usage: %s ARTIFACTS_DIR\n" "${0}" >&2
      exit 1
fi

dest="${1}"
mkdir -p "${dest}" ||
     failure "Could not create destination directory (%s)" "${dest}"
pushd "${dest}"
dest="$(pwd)" || failure "Could not read destination directory path"
popd

# Move to root of project
pushd "${root}"

info "Building Vagrant RubyGem..."
wrap gem build ./*.gemspec \
     "Failed to build Vagrant RubyGem"

# Get the path of the gem
files=( vagrant*.gem )
gem="${files[0]}"
if [ ! -f "${gem}" ]; then
     debug "could not locate gem in %s" "${files[*]}"
     failure "Unable to locate built Vagrant RubyGem"
fi

wrap mv "${gem}" "${dest}" \
     "Failed to relocate Vagrant RubyGem"

printf "build-artifacts-path=%s\n" "${dest}"


================================================
FILE: .ci/dev-build
================================================
#!/usr/bin/env bash

csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../" && pwd )"

. "${root}/.ci/load-ci.sh"

if [ "${#}" -ne 3 ]; then
  printf "Usage: %s BRANCH COMMIT_ID BUILD_TYPE\n" "${0}" >&2
  exit 1
fi

branch="${1}"
full_sha="${2}"
build_type="${3}"

if [ -z "${branch}" ]; then
  failure "Branch variable is unset, required for dev build"
fi
if [ -z "${full_sha}" ]; then
  failure "The full_sha variable is unexpectedly missing, cannot trigger dev build"
fi
if [ -z "${build_type}" ]; then
  failure "The build type is required for triggering dev build"
fi

# Trim the reference prefix if needed
if [[ "${branch}" = *"refs/heads"* ]]; then
  debug "trimming branch reference value - %s" "${branch}"
  branch="${branch##*refs/heads/}"
  debug "trimmed branch value - %s" "${branch}"
fi

info "Triggering development build %s (%s)" "${branch}" "${full_sha}"
github_repository_dispatch "vagrant-builders" "${build_type}" "commit_id=${full_sha}" "branch=${branch}"


================================================
FILE: .ci/generate-licenses
================================================
#!/usr/bin/env bash

csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../" && pwd )"

. "${root}/.ci/load-ci.sh"

if [ "${#}" -ne 1 ]; then
    printf "Usage: %s LICENSE_DIR\n" "${0}"
    exit 1
fi

license_dir="${1}"
if [ ! -d "${license_dir}" ]; then
    mkdir -p "${license_dir}" ||
        failure "Unable to create license directory"
fi

pushd "${license_dir}"
license_dir="$(pwd)" || failure "Could not read license directory path"
popd

# Move to the root
pushd "${root}"

info "Generating Vagrant license files"

version="$(< ./version.txt)" ||
    failure "Unable to read version file"

license_date="$(date "+%Y")" ||
    failure "Unable to generate year for license"

license_template="./templates/license/license.html.tmpl"
license_destination="${license_dir}/LICENSE.html"

debug "Updating license file: ${license_destination}"

if [ ! -f "${license_template}" ]; then
    failure "Unable to locate license template (${license_template})"
fi

sed "s/%VERSION%/${version}/" "${license_template}" > "${license_destination}" ||
    failure "Unable to update version in ${license_destination}"
sed -i "s/%YEAR%/${license_date}/" "${license_destination}" ||
    failure "Unable to update year in ${license_destination}"

license_template="./templates/license/license.rtf.tmpl"
license_destination="${license_dir}/LICENSE.rtf"

debug "Updating license file: ${license_destination}"

if [ ! -f "${license_template}" ]; then
    failure "Unable to locate license template (${license_template})"
fi

sed "s/%VERSION%/${version}/" "${license_template}" > "${license_destination}" ||
    failure "Unable to update version in ${license_destination}"
sed -i "s/%YEAR%/${license_date}/" "${license_destination}" ||
    failure "Unable to update year in ${license_destination}"


license_template="./templates/license/license.tmpl"
license_destination="${license_dir}/LICENSE.txt"

debug "Updating license file: ${license_destination}"

if [ ! -f "${license_template}" ]; then
    failure "Unable to locate license template (${license_template})"
fi

sed "s/%VERSION%/${version}/" "${license_template}" > "${license_destination}" ||
    failure "Unable to update version in ${license_destination}"
sed -i "s/%YEAR%/${license_date}/" "${license_destination}" ||
    failure "Unable to update year in ${license_destination}"


================================================
FILE: .ci/load-ci.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2019, 2025
# SPDX-License-Identifier: MPL-2.0

csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
if ! root="$( cd -P "$( dirname "$csource" )/../" && pwd )"; then
    echo "⛔ ERROR: Failed to determine root local directory ⛔" >&2
    exit 1
fi

export root
export ci_bin_dir="${root}/.ci/.ci-utility-files"

# shellcheck source=/dev/null
if ! source "${ci_bin_dir}/common.sh"; then
    echo "⛔ ERROR: Failed to source Vagrant CI common file ⛔" >&2
    exit 1
fi
export PATH="${PATH}:${ci_bin_dir}"

# And we are done!
debug "VagrantCI Loaded"


================================================
FILE: .ci/nightly-build
================================================
#!/usr/bin/env bash

csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../" && pwd )"

. "${root}/.ci/load-ci.sh"

if [ "${#}" -ne 1 ]; then
  printf "Usage: %s COMMIT_ID\n" "${0}" >&2
  exit 1
fi

full_sha="${1}"

if [ -z "${full_sha}" ]; then
  failure "The full_sha variable is unexpectedly missing, cannot trigger nightly build"
fi

info "Triggering nightly build %s (%s)" "${tag}" "${full_sha}"
github_repository_dispatch "vagrant-builders" "nightlies" "commit_id=${full_sha}"


================================================
FILE: .ci/release
================================================
#!/usr/bin/env bash

csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../" && pwd )"

. "${root}/.ci/load-ci.sh"

if [ "${#}" -ne 2 ]; then
  printf "Usage: %s TAG COMMIT_ID\n" "${0}" >&2
  exit 1
fi

tag="${1}"
full_sha="${2}"

if [ -z "${tag}" ]; then
  failure "Tag variable is unset, required for release"
fi
if [ -z "${full_sha}" ]; then
  failure "The full_sha variable is unexpectedly missing, cannot trigger release"
fi

# Trim the prefix of the tag if it hasn't been
if [[ "${tag}" = *"refs/tags"* ]]; then
  debug "trimming tag reference value - %s" "${tag}"
  tag="${tag##*refs/tags/}"
  debug "trimmed tag value - %s" "${tag}"
fi

info "Triggering release %s (%s)" "${tag}" "${full_sha}"
github_repository_dispatch "vagrant-builders" "hashicorp-release" "commit_id=${full_sha}" "tag=${tag}"


================================================
FILE: .ci/release-initiator
================================================
#!/usr/bin/env bash

csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../" && pwd )"

. "${root}/.ci/load-ci.sh"

if [ "${#}" -ne 1 ]; then
  printf "Usage: %s VERSION\n" "${0}" >&2
  exit 1
fi

version="${1}"

info "Updating repository files for ${version} release"

if [[ "${version}" = "v"* ]]; then
    failure "Invalid version format, cannot start with 'v': %s" "${version}"
fi

if ! valid_release_version "${version}"; then
    failure "Invalid version format provided: %s" "${version}"
fi

debug "Configuring git"
hashibot_git

debug "Updating version.txt with version value: %s" "${version}"
if [ ! -f "version.txt" ]; then
    failure "Unable to locate version.txt file"
fi

printf "%s" "${version}" > version.txt

debug "Updating CHANGELOG.md"
if [ ! -f "CHANGELOG.md" ]; then
    failure "Unable to locate CHANGLOG.md file"
fi

datestamp="$(date "+%B %d, %Y")" ||
    failure "Unable to generate date"

printf "## %s (%s)\n" "${version}" "${datestamp}" > .CHANGELOG.md.new

grep -v UNRELEASED < CHANGELOG.md >> .CHANGELOG.md.new ||
    failure "Unable to update CHANGELOG contents"

mv .CHANGELOG.md.new CHANGELOG.md ||
    failure "Unable to overwrite CHANGELOG file"

license_date="$(date "+%Y")" ||
    failure "Unable to generate year for license"

license_template="./templates/license/license.tmpl"
license_destination="./LICENSE"

debug "Updating license file: ${license_destination}"

if [ ! -f "${license_template}" ]; then
    failure "Unable to locate license template (${license_template})"
fi
if [ ! -f "${license_destination}" ]; then
    failure "Unable to locate license destination (${license_destination})"
fi

sed "s/%VERSION%/${version}/" "${license_template}" > "${license_destination}" ||
    failure "Unable to update version in ${license_destination}"
sed -i "s/%YEAR%/${license_date}/" "${license_destination}" ||
    failure "Unable to update year in ${license_destination}"

debug "Updating download version in website source"

version_file="./website/data/version.json"
if [ ! -f "${version_file}" ]; then
    failure "Unable to locate version data file (%s)" "${version_file}"
fi

sed -i "s/  \"VERSION\":.*,/  \"VERSION\": \"${version}\",/" "${version_file}" ||
    failure "Unable to update version data file (%s)" "${version_file}"

debug "Commit version updates"

# display changes before commit
git status

git add version.txt CHANGELOG.md LICENSE "${version_file}" ||
    failure "Unable to stage updated release files for commit"

git commit -m "Release ${version}" ||
    failure "Unable to commit updated files for release"

release_tag="v${version}"

debug "Creating new tag %s" "${release_tag}"

git tag "${release_tag}"

# Generate a new version for development
version_prefix="${version%.*}"
patch="${version##*.}"
new_patch=$(( "${patch}" + 1 ))
dev_version="${version_prefix}.${new_patch}.dev"

debug "Updating files for new development - %s" "${dev_version}"

debug "Updating version.txt with version value: %s" "${dev_version}"
printf "%s\n" "${dev_version}" > version.txt

debug "Updating CHANGELOG"

printf "## %s (UNRELEASED)\n\nFEATURES:\n\nIMPROVEMENTS:\n\nBUG FIXES:\n\n" "${dev_version}" > .CHANGELOG.md.new
cat CHANGELOG.md >> .CHANGELOG.md.new

mv .CHANGELOG.md.new CHANGELOG.md ||
    failure "Unable to overwrite CHANGELOG file"

debug "Updating LICENSE"

sed "s/%VERSION%/${dev_version}/" "${license_template}" > LICENSE ||
    failure "Unable to update LICENSE"

debug "Commit development version updates"

# display changes before commit
git status

git add version.txt CHANGELOG.md LICENSE ||
    failure "Unable to stage updated development files for commit"

git commit -m "Update files for new development ${dev_version}" ||
    failure "Unable to commit updated files for development"

# Now that all changes are complete, push
debug "Pushing all changes to origin"

git push origin main ||
    failure "Unable to push changes to main"
git push origin "${release_tag}" ||
    failure "Unable to push tag to main"


================================================
FILE: .ci/spec/clean-packet.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2010, 2025
# SPDX-License-Identifier: BUSL-1.1


csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../../" && pwd )"

. "${root}/.ci/load-ci.sh"
. "${root}/.ci/spec/env.sh"

pushd "${root}" > "${output}"

echo "Cleaning up packet device..."

unset PACKET_EXEC_PERSIST
unset PACKET_EXEC_PRE_BUILTINS
# spec test configuration, defined by action runners, used by Vagrant on packet
export PKT_VAGRANT_HOST_BOXES="${VAGRANT_HOST_BOXES}"
export PKT_VAGRANT_GUEST_BOXES="${VAGRANT_GUEST_BOXES}"
# other vagrant-spec options
export PKT_VAGRANT_HOST_MEMORY="${VAGRANT_HOST_MEMORY:-10000}"
export PKT_VAGRANT_CWD="test/vagrant-spec/"
export PKT_VAGRANT_VAGRANTFILE=Vagrantfile.spec
###

wrap_stream packet-exec run -- "vagrant destroy -f" \
                "Vagrant failed to destroy remaining vagrant-spec guests during clean up"


echo "Finished destroying spec test hosts"


================================================
FILE: .ci/spec/create-hosts.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2010, 2025
# SPDX-License-Identifier: BUSL-1.1


csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../../" && pwd )"

. "${root}/.ci/load-ci.sh"
. "${root}/.ci/spec/env.sh"

pushd "${root}" > "${output}"

# spec test configuration, defined by action runners, used by Vagrant on packet
export PKT_VAGRANT_HOST_BOXES="${VAGRANT_HOST_BOXES}"
export PKT_VAGRANT_GUEST_BOXES="${VAGRANT_GUEST_BOXES}"
# other vagrant-spec options
export PKT_VAGRANT_HOST_MEMORY="${VAGRANT_HOST_MEMORY:-10000}"
export PKT_VAGRANT_CWD="test/vagrant-spec/"
export PKT_VAGRANT_VAGRANTFILE=Vagrantfile.spec
export PKT_VAGRANT_SPEC_PROVIDERS="${VAGRANT_SPEC_PROVIDERS}"
###

# Grab vagrant-spec gem and place inside root dir of Vagrant repo
wrap aws s3 cp "${ASSETS_PRIVATE_BUCKET}/hashicorp/vagrant-spec/vagrant-spec.gem" "vagrant-spec.gem" \
  "Could not download vagrant-spec.gem from s3 asset bucket"
###

# Grab vagrant installer and place inside root dir of Vagrant repo
if [ -z "${VAGRANT_PRERELEASE_VERSION}" ]; then
  INSTALLER_URL=`curl -s https://api.github.com/repos/hashicorp/vagrant-installers/releases | jq -r '.[0].assets[] | select(.name | contains("_x86_64.deb")) | .browser_download_url'`
else
  INSTALLER_URL=`curl -s https://api.github.com/repos/hashicorp/vagrant-installers/releases/tags/${VAGRANT_PRERELEASE_VERSION} | jq -r '.assets[] | select(.name | contains("_x86_64.deb")) | .browser_download_url'`
fi

wrap curl -fLO ${INSTALLER_URL} \
  "Could not download vagrant installers"
###

# Run the job

echo "Creating vagrant spec guests..."
wrap_stream packet-exec run -upload --  "vagrant up --no-provision --provider vmware_desktop" \
                                        "Vagrant Acceptance host creation command failed"


echo "Finished bringing up vagrant spec guests"


================================================
FILE: .ci/spec/create-packet.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2010, 2025
# SPDX-License-Identifier: BUSL-1.1


export PACKET_EXEC_PREFER_FACILITIES="${PACKET_EXEC_PREFER_FACILITIES:-iad2,dfw2,dfw1,ny5,ny7,ewr1,la4,lax1,lax2,tr2,ch3,ord1,ord4}"

csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../../" && pwd )"

. "${root}/.ci/load-ci.sh"
. "${root}/.ci/spec/env.sh"

pushd "${root}" > "${output}"

# Ensure we have a packet device to connect
echo "Creating packet device if needed..."

packet-exec info

if [ $? -ne 0 ]; then
    wrap_stream packet-exec create \
                "Failed to create packet device"
fi

echo "Finished creating spec test packet instance"


================================================
FILE: .ci/spec/env.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2010, 2025
# SPDX-License-Identifier: BUSL-1.1


# packet and job configuration
export SLACK_USERNAME="Vagrant"
export SLACK_ICON="https://media.giphy.com/media/yIQ5glQeheYE0/200.gif"
export SLACK_TITLE="Vagrant-Spec Test Runner"
export SLACK_CHANNEL="CLYRTANRH" # CLYRTANRH is ID of #team-vagrant-spam-channel
export PACKET_EXEC_DEVICE_NAME="${PACKET_EXEC_DEVICE_NAME:-spec-ci-boxes}"
export PACKET_EXEC_DEVICE_SIZE="${PACKET_EXEC_DEVICE_SIZE:-c3.small.x86,c3.medium.x86}"
export PACKET_EXEC_PREFER_FACILITIES="${PACKET_EXEC_PREFER_FACILITIES:-la4,dc10,dc13,ny7,pa4,md2}"
export PACKET_EXEC_OPERATING_SYSTEM="${PACKET_EXEC_OPERATING_SYSTEM:-ubuntu_18_04}"
export PACKET_EXEC_PRE_BUILTINS="${PACKET_EXEC_PRE_BUILTINS:-InstallVagrant,InstallVirtualBox,InstallVmware,InstallVagrantVmware}"
export PACKET_EXEC_QUIET="1"
export PACKET_EXEC_PERSIST="1"
# job_id is provided by common.sh
export PACKET_EXEC_REMOTE_DIRECTORY="${job_id}"
export PKT_VAGRANT_CLOUD_TOKEN="${VAGRANT_CLOUD_TOKEN}"

# Pass Hashibot Credentials down to packet-exec run commands so they can fetch
# private github repos during build
export PKT_HASHIBOT_USERNAME="${HASHIBOT_USERNAME}"
export PKT_HASHIBOT_TOKEN="${HASHIBOT_TOKEN}"
###


================================================
FILE: .ci/spec/notify-success.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2010, 2025
# SPDX-License-Identifier: BUSL-1.1


csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../../" && pwd )"

. "${root}/.ci/load-ci.sh"
. "${root}/.ci/spec/env.sh"

pushd "${root}" > "${output}"

slack -m 'Tests have passed!'


================================================
FILE: .ci/spec/pull-log.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2010, 2025
# SPDX-License-Identifier: BUSL-1.1


csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../../" && pwd )"

. "${root}/.ci/load-ci.sh"
. "${root}/.ci/spec/env.sh"

pushd "${root}" > "${output}"

# Use same setup as run-tests.sh so `vagrant ssh` will work.

unset PACKET_EXEC_PRE_BUILTINS

# spec test configuration, defined by action runners, used by Vagrant on packet
export PKT_VAGRANT_HOST_BOXES="${VAGRANT_HOST_BOXES}"
export PKT_VAGRANT_GUEST_BOXES="${VAGRANT_GUEST_BOXES}"
# other vagrant-spec options
export PKT_VAGRANT_HOST_MEMORY="${VAGRANT_HOST_MEMORY:-10000}"
export PKT_VAGRANT_CWD="test/vagrant-spec/"
export PKT_VAGRANT_VAGRANTFILE=Vagrantfile.spec
export PKT_VAGRANT_SPEC_PROVIDERS="${VAGRANT_SPEC_PROVIDERS}"
export PKT_VAGRANT_DOCKER_IMAGES="${VAGRANT_DOCKER_IMAGES}"

echo "Pulling log..."
packet-exec run -download vagrant-spec.log "vagrant ssh -c \"cat /tmp/vagrant-spec.log\" > vagrant-spec.log"


================================================
FILE: .ci/spec/run-test.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2010, 2025
# SPDX-License-Identifier: BUSL-1.1


csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../../" && pwd )"

. "${root}/.ci/load-ci.sh"
. "${root}/.ci/spec/env.sh"

pushd "${root}" > "${output}"

# Assumes packet is already set up
unset PACKET_EXEC_PRE_BUILTINS

# spec test configuration, defined by action runners, used by Vagrant on packet
export PKT_VAGRANT_HOST_BOXES="${VAGRANT_HOST_BOXES}"
export PKT_VAGRANT_GUEST_BOXES="${VAGRANT_GUEST_BOXES}"
# other vagrant-spec options
export PKT_VAGRANT_HOST_MEMORY="${VAGRANT_HOST_MEMORY:-10000}"
export PKT_VAGRANT_CWD="test/vagrant-spec/"
export PKT_VAGRANT_VAGRANTFILE=Vagrantfile.spec
export PKT_VAGRANT_SPEC_PROVIDERS="${VAGRANT_SPEC_PROVIDERS}"
export PKT_VAGRANT_DOCKER_IMAGES="${VAGRANT_DOCKER_IMAGES}"
###
# Run the job

echo "Running vagrant spec tests..."
# Need to make memory customizable for windows hosts
wrap_stream packet-exec run "vagrant provision" \
                "Vagrant Acceptance testing command failed"

echo "Finished vagrant spec tests"


================================================
FILE: .ci/sync.sh
================================================
#!/usr/bin/env bash
# Copyright IBM Corp. 2010, 2025
# SPDX-License-Identifier: BUSL-1.1


csource="${BASH_SOURCE[0]}"
while [ -h "$csource" ] ; do csource="$(readlink "$csource")"; done
root="$( cd -P "$( dirname "$csource" )/../" && pwd )"

. "${root}/.ci/load-ci.sh"

export PATH="${PATH}:${root}/.ci"

pushd "${root}" > "${output}"

if [ "${repo_name}" = "vagrant" ]; then
    remote_repository="hashicorp/vagrant-acceptance"
else
  fail "This repository is not configured to sync vagrant to mirror repository"
fi

wrap git config pull.rebase false \
     "Failed to configure git pull strategy"

echo "Adding remote mirror repository '${remote_repository}'..."
wrap git remote add mirror "https://${HASHIBOT_USERNAME}:${HASHIBOT_TOKEN}@github.com/${remote_repository}" \
     "Failed to add mirror '${remote_repository}' for sync"

echo "Updating configured remotes..."
wrap_stream git remote update mirror \
            "Failed to update mirror repository (${remote_repository}) for sync"

rb=$(git branch -r --list "mirror/${ident_ref}")

if [ "${rb}" != "" ]; then
    echo "Pulling ${ident_ref} from mirror..."
    wrap_stream git pull mirror "${ident_ref}" \
                "Failed to pull ${ident_ref} from mirror repository (${remote_repository}) for sync"
fi

echo "Pushing ${ident_ref} to mirror..."
wrap_stream git push mirror "${ident_ref}" \
            "Failed to sync mirror repository (${remote_repository})"


================================================
FILE: .copywrite.hcl
================================================
schema_version = 1

project {
  license        = "BUSL-1.1"
  copyright_year = 2024

  header_ignore = [
    "internal/pkg/defaults/**",
    "internal/pkg/spinner/**",
    "internal/server/bindata_ui.go",
    "internal/server/gen/**",
    "lib/vagrant/protobufs/**",
    "thirdparty/**",
  ]
}


================================================
FILE: .github/CODEOWNERS
================================================
* @hashicorp/Vagrant


================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Code of Conduct

HashiCorp Community Guidelines apply to you when interacting with the community here on GitHub and contributing code.

Please read the full text at https://www.hashicorp.com/community-guidelines


================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing to Vagrant

**First:** We like to encourage you to contribute to the repository. If you're unsure or afraid of _anything_, just ask or submit the issue or pull request anyways. You won't be yelled at for giving your best effort. The worst that can happen is that you'll be politely asked to change something. We appreciate any sort of contributions, and don't want a wall of rules to get in the way of that.

However, for those individuals who want a bit more guidance on the best way to contribute to the project, read on. This document will cover what we're looking for. By addressing all the points we're looking for, it raises the chances we can quickly merge or address your contributions.

Before opening a new issue or pull request, we do appreciate if you take some time to search for [possible duplicates](https://github.com/hashicorp/vagrant/issues?q=sort%3Aupdated-desc), or similar discussions on [HashiCorp Discuss](https://discuss.hashicorp.com/c/vagrant/24). On GitHub, you can scope searches by labels to narrow things down.

To ensure that the Vagrant community remains an open and safe space for everyone we also follow the [HashiCorp community guidelines](https://www.hashicorp.com/community-guidelines). When contributing to Vagrant, please respect these guidelines.

## Issues

### Reporting an Issue

**Tip:** We have provided a [GitHub issue template](https://github.com/hashicorp/vagrant/blob/main/.github/ISSUE_TEMPLATE/bug-report.md). By respecting the proposed format and filling all the relevant sections, you'll strongly help the Vagrant collaborators to handle your request the best possible way.

### Issue Lifecycle

1. The issue is reported.
2. The issue is verified and categorized by Vagrant collaborator(s). Categorization is done via GitHub tags for different dimensions (like issue type, affected components, pending actions, etc.)
3. Unless it is critical, the issue is left for a period of time, giving outside contributors a chance to address the issue. Later, the issue may be assigned to a Vagrant collaborator and planned for a specific release [milestone](https://github.com/hashicorp/vagrant/milestones)
4. The issue is addressed in a pull request or commit. The issue will be referenced in the commit message so that the code that fixes it is clearly linked.
5. The issue is closed. Sometimes, valid issues will be closed to keep the issue tracker clean. The issue is still indexed and available for future viewers, or can be re-opened if necessary.
6. The issue is locked. After about 30 days the issue will be locked. This is done to keep issue activity in open issues and encourge users to open a new issue if an old issue is being encountered again.

## Pull Requests

Thank you for contributing! Here you'll find information on what to include in your Pull Request (“PR” for short) to ensure it is reviewed quickly, and possibly accepted.

Before starting work on a new feature or anything besides a minor bug fix, it is highly recommended to first initiate a discussion with the Vagrant community (either via a GitHub issue or [HashiCorp Discuss](https://discuss.hashicorp.com/c/vagrant/24)). This will save you from wasting days implementing a feature that could be rejected in the end.

No pull request template is provided on GitHub. The expected changes are often already described and validated in an existing issue, that obviously should be referenced. The Pull Request thread should be mainly used for the code review.

**Tip:** Make it small! A focused PR gives you the best chance of having it accepted. Then, repeat if you have more to propose!

### Vagrant Go

The Vagrant port to Go is currently in an alpha state and under heavy development. Please refer to [this issue](https://github.com/hashicorp/vagrant/issues/12819) before starting or submitting pull requests related to Vagrant Go.

### Setup a development installation of Vagrant

*A Vagrantfile is provided that should take care setting up a VM for running the rspec tests.* If you only need to run those tests and don't also want to run a development version of Vagrant from a host machine then it's recommended to use that.

There are a few prerequisites for setting up a development environment with Vagrant. Ensure you have the following installed on your machine:

* git
* bsdtar
* curl

#### Install Ruby

It's nice to have a way to control what version of ruby is installed, so you may want to install [rvm](https://rvm.io/rvm/install), [chruby](https://github.com/postmodern/chruby#install) or [rbenv](https://github.com/rbenv/rbenv#installation). For Windows [ruby installer](https://rubyinstaller.org/) is recommended.

#### Setup Vagrant
Clone Vagrant's repository from GitHub into the directory where you keep code on your machine:

```
  $ git clone --recurse-submodules https://github.com/hashicorp/vagrant.git
```

Next, move into the newly created `./vagrant` directory.

```
  $ cd ./vagrant
```

All commands will be run from this path. Now, run the `bundle` command to install the Ruby dependencies:

```
  $ bundle install
```

You can now run Vagrant by running `bundle exec vagrant` from inside that directory.

##### Setting up Vagrant-go

Add the generated `binstubs` to your `PATH`
```
  $ export PATH=/path/to/my/vagrant/binstubs
```

Install go using the method of your choice.

Build the Vagrant go binary using `make`
```
  $ make
```

This will generate a `./vagrant` binary in your project root.

### How to prepare your pull request

Once you're confident that your upcoming changes will be accepted:

* In your forked repository, create a topic branch for your upcoming patch.
  * Usually this is based on the main branch.
  * Checkout a new branch based on main; `git checkout -b my-contrib main`
    Please avoid working directly on the `main` branch.
* Make focused commits of logical units and describe them properly.
* Avoid re-formatting of the existing code.
* Check for unnecessary whitespace with `git diff --check` before committing.
* Tests are required in each pull request. There are some exceptions like docs changes and dependency constraint updates.
* Assure nothing is broken by running manual tests, and all the automated tests.

### Running tests

Vagrant uses rspec to run tests. Once your Vagrant bundle is installed from Git repository, you can run the test suite with:

    bundle exec rake

This will run the unit test suite, which should come back all green!

If you are developing Vagrant on a machine that already has a Vagrant package installation present, both will attempt to use the same folder for their configuration (location of this folder depends on system). This can cause errors when Vagrant attempts to load plugins. In this case, override the `VAGRANT_HOME` environment variable for your development version of Vagrant before running any commands to be some new folder within the project or elsewhere on your machine. For example, in Bash:

    export VAGRANT_HOME=~/.vagrant-dev

You can now run Vagrant commands against the development version:

    bundle exec vagrant

### Acceptance Tests

Vagrant also comes with an acceptance test suite that does black-box
tests of various Vagrant components. Note that these tests are **extremely
slow** because actual VMs are spun up and down. The full test suite can
take hours. Instead, try to run focused component tests.

To run the acceptance test suite, first copy `vagrant-spec.config.example.rb`
to `vagrant-spec.config.rb` and modify it to valid values. The places you
should fill in are clearly marked.

Next, see the components that can be tested:

```
$ rake acceptance:components
cli
provider/virtualbox/basic
...
```

Then, run one of those components:

```
$ rake acceptance:run COMPONENTS="cli"
...
```

### Submit Changes

* Push your changes to a topic branch in your fork of the repository.
* Open a PR to the original repository and choose the right original branch you want to patch (main for most cases).
* If not done in commit messages (which you really should do) please reference and update your issue with the code changes.
* Even if you have write access to the repository, do not directly push or merge your own pull requests. Let another team member review your PR and approve.

### Pull Request Lifecycle

1. You are welcome to submit your PR for commentary or review before it is fully completed. Please prefix the title of your PR with "[WIP]" to indicate this. It's also a good idea to include specific questions or items you'd like feedback on.
2. Sign the [HashiCorp CLA](#hashicorp-cla). If you haven't signed the CLA yet, a bot will ask you to do so. You only need to sign the CLA once. If you've already signed the CLA, the CLA status will be green automatically.
3. The PR is categorized by Vagrant collaborator(s), applying GitHub tags similarly to issues triage.
4. Once you believe your PR is ready to be merged, you can remove any
  "[WIP]" prefix from the title and a Vagrant collaborator will review.
5. One of the Vagrant collaborators will look over your contribution and either provide comments letting you know if there is anything left to do. We do our best to provide feedback in a timely manner, but it may take some time for us to respond.
6. Once all outstanding comments have been addressed, your contribution will be merged! Merged PRs will be included in the next Vagrant release. The Vagrant contributors will take care of updating the CHANGELOG as they merge.
7. We might decide that a PR should be closed. We'll make sure to provide clear reasoning when this happens.

## HashiCorp CLA

We require all contributors to sign the [HashiCorp CLA](https://www.hashicorp.com/cla).

In simple terms, the CLA affirms that the work you're contributing is original, that you grant HashiCorp permission to use that work (including license to any patents necessary), and that HashiCorp may relicense your work for our commercial products if necessary. Note that this description is a summary and the specific legal terms should be read directly in the [CLA](https://www.hashicorp.com/cla).

The CLA does not change the terms of the standard open source license used by our software such as MPL2 or MIT. You are still free to use our projects within your own projects or businesses, republish modified source, and more. Please reference the appropriate license of this project to learn more.

To sign the CLA, open a pull request as usual. If you haven't signed the CLA yet, a bot will respond with a link asking you to sign the CLA. We cannot merge any pull request until the CLA is signed. You only need to sign the CLA once. If you've signed the CLA before, the bot will not respond to your PR and your PR will be allowed to merge.

# Additional Resources

* [HashiCorp Community Guidelines](https://www.hashicorp.com/community-guidelines)
* [General GitHub documentation](https://help.github.com/)
* [GitHub pull request documentation](https://help.github.com/send-pull-requests/)


================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.md
================================================
---
name: Bug Report
about: Let us know about an unexpected error, a crash, or an incorrect behavior.
labels: "waiting-intake"
---

<!--
Please note that the Vagrant issue tracker is reserved for bug reports. For general usage questions, please use
HashiCorp Discuss, https://discuss.hashicorp.com/c/vagrant/.

When you submit a bug report, please provide the minimal configuration and required information necessary to reliably reproduce the issue. It
should include a basic Vagrantfile.

Thank you!
-->

### Debug output

<!--
Provide a link to a GitHub Gist containing the complete debug output, https://www.vagrantup.com/docs/other/debugging.html. 

The debug output should
be very long. Do NOT paste the debug output in the issue.
-->

### Expected behavior

<!--
What should have happened?
-->

### Actual behavior

<!--
What actually happened?
-->

### Reproduction information 

#### Vagrant version

<!--
Use `vagrant -v` to collect the version information. If you are not running the latest version
of Vagrant, please upgrade before submitting an issue.
-->

#### Host operating system

<!--
Your local system.
-->

#### Guest operating system

<!--
The operating system of the virtual machine.
-->

#### Steps to reproduce

1.
2.
3.

#### Vagrantfile

```ruby
# Copy-paste your Vagrantfile here. Remove any sensitive information such as passwords, authentication tokens, or email addresses.
```

<!--
Always start with a minimal Vagrantfile and include only the relevant configuration
to reproduce the reported behavior.
-->



================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1

contact_links:
  - name: Ask a Question
    url: https://discuss.hashicorp.com/c/vagrant
    about: If you have a question or are looking for advice, please post on our Discuss forum.


================================================
FILE: .github/ISSUE_TEMPLATE/engineering-task.md
================================================
---
name: Vagrant Engineering
about: For Vagrant Engineers to track tasks. 
---

<!--
This template is intended for the Vagrant Engineering team to track tasks. 

Use the Bug Report issue template to request help when Vagrant is not working as expected and the feature request to suggest an enhancement. 
-->

## Description 
2 - 3 sentences that define the solution or changes. 

## Use case (optional) 
How will this affect the end user? 

## Supporting material 
Add links to related issues or supporting documentation. 

<!--
To complete this issue, add labels and select a milestone. 

### Labels 

#### Estimated task complexity time-frame (does not guarantee a delivery date)
* day
* week
* multi-week

If a task takes longer than 3 weeks, either consider if you can break it down into smaller pieces of work or update the issue with a new estimated time-frame with a summary checklist of tasks. 

#### Estimated user impact
Most issues should categorized as minor or major. 
* Critical: fixes a bug that impacts production deployments
* Major: addresses a frequent request, relieves a common pain point
* Minor: trivial inconveniences that have robust workarounds 
  
#### Task size

Select a task size label based on the estimated completion time and description (task-small, task-medium, task-large).

### Milestone

Your milestone selection will be considered a suggestion for the team to review during backlog grooming.
-->


================================================
FILE: .github/ISSUE_TEMPLATE/vagrant-feature-request.md
================================================
---
name: Vagrant Feature request
about: Suggest an idea or enhancement for Vagrant
title: 'Enhancement Request: Your description here'
labels: ['enhancement', 'waiting-intake']
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"


================================================
FILE: .github/workflows/backport.yml
================================================
---
name: Backport Assistant Runner

on:
  pull_request_target:
    types:
      - closed
      - labeled

jobs:
  backport:
    if: github.event.pull_request.merged
    runs-on: ubuntu-latest
    container: hashicorpdev/backport-assistant:0.2.3
    steps:
      - name: Backport changes to stable-website
        run: |
          backport-assistant backport -automerge
        env:
          BACKPORT_LABEL_REGEXP: "backport/(?P<target>website)"
          BACKPORT_TARGET_TEMPLATE: "stable-{{.target}}"
          GITHUB_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}


================================================
FILE: .github/workflows/check-legacy-links-format.yml
================================================
name: Legacy Link Format Checker

on:
  push:
    paths:
      - "website/content/**/*.mdx"
      - "website/data/*-nav-data.json"

jobs:
  check-links:
    uses: hashicorp/dev-portal/.github/workflows/docs-content-check-legacy-links-format.yml@475289345d312552b745224b46895f51cc5fc490
    with:
      repo-owner: "hashicorp"
      repo-name: "vagrant"
      commit-sha: ${{ github.sha }}
      mdx-directory: "website/content"
      nav-data-directory: "website/data"


================================================
FILE: .github/workflows/code.yml
================================================
on:
  push:
    branches:
      - 'main'
      - 'spec-test-*'

jobs:
  sync-acceptance:
    if: github.repository == 'hashicorp/vagrant'
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
        with:
          persist-credentials: false
          fetch-depth: 0
      - name: Sync Acceptance Testing Repository
        run: ./.ci/sync.sh
        working-directory: ${{github.workspace}}
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          HASHIBOT_USERNAME: ${{ secrets.HASHIBOT_USERNAME }}
          SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}


================================================
FILE: .github/workflows/dev-appimage-build.yml
================================================
name: Appimage Vagrant Development Build
on:
  push:
    branches: 'dev-appimage-*'
  workflow_dispatch:

jobs:
  trigger-build:
    if: github.repository == 'hashicorp/vagrant'
    name: Trigger Vagrant Appimage Development Build
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Trigger Development Build
        run: ./.ci/dev-build "${BRANCH}" "${COMMIT_ID}" build-appimage
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          BRANCH: ${{ github.ref_name }}
          COMMIT_ID: ${{ github.sha }}


================================================
FILE: .github/workflows/dev-arch-build.yml
================================================
name: Arch Linux Vagrant Development Build
on:
  push:
    branches: 'dev-arch-*'
  workflow_dispatch:

jobs:
  trigger-build:
    if: github.repository == 'hashicorp/vagrant'
    name: Trigger Vagrant Arch Linux Development Build
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Trigger Development Build
        run: ./.ci/dev-build "${BRANCH}" "${COMMIT_ID}" build-arch
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          BRANCH: ${{ github.ref_name }}
          COMMIT_ID: ${{ github.sha }}


================================================
FILE: .github/workflows/dev-build.yml
================================================
name: Full Vagrant Development Build
on:
  push:
    branches: 'build-*'
  workflow_dispatch:

jobs:
  trigger-build:
    if: github.repository == 'hashicorp/vagrant'
    name: Trigger Vagrant Development Build
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Trigger Development Build
        run: ./.ci/dev-build "${BRANCH}" "${COMMIT_ID}" build
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          BRANCH: ${{ github.ref_name }}
          COMMIT_ID: ${{ github.sha }}


================================================
FILE: .github/workflows/dev-debs-build.yml
================================================
name: DEB Vagrant Development Build
on:
  push:
    branches: 'dev-debs-*'
  workflow_dispatch:

jobs:
  trigger-build:
    if: github.repository == 'hashicorp/vagrant'
    name: Trigger Vagrant DEB Development Build
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Trigger Development Build
        run: ./.ci/dev-build "${BRANCH}" "${COMMIT_ID}" build-debs
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          BRANCH: ${{ github.ref_name }}
          COMMIT_ID: ${{ github.sha }}


================================================
FILE: .github/workflows/dev-macos-build.yml
================================================
name: macOS Vagrant Development Build
on:
  push:
    branches: 'dev-macos-*'
  workflow_dispatch:

jobs:
  trigger-build:
    if: github.repository == 'hashicorp/vagrant'
    name: Trigger Vagrant macOS Development Build
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Trigger Development Build
        run: ./.ci/dev-build "${BRANCH}" "${COMMIT_ID}" build-macos
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          BRANCH: ${{ github.ref_name }}
          COMMIT_ID: ${{ github.sha }}


================================================
FILE: .github/workflows/dev-rpms-build.yml
================================================
name: RPM Vagrant Development Build
on:
  push:
    branches: 'dev-rpms-*'
  workflow_dispatch:

jobs:
  trigger-build:
    if: github.repository == 'hashicorp/vagrant'
    name: Trigger Vagrant RPM Development Build
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Trigger Development Build
        run: ./.ci/dev-build "${BRANCH}" "${COMMIT_ID}" build-rpms
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          BRANCH: ${{ github.ref_name }}
          COMMIT_ID: ${{ github.sha }}


================================================
FILE: .github/workflows/dev-windows-build.yml
================================================
name: Windows Vagrant Development Build
on:
  push:
    branches: 'dev-windows-*'
  workflow_dispatch:

jobs:
  trigger-build:
    if: github.repository == 'hashicorp/vagrant'
    name: Trigger Vagrant Windows Development Build
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Trigger Development Build
        run: ./.ci/dev-build "${BRANCH}" "${COMMIT_ID}" build-windows
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          BRANCH: ${{ github.ref_name }}
          COMMIT_ID: ${{ github.sha }}


================================================
FILE: .github/workflows/initiate-release.yml
================================================
name: Start Vagrant Release Process
on:
  workflow_dispatch:
    inputs:
      release_version:
        description: 'Release Version (example: 1.0.0)'
        required: true
        type: string

jobs:
  start-release:
    if: github.repository == 'hashicorp/vagrant'
    name: Initiate Release
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
        with:
          # NOTE: custom token is used so pushed tag will trigger release workflow
          token: ${{ secrets.HASHIBOT_TOKEN }}
      - name: Run initiator
        run: ./.ci/release-initiator "${VERSION}"
        env:
          VERSION: ${{ inputs.release_version }}
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          HASHIBOT_USERNAME: ${{ vars.HASHIBOT_USERNAME }}
          HASHIBOT_EMAIL: ${{ vars.HASHIBOT_EMAIL }}


================================================
FILE: .github/workflows/lock.yml
================================================
name: 'Lock Threads'

on:
  schedule:
    - cron: '50 1 * * *'

jobs:
  lock:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5.0.1
        with:
          github-token: ${{ github.token }}
          issue-inactive-days: '30'
          pr-inactive-days: '30'


================================================
FILE: .github/workflows/nightlies.yml
================================================
name: Vagrant Nightly Builds
on:
  schedule:
    - cron: 30 4 * * *

jobs:
  trigger-nightly:
    if: github.repository == 'hashicorp/vagrant'
    name: Trigger Nightly Build
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Trigger Nightly Build
        run: ./.ci/nightly-build "${COMMIT_ID}"
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          COMMIT_ID: ${{ github.sha }}


================================================
FILE: .github/workflows/release.yml
================================================
name: Vagrant Release
on:
  push:
    tags: 'v*'

jobs:
  trigger-release:
    if: github.repository == 'hashicorp/vagrant'
    name: Trigger Installers Build
    runs-on: ubuntu-latest
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Trigger Build
        run: ./.ci/release "${TAG}" "${COMMIT_ID}"
        env:
          HASHIBOT_TOKEN: ${{ secrets.HASHIBOT_TOKEN }}
          TAG: ${{ github.ref }}
          COMMIT_ID: ${{ github.sha }}


================================================
FILE: .github/workflows/testing-skipped.yml
================================================
name: Vagrant Ruby Tests
on:
  pull_request:
    branches:
      - main
    ignored-paths:
      - 'bin/**'
      - 'lib/**'
      - 'plugins/**'
      - 'test/**'
      - 'Gemfile'
      - 'templates/**'
      - 'vagrant.gemspec'
      - 'Rakefile'

jobs:
  unit-tests-ruby:
    runs-on: ubuntu-latest
    continue-on-error: true
    strategy:
      matrix:
        ruby: [ '3.1', '3.2', '3.3', '3.4' ]
    name: Vagrant unit tests on Ruby ${{ matrix.ruby }}
    steps:
      - name: Stubbed for skip
        run: "echo 'No testing required in changeset'"


================================================
FILE: .github/workflows/testing.yml
================================================
name: Vagrant Ruby Tests
on:
  push:
    branches:
      - main
      - 'test-*'
    paths:
      - 'bin/**'
      - 'lib/**'
      - 'plugins/**'
      - 'test/**'
      - 'templates/**'
      - 'Gemfile'
      - 'vagrant.gemspec'
      - 'Rakefile'
  pull_request:
    branches:
      - main
    paths:
      - 'bin/**'
      - 'lib/**'
      - 'plugins/**'
      - 'test/**'
      - 'Gemfile'
      - 'templates/**'
      - 'vagrant.gemspec'
      - 'Rakefile'

jobs:
  unit-tests-ruby:
    runs-on: ubuntu-latest
    continue-on-error: true
    strategy:
      matrix:
        ruby: [ '3.1', '3.2', '3.3', '3.4' ]
    name: Vagrant unit tests on Ruby ${{ matrix.ruby }}
    steps:
      - name: Code Checkout
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
      - name: Setup Ruby
        uses: ruby/setup-ruby@dffb23f65a78bba8db45d387d5ea1bbd6be3ef18 # v1.293.0
        with:
          ruby-version: ${{matrix.ruby}}
          bundler-cache: true
      - name: install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -yq libarchive-tools
      - name: Run Tests
        run: bundle exec rake test:unit


================================================
FILE: .gitignore
================================================
# OS-specific
.DS_Store

# Editor swapfiles
.*.sw?
*~

# Vagrant stuff
acceptance_config.yml
boxes/*
/.vagrant
/website/.vagrant
/website/build
/vagrant-spec.config.rb
test/vagrant-spec/.vagrant/
.vagrant/
/vagrant
/pkg
data.db
vagrant-restore.db.lock
cmd/vagrant/Vagrantfile
binstubs/

# Bundler/Rubygems
*.gem
.bundle
pkg/*
/Gemfile.lock
test/tmp/
/exec
.ruby-bundle
vendor/bundle

# Documentation
_site/*
.yardoc/
doc/

# Python
*.pyc

# Rubinius
*.rbc

# IDE junk
.idea/*
*.iml
.project
.vscode

# Ruby Managers
.rbenv
.rbenv-gemsets
.ruby-gemset
.ruby-version
.rvmrc

# Box storage for spec
test/vagrant-spec/boxes/*.box

simple_speed.py
cover.out

# nektos/act secrets file
.secrets

# delve debug binary
__debug_bin

# solargraph (ruby lsp) & rubocop
.solargraph.yml
.rubocop.yml

# Ignore generated binaries
bin/vagrant-go*

# extension
tmp*
lib/vagrant/vagrant_ssl.so

# direnv directory
.direnv


================================================
FILE: .gitmodules
================================================


================================================
FILE: .vimrc
================================================
" tabstop settings
set tabstop=2
set softtabstop=2
set shiftwidth=2
set expandtab


================================================
FILE: .yardopts
================================================
-m markdown


================================================
FILE: CHANGELOG.md
================================================
## 2.4.10.dev (UNRELEASED)

FEATURES:

- provider/virtualbox: Add support for LSI Logic SAS storage controller [GH-13692]

IMPROVEMENTS:

- provisioner/ansible: Add support for dynamically selecting ansible-playbook inventory argument option based on ansible-core version [GH-13740]
- docs: Add deprecation notice for documentation under website directory [GH-13746]
- docs: Fix typos and lingustic issues in various places [GH-13731]

BUG FIXES:

- core: Fix issue with missing translations when running vagrant login [GH-13747]
- provider/hyperv: Preserve primary disk when resizing disks [GH-13748]

## 2.4.9 (August 21, 2025)

FEATURES:

- provider/virtualbox: Add support for VirtualBox 7.2 [GH-13709]

IMPROVEMENTS:

- docs: Update the node version for the docs site [GH-13713]
- docs: Remove outdated link for Vagrant Cloud [GH-13710]

BUG FIXES:

- provisioner/ansible: Fix OS version detection, when installing Ansible on RHEL-like operating systems [GH-13701]

## 2.4.8 (August 05, 2025)

IMPROVEMENTS:

- core: Improve error message when no matching provider is found for a box [GH-13693]
- core: Improve error message on box add failures [GH-13687]

BUG FIXES:

- core: Fix box add action when adding a box directly from a file [GH-13699]
- provider/hyperv: Fix XML configuration parsing logic, and add additional checks for minimum amount of memory and CPU [GH-13691]
- core: Fix guest network configuration when more than one network interface is present [GH-13686]

## 2.4.7 (June 17, 2025)

BUG FIXES:

- guests/linux: Fix /etc/fstab clean up behavior [GH-13681]
- provider/docker: Fix auto generated container names [GH-13678]
- provider/hyperv: Fix import for XML based configuration [GH-13674]

## 2.4.6 (May 21, 2025)

IMPROVEMENTS:

- core: Improve error messages on box add failures [GH-13660]
- core: Only generate and attach ISO for cloud-init on first boot [GH-13666]
- host/windows: Add basic oscdimg detection on Windows [GH-13668]
- provider/hyperv: Enable cloud-init support [GH-13671]
- provider/virtualbox: Allow link-local IPv6 addresses for hostonly [GH-12653]

BUG FIXES:

- command: Remove server mode checks [GH-13657]
- core: Prevent cloud-init from regenerating and attaching ISO [GH-13666]
- provider/hyperv: Extract machine ID if collection returned [GH-13669]
- provider/hyperv: Fix import failure due to lack of resources [GH-13670]
- provider/virtualbox: Fix VirtualBox private network setup [GH-13659]

## 2.4.5 (April 23, 2025)

FEATURES:

- communicator/none: Add experimental none communicator [GH-13651]

BUG FIXES:

- core/bundler: Handle multiple versions for system specifications [GH-13652]

## 2.4.4 (April 21, 2025)

IMPROVEMENTS:

- communicator/ssh: Update connect retry behavior, make configurable [GH-13628]
- core: Better behavior outside installers [GH-13636]
- guest/amazonlinux: Support networkd based configuration [GH-13626]
- guest/arch: Update networking for recent versions [GH-13640]
- guest/rhel: Fix networking setup in recent versions [GH-13625]
- host/darwin: Remove HFS from ISO creation [GH-13561]
- provider/hyperv: Add dvd disk support [GH-13642]
- provider/hyperv: Update primary disk detection [GH-13643]
- provider/virtualbox: Add VirtioSCSI storage controller support [GH-13587]
- util/powershell: Prefer using pwsh when available [GH-13648]

BUG FIXES:

- command/box: Fix architecture constraints in outdated/updated command [GH-13601]
- command/box: Fix architecture constraint on provider matches [GH-13647]
- communicators/winrm: Catch IO::Timeout when waiting for communicator [GH-13606]
- communicators/ssh: Catch IO::Timeout when waiting for communicator [GH-13606]
- guest/alpine: Fix DHCP assigned default route behavior [GH-13633]
- provider/docker: Handle variation in error text during image removal [GH-13564]
- provider/virtualbox: Use interface name for hostonly configuration [GH-13644]
- synced_folder/smb: Remove `nofail` mount option [GH-13645]

VAGRANT-GO:

- Removed with work archived to vagrant-go branch [GH-13622]

## 2.4.3 (November 12, 2024)

IMPROVEMENTS:

- command/cloud: Support HCP authentication [GH-13540]

BUG FIXES:

- core: Relax constraint on logger dependency [GH-13532]

## 2.4.2 (November 01, 2024)

FEATURES:

- provider/virtualbox: Add support for VirtualBox 7.1 [GH-13513]

IMPROVEMENTS:

- core: Always downcase type value when getting digest for checksum calculation [GH-13471]
- core: Activate all runtime dependencies at startup [GH-13526]
- guest/debian: Fix NFS install capability to prevent hang on install [GH-13411]
- kernel_v2/config: Add warning for IPv6 address ending with :1 [GH-13362]
- provider/docker: Properly match container ID when trailing output is present [GH-13475]
- provider/docker: Support build with containerd storage [GH-13343]
- provider/virtualbox: Allow paused state when booting vm [GH-13496]
- provider/virtualbox: Handling warnings in output when detecting version [GH-13394]
- synced_folder/nfs: Output mounting entry [GH-13383]
- synced_folder/smb: Adjust ordering in mount entry output [GH-13383]

BUG FIXES:

- command/cloud: Fix provider upload [GH-13467]
- host/bsd: Use nfsd update command instead of restart [GH-13490]
- kernel_v2/config: Fix IP address check [GH-13494] 
- provider/docker: Prevent error if network configuration data is missing [GH-13337, GH-13373]
- provider/docker: Fix docker-exec commands to pass kwargs correctly [GH-13488]
- provider/docker: Fix docker to not rebuild image if it already exists [GH-13489]
- provider/virtualbox: Prevent encoding errors within error translation [GH-13525]
- provider/hyperv: Fix configure disks capability [GH-13346]
- provisioner/ansible: Fix version detection [GH-13375]
- provisioner/ansible: Support double digit versions [GH-13493]
- provisioner/salt: Fix bootstrap script URLs [GH-13517]
- synced_folder/nfs: Fix upstart detection [GH-13409]

VAGRANT-GO:

## 2.4.1 (January 19, 2024)

FEATURES:

IMPROVEMENTS:

- communicator/ssh: Support ECDSA type keys for insecure key replacement [GH-13327]
- communicator/ssh: Inspect guest for supported key types [GH-13334]
- core: Update Ruby constraint to allow Ruby 3.3 [GH-13335]
- core/bundler: Force strict dependencies for default gems [GH-13336]
- provisioner/ansible: Support pip installation for RHEL >= 8 [GH-13326]
- util/keypair: Add support for ECDSA keys [GH-13327]

BUG FIXES:

- command/plugin: Fix plugin extension installation on Windows [GH-13328]
- communicator/ssh: Fix private key writing on Windows [GH-13329]
- core: Fix Vagrant SSL helper detection on macOS [GH-13277]
- core: Fix box collection sorting [GH-#13320]
- util/platform: Fix architecture mapping for Windows [GH-13278]

VAGRANT-GO:

## 2.4.0 (October 16, 2023)

FEATURES:

- core: Add architecture support [GH-13239]

IMPROVEMENTS:

- communicator/ssh: Add key type detection on insecure key replacement [GH-13219] 
- core: Extract box files as sparse files [GH-13252]
- keys: Add ed25519 insecure private key [GH-13219]
- util/downloader: Perform best effort revocation checks on Windows [GH-13214]
- util/keypair: Add support for generating ed25519 key pairs [GH-13219]

BUG FIXES:

- core: Fix extension installation path [GH-13215]
- provider/virtualbox: Fix ipv6 static network configuration [GH-13241]

VAGRANT-GO:

- Add basic support for HCL based config [GH-13257]

## 2.3.7 (June 15, 2023)

IMPROVEMENTS:

- command/ssh: Enable deprecated key types and algorithms [GH-13179]
- core: Update user error message on failed extension installs [GH-13207]
- core: Support loading legacy providers in OpenSSL 3 [GH-13178]
- provisioner/salt: Verify bootstrap-salt download [GH-13166]

BUG FIXES:

- communicator/ssh: Remove keyboard-interactive auth method [GH-13194]
- provisioner/salt: Fix usage on Windows guests [GH-13086]

VAGRANT-GO:

- Update data layer implementation [GH-12904]
- Update dependencies [GH-13201]

## 2.3.6 (May 19, 2023)

BUG FIXES:

- command/serve: Isolate proto constants to file for auto-loading [GH-13165]
- core/util: Unlock file prior to deletion [GH-13159]
- provider/docker: Attempt using docker command for bridge ip [GH-13153]
- provider/virtualbox: Update preferred locale values for driver [GH-13160]

## 2.3.5 (May 15, 2023)

BUG FIXES:

- communicator/ssh: Use netssh builtin keep alive functionality [GH-13069]
- communicator/ssh: Update connection settings when using a password to connect ssh [GH-13052]
- core:  Add a file mutex when downloading box files [GH-13057]
- guest/arch: Support differentiating between Artix and Arch Linux [GH-13055]
- host/windows: Get state of Windows feature "Microsoft-Hyper-V-Hypervisor" [GH-11933]
- provider/docker: Ignore inactive docker containers when assigning ports [GH-13146]
- provider/docker: Sync folders before preparing nfs settings [GH-13149]
- provider/virtualbox: De-duplicate machine port forward info [GH-13056]
- provider/virtualbox:  Remove check for hyperv being enabled when verifying virtualbox is usable on windows [GH-13090]
- provider/virtualbox: Validate LANG value when possible [GH-13150]
- provider/hyperv: Check for hyper-v feature "EnhancedSessionTransportType" [GH-12280]
- provisioner/ansible: Fix installing Ansible provisioner with version and pip [GH-13054]
- synced_folders/rsync: allow rsync-auto to also ignore relative paths [GH-13066]

NOTE: Vagrant installer packages were updated to Ruby 3

## 2.3.4 (December 9, 2022)

IMPROVEMENTS:

- host/darwin: Isolate loading incompatible libraries to support EOL platforms [GH-13022]
- provider/virtualbox: Detect network type when not provided [GH-13024]

BUG FIXES:

- host/windows: Add fix for Powershell 7.3.0 [GH-13006]
- provider/virtualbox: Adjust hostnet DHCP configuration, ignore invalid devices [GH-13004]
- provisioner/ansible: Fix install package names on older debian (and derivatives) versions [GH-13017]

## 2.3.3 (November 15, 2022) 

IMPROVEMENTS:

- core: Bump net-ssh dependency to 7.0 and remove patches [GH-12979]
- synced_folders/rsync: Include ssh `extra_args` value [GH-12973]

BUG FIXES:

- command/serve: Force root level namespace for Google constant [GH-12989]
- guest/solaris: Fix insecure key authorized keys removal [GH-12740]
- provider/virtualbox: Fix `:private_network` support for VirtualBox 7 on macOS [GH-12983]
- provider/virtualbox: Prevent localization of command output [GH-12994]
- provisioner/ansible: Update setup packages in debian capability [GH-12832]

## 2.3.2 (October 18, 2022)

FEATURES:

- provider/virtualbox: Add support for VirtualBox 7.0 [GH-12947]

## 2.3.1 (September 29, 2022)

IMPROVEMENTS:

- core: Raise error if required metadata.json box fields are not present [GH-12895]
- core: Provider helpful error when box version format is invalid [GH-12911]

BUG FIXES:

- Fix flakiness when bringing up a machine that forwards ssh [GH-12909]
- communicator/ssh: Fix `private_key_path` behavior when `keys_only` is disabled [GH-12885]
- synced_folder/nfs: Update exports file creation [GH-12910]
- util/downloader: Fix user agent [GH-12925]

VAGRANT-GO:

- Support secret interactive input [GH-12876]
- Support terminal coloring [GH-12888]
- Validate if requested provider is usable and append/prepend information to errors [GH-12898]
- Raise error if required metadata.json box fields are not present [GH-12919]

## 2.3.0 (August 5, 2022)

FEATURES:

- core: Introduce vagrant-go [GH-12819]

IMPROVEMENTS:

- core: Set rsa-sha2 in kex algorithm set to enable in key exchange [GH-12584]
- core/bundler: Improve Gem spec selection when resolving [GH-12567]
- push/heroku: Display output from push [GH-12646]

BUG FIXES:

- host/darwin: Fix `NameError` for version capability [GH-12581]
- push/ftp:  Fix `VAGRANT_CWD` handling [GH-12645]
- guests/redhat: Fix NFS shares on Rocky 9 guests [GH-12813]

## 2.2.19 (November 5, 2021)

IMPROVEMENTS:

- guest/suse: Add fallback shutdown for versions without systemd [GH-12489]
- provider/virtualbox: Validate VirtualBox hostonly network range [GH-12564]

BUG FIXES

- guest/atomic: Update detection to prevent matching on non-atomic guests [GH-12575]
- guest/coreos: Fix configure network capability [GH-12575]
- guest/windows: Fix directory creation with rsync [GH-11880]
- host/windows: Properly handle spaces in path to SSH key [GH-12398]
- provisioner/chef: Update install checks [GH-12555]

## 2.2.18 (July 27, 2021)

BUG FIXES:

- core: Fix of plugin manager kwargs [GH-12452]
- providers/docker: Pass in docker command opts as a map [GH-12449]
- providers/hyperv: Fix network address detection [GH-12472]

## 2.2.17 (July 7, 2021)

FEATURES:

- guest/rocky: Add guest support for Rocky Linux [GH-12440]

IMPROVEMENTS:

- command/package: Add --info flag to package command [GH-12304]
- guest/debian: Retry network setup on debain [GH-12421]
- guest/suse: Use systemctl poweroff in the background instead of shutdown [GH-12439]
- guest/windows: Get powershell path in %WINDIR%/System32 [GH-12436]
- host/windows: Check Domain and Application Directory contexts for credentials when validating SMB creds [GH-12428]
- providers/hyper-v: Fix IP detection when multiple devices are attached [GH-12232]
- provisioner/ansible: Detects new versions of ansible-4.0.0+ [GH-12391]
- provisioner/ansible: Strip whitespace from ansible version [GH-12420]
- provisioner/salt: Always use upstream Salt bootstrap script on Windows [GH-12127]
- provisioner/salt: Use more conservative TLS settings to work on older .NET versions [GH-12413]
- provisioner/shell: Buffer output to display full lines [GH-12437]
- vagrant: Updates to support Ruby 3.0 [GH-12427]

BUG FIXES:

- command/cloud: Fix authentication middleware to prevent breaking local paths [GH-12419]
- communicator/ssh: Fix net-ssh patches for RSA signatures [GH-12415]
- core: Add box directly with authed urls [GH-12278]

## 2.2.16 (April 29, 2021)

IMPROVEMENTS:

- guest/linux: Detect in process shutdown in reboot capability [GH-12302]
- util/powershell: Support `pwsh` executable in new versions of powershell [GH-12335]

BUG FIXES:

- communicator/ssh: Properly handle authentication with RSA keys [GH-12298]
- guest/fedora: Import guest detection module [GH-12275]
- guest/linux: Fix SMB folder mount name capability call [GH-12281]
- provider/docker: Properly handle updated buildkit build output [GH-12300]

## 2.2.15 (March 30, 2021)

IMPROVEMENTS:

- command/cloud: Remove access token URL parameter by default [GH-12234]
- command/cloud: Add VAGRANT_SERVER_ACCESS_TOKEN_BY_URL to revert access token behavior [GH-12252]
- core: Bump vagrant_cloud dependency to 3.0.3 [GH-12200]
- core: Bump listen gem version and remove ruby_dep [GH-12148]
- core: Bump vagrant_cloud dependency to 3.0.4 [GH-12242]
- core/bundler: Update resolution handling when outside of installer and bundler [GH-12225]
- core/plugin: Provide friendlier error messages on install fail when possible [GH-12225]
- guest/openwrt: Add support for OpenWrt guests [GH-11791]
- guest/freebsd: FreeBSD updated ansible to py37-ansible [GH-12201]
- provider/virtualbox: Get default dhcp ip from a matching host ip [GH-12211]
- util/downloader: Prevent redirect notification for default store [GH-12235]

BUG FIXES:

- command/cloud: Automatically disable direct uploads when file is too large [GH-12250]
- core: Make shell script for loop shell agnostic [GH-12205]
- core: Raise error if downloading box metadata fails [GH-12189]
- core: Apply download options to metadata requests [GH-12177]
- core: Don't try to find "" by prefix in the machine index [GH-12188]
- core: Don't count not created machines as declined when destroying [GH-12186]
- core: Bump bcrypt_pbkdf version [GH-12216]
- core: Remove all space from checksums [GH-12168]
- core/bundler: Do not include default gems as pinned constraints [GH-12253]
- core/synced_folders: Extract os friendly mount name for vbox shared folders [GH-12184]
- guest/alpine: Check if interface exists before shutting it down [GH-12181]
- guest/nixos: Fix network config for recent NixOS releases [GH-12152]
- guest/fedora: Detect fedora using os-releases id [GH-12230]

## 2.2.14 (November 20, 2020)

IMPROVEMENTS:

- host/windows: Update filesystem type matching on WSL2 [GH-12056]
- provisioner/salt: Modernize Salt bootstrap script [GH-12135]

BUG FIXES:

- core: Track raw actions as they are applied to prevent multiple insertions [GH-12037]
- core/bundler: Update solution file resolution to support prerelease matching [GH-12054]
- guest/darwin: Mount vmware synced folders for big sur guests [GH-12053]

## 2.2.13 (November 06, 2020)

BUG FIXES:

- core/bundler: Adjust request sets properly with non-development prerelease [GH-12025]

## 2.2.12 (November 06, 2020)

BUG FIXES:

- core/bundler: Automatically enable prerelease dependency resolution [GH-12023]

NOTE: This is a fix release to resolve an immediate issue with Vagrant
      plugin functionality

## 2.2.11 (November 05, 2020)

IMPROVEMENTS:

- command/cap: Add ability to specify target [GH-11965]
- command/cloud: Add --force flag to `version release` command [GH-11912]
- command/cloud: Updates to utilize the 3.0 version of vagrant_cloud [GH-11916]
- core: Switch from unmaintained gem erubis to erubi [GH-11893]
- core: Download Vagrant boxes using auth headers [GH-11835]
- core: Remove dependency on mime gem [GH-11857]
- core: Handle Errno::EALREADY exceptions on port check [GH-12008]
- core: Fix missing hook/trigger insertion into action stack [GH-12014]
- guest/linux: Make max reboot wait duration configurable [GH-12011]
- guest/windows: Make max reboot wait duration configurable [GH-12011]
- providers/virtualbox: Fix availability check of provider [GH-11936]
- tests: Add integration tests for Docker provider [GH-11907]

BUG FIXES:

- core/synced_folders: Don't persist synced folders to fstab if guest is not reachable [GH-11900]
- core: Don't try to recover machine without a uuid [GH-11863]
- config/disks: Transform provider specific config to common form [GH-11939]
- config/vm: Override synced-folder `:nfs` option [GH-11988]
- contrib/zsh: Remove newline from beginning of completion script [GH-11963]
- guests/arch: Install smbclient when setting up arch smb [GH-11923]
- guest/linux: Check for /etc/fstab before trying to modify [GH-11897]
- guest/linux: Create an /etc/fstab if does not exist [GH-11909]
- guest/linux: Persist SMB mounts [GH-11846]
- guest/debian: Set hostname in /etc/hosts as first step to changing hostname [GH-11885]
- guest/rhel: Check for existence of network files before trying to update them [GH-11877]
- guest/suse: Don't use hostnamectl to set hostname if not available on system [GH-11996]
- tests: Remove rsync dependency from tests [GH-11889]

## 2.2.10 (August 24, 2020)

FEATURES:

- hyperv/disks: Add ability to manage virtual disks for guests [GH-11541]

IMPROVEMENTS:

- core: Allow provisioners to be run when a communicator is not available [GH-11579]
- core: Add `autocomplete` command that allows for install of bash or zsh autocomplete scripts [GH-11523]
- core: Update to childprocess gem to 4.0.0 [GH-11717]
- core: Add action to wait for cloud-init to finish running [GH-11773]
- core: Update to net-ssh to 6.0 and net-sftp to 3.0 [GH-11621]
- core: Optimize port in use check for faster validation [GH-11810]
- core: Support for Ruby 2.7 [GH-11814]
- core: Add synced folder capabilities for mount options and default fstab modification behavior [GH-11797]
- guest/arch: Use systemd-networkd to configure networking for guests [GH-11400]
- guest/haiku: Rsync install for rsync synced folders [GH-11614]
- guest/solaris11: Add guest capability shell_expand_guest_path [GH-11759]
- host/darwin: Add ability to build ISO [GH-11694]
- hosts/linux: Add ability to build ISO [GH-11750]
- hosts/windows: Add ability to build ISO [GH-11750]
- providers/hyperv: Add support for SecureBootTemplate setting on import [GH-11756]
- providers/hyperv: Add support for EnhancedSessionTransportType [GH-11014]
- virtualbox/disks: Add ability to manage virtual dvds for guests [GH-11613]

BUG FIXES:

- core: Ensure MapCommandOptions class is required [GH-11629]
- core: Fix `:all` special value on triggers [GH-11688]
- core: Ensure network addresses have a valid netmask [GH-11679]
- core: Recover local machine metadata in global index [GH-11656]
- core: Print CLI help message is ambiguous option provided [GH-11746]
- core: Update how `/etc/hosts` gets updated for darwin, freebsd and openbsd [GH-11719]
- core: Capture `[3J` escape sequence [GH-11807]
- core: Treat empty box value as invalid [GH-11618]
- core: Allow forwarding ports to unknown addresses [GH-11810]
- core: Scrub credentials as whole words [GH-11837]
- commands/destroy: Add gracefull option to switch beween gracefully or forcefully shutting down a vm [GH-11628]
- communicator/ssh: Raise an error for a nil exit status [GH-11721]
- communicator/winrm: Check for nil return from querying for forwarded ports [GH-11831]
- config/vm: Add option `allow_hosts_modification` to allow/disable Vagrant editing the guests `/etc/hosts` file [GH-11565]
- config/vm: Add config option `hostname` to `config.vm.network` [GH-11566]
- config/vm: Don't ignore NFS synced folders on Windows hosts [GH-11631]
- host: Use regular port check for loopback addresses [GH-11654]
- host: Allow windows and linux hosts to detach from rdp process [GH-11732]
- host/windows: Properly register SMB password validation capability [GH-11795]
- guests: Allow setting of hostname according to `hostname` option for multiple guests [GH-11704]
- guest/alpine: Allow setting of hostname according to `hostname` option [GH-11718]
- guest/esxi: Be more permissive with permissions of ssh directory [GH-11587]
- guest/linux: Add virtual box shared folders to guest fstab [GH-11570]
- guest/suse: Allow setting of hostname according to `hostname` option [GH-11567]
- providers/docker: Ensure new containers don't grab existing bound ports [GH-11602]
- providers/hyperv: Fix check for secure boot [GH-11809]
- providers/virtualbox: Fix inability to create disk with same name across multiple guests [GH-11767]
- provisioners/docker: Allow to specify docker image version using the `run` option [GH-11806]
- provisioners/file: Allow creating empty folders [GH-11805]
- provisioners/shell: Ensure Windows shell provisioner gets the correct file extension [GH-11644]
- util/powershell: Use correct powershell executable for privileged commands [GH-11787]

## 2.2.9 (May 07, 2020)

BUG FIXES:

- core/bundler: Properly handle plugin install with available specification [GH-11592]
- provisioners/docker: Fix CentOS docker install and start service capabilities [GH-11581]
- provisioners/podman: Seperate RHEL install from CentOS install [GH-11584]

## 2.2.8 (May 04, 2020)

FEATURES:

- virtualbox/disks: Add ability to manage virtual disks for guests [GH-11349]

IMPROVEMENTS:

- bin/vagrant: Automatically include global options within commands [GH-11473]
- bin/vagrant: Suppress Ruby warnings when not running pre-release version [GH-11446]
- communicator/ssh: Add support for configuring SSH connect timeout [GH-11533]
- core: Update childprocess gem [GH-11487]
- core: Add cli option `--no-tty` [GH-11414]
- core: Overhaul call stack modifications implementation for hooks and triggers [GH-11455]
- core/bundler: Cache plugin solution sets to speed up startup times [GH-11363]
- config/vm: Add`box_download_options` config to specify extra download options for a box [GH-11560]
- guest/alpine: Add ansible provisioner guest support [GH-11411]
- guest/linux: Update systemd? check to use sudo [GH-11398]
- guest/linux: Use systemd if available to halt and reboot system [GH-11407]
- guests/linux: Mount smb folders with `mfsymlinks` option by default [GH-11503]
- guest/redhat: Add support for SMB [GH-11463]
- guest/windows: Rescue all regular exceptions during reboot wait [GH-11428]
- providers/docker: Support catching container name when using podman [GH-11356]
- provisioners/docker: Support Centos8 [GH-11462]
- provisioners/podman: Add Podman as a provisioner [GH-11472]
- provisioners/salt: Allow specifying python_version [GH-11436]

BUG FIXES:

- communicators/winssh: Fix issues with Windows SSH communicator [GH-11430]
- core/bundler: Activate vagrant specification when not active [GH-11445]
- core/bundler: Properly resolve sets when Vagrant is in prerelease [GH-11571]
- core/downloader: Always set `-q` flag as first option [GH-11366]
- core/hooks: Update dynamic action hook implementation to prevent looping [GH-11427]
- core/synced_folders: Validate type option if set [GH-11359]
- guests/debian: Choose netplan renderer based on network configuration and installed tools [GH-11498]
- host/darwin: Quote directories in /etc/exports [GH-11441]
- host/linux: Ensure `/etc/exports` does not contain duplicate records [GH-10591]
- host/windows: Check all interfaces for port conflict when host_ip: "0.0.0.0" [GH-11454]
- providers/docker: Fix issue where Vagrant fails to remove image if it is in use [GH-11355]
- providers/docker: Fix issue with getting correct docker image id from build output [GH-11461]
- providers/hyperv: Prevent error when identity reference cannot be translated [GH-11425]
- provider/hyperv: Use service id for manipulating vm integration services [GH-11499]
- providers/virtualbox: Parse `list dhcpservers` output on VirtualBox 6.1 [GH-11404]
- providers/virtualbox: Raise an error if guest IP ends in .1 [GH-11500]
- provisioners/shell: Ensure windows shell provisioners always get an extension [GH-11517]
- util/io: Fix encoding conversion errors [GH-11571]

## 2.2.7 (January 27, 2020)

IMPROVEMENTS:

- guest/opensuse: Check for basename hostname prior to setting hostname [GH-11170]
- host/linux: Check for modinfo in /sbin if it's not on PATH [GH-11178]
- core: Show guest name in hostname error message [GH-11175]
- provisioners/shell: Linux guests now support `reboot` option [GH-11194]
- darwin/nfs: Put each NFS export on its own line [GH-11216]
- contrib/bash: Add more completion flags to up command [GH-11223]
- provider/virtualbox: Add VirtualBox provider support for version 6.1.x [GH-11250]
- box/outdated: Allow to force check for box updates and ignore cached check [GH-11231]
- guest/alpine: Update apk cache when installing rsync [GH-11220]
- provider/virtualbox: Improve error message when machine folder is inaccessible [GH-11239]
- provisioner/ansible_local: Add pip install method for arch guests [GH-11265]
- communicators/winssh: Use Windows shell for `vagrant ssh -c` [GH-11258]

BUG FIXES:

- command/snapshot/save: Fix regression that prevented snapshot of all guests in environment [GH-11152]
- core: Update UI to properly retain newlines when adding prefix [GH-11126]
- core: Check if box update is available locally [GH-11188]
- core: Ensure Vagrant::Errors are loaded in file_checksum util [GH-11183]
- cloud/publish: Improve argument handling for missing arguments to comm
Download .txt
gitextract_w81_rx3j/

├── .ci/
│   ├── .ci-utility-files/
│   │   └── common.sh
│   ├── build
│   ├── dev-build
│   ├── generate-licenses
│   ├── load-ci.sh
│   ├── nightly-build
│   ├── release
│   ├── release-initiator
│   ├── spec/
│   │   ├── clean-packet.sh
│   │   ├── create-hosts.sh
│   │   ├── create-packet.sh
│   │   ├── env.sh
│   │   ├── notify-success.sh
│   │   ├── pull-log.sh
│   │   └── run-test.sh
│   └── sync.sh
├── .copywrite.hcl
├── .github/
│   ├── CODEOWNERS
│   ├── CODE_OF_CONDUCT.md
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.md
│   │   ├── config.yml
│   │   ├── engineering-task.md
│   │   └── vagrant-feature-request.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── backport.yml
│       ├── check-legacy-links-format.yml
│       ├── code.yml
│       ├── dev-appimage-build.yml
│       ├── dev-arch-build.yml
│       ├── dev-build.yml
│       ├── dev-debs-build.yml
│       ├── dev-macos-build.yml
│       ├── dev-rpms-build.yml
│       ├── dev-windows-build.yml
│       ├── initiate-release.yml
│       ├── lock.yml
│       ├── nightlies.yml
│       ├── release.yml
│       ├── testing-skipped.yml
│       └── testing.yml
├── .gitignore
├── .gitmodules
├── .vimrc
├── .yardopts
├── CHANGELOG.md
├── Gemfile
├── LICENSE
├── README.md
├── RELEASE.md
├── Rakefile
├── Vagrantfile
├── bin/
│   └── vagrant
├── builtin/
│   ├── README.md
│   ├── configvagrant/
│   │   └── main.go
│   ├── httpdownloader/
│   │   ├── downloader/
│   │   │   ├── downloader.go
│   │   │   └── httpmethod_string.go
│   │   └── main.go
│   ├── myplugin/
│   │   ├── command/
│   │   │   ├── command.go
│   │   │   ├── dothing.go
│   │   │   ├── host.go
│   │   │   ├── info.go
│   │   │   └── interactive.go
│   │   ├── communicator/
│   │   │   └── communicator.go
│   │   ├── host/
│   │   │   ├── alwaystrue.go
│   │   │   └── cap/
│   │   │       └── write_hello.go
│   │   ├── locales/
│   │   │   ├── assets/
│   │   │   │   ├── en.json
│   │   │   │   └── es.json
│   │   │   └── locales.go
│   │   ├── main.go
│   │   ├── mappers.go
│   │   ├── proto/
│   │   │   ├── plugin.pb.go
│   │   │   └── plugin.proto
│   │   ├── provider/
│   │   │   └── happy.go
│   │   └── push/
│   │       └── encouragement.go
│   └── otherplugin/
│       ├── command.go
│       ├── guest/
│       │   ├── alwaystrue.go
│       │   └── cap/
│       │       └── write_hello.go
│       └── main.go
├── contrib/
│   ├── README.md
│   ├── bash/
│   │   └── completion.sh
│   ├── emacs/
│   │   └── vagrant.el
│   ├── st/
│   │   └── Ruby.sublime-settings
│   ├── sudoers/
│   │   ├── linux-fedora
│   │   ├── linux-suse
│   │   ├── linux-ubuntu
│   │   └── osx
│   ├── vim/
│   │   └── vagrantfile.vim
│   └── zsh/
│       ├── _vagrant
│       └── generate_zsh_completion.rb
├── ext/
│   └── vagrant/
│       └── vagrant_ssl/
│           ├── extconf.rb
│           ├── vagrant_ssl.c
│           └── vagrant_ssl.h
├── keys/
│   ├── README.md
│   ├── vagrant
│   ├── vagrant.key.ed25519
│   ├── vagrant.key.rsa
│   ├── vagrant.pub
│   ├── vagrant.pub.ed25519
│   └── vagrant.pub.rsa
├── lib/
│   ├── vagrant/
│   │   ├── action/
│   │   │   ├── builder.rb
│   │   │   ├── builtin/
│   │   │   │   ├── box_add.rb
│   │   │   │   ├── box_check_outdated.rb
│   │   │   │   ├── box_remove.rb
│   │   │   │   ├── box_update.rb
│   │   │   │   ├── call.rb
│   │   │   │   ├── cleanup_disks.rb
│   │   │   │   ├── cloud_init_setup.rb
│   │   │   │   ├── cloud_init_wait.rb
│   │   │   │   ├── config_validate.rb
│   │   │   │   ├── confirm.rb
│   │   │   │   ├── delayed.rb
│   │   │   │   ├── destroy_confirm.rb
│   │   │   │   ├── disk.rb
│   │   │   │   ├── env_set.rb
│   │   │   │   ├── graceful_halt.rb
│   │   │   │   ├── handle_box.rb
│   │   │   │   ├── handle_box_url.rb
│   │   │   │   ├── handle_forwarded_port_collisions.rb
│   │   │   │   ├── has_provisioner.rb
│   │   │   │   ├── is_env_set.rb
│   │   │   │   ├── is_state.rb
│   │   │   │   ├── lock.rb
│   │   │   │   ├── message.rb
│   │   │   │   ├── mixin_provisioners.rb
│   │   │   │   ├── mixin_synced_folders.rb
│   │   │   │   ├── prepare_clone.rb
│   │   │   │   ├── provision.rb
│   │   │   │   ├── provisioner_cleanup.rb
│   │   │   │   ├── set_hostname.rb
│   │   │   │   ├── ssh_exec.rb
│   │   │   │   ├── ssh_run.rb
│   │   │   │   ├── synced_folder_cleanup.rb
│   │   │   │   ├── synced_folders.rb
│   │   │   │   ├── trigger.rb
│   │   │   │   └── wait_for_communicator.rb
│   │   │   ├── general/
│   │   │   │   ├── package.rb
│   │   │   │   ├── package_setup_files.rb
│   │   │   │   └── package_setup_folders.rb
│   │   │   ├── hook.rb
│   │   │   ├── primary_runner.rb
│   │   │   ├── runner.rb
│   │   │   └── warden.rb
│   │   ├── action.rb
│   │   ├── alias.rb
│   │   ├── batch_action.rb
│   │   ├── box.rb
│   │   ├── box_collection.rb
│   │   ├── box_metadata.rb
│   │   ├── bundler.rb
│   │   ├── capability_host.rb
│   │   ├── cli.rb
│   │   ├── config/
│   │   │   ├── loader.rb
│   │   │   ├── v1/
│   │   │   │   ├── dummy_config.rb
│   │   │   │   ├── loader.rb
│   │   │   │   └── root.rb
│   │   │   ├── v1.rb
│   │   │   ├── v2/
│   │   │   │   ├── dummy_config.rb
│   │   │   │   ├── loader.rb
│   │   │   │   ├── root.rb
│   │   │   │   └── util.rb
│   │   │   ├── v2.rb
│   │   │   └── version_base.rb
│   │   ├── config.rb
│   │   ├── environment.rb
│   │   ├── errors.rb
│   │   ├── guest.rb
│   │   ├── host.rb
│   │   ├── machine.rb
│   │   ├── machine_index.rb
│   │   ├── machine_state.rb
│   │   ├── patches/
│   │   │   ├── builder/
│   │   │   │   └── mkmf.rb
│   │   │   ├── fake_ftp.rb
│   │   │   ├── log4r.rb
│   │   │   ├── net-ssh.rb
│   │   │   ├── rubygems.rb
│   │   │   └── timeout_error.rb
│   │   ├── plugin/
│   │   │   ├── manager.rb
│   │   │   ├── state_file.rb
│   │   │   ├── v1/
│   │   │   │   ├── command.rb
│   │   │   │   ├── communicator.rb
│   │   │   │   ├── config.rb
│   │   │   │   ├── errors.rb
│   │   │   │   ├── guest.rb
│   │   │   │   ├── host.rb
│   │   │   │   ├── manager.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── provider.rb
│   │   │   │   └── provisioner.rb
│   │   │   ├── v1.rb
│   │   │   ├── v2/
│   │   │   │   ├── command.rb
│   │   │   │   ├── communicator.rb
│   │   │   │   ├── components.rb
│   │   │   │   ├── config.rb
│   │   │   │   ├── errors.rb
│   │   │   │   ├── guest.rb
│   │   │   │   ├── host.rb
│   │   │   │   ├── manager.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── provider.rb
│   │   │   │   ├── provisioner.rb
│   │   │   │   ├── push.rb
│   │   │   │   ├── synced_folder.rb
│   │   │   │   └── trigger.rb
│   │   │   └── v2.rb
│   │   ├── plugin.rb
│   │   ├── registry.rb
│   │   ├── shared_helpers.rb
│   │   ├── ui.rb
│   │   ├── util/
│   │   │   ├── ansi_escape_code_remover.rb
│   │   │   ├── busy.rb
│   │   │   ├── caps.rb
│   │   │   ├── checkpoint_client.rb
│   │   │   ├── command_deprecation.rb
│   │   │   ├── counter.rb
│   │   │   ├── credential_scrubber.rb
│   │   │   ├── curl_helper.rb
│   │   │   ├── deep_merge.rb
│   │   │   ├── directory.rb
│   │   │   ├── downloader.rb
│   │   │   ├── env.rb
│   │   │   ├── experimental.rb
│   │   │   ├── file_checksum.rb
│   │   │   ├── file_mode.rb
│   │   │   ├── file_mutex.rb
│   │   │   ├── guest_hosts.rb
│   │   │   ├── guest_inspection.rb
│   │   │   ├── guest_networks.rb
│   │   │   ├── hash_with_indifferent_access.rb
│   │   │   ├── install_cli_autocomplete.rb
│   │   │   ├── io.rb
│   │   │   ├── ipv4_interfaces.rb
│   │   │   ├── is_port_open.rb
│   │   │   ├── keypair.rb
│   │   │   ├── line_buffer.rb
│   │   │   ├── line_ending_helpers.rb
│   │   │   ├── logging_formatter.rb
│   │   │   ├── map_command_options.rb
│   │   │   ├── mime.rb
│   │   │   ├── network_ip.rb
│   │   │   ├── numeric.rb
│   │   │   ├── platform.rb
│   │   │   ├── powershell.rb
│   │   │   ├── presence.rb
│   │   │   ├── retryable.rb
│   │   │   ├── safe_chdir.rb
│   │   │   ├── safe_env.rb
│   │   │   ├── safe_exec.rb
│   │   │   ├── safe_puts.rb
│   │   │   ├── scoped_hash_override.rb
│   │   │   ├── shell_quote.rb
│   │   │   ├── silence_warnings.rb
│   │   │   ├── ssh.rb
│   │   │   ├── stacked_proc_runner.rb
│   │   │   ├── string_block_editor.rb
│   │   │   ├── subprocess.rb
│   │   │   ├── template_renderer.rb
│   │   │   ├── uploader.rb
│   │   │   ├── which.rb
│   │   │   └── windows_path.rb
│   │   ├── util.rb
│   │   ├── vagrantfile.rb
│   │   └── version.rb
│   └── vagrant.rb
├── plugins/
│   ├── README.md
│   ├── commands/
│   │   ├── autocomplete/
│   │   │   ├── command/
│   │   │   │   ├── install.rb
│   │   │   │   └── root.rb
│   │   │   └── plugin.rb
│   │   ├── box/
│   │   │   ├── command/
│   │   │   │   ├── add.rb
│   │   │   │   ├── download_mixins.rb
│   │   │   │   ├── list.rb
│   │   │   │   ├── outdated.rb
│   │   │   │   ├── prune.rb
│   │   │   │   ├── remove.rb
│   │   │   │   ├── repackage.rb
│   │   │   │   ├── root.rb
│   │   │   │   └── update.rb
│   │   │   └── plugin.rb
│   │   ├── cap/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── cloud/
│   │   │   ├── auth/
│   │   │   │   ├── login.rb
│   │   │   │   ├── logout.rb
│   │   │   │   ├── middleware/
│   │   │   │   │   ├── add_authentication.rb
│   │   │   │   │   └── add_downloader_authentication.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── root.rb
│   │   │   │   └── whoami.rb
│   │   │   ├── box/
│   │   │   │   ├── create.rb
│   │   │   │   ├── delete.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── root.rb
│   │   │   │   ├── show.rb
│   │   │   │   └── update.rb
│   │   │   ├── client/
│   │   │   │   └── client.rb
│   │   │   ├── errors.rb
│   │   │   ├── list.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   ├── provider/
│   │   │   │   ├── create.rb
│   │   │   │   ├── delete.rb
│   │   │   │   ├── plugin.rb
│   │   │   │   ├── root.rb
│   │   │   │   ├── update.rb
│   │   │   │   └── upload.rb
│   │   │   ├── publish.rb
│   │   │   ├── root.rb
│   │   │   ├── search.rb
│   │   │   ├── util.rb
│   │   │   └── version/
│   │   │       ├── create.rb
│   │   │       ├── delete.rb
│   │   │       ├── plugin.rb
│   │   │       ├── release.rb
│   │   │       ├── revoke.rb
│   │   │       ├── root.rb
│   │   │       └── update.rb
│   │   ├── destroy/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── global-status/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── halt/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── help/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── init/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── list-commands/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── login/
│   │   │   └── plugin.rb
│   │   ├── package/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── plugin/
│   │   │   ├── action/
│   │   │   │   ├── expunge_plugins.rb
│   │   │   │   ├── install_gem.rb
│   │   │   │   ├── license_plugin.rb
│   │   │   │   ├── list_plugins.rb
│   │   │   │   ├── plugin_exists_check.rb
│   │   │   │   ├── repair_plugins.rb
│   │   │   │   ├── uninstall_plugin.rb
│   │   │   │   └── update_gems.rb
│   │   │   ├── action.rb
│   │   │   ├── command/
│   │   │   │   ├── base.rb
│   │   │   │   ├── expunge.rb
│   │   │   │   ├── install.rb
│   │   │   │   ├── license.rb
│   │   │   │   ├── list.rb
│   │   │   │   ├── mixin_install_opts.rb
│   │   │   │   ├── repair.rb
│   │   │   │   ├── root.rb
│   │   │   │   ├── uninstall.rb
│   │   │   │   └── update.rb
│   │   │   ├── gem_helper.rb
│   │   │   └── plugin.rb
│   │   ├── port/
│   │   │   ├── command.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   └── plugin.rb
│   │   ├── powershell/
│   │   │   ├── command.rb
│   │   │   ├── errors.rb
│   │   │   ├── plugin.rb
│   │   │   └── scripts/
│   │   │       ├── enable_psremoting.ps1
│   │   │       └── reset_trustedhosts.ps1
│   │   ├── provider/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── provision/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── push/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── rdp/
│   │   │   ├── command.rb
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   └── plugin.rb
│   │   ├── reload/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── resume/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── snapshot/
│   │   │   ├── command/
│   │   │   │   ├── delete.rb
│   │   │   │   ├── list.rb
│   │   │   │   ├── pop.rb
│   │   │   │   ├── push.rb
│   │   │   │   ├── push_shared.rb
│   │   │   │   ├── restore.rb
│   │   │   │   ├── root.rb
│   │   │   │   └── save.rb
│   │   │   └── plugin.rb
│   │   ├── ssh/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── ssh_config/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── status/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── suspend/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── up/
│   │   │   ├── command.rb
│   │   │   ├── middleware/
│   │   │   │   └── store_box_metadata.rb
│   │   │   ├── plugin.rb
│   │   │   └── start_mixins.rb
│   │   ├── upload/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── validate/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── version/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   ├── winrm/
│   │   │   ├── command.rb
│   │   │   └── plugin.rb
│   │   └── winrm_config/
│   │       ├── command.rb
│   │       └── plugin.rb
│   ├── communicators/
│   │   ├── none/
│   │   │   ├── communicator.rb
│   │   │   └── plugin.rb
│   │   ├── ssh/
│   │   │   ├── communicator.rb
│   │   │   └── plugin.rb
│   │   ├── winrm/
│   │   │   ├── command_filter.rb
│   │   │   ├── command_filters/
│   │   │   │   ├── cat.rb
│   │   │   │   ├── chmod.rb
│   │   │   │   ├── chown.rb
│   │   │   │   ├── grep.rb
│   │   │   │   ├── mkdir.rb
│   │   │   │   ├── rm.rb
│   │   │   │   ├── test.rb
│   │   │   │   ├── uname.rb
│   │   │   │   └── which.rb
│   │   │   ├── communicator.rb
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── helper.rb
│   │   │   ├── plugin.rb
│   │   │   └── shell.rb
│   │   └── winssh/
│   │       ├── communicator.rb
│   │       ├── config.rb
│   │       └── plugin.rb
│   ├── guests/
│   │   ├── alma/
│   │   │   ├── cap/
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── alpine/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── nfs_client.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── smb.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── alt/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── flavor.rb
│   │   │   │   ├── network_scripts_dir.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── amazon/
│   │   │   ├── cap/
│   │   │   │   ├── configure_networks.rb
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── arch/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── smb.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── atomic/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   └── docker.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── bsd/
│   │   │   ├── cap/
│   │   │   │   ├── file_system.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_virtualbox_shared_folder.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   └── public_key.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── centos/
│   │   │   ├── cap/
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── coreos/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   └── docker.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── darwin/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── choose_addressable_ip_addr.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── darwin_version.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_smb_shared_folder.rb
│   │   │   │   ├── mount_vmware_shared_folder.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   ├── shell_expand_guest_path.rb
│   │   │   │   └── verify_vmware_hgfs.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── debian/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── smb.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── dragonflybsd/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── elementary/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── esxi/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_nfs_folder.rb
│   │   │   │   └── public_key.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── fedora/
│   │   │   ├── cap/
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── freebsd/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── mount_virtualbox_shared_folder.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── shell_expand_guest_path.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── funtoo/
│   │   │   ├── cap/
│   │   │   │   └── configure_networks.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── gentoo/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   └── configure_networks.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── haiku/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── insert_public_key.rb
│   │   │   │   ├── remove_public_key.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── kali/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── linux/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── choose_addressable_ip_addr.rb
│   │   │   │   ├── file_system.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_smb_shared_folder.rb
│   │   │   │   ├── mount_virtualbox_shared_folder.rb
│   │   │   │   ├── network_interfaces.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── persist_mount_shared_folder.rb
│   │   │   │   ├── port.rb
│   │   │   │   ├── public_key.rb
│   │   │   │   ├── read_ip_address.rb
│   │   │   │   ├── reboot.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── shell_expand_guest_path.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── mint/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── netbsd/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── shell_expand_guest_path.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── nixos/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   └── nfs_client.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── omnios/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── mount_nfs_folder.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── openbsd/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── shell_expand_guest_path.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── openwrt/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── insert_public_key.rb
│   │   │   │   ├── remove_public_key.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── photon/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   └── docker.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── pld/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── flavor.rb
│   │   │   │   └── network_scripts_dir.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── redhat/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── flavor.rb
│   │   │   │   ├── network_scripts_dir.rb
│   │   │   │   ├── nfs_client.rb
│   │   │   │   ├── rsync.rb
│   │   │   │   └── smb.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── rocky/
│   │   │   ├── cap/
│   │   │   │   └── flavor.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── slackware/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   └── configure_networks.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── smartos/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── insert_public_key.rb
│   │   │   │   ├── mount_nfs.rb
│   │   │   │   ├── remove_public_key.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── config.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── solaris/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── file_system.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── insert_public_key.rb
│   │   │   │   ├── mount_virtualbox_shared_folder.rb
│   │   │   │   ├── remove_public_key.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── config.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── solaris11/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   └── configure_networks.rb
│   │   │   ├── config.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── suse/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── network_scripts_dir.rb
│   │   │   │   ├── nfs_client.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── tinycore/
│   │   │   ├── cap/
│   │   │   │   ├── change_host_name.rb
│   │   │   │   ├── configure_networks.rb
│   │   │   │   ├── halt.rb
│   │   │   │   ├── mount_nfs.rb
│   │   │   │   └── rsync.rb
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── trisquel/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   ├── ubuntu/
│   │   │   ├── guest.rb
│   │   │   └── plugin.rb
│   │   └── windows/
│   │       ├── cap/
│   │       │   ├── change_host_name.rb
│   │       │   ├── choose_addressable_ip_addr.rb
│   │       │   ├── configure_networks.rb
│   │       │   ├── file_system.rb
│   │       │   ├── halt.rb
│   │       │   ├── mount_shared_folder.rb
│   │       │   ├── public_key.rb
│   │       │   ├── reboot.rb
│   │       │   └── rsync.rb
│   │       ├── config.rb
│   │       ├── errors.rb
│   │       ├── guest.rb
│   │       ├── guest_network.rb
│   │       ├── plugin.rb
│   │       └── scripts/
│   │           ├── mount_volume.ps1.erb
│   │           ├── reboot_detect.ps1
│   │           ├── set_work_network.ps1
│   │           └── winrs_v3_get_adapters.ps1
│   ├── hosts/
│   │   ├── alt/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── arch/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── bsd/
│   │   │   ├── cap/
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── path.rb
│   │   │   │   └── ssh.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── darwin/
│   │   │   ├── cap/
│   │   │   │   ├── configured_ip_addresses.rb
│   │   │   │   ├── fs_iso.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── path.rb
│   │   │   │   ├── provider_install_virtualbox.rb
│   │   │   │   ├── rdp.rb
│   │   │   │   ├── smb.rb
│   │   │   │   └── version.rb
│   │   │   ├── host.rb
│   │   │   ├── plugin.rb
│   │   │   └── scripts/
│   │   │       └── install_virtualbox.sh
│   │   ├── freebsd/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── gentoo/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── linux/
│   │   │   ├── cap/
│   │   │   │   ├── fs_iso.rb
│   │   │   │   ├── nfs.rb
│   │   │   │   ├── rdp.rb
│   │   │   │   └── ssh.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── null/
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── redhat/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── slackware/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── suse/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   ├── void/
│   │   │   ├── cap/
│   │   │   │   └── nfs.rb
│   │   │   ├── host.rb
│   │   │   └── plugin.rb
│   │   └── windows/
│   │       ├── cap/
│   │       │   ├── configured_ip_addresses.rb
│   │       │   ├── fs_iso.rb
│   │       │   ├── nfs.rb
│   │       │   ├── provider_install_virtualbox.rb
│   │       │   ├── ps.rb
│   │       │   ├── rdp.rb
│   │       │   ├── smb.rb
│   │       │   └── ssh.rb
│   │       ├── host.rb
│   │       ├── plugin.rb
│   │       └── scripts/
│   │           ├── check_credentials.ps1
│   │           ├── host_info.ps1
│   │           ├── install_virtualbox.ps1
│   │           ├── set_share.ps1
│   │           ├── set_ssh_key_permissions.ps1
│   │           ├── unset_share.ps1
│   │           └── utils/
│   │               └── VagrantSSH/
│   │                   └── VagrantSSH.psm1
│   ├── kernel_v1/
│   │   ├── config/
│   │   │   ├── nfs.rb
│   │   │   ├── package.rb
│   │   │   ├── ssh.rb
│   │   │   ├── vagrant.rb
│   │   │   └── vm.rb
│   │   └── plugin.rb
│   ├── kernel_v2/
│   │   ├── config/
│   │   │   ├── cloud_init.rb
│   │   │   ├── disk.rb
│   │   │   ├── package.rb
│   │   │   ├── push.rb
│   │   │   ├── ssh.rb
│   │   │   ├── ssh_connect.rb
│   │   │   ├── trigger.rb
│   │   │   ├── vagrant.rb
│   │   │   ├── vm.rb
│   │   │   ├── vm_provisioner.rb
│   │   │   ├── vm_subvm.rb
│   │   │   └── vm_trigger.rb
│   │   └── plugin.rb
│   ├── providers/
│   │   ├── docker/
│   │   │   ├── action/
│   │   │   │   ├── build.rb
│   │   │   │   ├── compare_synced_folders.rb
│   │   │   │   ├── connect_networks.rb
│   │   │   │   ├── create.rb
│   │   │   │   ├── destroy.rb
│   │   │   │   ├── destroy_build_image.rb
│   │   │   │   ├── destroy_network.rb
│   │   │   │   ├── forwarded_ports.rb
│   │   │   │   ├── has_ssh.rb
│   │   │   │   ├── host_machine.rb
│   │   │   │   ├── host_machine_build_dir.rb
│   │   │   │   ├── host_machine_port_checker.rb
│   │   │   │   ├── host_machine_port_warning.rb
│   │   │   │   ├── host_machine_required.rb
│   │   │   │   ├── host_machine_sync_folders.rb
│   │   │   │   ├── host_machine_sync_folders_disable.rb
│   │   │   │   ├── init_state.rb
│   │   │   │   ├── is_build.rb
│   │   │   │   ├── is_host_machine_created.rb
│   │   │   │   ├── login.rb
│   │   │   │   ├── prepare_forwarded_port_collision_params.rb
│   │   │   │   ├── prepare_networks.rb
│   │   │   │   ├── prepare_nfs_settings.rb
│   │   │   │   ├── prepare_nfs_valid_ids.rb
│   │   │   │   ├── prepare_ssh.rb
│   │   │   │   ├── pull.rb
│   │   │   │   ├── start.rb
│   │   │   │   ├── stop.rb
│   │   │   │   └── wait_for_running.rb
│   │   │   ├── action.rb
│   │   │   ├── cap/
│   │   │   │   ├── has_communicator.rb
│   │   │   │   ├── proxy_machine.rb
│   │   │   │   └── public_address.rb
│   │   │   ├── command/
│   │   │   │   ├── exec.rb
│   │   │   │   ├── logs.rb
│   │   │   │   └── run.rb
│   │   │   ├── communicator.rb
│   │   │   ├── config.rb
│   │   │   ├── driver/
│   │   │   │   └── compose.rb
│   │   │   ├── driver.rb
│   │   │   ├── errors.rb
│   │   │   ├── executor/
│   │   │   │   ├── local.rb
│   │   │   │   └── vagrant.rb
│   │   │   ├── hostmachine/
│   │   │   │   └── Vagrantfile
│   │   │   ├── plugin.rb
│   │   │   ├── provider.rb
│   │   │   └── synced_folder.rb
│   │   ├── hyperv/
│   │   │   ├── action/
│   │   │   │   ├── check_access.rb
│   │   │   │   ├── check_enabled.rb
│   │   │   │   ├── configure.rb
│   │   │   │   ├── delete_vm.rb
│   │   │   │   ├── export.rb
│   │   │   │   ├── import.rb
│   │   │   │   ├── is_windows.rb
│   │   │   │   ├── message_will_not_destroy.rb
│   │   │   │   ├── net_set_mac.rb
│   │   │   │   ├── net_set_vlan.rb
│   │   │   │   ├── package.rb
│   │   │   │   ├── package_metadata_json.rb
│   │   │   │   ├── package_setup_files.rb
│   │   │   │   ├── package_setup_folders.rb
│   │   │   │   ├── package_vagrantfile.rb
│   │   │   │   ├── read_guest_ip.rb
│   │   │   │   ├── read_state.rb
│   │   │   │   ├── resume_vm.rb
│   │   │   │   ├── set_name.rb
│   │   │   │   ├── snapshot_delete.rb
│   │   │   │   ├── snapshot_restore.rb
│   │   │   │   ├── snapshot_save.rb
│   │   │   │   ├── start_instance.rb
│   │   │   │   ├── stop_instance.rb
│   │   │   │   ├── suspend_vm.rb
│   │   │   │   └── wait_for_ip_address.rb
│   │   │   ├── action.rb
│   │   │   ├── cap/
│   │   │   │   ├── cleanup_disks.rb
│   │   │   │   ├── configure_disks.rb
│   │   │   │   ├── public_address.rb
│   │   │   │   ├── snapshot_list.rb
│   │   │   │   └── validate_disk_ext.rb
│   │   │   ├── config.rb
│   │   │   ├── driver.rb
│   │   │   ├── errors.rb
│   │   │   ├── plugin.rb
│   │   │   ├── provider.rb
│   │   │   └── scripts/
│   │   │       ├── add_dvd.ps1
│   │   │       ├── attach_disk_drive.ps1
│   │   │       ├── check_hyperv.ps1
│   │   │       ├── check_hyperv_access.ps1
│   │   │       ├── clone_vhd.ps1
│   │   │       ├── configure_vm.ps1
│   │   │       ├── create_snapshot.ps1
│   │   │       ├── delete_snapshot.ps1
│   │   │       ├── delete_vm.ps1
│   │   │       ├── dismount_vhd.ps1
│   │   │       ├── export_vm.ps1
│   │   │       ├── file_sync.ps1
│   │   │       ├── get_network_config.ps1
│   │   │       ├── get_network_mac.ps1
│   │   │       ├── get_scsi_controller.ps1
│   │   │       ├── get_switches.ps1
│   │   │       ├── get_vhd.ps1
│   │   │       ├── get_vm_status.ps1
│   │   │       ├── has_vmcx_support.ps1
│   │   │       ├── import_vm.ps1
│   │   │       ├── list_hdds.ps1
│   │   │       ├── list_snapshots.ps1
│   │   │       ├── new_vhd.ps1
│   │   │       ├── remove_disk_drive.ps1
│   │   │       ├── remove_dvd.ps1
│   │   │       ├── resize_disk_drive.ps1
│   │   │       ├── restore_snapshot.ps1
│   │   │       ├── resume_vm.ps1
│   │   │       ├── set_enhanced_session_transport_type.ps1
│   │   │       ├── set_name.ps1
│   │   │       ├── set_network_mac.ps1
│   │   │       ├── set_network_vlan.ps1
│   │   │       ├── set_vm_integration_services.ps1
│   │   │       ├── start_vm.ps1
│   │   │       ├── stop_vm.ps1
│   │   │       ├── suspend_vm.ps1
│   │   │       └── utils/
│   │   │           ├── VagrantMessages/
│   │   │           │   └── VagrantMessages.psm1
│   │   │           └── VagrantVM/
│   │   │               └── VagrantVM.psm1
│   │   └── virtualbox/
│   │       ├── action/
│   │       │   ├── boot.rb
│   │       │   ├── check_accessible.rb
│   │       │   ├── check_created.rb
│   │       │   ├── check_guest_additions.rb
│   │       │   ├── check_running.rb
│   │       │   ├── check_virtualbox.rb
│   │       │   ├── clean_machine_folder.rb
│   │       │   ├── clear_forwarded_ports.rb
│   │       │   ├── clear_network_interfaces.rb
│   │       │   ├── created.rb
│   │       │   ├── customize.rb
│   │       │   ├── destroy.rb
│   │       │   ├── destroy_unused_network_interfaces.rb
│   │       │   ├── discard_state.rb
│   │       │   ├── export.rb
│   │       │   ├── forced_halt.rb
│   │       │   ├── forward_ports.rb
│   │       │   ├── import.rb
│   │       │   ├── import_master.rb
│   │       │   ├── is_paused.rb
│   │       │   ├── is_running.rb
│   │       │   ├── is_saved.rb
│   │       │   ├── match_mac_address.rb
│   │       │   ├── message_already_running.rb
│   │       │   ├── message_not_created.rb
│   │       │   ├── message_not_running.rb
│   │       │   ├── message_will_not_destroy.rb
│   │       │   ├── network.rb
│   │       │   ├── network_fix_ipv6.rb
│   │       │   ├── package.rb
│   │       │   ├── package_setup_files.rb
│   │       │   ├── package_setup_folders.rb
│   │       │   ├── package_vagrantfile.rb
│   │       │   ├── prepare_clone_snapshot.rb
│   │       │   ├── prepare_forwarded_port_collision_params.rb
│   │       │   ├── prepare_nfs_settings.rb
│   │       │   ├── prepare_nfs_valid_ids.rb
│   │       │   ├── resume.rb
│   │       │   ├── sane_defaults.rb
│   │       │   ├── set_default_nic_type.rb
│   │       │   ├── set_name.rb
│   │       │   ├── setup_package_files.rb
│   │       │   ├── snapshot_delete.rb
│   │       │   ├── snapshot_restore.rb
│   │       │   ├── snapshot_save.rb
│   │       │   └── suspend.rb
│   │       ├── action.rb
│   │       ├── cap/
│   │       │   ├── cleanup_disks.rb
│   │       │   ├── configure_disks.rb
│   │       │   ├── mount_options.rb
│   │       │   ├── public_address.rb
│   │       │   └── validate_disk_ext.rb
│   │       ├── cap.rb
│   │       ├── config.rb
│   │       ├── driver/
│   │       │   ├── base.rb
│   │       │   ├── meta.rb
│   │       │   ├── version_4_0.rb
│   │       │   ├── version_4_1.rb
│   │       │   ├── version_4_2.rb
│   │       │   ├── version_4_3.rb
│   │       │   ├── version_5_0.rb
│   │       │   ├── version_5_1.rb
│   │       │   ├── version_5_2.rb
│   │       │   ├── version_6_0.rb
│   │       │   ├── version_6_1.rb
│   │       │   ├── version_7_0.rb
│   │       │   ├── version_7_1.rb
│   │       │   └── version_7_2.rb
│   │       ├── model/
│   │       │   ├── forwarded_port.rb
│   │       │   ├── storage_controller.rb
│   │       │   └── storage_controller_array.rb
│   │       ├── plugin.rb
│   │       ├── provider.rb
│   │       ├── synced_folder.rb
│   │       └── util/
│   │           └── compile_forwarded_ports.rb
│   ├── provisioners/
│   │   ├── ansible/
│   │   │   ├── cap/
│   │   │   │   └── guest/
│   │   │   │       ├── alpine/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── arch/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── debian/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── facts.rb
│   │   │   │       ├── fedora/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── freebsd/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── pip/
│   │   │   │       │   └── pip.rb
│   │   │   │       ├── posix/
│   │   │   │       │   └── ansible_installed.rb
│   │   │   │       ├── redhat/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       ├── suse/
│   │   │   │       │   └── ansible_install.rb
│   │   │   │       └── ubuntu/
│   │   │   │           └── ansible_install.rb
│   │   │   ├── config/
│   │   │   │   ├── base.rb
│   │   │   │   ├── guest.rb
│   │   │   │   └── host.rb
│   │   │   ├── constants.rb
│   │   │   ├── errors.rb
│   │   │   ├── helpers.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner/
│   │   │       ├── base.rb
│   │   │       ├── guest.rb
│   │   │       └── host.rb
│   │   ├── cfengine/
│   │   │   ├── cap/
│   │   │   │   ├── debian/
│   │   │   │   │   └── cfengine_install.rb
│   │   │   │   ├── linux/
│   │   │   │   │   ├── cfengine_installed.rb
│   │   │   │   │   └── cfengine_needs_bootstrap.rb
│   │   │   │   ├── redhat/
│   │   │   │   │   └── cfengine_install.rb
│   │   │   │   └── suse/
│   │   │   │       └── cfengine_install.rb
│   │   │   ├── config.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── chef/
│   │   │   ├── cap/
│   │   │   │   ├── debian/
│   │   │   │   │   └── chef_install.rb
│   │   │   │   ├── freebsd/
│   │   │   │   │   ├── chef_install.rb
│   │   │   │   │   └── chef_installed.rb
│   │   │   │   ├── linux/
│   │   │   │   │   └── chef_installed.rb
│   │   │   │   ├── omnios/
│   │   │   │   │   ├── chef_install.rb
│   │   │   │   │   └── chef_installed.rb
│   │   │   │   ├── redhat/
│   │   │   │   │   └── chef_install.rb
│   │   │   │   ├── suse/
│   │   │   │   │   └── chef_install.rb
│   │   │   │   └── windows/
│   │   │   │       ├── chef_install.rb
│   │   │   │       └── chef_installed.rb
│   │   │   ├── command_builder.rb
│   │   │   ├── config/
│   │   │   │   ├── base.rb
│   │   │   │   ├── base_runner.rb
│   │   │   │   ├── chef_apply.rb
│   │   │   │   ├── chef_client.rb
│   │   │   │   ├── chef_solo.rb
│   │   │   │   └── chef_zero.rb
│   │   │   ├── installer.rb
│   │   │   ├── omnibus.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner/
│   │   │       ├── base.rb
│   │   │       ├── chef_apply.rb
│   │   │       ├── chef_client.rb
│   │   │       ├── chef_solo.rb
│   │   │       └── chef_zero.rb
│   │   ├── container/
│   │   │   ├── client.rb
│   │   │   ├── config.rb
│   │   │   ├── installer.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── docker/
│   │   │   ├── cap/
│   │   │   │   ├── centos/
│   │   │   │   │   ├── docker_install.rb
│   │   │   │   │   └── docker_start_service.rb
│   │   │   │   ├── debian/
│   │   │   │   │   ├── docker_install.rb
│   │   │   │   │   └── docker_start_service.rb
│   │   │   │   ├── fedora/
│   │   │   │   │   └── docker_install.rb
│   │   │   │   ├── linux/
│   │   │   │   │   ├── docker_configure_vagrant_user.rb
│   │   │   │   │   ├── docker_daemon_running.rb
│   │   │   │   │   └── docker_installed.rb
│   │   │   │   └── windows/
│   │   │   │       └── docker_daemon_running.rb
│   │   │   ├── client.rb
│   │   │   ├── config.rb
│   │   │   ├── installer.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── file/
│   │   │   ├── config.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── podman/
│   │   │   ├── cap/
│   │   │   │   ├── centos/
│   │   │   │   │   └── podman_install.rb
│   │   │   │   ├── linux/
│   │   │   │   │   └── podman_installed.rb
│   │   │   │   └── redhat/
│   │   │   │       └── podman_install.rb
│   │   │   ├── client.rb
│   │   │   ├── config.rb
│   │   │   ├── installer.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   ├── puppet/
│   │   │   ├── config/
│   │   │   │   ├── puppet.rb
│   │   │   │   └── puppet_server.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner/
│   │   │       ├── puppet.rb
│   │   │       └── puppet_server.rb
│   │   ├── salt/
│   │   │   ├── bootstrap_downloader.rb
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── plugin.rb
│   │   │   └── provisioner.rb
│   │   └── shell/
│   │       ├── config.rb
│   │       ├── plugin.rb
│   │       └── provisioner.rb
│   ├── pushes/
│   │   ├── atlas/
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   └── push.rb
│   │   ├── ftp/
│   │   │   ├── adapter.rb
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   └── push.rb
│   │   ├── heroku/
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   └── push.rb
│   │   ├── local-exec/
│   │   │   ├── config.rb
│   │   │   ├── errors.rb
│   │   │   ├── locales/
│   │   │   │   └── en.yml
│   │   │   ├── plugin.rb
│   │   │   └── push.rb
│   │   └── noop/
│   │       ├── config.rb
│   │       ├── plugin.rb
│   │       └── push.rb
│   └── synced_folders/
│       ├── nfs/
│       │   ├── action_cleanup.rb
│       │   ├── config.rb
│       │   ├── plugin.rb
│       │   └── synced_folder.rb
│       ├── rsync/
│       │   ├── command/
│       │   │   ├── rsync.rb
│       │   │   └── rsync_auto.rb
│       │   ├── default_unix_cap.rb
│       │   ├── helper.rb
│       │   ├── plugin.rb
│       │   └── synced_folder.rb
│       ├── smb/
│       │   ├── cap/
│       │   │   ├── default_fstab_modification.rb
│       │   │   └── mount_options.rb
│       │   ├── config.rb
│       │   ├── errors.rb
│       │   ├── plugin.rb
│       │   └── synced_folder.rb
│       └── unix_mount_helpers.rb
├── scripts/
│   ├── install_rvm
│   ├── setup_tests
│   ├── sign.sh
│   └── website_push_www.sh
├── tasks/
│   ├── acceptance.rake
│   ├── bundler.rake
│   └── test.rake
├── templates/
│   ├── commands/
│   │   ├── init/
│   │   │   ├── Vagrantfile.erb
│   │   │   └── Vagrantfile.min.erb
│   │   ├── ssh_config/
│   │   │   └── config.erb
│   │   └── winrm_config/
│   │       └── config.erb
│   ├── config/
│   │   ├── messages.erb
│   │   └── validation_failed.erb
│   ├── guests/
│   │   ├── alpine/
│   │   │   ├── network_dhcp.erb
│   │   │   └── network_static.erb
│   │   ├── alt/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_ipv4address.erb
│   │   │   ├── network_ipv4route.erb
│   │   │   └── network_static.erb
│   │   ├── arch/
│   │   │   ├── default_network/
│   │   │   │   ├── network_dhcp.erb
│   │   │   │   ├── network_static.erb
│   │   │   │   └── network_static6.erb
│   │   │   └── systemd_networkd/
│   │   │       ├── network_dhcp.erb
│   │   │       ├── network_static.erb
│   │   │       └── network_static6.erb
│   │   ├── coreos/
│   │   │   └── etcd.service.erb
│   │   ├── debian/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── freebsd/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── funtoo/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── gentoo/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   ├── network_static6.erb
│   │   │   └── network_systemd.erb
│   │   ├── linux/
│   │   │   └── etc_fstab.erb
│   │   ├── netbsd/
│   │   │   ├── network_dhcp.erb
│   │   │   └── network_static.erb
│   │   ├── nixos/
│   │   │   ├── hostname.erb
│   │   │   └── network.erb
│   │   ├── openbsd/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── redhat/
│   │   │   ├── network_dhcp.erb
│   │   │   ├── network_static.erb
│   │   │   └── network_static6.erb
│   │   ├── slackware/
│   │   │   ├── network_dhcp.erb
│   │   │   └── network_static.erb
│   │   └── suse/
│   │       ├── network_dhcp.erb
│   │       ├── network_static.erb
│   │       └── network_static6.erb
│   ├── license/
│   │   ├── license.html.tmpl
│   │   ├── license.rtf.tmpl
│   │   └── license.tmpl
│   ├── locales/
│   │   ├── comm_winrm.yml
│   │   ├── command_ps.yml
│   │   ├── command_rdp.yml
│   │   ├── en.yml
│   │   ├── guest_windows.yml
│   │   ├── providers_docker.yml
│   │   ├── providers_hyperv.yml
│   │   └── synced_folder_smb.yml
│   ├── networking/
│   │   └── network_manager/
│   │       └── network_manager_device.erb
│   ├── nfs/
│   │   ├── exports_bsd.erb
│   │   ├── exports_darwin.erb
│   │   └── exports_linux.erb
│   ├── package_Vagrantfile.erb
│   ├── provisioners/
│   │   ├── chef_client/
│   │   │   └── client.erb
│   │   ├── chef_solo/
│   │   │   └── solo.erb
│   │   └── chef_zero/
│   │       └── zero.erb
│   └── rgloader.rb
├── test/
│   ├── acceptance/
│   │   ├── base.rb
│   │   ├── provider-docker/
│   │   │   └── lifecycle_spec.rb
│   │   ├── provider-virtualbox/
│   │   │   ├── linked_clone_spec.rb
│   │   │   └── network_intnet_spec.rb
│   │   ├── shared/
│   │   │   └── context_virtualbox.rb
│   │   └── skeletons/
│   │       ├── basic_docker/
│   │       │   └── Vagrantfile
│   │       ├── linked_clone/
│   │       │   └── Vagrantfile
│   │       └── network_intnet/
│   │           └── Vagrantfile
│   ├── config/
│   │   └── acceptance_boxes.yml
│   ├── support/
│   │   └── isolated_environment.rb
│   ├── unit/
│   │   ├── base.rb
│   │   ├── bin/
│   │   │   └── vagrant_test.rb
│   │   ├── plugins/
│   │   │   ├── commands/
│   │   │   │   ├── autocomplete/
│   │   │   │   │   └── commands/
│   │   │   │   │       └── install_test.rb
│   │   │   │   ├── box/
│   │   │   │   │   └── command/
│   │   │   │   │       ├── add_test.rb
│   │   │   │   │       ├── outdated_test.rb
│   │   │   │   │       ├── prune_test.rb
│   │   │   │   │       ├── remove_test.rb
│   │   │   │   │       ├── repackage_test.rb
│   │   │   │   │       └── update_test.rb
│   │   │   │   ├── cap/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── cloud/
│   │   │   │   │   ├── auth/
│   │   │   │   │   │   ├── login_test.rb
│   │   │   │   │   │   ├── logout_test.rb
│   │   │   │   │   │   ├── middleware/
│   │   │   │   │   │   │   ├── add_authentication_test.rb
│   │   │   │   │   │   │   └── add_downloader_authentication_test.rb
│   │   │   │   │   │   └── whoami_test.rb
│   │   │   │   │   ├── box/
│   │   │   │   │   │   ├── create_test.rb
│   │   │   │   │   │   ├── delete_test.rb
│   │   │   │   │   │   ├── show_test.rb
│   │   │   │   │   │   └── update_test.rb
│   │   │   │   │   ├── client_test.rb
│   │   │   │   │   ├── list_test.rb
│   │   │   │   │   ├── provider/
│   │   │   │   │   │   ├── create_test.rb
│   │   │   │   │   │   ├── delete_test.rb
│   │   │   │   │   │   ├── update_test.rb
│   │   │   │   │   │   └── upload_test.rb
│   │   │   │   │   ├── publish_test.rb
│   │   │   │   │   ├── search_test.rb
│   │   │   │   │   └── version/
│   │   │   │   │       ├── create_test.rb
│   │   │   │   │       ├── delete_test.rb
│   │   │   │   │       ├── release_test.rb
│   │   │   │   │       ├── revoke_test.rb
│   │   │   │   │       └── update_test.rb
│   │   │   │   ├── destroy/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── global-status/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── init/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── list-commands/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── package/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── plugin/
│   │   │   │   │   └── action/
│   │   │   │   │       ├── expunge_plugins_test.rb
│   │   │   │   │       ├── install_gem_test.rb
│   │   │   │   │       ├── plugin_exists_check_test.rb
│   │   │   │   │       ├── uninstall_plugin_test.rb
│   │   │   │   │       └── update_gems_test.rb
│   │   │   │   ├── port/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── powershell/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── provider/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── push/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── reload/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── snapshot/
│   │   │   │   │   └── command/
│   │   │   │   │       ├── delete_test.rb
│   │   │   │   │       ├── list_test.rb
│   │   │   │   │       ├── pop_test.rb
│   │   │   │   │       ├── push_test.rb
│   │   │   │   │       ├── restore_test.rb
│   │   │   │   │       ├── root_test.rb
│   │   │   │   │       └── save_test.rb
│   │   │   │   ├── ssh_config/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── suspend/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── up/
│   │   │   │   │   ├── command_test.rb
│   │   │   │   │   └── middleware/
│   │   │   │   │       └── store_box_metadata_test.rb
│   │   │   │   ├── upload/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── validate/
│   │   │   │   │   └── command_test.rb
│   │   │   │   ├── winrm/
│   │   │   │   │   └── command_test.rb
│   │   │   │   └── winrm_config/
│   │   │   │       └── command_test.rb
│   │   │   ├── communicators/
│   │   │   │   ├── none/
│   │   │   │   │   └── communicator_test.rb
│   │   │   │   ├── ssh/
│   │   │   │   │   └── communicator_test.rb
│   │   │   │   ├── winrm/
│   │   │   │   │   ├── command_filter_test.rb
│   │   │   │   │   ├── communicator_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── helper_test.rb
│   │   │   │   │   ├── plugin_test.rb
│   │   │   │   │   └── shell_test.rb
│   │   │   │   └── winssh/
│   │   │   │       └── communicator_test.rb
│   │   │   ├── guests/
│   │   │   │   ├── alma/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── flavor_test.rb
│   │   │   │   ├── alpine/
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   ├── change_host_name_test.rb
│   │   │   │   │   │   ├── configure_networks_test.rb
│   │   │   │   │   │   ├── halt_test.rb
│   │   │   │   │   │   ├── nfs_client_test.rb
│   │   │   │   │   │   └── rsync_test.rb
│   │   │   │   │   └── plugin_test.rb
│   │   │   │   ├── alt/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── flavor_test.rb
│   │   │   │   │       ├── network_scripts_dir_test.rb
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── amazon/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       └── flavor_test.rb
│   │   │   │   ├── arch/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── smb_test.rb
│   │   │   │   ├── atomic/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       └── docker_test.rb
│   │   │   │   ├── bsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── file_system_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── insert_public_key_test.rb
│   │   │   │   │       ├── mount_virtual_box_shared_folder_test.rb
│   │   │   │   │       ├── nfs_test.rb
│   │   │   │   │       └── remove_public_key_test.rb
│   │   │   │   ├── centos/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── flavor_test.rb
│   │   │   │   ├── coreos/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       └── docker_test.rb
│   │   │   │   ├── darwin/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── choose_addressable_ip_addr_test.rb
│   │   │   │   │       ├── darwin_version_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── mount_vmware_shared_folder_test.rb
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── debian/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── nfs_client_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── smb_test.rb
│   │   │   │   ├── esxi/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       └── public_key_test.rb
│   │   │   │   ├── freebsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── mount_virtual_box_shared_folder_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── gentoo/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── change_host_name_test.rb
│   │   │   │   ├── haiku/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── linux/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── choose_addressable_ip_addr_test.rb
│   │   │   │   │       ├── file_system_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── insert_public_key_test.rb
│   │   │   │   │       ├── mount_nfs_test.rb
│   │   │   │   │       ├── mount_shared_folder_test.rb
│   │   │   │   │       ├── mount_smb_shared_folder_test.rb
│   │   │   │   │       ├── mount_virtual_box_shared_folder_test.rb
│   │   │   │   │       ├── network_interfaces_test.rb
│   │   │   │   │       ├── nfs_client_test.rb
│   │   │   │   │       ├── persist_mount_shared_folder_test.rb
│   │   │   │   │       ├── port_test.rb
│   │   │   │   │       ├── reboot_test.rb
│   │   │   │   │       ├── remove_public_key_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── netbsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── omnios/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── mount_nfs_folder_test.rb
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── openbsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── shell_expand_guest_path_test.rb
│   │   │   │   ├── openwrt/
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   ├── change_host_name_test.rb
│   │   │   │   │   │   ├── halt_test.rb
│   │   │   │   │   │   ├── insert_public_key_test.rb
│   │   │   │   │   │   ├── remove_public_key_test.rb
│   │   │   │   │   │   └── rsync_test.rb
│   │   │   │   │   └── guest_test.rb
│   │   │   │   ├── photon/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       └── docker_test.rb
│   │   │   │   ├── pld/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── flavor_test.rb
│   │   │   │   │       └── network_scripts_dir_test.rb
│   │   │   │   ├── redhat/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── flavor_test.rb
│   │   │   │   │       ├── network_scripts_dir_test.rb
│   │   │   │   │       ├── nfs_client_test.rb
│   │   │   │   │       ├── rsync_test.rb
│   │   │   │   │       └── smb_test.rb
│   │   │   │   ├── rocky/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── flavor_test.rb
│   │   │   │   ├── slackware/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       └── configure_networks_test.rb
│   │   │   │   ├── smartos/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── insert_public_key_test.rb
│   │   │   │   │       ├── mount_nfs_test.rb
│   │   │   │   │       ├── remove_public_key_test.rb
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── solaris/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── file_system_test.rb
│   │   │   │   │       └── halt_test.rb
│   │   │   │   ├── solaris11/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       └── configure_networks_test.rb
│   │   │   │   ├── suse/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       ├── configure_networks_test.rb
│   │   │   │   │       ├── halt_test.rb
│   │   │   │   │       ├── network_scripts_dir_test.rb
│   │   │   │   │       ├── nfs_client_test.rb
│   │   │   │   │       └── rsync_test.rb
│   │   │   │   ├── tinycore/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── change_host_name_test.rb
│   │   │   │   │       └── halt_test.rb
│   │   │   │   └── windows/
│   │   │   │       ├── cap/
│   │   │   │       │   ├── change_host_name_test.rb
│   │   │   │       │   ├── file_system_test.rb
│   │   │   │       │   ├── halt_test.rb
│   │   │   │       │   ├── insert_public_key_test.rb
│   │   │   │       │   ├── mount_shared_folder_test.rb
│   │   │   │       │   ├── reboot_test.rb
│   │   │   │       │   ├── remove_public_key_test.rb
│   │   │   │       │   └── rsync_test.rb
│   │   │   │       ├── config_test.rb
│   │   │   │       └── guest_network_test.rb
│   │   │   ├── hosts/
│   │   │   │   ├── bsd/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── nfs_test.rb
│   │   │   │   │       ├── path_test.rb
│   │   │   │   │       └── ssh_test.rb
│   │   │   │   ├── darwin/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── configured_ip_addresses_test.rb
│   │   │   │   │       ├── fs_iso_test.rb
│   │   │   │   │       ├── nfs_test.rb
│   │   │   │   │       ├── path_test.rb
│   │   │   │   │       ├── rdp_test.rb
│   │   │   │   │       ├── smb_test.rb
│   │   │   │   │       └── version_test.rb
│   │   │   │   ├── linux/
│   │   │   │   │   └── cap/
│   │   │   │   │       ├── fs_iso_test.rb
│   │   │   │   │       ├── nfs_test.rb
│   │   │   │   │       └── ssh_test.rb
│   │   │   │   ├── void/
│   │   │   │   │   └── cap/
│   │   │   │   │       └── nfs_test.rb
│   │   │   │   └── windows/
│   │   │   │       └── cap/
│   │   │   │           ├── configure_ip_addresses_test.rb
│   │   │   │           ├── fs_iso_test.rb
│   │   │   │           ├── smb_test.rb
│   │   │   │           └── ssh_test.rb
│   │   │   ├── kernel_v2/
│   │   │   │   └── config/
│   │   │   │       ├── cloud_init_test.rb
│   │   │   │       ├── disk_test.rb
│   │   │   │       ├── package_test.rb
│   │   │   │       ├── push_test.rb
│   │   │   │       ├── ssh_connect_test.rb
│   │   │   │       ├── ssh_test.rb
│   │   │   │       ├── trigger_test.rb
│   │   │   │       ├── vagrant_test.rb
│   │   │   │       ├── vm_test.rb
│   │   │   │       └── vm_trigger_test.rb
│   │   │   ├── providers/
│   │   │   │   ├── docker/
│   │   │   │   │   ├── action/
│   │   │   │   │   │   ├── compare_synced_folders_test.rb
│   │   │   │   │   │   ├── connect_networks_test.rb
│   │   │   │   │   │   ├── create_test.rb
│   │   │   │   │   │   ├── destroy_network_test.rb
│   │   │   │   │   │   ├── host_machine_sync_folders_test.rb
│   │   │   │   │   │   ├── login_test.rb
│   │   │   │   │   │   └── prepare_networks_test.rb
│   │   │   │   │   ├── command/
│   │   │   │   │   │   └── exec_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── driver_compose_test.rb
│   │   │   │   │   ├── driver_test.rb
│   │   │   │   │   ├── provider_test.rb
│   │   │   │   │   └── synced_folder_test.rb
│   │   │   │   ├── hyperv/
│   │   │   │   │   ├── action/
│   │   │   │   │   │   ├── check_enabled_test.rb
│   │   │   │   │   │   ├── configure_test.rb
│   │   │   │   │   │   ├── delete_vm_test.rb
│   │   │   │   │   │   ├── export_test.rb
│   │   │   │   │   │   ├── import_test.rb
│   │   │   │   │   │   ├── is_windows_test.rb
│   │   │   │   │   │   ├── net_set_mac_test.rb
│   │   │   │   │   │   ├── net_set_vlan_test.rb
│   │   │   │   │   │   ├── read_guest_ip_test.rb
│   │   │   │   │   │   ├── read_state_test.rb
│   │   │   │   │   │   ├── set_name_test.rb
│   │   │   │   │   │   └── wait_for_ip_address_test.rb
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   ├── cleanup_disks_test.rb
│   │   │   │   │   │   └── configure_disks_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── driver_test.rb
│   │   │   │   │   └── provider_test.rb
│   │   │   │   └── virtualbox/
│   │   │   │       ├── action/
│   │   │   │       │   ├── clean_machine_folder_test.rb
│   │   │   │       │   ├── import_test.rb
│   │   │   │       │   ├── match_mac_address_test.rb
│   │   │   │       │   ├── network_fix_ipv6_test.rb
│   │   │   │       │   ├── network_test.rb
│   │   │   │       │   ├── prepare_nfs_settings_test.rb
│   │   │   │       │   ├── prepare_nfs_valid_ids_test.rb
│   │   │   │       │   └── set_default_nic_type_test.rb
│   │   │   │       ├── base.rb
│   │   │   │       ├── cap/
│   │   │   │       │   ├── cleanup_disks_test.rb
│   │   │   │       │   ├── configure_disks_test.rb
│   │   │   │       │   ├── mount_options_test.rb
│   │   │   │       │   └── public_address_test.rb
│   │   │   │       ├── cap_test.rb
│   │   │   │       ├── config_test.rb
│   │   │   │       ├── driver/
│   │   │   │       │   ├── base.rb
│   │   │   │       │   ├── version_4_0_test.rb
│   │   │   │       │   ├── version_4_1_test.rb
│   │   │   │       │   ├── version_4_2_test.rb
│   │   │   │       │   ├── version_4_3_test.rb
│   │   │   │       │   ├── version_5_0_test.rb
│   │   │   │       │   ├── version_6_0_test.rb
│   │   │   │       │   ├── version_6_1_test.rb
│   │   │   │       │   ├── version_7_0_test.rb
│   │   │   │       │   ├── version_7_1_test.rb
│   │   │   │       │   └── version_7_2_test.rb
│   │   │   │       ├── model/
│   │   │   │       │   ├── storage_controller_array_test.rb
│   │   │   │       │   └── storage_controller_test.rb
│   │   │   │       ├── provider_test.rb
│   │   │   │       ├── support/
│   │   │   │       │   └── shared/
│   │   │   │       │       ├── virtualbox_driver_version_4_x_examples.rb
│   │   │   │       │       ├── virtualbox_driver_version_5_x_examples.rb
│   │   │   │       │       ├── virtualbox_driver_version_6_x_examples.rb
│   │   │   │       │       └── virtualbox_driver_version_7_x_examples.rb
│   │   │   │       └── synced_folder_test.rb
│   │   │   ├── provisioners/
│   │   │   │   ├── ansible/
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   └── guest/
│   │   │   │   │   │       ├── alpine/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── arch/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── debian/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── freebsd/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── pip/
│   │   │   │   │   │       │   └── pip_test.rb
│   │   │   │   │   │       ├── redhat/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       ├── shared/
│   │   │   │   │   │       │   └── pip_ansible_install_examples.rb
│   │   │   │   │   │       ├── suse/
│   │   │   │   │   │       │   └── ansible_install_test.rb
│   │   │   │   │   │       └── ubuntu/
│   │   │   │   │   │           └── ansible_install_test.rb
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── guest_test.rb
│   │   │   │   │   │   ├── host_test.rb
│   │   │   │   │   │   └── shared.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── chef/
│   │   │   │   │   ├── cap/
│   │   │   │   │   │   ├── freebsd/
│   │   │   │   │   │   │   └── chef_installed_test.rb
│   │   │   │   │   │   ├── linux/
│   │   │   │   │   │   │   └── chef_installed_test.rb
│   │   │   │   │   │   ├── omnios/
│   │   │   │   │   │   │   └── chef_installed_test.rb
│   │   │   │   │   │   └── windows/
│   │   │   │   │   │       └── chef_installed_test.rb
│   │   │   │   │   ├── command_builder_test.rb
│   │   │   │   │   ├── config/
│   │   │   │   │   │   ├── base_runner_test.rb
│   │   │   │   │   │   ├── base_test.rb
│   │   │   │   │   │   ├── chef_apply_test.rb
│   │   │   │   │   │   ├── chef_client_test.rb
│   │   │   │   │   │   ├── chef_solo_test.rb
│   │   │   │   │   │   └── chef_zero_test.rb
│   │   │   │   │   ├── omnibus_test.rb
│   │   │   │   │   └── provisioner/
│   │   │   │   │       ├── base_test.rb
│   │   │   │   │       └── chef_solo_test.rb
│   │   │   │   ├── container/
│   │   │   │   │   ├── client_test.rb
│   │   │   │   │   └── config_test.rb
│   │   │   │   ├── docker/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── installer_test.rb
│   │   │   │   │   ├── plugin_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── file/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── podman/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── installer_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── puppet/
│   │   │   │   │   └── provisioner/
│   │   │   │   │       └── puppet_test.rb
│   │   │   │   ├── salt/
│   │   │   │   │   ├── bootstrap_downloader_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   ├── shell/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── provisioner_test.rb
│   │   │   │   └── support/
│   │   │   │       └── shared/
│   │   │   │           └── config.rb
│   │   │   ├── pushes/
│   │   │   │   ├── atlas/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── push_test.rb
│   │   │   │   ├── ftp/
│   │   │   │   │   ├── adapter_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── push_test.rb
│   │   │   │   ├── heroku/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── push_test.rb
│   │   │   │   ├── local-exec/
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   └── push_test.rb
│   │   │   │   └── noop/
│   │   │   │       └── config_test.rb
│   │   │   └── synced_folders/
│   │   │       ├── nfs/
│   │   │       │   ├── action_cleanup_test.rb
│   │   │       │   └── config_test.rb
│   │   │       ├── rsync/
│   │   │       │   ├── command/
│   │   │       │   │   ├── rsync_auto_test.rb
│   │   │       │   │   └── rsync_test.rb
│   │   │       │   ├── default_unix_cap_test.rb
│   │   │       │   ├── helper_test.rb
│   │   │       │   └── synced_folder_test.rb
│   │   │       ├── smb/
│   │   │       │   ├── caps/
│   │   │       │   │   └── mount_options_test.rb
│   │   │       │   └── synced_folder_test.rb
│   │   │       └── unix_mount_helpers_test.rb
│   │   ├── support/
│   │   │   ├── dummy_communicator.rb
│   │   │   ├── dummy_provider.rb
│   │   │   ├── isolated_environment.rb
│   │   │   └── shared/
│   │   │       ├── action_synced_folders_context.rb
│   │   │       ├── base_context.rb
│   │   │       ├── capability_helpers_context.rb
│   │   │       ├── plugin_command_context.rb
│   │   │       └── virtualbox_context.rb
│   │   ├── templates/
│   │   │   ├── commands/
│   │   │   │   └── init/
│   │   │   │       └── Vagrantfile.erb
│   │   │   ├── guests/
│   │   │   │   ├── arch/
│   │   │   │   │   ├── default_network/
│   │   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   │   └── network_static_test.rb
│   │   │   │   │   └── systemd_networkd/
│   │   │   │   │       ├── network_dhcp_test.rb
│   │   │   │   │       └── network_static_test.rb
│   │   │   │   ├── debian/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   ├── freebsd/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   ├── funtoo/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   ├── gentoo/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   ├── network_static_test.rb
│   │   │   │   │   └── systemd_network_test.rb
│   │   │   │   ├── netbsd/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   ├── nixos/
│   │   │   │   │   └── network_test.rb
│   │   │   │   ├── redhat/
│   │   │   │   │   ├── network_dhcp_test.rb
│   │   │   │   │   └── network_static_test.rb
│   │   │   │   └── suse/
│   │   │   │       ├── network_dhcp_test.rb
│   │   │   │       ├── network_static6_test.rb
│   │   │   │       └── network_static_test.rb
│   │   │   └── nfs/
│   │   │       └── exports_darwin_test.rb
│   │   ├── vagrant/
│   │   │   ├── action/
│   │   │   │   ├── builder_test.rb
│   │   │   │   ├── builtin/
│   │   │   │   │   ├── box_add_test.rb
│   │   │   │   │   ├── box_check_outdated_test.rb
│   │   │   │   │   ├── box_remove_test.rb
│   │   │   │   │   ├── call_test.rb
│   │   │   │   │   ├── cleanup_disks_test.rb
│   │   │   │   │   ├── cloud_init_setup_test.rb
│   │   │   │   │   ├── cloud_init_wait_test.rb
│   │   │   │   │   ├── confirm_test.rb
│   │   │   │   │   ├── delayed_test.rb
│   │   │   │   │   ├── disk_test.rb
│   │   │   │   │   ├── env_set_test.rb
│   │   │   │   │   ├── graceful_halt_test.rb
│   │   │   │   │   ├── handle_box_test.rb
│   │   │   │   │   ├── handle_forwarded_port_collisions_test.rb
│   │   │   │   │   ├── has_provisioner_test.rb
│   │   │   │   │   ├── is_env_set_test.rb
│   │   │   │   │   ├── is_state_test.rb
│   │   │   │   │   ├── lock_test.rb
│   │   │   │   │   ├── message_test.rb
│   │   │   │   │   ├── mixin_provisioners_test.rb
│   │   │   │   │   ├── mixin_synced_folders_test.rb
│   │   │   │   │   ├── provision_test.rb
│   │   │   │   │   ├── provisioner_cleanup_test.rb
│   │   │   │   │   ├── set_hostname_test.rb
│   │   │   │   │   ├── ssh_exec_test.rb
│   │   │   │   │   ├── ssh_run_test.rb
│   │   │   │   │   ├── synced_folder_cleanup_test.rb
│   │   │   │   │   ├── synced_folders_test.rb
│   │   │   │   │   ├── trigger_test.rb
│   │   │   │   │   └── wait_for_communicator_test.rb
│   │   │   │   ├── general/
│   │   │   │   │   └── package_test.rb
│   │   │   │   ├── hook_test.rb
│   │   │   │   ├── runner_test.rb
│   │   │   │   └── warden_test.rb
│   │   │   ├── alias_test.rb
│   │   │   ├── batch_action_test.rb
│   │   │   ├── box_collection_test.rb
│   │   │   ├── box_metadata_test.rb
│   │   │   ├── box_test.rb
│   │   │   ├── bundler_test.rb
│   │   │   ├── capability_host_test.rb
│   │   │   ├── cli_test.rb
│   │   │   ├── config/
│   │   │   │   ├── loader_test.rb
│   │   │   │   ├── v1/
│   │   │   │   │   ├── dummy_config_test.rb
│   │   │   │   │   ├── loader_test.rb
│   │   │   │   │   └── root_test.rb
│   │   │   │   └── v2/
│   │   │   │       ├── dummy_config_test.rb
│   │   │   │       ├── loader_test.rb
│   │   │   │       ├── root_test.rb
│   │   │   │       └── util_test.rb
│   │   │   ├── config_test.rb
│   │   │   ├── environment_test.rb
│   │   │   ├── errors_test.rb
│   │   │   ├── guest_test.rb
│   │   │   ├── host_test.rb
│   │   │   ├── machine_index_test.rb
│   │   │   ├── machine_state_test.rb
│   │   │   ├── machine_test.rb
│   │   │   ├── plugin/
│   │   │   │   ├── manager_test.rb
│   │   │   │   ├── state_file_test.rb
│   │   │   │   ├── v1/
│   │   │   │   │   ├── command_test.rb
│   │   │   │   │   ├── communicator_test.rb
│   │   │   │   │   ├── config_test.rb
│   │   │   │   │   ├── host_test.rb
│   │   │   │   │   ├── manager_test.rb
│   │   │   │   │   ├── plugin_test.rb
│   │   │   │   │   └── provider_test.rb
│   │   │   │   └── v2/
│   │   │   │       ├── command_test.rb
│   │   │   │       ├── communicator_test.rb
│   │   │   │       ├── components_test.rb
│   │   │   │       ├── config_test.rb
│   │   │   │       ├── host_test.rb
│   │   │   │       ├── manager_test.rb
│   │   │   │       ├── plugin_test.rb
│   │   │   │       ├── provider_test.rb
│   │   │   │       ├── synced_folder_test.rb
│   │   │   │       └── trigger_test.rb
│   │   │   ├── registry_test.rb
│   │   │   ├── shared_helpers_test.rb
│   │   │   ├── ui_test.rb
│   │   │   ├── util/
│   │   │   │   ├── ansi_escape_code_remover_test.rb
│   │   │   │   ├── caps_test.rb
│   │   │   │   ├── checkpoint_client_test.rb
│   │   │   │   ├── command_deprecation_test.rb
│   │   │   │   ├── credential_scrubber_test.rb
│   │   │   │   ├── curl_helper_test.rb
│   │   │   │   ├── deep_merge_test.rb
│   │   │   │   ├── directory_test.rb
│   │   │   │   ├── downloader_test.rb
│   │   │   │   ├── env_test.rb
│   │   │   │   ├── experimental_test.rb
│   │   │   │   ├── file_checksum_test.rb
│   │   │   │   ├── file_mutex_test.rb
│   │   │   │   ├── guest_hosts_test.rb
│   │   │   │   ├── guest_inspection_test.rb
│   │   │   │   ├── guest_networks_spec.rb
│   │   │   │   ├── hash_with_indifferent_access_test.rb
│   │   │   │   ├── install_cli_autocomplete_test.rb
│   │   │   │   ├── io_test.rb
│   │   │   │   ├── ipv4_interfaces_test.rb
│   │   │   │   ├── is_port_open_test.rb
│   │   │   │   ├── keypair_test.rb
│   │   │   │   ├── line_buffer_test.rb
│   │   │   │   ├── line_endings_helper_test.rb
│   │   │   │   ├── map_command_options_test.rb
│   │   │   │   ├── mime_test.rb
│   │   │   │   ├── network_ip_test.rb
│   │   │   │   ├── numeric_test.rb
│   │   │   │   ├── platform_test.rb
│   │   │   │   ├── powershell_test.rb
│   │   │   │   ├── presence_test.rb
│   │   │   │   ├── retryable_test.rb
│   │   │   │   ├── safe_chdir_test.rb
│   │   │   │   ├── scoped_hash_override_test.rb
│   │   │   │   ├── shell_quote_test.rb
│   │   │   │   ├── ssh_test.rb
│   │   │   │   ├── string_block_editor_test.rb
│   │   │   │   ├── subprocess_test.rb
│   │   │   │   ├── uploader_test.rb
│   │   │   │   └── which_test.rb
│   │   │   └── vagrantfile_test.rb
│   │   └── vagrant_test.rb
│   └── vagrant-spec/
│       ├── .runner-vmware.sh
│       ├── Vagrantfile.spec
│       ├── boxes/
│       │   └── .keep
│       ├── configs/
│       │   ├── vagrant-spec.config.docker.rb
│       │   └── vagrant-spec.config.virtualbox.rb
│       ├── readme.md
│       └── scripts/
│           ├── centos-run.virtualbox.sh
│           ├── centos-setup.virtualbox.sh
│           ├── ubuntu-install-vagrant.sh
│           ├── ubuntu-run.docker.sh
│           ├── ubuntu-run.virtualbox.sh
│           ├── ubuntu-setup.docker.sh
│           ├── ubuntu-setup.virtualbox.sh
│           ├── windows-run.virtualbox.ps1
│           └── windows-setup.virtualbox.ps1
├── vagrant-spec.config.example.rb
├── vagrant.gemspec
├── version.txt
└── website/
    ├── .editorconfig
    ├── .env
    ├── .eslintrc.js
    ├── .gitignore
    ├── .nvmrc
    ├── .stylelintrc.js
    ├── LICENSE.md
    ├── Makefile
    ├── README.md
    ├── content/
    │   ├── docs/
    │   │   ├── boxes/
    │   │   │   ├── base.mdx
    │   │   │   ├── box_repository.mdx
    │   │   │   ├── format.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── info.mdx
    │   │   │   └── versioning.mdx
    │   │   ├── cli/
    │   │   │   ├── aliases.mdx
    │   │   │   ├── box.mdx
    │   │   │   ├── cloud.mdx
    │   │   │   ├── connect.mdx
    │   │   │   ├── destroy.mdx
    │   │   │   ├── global-status.mdx
    │   │   │   ├── halt.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── init.mdx
    │   │   │   ├── login.mdx
    │   │   │   ├── machine-readable.mdx
    │   │   │   ├── non-primary.mdx
    │   │   │   ├── package.mdx
    │   │   │   ├── plugin.mdx
    │   │   │   ├── port.mdx
    │   │   │   ├── powershell.mdx
    │   │   │   ├── provision.mdx
    │   │   │   ├── rdp.mdx
    │   │   │   ├── reload.mdx
    │   │   │   ├── resume.mdx
    │   │   │   ├── rsync-auto.mdx
    │   │   │   ├── rsync.mdx
    │   │   │   ├── share.mdx
    │   │   │   ├── snapshot.mdx
    │   │   │   ├── ssh.mdx
    │   │   │   ├── ssh_config.mdx
    │   │   │   ├── status.mdx
    │   │   │   ├── suspend.mdx
    │   │   │   ├── up.mdx
    │   │   │   ├── upload.mdx
    │   │   │   ├── validate.mdx
    │   │   │   ├── version.mdx
    │   │   │   ├── winrm.mdx
    │   │   │   └── winrm_config.mdx
    │   │   ├── cloud-init/
    │   │   │   ├── configuration.mdx
    │   │   │   ├── index.mdx
    │   │   │   └── usage.mdx
    │   │   ├── disks/
    │   │   │   ├── configuration.mdx
    │   │   │   ├── hyperv/
    │   │   │   │   ├── common-issues.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   └── usage.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── usage.mdx
    │   │   │   ├── virtualbox/
    │   │   │   │   ├── common-issues.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   └── usage.mdx
    │   │   │   └── vmware/
    │   │   │       ├── common-issues.mdx
    │   │   │       ├── index.mdx
    │   │   │       └── usage.mdx
    │   │   ├── experimental/
    │   │   │   └── index.mdx
    │   │   ├── index.mdx
    │   │   ├── installation/
    │   │   │   ├── backwards-compatibility.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── source.mdx
    │   │   │   ├── uninstallation.mdx
    │   │   │   ├── upgrading-from-1-0.mdx
    │   │   │   └── upgrading.mdx
    │   │   ├── multi-machine.mdx
    │   │   ├── networking/
    │   │   │   ├── basic_usage.mdx
    │   │   │   ├── forwarded_ports.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── private_network.mdx
    │   │   │   └── public_network.mdx
    │   │   ├── other/
    │   │   │   ├── debugging.mdx
    │   │   │   ├── environmental-variables.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── macos-catalina.mdx
    │   │   │   └── wsl.mdx
    │   │   ├── plugins/
    │   │   │   ├── action-hooks.mdx
    │   │   │   ├── commands.mdx
    │   │   │   ├── configuration.mdx
    │   │   │   ├── development-basics.mdx
    │   │   │   ├── go-plugins/
    │   │   │   │   ├── guests.mdx
    │   │   │   │   └── index.mdx
    │   │   │   ├── guest-capabilities.mdx
    │   │   │   ├── guests.mdx
    │   │   │   ├── host-capabilities.mdx
    │   │   │   ├── hosts.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── packaging.mdx
    │   │   │   ├── providers.mdx
    │   │   │   ├── provisioners.mdx
    │   │   │   └── usage.mdx
    │   │   ├── providers/
    │   │   │   ├── basic_usage.mdx
    │   │   │   ├── configuration.mdx
    │   │   │   ├── custom.mdx
    │   │   │   ├── default.mdx
    │   │   │   ├── docker/
    │   │   │   │   ├── basics.mdx
    │   │   │   │   ├── boxes.mdx
    │   │   │   │   ├── commands.mdx
    │   │   │   │   ├── configuration.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   └── networking.mdx
    │   │   │   ├── hyperv/
    │   │   │   │   ├── boxes.mdx
    │   │   │   │   ├── configuration.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   ├── limitations.mdx
    │   │   │   │   └── usage.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── installation.mdx
    │   │   │   ├── virtualbox/
    │   │   │   │   ├── boxes.mdx
    │   │   │   │   ├── common-issues.mdx
    │   │   │   │   ├── configuration.mdx
    │   │   │   │   ├── index.mdx
    │   │   │   │   ├── networking.mdx
    │   │   │   │   └── usage.mdx
    │   │   │   └── vmware/
    │   │   │       ├── boxes.mdx
    │   │   │       ├── configuration.mdx
    │   │   │       ├── faq.mdx
    │   │   │       ├── index.mdx
    │   │   │       ├── installation.mdx
    │   │   │       ├── known-issues.mdx
    │   │   │       ├── usage.mdx
    │   │   │       └── vagrant-vmware-utility.mdx
    │   │   ├── provisioning/
    │   │   │   ├── ansible.mdx
    │   │   │   ├── ansible_common.mdx
    │   │   │   ├── ansible_intro.mdx
    │   │   │   ├── ansible_local.mdx
    │   │   │   ├── basic_usage.mdx
    │   │   │   ├── cfengine.mdx
    │   │   │   ├── chef_apply.mdx
    │   │   │   ├── chef_client.mdx
    │   │   │   ├── chef_common.mdx
    │   │   │   ├── chef_solo.mdx
    │   │   │   ├── chef_zero.mdx
    │   │   │   ├── docker.mdx
    │   │   │   ├── file.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── podman.mdx
    │   │   │   ├── puppet_agent.mdx
    │   │   │   ├── puppet_apply.mdx
    │   │   │   ├── salt.mdx
    │   │   │   └── shell.mdx
    │   │   ├── push/
    │   │   │   ├── ftp.mdx
    │   │   │   ├── heroku.mdx
    │   │   │   ├── index.mdx
    │   │   │   └── local-exec.mdx
    │   │   ├── share/
    │   │   │   ├── connect.mdx
    │   │   │   ├── http.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── provider.mdx
    │   │   │   ├── security.mdx
    │   │   │   └── ssh.mdx
    │   │   ├── synced-folders/
    │   │   │   ├── basic_usage.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── nfs.mdx
    │   │   │   ├── rsync.mdx
    │   │   │   ├── smb.mdx
    │   │   │   └── virtualbox.mdx
    │   │   ├── triggers/
    │   │   │   ├── configuration.mdx
    │   │   │   ├── index.mdx
    │   │   │   └── usage.mdx
    │   │   └── vagrantfile/
    │   │       ├── index.mdx
    │   │       ├── machine_settings.mdx
    │   │       ├── ssh_settings.mdx
    │   │       ├── tips.mdx
    │   │       ├── vagrant_settings.mdx
    │   │       ├── vagrant_version.mdx
    │   │       ├── version.mdx
    │   │       ├── winrm_settings.mdx
    │   │       └── winssh_settings.mdx
    │   ├── intro/
    │   │   ├── contributing-guide.mdx
    │   │   ├── index.mdx
    │   │   ├── support.mdx
    │   │   └── vs/
    │   │       ├── cli-tools.mdx
    │   │       ├── docker.mdx
    │   │       ├── index.mdx
    │   │       └── terraform.mdx
    │   ├── vagrant-cloud/
    │   │   ├── api/
    │   │   │   ├── v1.mdx
    │   │   │   └── v2.mdx
    │   │   ├── boxes/
    │   │   │   ├── architecture.mdx
    │   │   │   ├── catalog.mdx
    │   │   │   ├── create-version.mdx
    │   │   │   ├── create.mdx
    │   │   │   ├── distributing.mdx
    │   │   │   ├── index.mdx
    │   │   │   ├── lifecycle.mdx
    │   │   │   ├── private.mdx
    │   │   │   ├── release-workflow.mdx
    │   │   │   └── using.mdx
    │   │   ├── hcp-vagrant/
    │   │   │   ├── migration-guide.mdx
    │   │   │   ├── post-migration-guide.mdx
    │   │   │   └── troubleshooting.mdx
    │   │   ├── index.mdx
    │   │   ├── organizations/
    │   │   │   ├── authentication-policy.mdx
    │   │   │   ├── create.mdx
    │   │   │   ├── index.mdx
    │   │   │   └── migrate.mdx
    │   │   ├── request-limits.mdx
    │   │   ├── support.mdx
    │   │   └── users/
    │   │       ├── authentication.mdx
    │   │       ├── index.mdx
    │   │       └── recovery.mdx
    │   └── vmware/
    │       └── index.mdx
    ├── data/
    │   ├── alert-banner.js
    │   ├── docs-nav-data.json
    │   ├── intro-nav-data.json
    │   ├── metadata.js
    │   ├── subnav.js
    │   ├── vagrant-cloud-nav-data.json
    │   ├── version.json
    │   └── vmware-nav-data.json
    ├── jsconfig.json
    ├── package.json
    ├── prettier.config.js
    ├── public/
    │   └── ie-warning.js
    ├── redirects.js
    ├── scripts/
    │   ├── should-build.sh
    │   ├── website-build.sh
    │   └── website-start.sh
    └── vercel.json
Download .txt
Showing preview only (502K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (7228 symbols across 1007 files)

FILE: builtin/configvagrant/main.go
  type Vagrant (line 23) | type Vagrant struct
  type Plugin (line 30) | type Plugin struct
  type Config (line 38) | type Config struct
    method Register (line 40) | func (c *Config) Register() (*component.ConfigRegistration, error) {
    method InitFunc (line 46) | func (c *Config) InitFunc() any {
    method Init (line 50) | func (c *Config) Init(in *component.ConfigData) (*component.ConfigData...
    method StructFunc (line 54) | func (c *Config) StructFunc() interface{} {
    method Struct (line 58) | func (c *Config) Struct() *Vagrant {
    method MergeFunc (line 62) | func (c *Config) MergeFunc() interface{} {
    method Merge (line 66) | func (c *Config) Merge(
    method FinalizeFunc (line 92) | func (c *Config) FinalizeFunc() interface{} {
    method Finalize (line 96) | func (c *Config) Finalize(l hclog.Logger, conf *Vagrant) (*Vagrant, er...
  type Command (line 106) | type Command struct
    method ExecuteFunc (line 108) | func (c *Command) ExecuteFunc(_ []string) interface{} {
    method Execute (line 112) | func (c *Command) Execute(ui terminal.UI, p core.Project) int32 {
    method CommandInfoFunc (line 140) | func (c *Command) CommandInfoFunc() interface{} {
    method CommandInfo (line 144) | func (c *Command) CommandInfo() *component.CommandInfo {

FILE: builtin/httpdownloader/downloader/downloader.go
  type HTTPMethod (line 17) | type HTTPMethod
  constant GET (line 20) | GET HTTPMethod = iota
  constant DELETE (line 21) | DELETE
  constant HEAD (line 22) | HEAD
  constant POST (line 23) | POST
  constant PUT (line 24) | PUT
  type Downloader (line 27) | type Downloader struct
    method InitFunc (line 41) | func (d *Downloader) InitFunc() any {
    method Init (line 45) | func (d *Downloader) Init(in *component.ConfigData) (*component.Config...
    method StructFunc (line 49) | func (d *Downloader) StructFunc() any {
    method MergeFunc (line 53) | func (d *Downloader) MergeFunc() any {
    method FinalizeFunc (line 57) | func (d *Downloader) FinalizeFunc() any {
    method Struct (line 61) | func (d *Downloader) Struct() *DownloaderConfig {
    method Merge (line 65) | func (d *Downloader) Merge(val *component.ConfigMerge) *component.Conf...
    method Finalize (line 69) | func (d *Downloader) Finalize(val *component.ConfigData) *component.Co...
    method Register (line 73) | func (d *Downloader) Register() (*component.ConfigRegistration, error) {
    method DownloadFunc (line 79) | func (d *Downloader) DownloadFunc() interface{} {
    method Download (line 83) | func (d *Downloader) Download() (err error) {
  type DownloaderConfig (line 31) | type DownloaderConfig struct

FILE: builtin/httpdownloader/downloader/httpmethod_string.go
  function _ (line 7) | func _() {
  constant _HTTPMethod_name (line 18) | _HTTPMethod_name = "GETDELETEHEADPOSTPUT"
  method String (line 22) | func (i HTTPMethod) String() string {

FILE: builtin/myplugin/command/command.go
  type Subcommand (line 13) | type Subcommand interface
  type CommandConfig (line 17) | type CommandConfig struct
  type Command (line 21) | type Command struct
    method ConfigSet (line 25) | func (c *Command) ConfigSet(v interface{}) error {
    method CommandFunc (line 29) | func (c *Command) CommandFunc() interface{} {
    method Config (line 33) | func (c *Command) Config() (interface{}, error) {
    method Documentation (line 37) | func (c *Command) Documentation() (*docs.Documentation, error) {
    method ExecuteFunc (line 46) | func (c *Command) ExecuteFunc(cliArgs []string) interface{} {
    method ExecuteInfo (line 65) | func (c *Command) ExecuteInfo(trm terminal.UI, env plugincore.Project)...
    method ExecuteDoThing (line 69) | func (c *Command) ExecuteDoThing(trm terminal.UI, params *component.Co...
    method ExecuteInteractive (line 73) | func (c *Command) ExecuteInteractive(trm terminal.UI, params *componen...
    method ExecuteHost (line 77) | func (c *Command) ExecuteHost(trm terminal.UI, env plugincore.Project)...
    method CommandInfoFunc (line 82) | func (c *Command) CommandInfoFunc() interface{} {
    method CommandInfo (line 86) | func (c *Command) CommandInfo() *component.CommandInfo {
    method Synopsis (line 96) | func (c *Command) Synopsis() string {
    method Help (line 100) | func (c *Command) Help() string {
    method Flags (line 104) | func (c *Command) Flags() component.CommandFlags {
    method Execute (line 116) | func (c *Command) Execute(trm terminal.UI, params *component.CommandPa...
    method subcommandsInfo (line 127) | func (c *Command) subcommandsInfo() (r []*component.CommandInfo) {
    method subcommands (line 135) | func (c *Command) subcommands() map[string]Subcommand {

FILE: builtin/myplugin/command/dothing.go
  type DoThing (line 17) | type DoThing struct
    method ConfigSet (line 21) | func (c *DoThing) ConfigSet(v interface{}) error {
    method CommandFunc (line 25) | func (c *DoThing) CommandFunc() interface{} {
    method Config (line 29) | func (c *DoThing) Config() (interface{}, error) {
    method Documentation (line 33) | func (c *DoThing) Documentation() (*docs.Documentation, error) {
    method ExecuteFunc (line 42) | func (c *DoThing) ExecuteFunc([]string) interface{} {
    method CommandInfoFunc (line 47) | func (c *DoThing) CommandInfoFunc() interface{} {
    method CommandInfo (line 51) | func (c *DoThing) CommandInfo() (*component.CommandInfo, error) {
    method Synopsis (line 60) | func (c *DoThing) Synopsis() string {
    method Help (line 64) | func (c *DoThing) Help() string {
    method Flags (line 68) | func (c *DoThing) Flags() component.CommandFlags {
    method Execute (line 87) | func (c *DoThing) Execute(trm terminal.UI, params *component.CommandPa...

FILE: builtin/myplugin/command/host.go
  type Host (line 14) | type Host struct
    method ExecuteFunc (line 19) | func (c *Host) ExecuteFunc(cliArgs []string) interface{} {
    method CommandInfoFunc (line 24) | func (c *Host) CommandInfoFunc() interface{} {
    method CommandInfo (line 28) | func (c *Host) CommandInfo() (*component.CommandInfo, error) {
    method Synopsis (line 37) | func (c *Host) Synopsis() string {
    method Help (line 41) | func (c *Host) Help() string {
    method Flags (line 45) | func (c *Host) Flags() component.CommandFlags {
    method Execute (line 49) | func (c *Host) Execute(trm terminal.UI, project core.Project) int32 {

FILE: builtin/myplugin/command/info.go
  type Info (line 17) | type Info struct
    method ConfigSet (line 21) | func (c *Info) ConfigSet(v interface{}) error {
    method CommandFunc (line 25) | func (c *Info) CommandFunc() interface{} {
    method Config (line 29) | func (c *Info) Config() (interface{}, error) {
    method Documentation (line 33) | func (c *Info) Documentation() (*docs.Documentation, error) {
    method ExecuteFunc (line 42) | func (c *Info) ExecuteFunc(cliArgs []string) interface{} {
    method CommandInfoFunc (line 47) | func (c *Info) CommandInfoFunc() interface{} {
    method CommandInfo (line 51) | func (c *Info) CommandInfo() (*component.CommandInfo, error) {
    method Synopsis (line 60) | func (c *Info) Synopsis() string {
    method Help (line 64) | func (c *Info) Help() string {
    method Flags (line 68) | func (c *Info) Flags() component.CommandFlags {
    method Execute (line 72) | func (c *Info) Execute(trm terminal.UI, p plugincore.Project) int32 {

FILE: builtin/myplugin/command/interactive.go
  type Interactive (line 14) | type Interactive struct
    method ConfigSet (line 18) | func (c *Interactive) ConfigSet(v interface{}) error {
    method CommandFunc (line 22) | func (c *Interactive) CommandFunc() interface{} {
    method Config (line 26) | func (c *Interactive) Config() (interface{}, error) {
    method Documentation (line 30) | func (c *Interactive) Documentation() (*docs.Documentation, error) {
    method ExecuteFunc (line 39) | func (c *Interactive) ExecuteFunc(cliArgs []string) interface{} {
    method CommandInfoFunc (line 44) | func (c *Interactive) CommandInfoFunc() interface{} {
    method CommandInfo (line 48) | func (c *Interactive) CommandInfo() (*component.CommandInfo, error) {
    method Synopsis (line 57) | func (c *Interactive) Synopsis() string {
    method Help (line 61) | func (c *Interactive) Help() string {
    method Flags (line 65) | func (c *Interactive) Flags() component.CommandFlags {
    method Execute (line 69) | func (c *Interactive) Execute(trm terminal.UI) int32 {

FILE: builtin/myplugin/communicator/communicator.go
  type DummyConfig (line 14) | type DummyConfig struct
  type DummyCommunicator (line 18) | type DummyCommunicator struct
    method MatchFunc (line 22) | func (h *DummyCommunicator) MatchFunc() interface{} {
    method Match (line 26) | func (h *DummyCommunicator) Match(machine plugincore.Machine) (isMatch...
    method InitFunc (line 30) | func (h *DummyCommunicator) InitFunc() interface{} {
    method Init (line 34) | func (h *DummyCommunicator) Init(machine plugincore.Machine) error {
    method ReadyFunc (line 38) | func (h *DummyCommunicator) ReadyFunc() interface{} {
    method Ready (line 42) | func (h *DummyCommunicator) Ready(machine plugincore.Machine) (isReady...
    method WaitForReadyFunc (line 46) | func (h *DummyCommunicator) WaitForReadyFunc() interface{} {
    method WaitForReady (line 50) | func (h *DummyCommunicator) WaitForReady(machine plugincore.Machine, w...
    method DownloadFunc (line 54) | func (h *DummyCommunicator) DownloadFunc() interface{} {
    method Download (line 58) | func (h *DummyCommunicator) Download(input struct {
    method UploadFunc (line 71) | func (h *DummyCommunicator) UploadFunc() interface{} {
    method Upload (line 75) | func (h *DummyCommunicator) Upload(input struct {
    method ExecuteFunc (line 88) | func (h *DummyCommunicator) ExecuteFunc() interface{} {
    method Execute (line 92) | func (h *DummyCommunicator) Execute(
    method PrivilegedExecuteFunc (line 100) | func (h *DummyCommunicator) PrivilegedExecuteFunc() interface{} {
    method PrivilegedExecute (line 104) | func (h *DummyCommunicator) PrivilegedExecute(
    method TestFunc (line 112) | func (h *DummyCommunicator) TestFunc() interface{} {
    method Test (line 116) | func (h *DummyCommunicator) Test(
    method ResetFunc (line 124) | func (h *DummyCommunicator) ResetFunc() interface{} {
    method Reset (line 128) | func (h *DummyCommunicator) Reset(machine plugincore.Machine) (err err...

FILE: builtin/myplugin/host/alwaystrue.go
  type HostConfig (line 14) | type HostConfig struct
  type AlwaysTrueHost (line 18) | type AlwaysTrueHost struct
    method Seed (line 22) | func (c *AlwaysTrueHost) Seed(args ...interface{}) error {
    method Seeds (line 26) | func (c *AlwaysTrueHost) Seeds() ([]interface{}, error) {
    method HostDetectFunc (line 31) | func (h *AlwaysTrueHost) HostDetectFunc() interface{} {
    method Detect (line 35) | func (h *AlwaysTrueHost) Detect() bool {
    method ParentFunc (line 40) | func (h *AlwaysTrueHost) ParentFunc() interface{} {
    method Parent (line 44) | func (h *AlwaysTrueHost) Parent() string {
    method HasCapabilityFunc (line 49) | func (h *AlwaysTrueHost) HasCapabilityFunc() interface{} {
    method CheckCapability (line 53) | func (h *AlwaysTrueHost) CheckCapability(n *component.NamedCapability)...
    method CapabilityFunc (line 61) | func (h *AlwaysTrueHost) CapabilityFunc(name string) interface{} {
    method WriteHelloCap (line 70) | func (h *AlwaysTrueHost) WriteHelloCap(ui terminal.UI) error {
    method WriteHelloToTempFileCap (line 74) | func (h *AlwaysTrueHost) WriteHelloToTempFileCap() error {

FILE: builtin/myplugin/host/cap/write_hello.go
  function WriteHello (line 12) | func WriteHello(ui terminal.UI) error {
  function WriteHelloToTempfile (line 18) | func WriteHelloToTempfile() error {

FILE: builtin/myplugin/locales/locales.go
  function bindataRead (line 22) | func bindataRead(data []byte, name string) ([]byte, error) {
  type asset (line 42) | type asset struct
  type bindataFileInfo (line 47) | type bindataFileInfo struct
    method Name (line 55) | func (fi bindataFileInfo) Name() string {
    method Size (line 60) | func (fi bindataFileInfo) Size() int64 {
    method Mode (line 65) | func (fi bindataFileInfo) Mode() os.FileMode {
    method ModTime (line 70) | func (fi bindataFileInfo) ModTime() time.Time {
    method IsDir (line 75) | func (fi bindataFileInfo) IsDir() bool {
    method Sys (line 80) | func (fi bindataFileInfo) Sys() interface{} {
  function localesAssetsEnJsonBytes (line 86) | func localesAssetsEnJsonBytes() ([]byte, error) {
  function localesAssetsEnJson (line 93) | func localesAssetsEnJson() (*asset, error) {
  function localesAssetsEsJsonBytes (line 106) | func localesAssetsEsJsonBytes() ([]byte, error) {
  function localesAssetsEsJson (line 113) | func localesAssetsEsJson() (*asset, error) {
  function Asset (line 127) | func Asset(name string) ([]byte, error) {
  function MustAsset (line 141) | func MustAsset(name string) []byte {
  function AssetInfo (line 153) | func AssetInfo(name string) (os.FileInfo, error) {
  function AssetNames (line 166) | func AssetNames() []string {
  function AssetDir (line 193) | func AssetDir(name string) ([]string, error) {
  type bintree (line 215) | type bintree struct
  function RestoreAsset (line 230) | func RestoreAsset(dir, name string) error {
  function RestoreAssets (line 255) | func RestoreAssets(dir, name string) error {
  function _filePath (line 271) | func _filePath(dir, name string) string {

FILE: builtin/myplugin/mappers.go
  function StructToCommunincatorOptions (line 12) | func StructToCommunincatorOptions(in *structpb.Struct) (*pb.Communicator...

FILE: builtin/myplugin/proto/plugin.pb.go
  constant _ (line 18) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 20) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type UpResult (line 23) | type UpResult struct
    method Reset (line 29) | func (x *UpResult) Reset() {
    method String (line 38) | func (x *UpResult) String() string {
    method ProtoMessage (line 42) | func (*UpResult) ProtoMessage() {}
    method ProtoReflect (line 44) | func (x *UpResult) ProtoReflect() protoreflect.Message {
    method Descriptor (line 57) | func (*UpResult) Descriptor() ([]byte, []int) {
  type CommunicatorOptions (line 61) | type CommunicatorOptions struct
    method Reset (line 70) | func (x *CommunicatorOptions) Reset() {
    method String (line 79) | func (x *CommunicatorOptions) String() string {
    method ProtoMessage (line 83) | func (*CommunicatorOptions) ProtoMessage() {}
    method ProtoReflect (line 85) | func (x *CommunicatorOptions) ProtoReflect() protoreflect.Message {
    method Descriptor (line 98) | func (*CommunicatorOptions) Descriptor() ([]byte, []int) {
    method GetKeepAlive (line 102) | func (x *CommunicatorOptions) GetKeepAlive() string {
    method GetTimeout (line 109) | func (x *CommunicatorOptions) GetTimeout() int64 {
  function file_vagrant_ruby_builtin_myplugin_proto_plugin_proto_rawDescGZIP (line 139) | func file_vagrant_ruby_builtin_myplugin_proto_plugin_proto_rawDescGZIP()...
  function init (line 159) | func init() { file_vagrant_ruby_builtin_myplugin_proto_plugin_proto_init...
  function file_vagrant_ruby_builtin_myplugin_proto_plugin_proto_init (line 160) | func file_vagrant_ruby_builtin_myplugin_proto_plugin_proto_init() {

FILE: builtin/myplugin/provider/happy.go
  type Happy (line 14) | type Happy struct
    method Action (line 16) | func (p *Happy) Action(name string, args ...interface{}) error {
    method ActionFunc (line 21) | func (h *Happy) ActionFunc(actionName string) interface{} {
    method Capability (line 25) | func (h *Happy) Capability(name string, args ...interface{}) (interfac...
    method CapabilityFunc (line 30) | func (h *Happy) CapabilityFunc(name string) interface{} {
    method HasCapability (line 34) | func (h *Happy) HasCapability(n *component.NamedCapability) bool {
    method HasCapabilityFunc (line 39) | func (h *Happy) HasCapabilityFunc() interface{} {
    method MachineIdChanged (line 43) | func (h *Happy) MachineIdChanged() error {
    method MachineIdChangedFunc (line 48) | func (h *Happy) MachineIdChangedFunc() interface{} {
    method Installed (line 52) | func (h *Happy) Installed(context.Context) (bool, error) {
    method InstalledFunc (line 57) | func (h *Happy) InstalledFunc() interface{} {
    method Init (line 61) | func (h *Happy) Init() (bool, error) {
    method InitFunc (line 66) | func (h *Happy) InitFunc() interface{} {
    method SshInfo (line 70) | func (h *Happy) SshInfo() (*core.SshInfo, error) {
    method SshInfoFunc (line 75) | func (h *Happy) SshInfoFunc() interface{} {
    method State (line 79) | func (h *Happy) State() (*core.MachineState, error) {
    method StateFunc (line 84) | func (h *Happy) StateFunc() interface{} {
    method Usable (line 88) | func (h *Happy) Usable() (bool, error) {
    method UsableFunc (line 93) | func (h *Happy) UsableFunc() interface{} {

FILE: builtin/myplugin/push/encouragement.go
  type Encouragement (line 19) | type Encouragement struct
    method PushFunc (line 21) | func (e *Encouragement) PushFunc() interface{} {
    method Push (line 26) | func (e *Encouragement) Push(ui terminal.UI, proj core.Project) error {
  function findPushConfig (line 57) | func findPushConfig(proj core.Project, name string) (*vagrant_plugin_sdk...
  function unpackConfig (line 76) | func unpackConfig(pc *vagrant_plugin_sdk.Vagrantfile_PushConfig) (map[st...

FILE: builtin/otherplugin/command.go
  type Command (line 17) | type Command struct
    method ExecuteFunc (line 19) | func (c *Command) ExecuteFunc(cliArgs []string) interface{} {
    method CommandInfoFunc (line 41) | func (c *Command) CommandInfoFunc() interface{} {
    method CommandInfo (line 45) | func (c *Command) CommandInfo() *component.CommandInfo {
    method ExecuteMain (line 96) | func (c *Command) ExecuteMain(trm terminal.UI, flags map[string]interf...
    method ExecuteThing (line 103) | func (c *Command) ExecuteThing(trm terminal.UI, flags map[string]inter...
    method ExecuteInfo (line 109) | func (c *Command) ExecuteInfo(trm terminal.UI, p plugincore.Project) i...
    method ExecuteOfni (line 162) | func (c *Command) ExecuteOfni(trm terminal.UI) int32 {
    method ExecuteUseHostPlugin (line 167) | func (c *Command) ExecuteUseHostPlugin(trm terminal.UI, basis pluginco...

FILE: builtin/otherplugin/guest/alwaystrue.go
  type GuestConfig (line 14) | type GuestConfig struct
  type AlwaysTrueGuest (line 18) | type AlwaysTrueGuest struct
    method Seed (line 22) | func (c *AlwaysTrueGuest) Seed(args ...interface{}) error {
    method Seeds (line 26) | func (c *AlwaysTrueGuest) Seeds() ([]interface{}, error) {
    method GuestDetectFunc (line 31) | func (h *AlwaysTrueGuest) GuestDetectFunc() interface{} {
    method Detect (line 35) | func (h *AlwaysTrueGuest) Detect(t plugincore.Target) bool {
    method ParentFunc (line 47) | func (h *AlwaysTrueGuest) ParentFunc() interface{} {
    method Parent (line 51) | func (h *AlwaysTrueGuest) Parent() string {
    method HasCapabilityFunc (line 56) | func (h *AlwaysTrueGuest) HasCapabilityFunc() interface{} {
    method CheckCapability (line 60) | func (h *AlwaysTrueGuest) CheckCapability(n *component.NamedCapability...
    method CapabilityFunc (line 68) | func (h *AlwaysTrueGuest) CapabilityFunc(name string) interface{} {
    method WriteHelloCap (line 75) | func (h *AlwaysTrueGuest) WriteHelloCap(m plugincore.Machine) error {

FILE: builtin/otherplugin/guest/cap/write_hello.go
  function WriteHello (line 12) | func WriteHello(machine plugincore.Machine) (err error) {

FILE: contrib/zsh/generate_zsh_completion.rb
  function make_string_script_safe (line 38) | def make_string_script_safe(s)
  function remove_square_brakets (line 42) | def remove_square_brakets(s)
  function format_flags (line 46) | def format_flags(group_name, flags)
  function format_subcommand (line 55) | def format_subcommand(group_name, cmds)
  function format_case (line 63) | def format_case(group_name, cmds, cmd_list, feature_string)
  function extract_flags (line 93) | def extract_flags(top_level_commands)
  function extract_subcommand (line 97) | def extract_subcommand(top_level_commands)
  function get_top_level_commands (line 101) | def get_top_level_commands(root_command, cmd_list)
  function format_script (line 127) | def format_script(root_command, subcommands, function_name)
  function generate_script (line 144) | def generate_script

FILE: ext/vagrant/vagrant_ssl/vagrant_ssl.c
  function VALUE (line 10) | static VALUE vagrant_ssl_load(VALUE self) {
  function Init_vagrant_ssl (line 27) | void Init_vagrant_ssl(void) {
  function Init_vagrant_ssl (line 35) | void Init_vagrant_ssl(void) {}

FILE: lib/vagrant.rb
  class Log4r::BasicFormatter (line 22) | class Log4r::BasicFormatter
    method format_object (line 24) | def format_object(obj)
  type Vagrant (line 31) | module Vagrant
    class OptionParser (line 36) | class OptionParser < ::OptionParser
      method initialize (line 37) | def initialize(*_)
    function configure (line 222) | def self.configure(version, &block)
    function has_plugin? (line 229) | def self.has_plugin?(name, version=nil)
    function plugin (line 259) | def self.plugin(version, component=nil)
    function require_plugin (line 275) | def self.require_plugin(name)
    function version? (line 287) | def self.version?(*requirements)
    function require_version (line 304) | def self.require_version(*requirements)
    function original_env (line 323) | def self.original_env
  type VagrantPlugins (line 49) | module VagrantPlugins
  class VagrantLogger (line 66) | class VagrantLogger < Log4r::Logger
    method << (line 67) | def << msg
  type Vagrant (line 163) | module Vagrant
    class OptionParser (line 36) | class OptionParser < ::OptionParser
      method initialize (line 37) | def initialize(*_)
    function configure (line 222) | def self.configure(version, &block)
    function has_plugin? (line 229) | def self.has_plugin?(name, version=nil)
    function plugin (line 259) | def self.plugin(version, component=nil)
    function require_plugin (line 275) | def self.require_plugin(name)
    function version? (line 287) | def self.version?(*requirements)
    function require_version (line 304) | def self.require_version(*requirements)
    function original_env (line 323) | def self.original_env

FILE: lib/vagrant/action.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 16) | module Builtin
      type General (line 54) | module General
      function action_box_add (line 65) | def self.action_box_add
      function action_box_outdated (line 73) | def self.action_box_outdated
      function action_box_remove (line 82) | def self.action_box_remove

FILE: lib/vagrant/action/builder.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      class Builder (line 22) | class Builder
        method build (line 69) | def self.build(middleware, *args, **keywords, &block)
        method initialize (line 73) | def initialize
        method initialize_copy (line 80) | def initialize_copy(original)
        method flatten (line 89) | def flatten
        method use (line 100) | def use(middleware, *args, **keywords, &block)
        method insert (line 122) | def insert(idx_or_item, middleware, *args, **keywords, &block)
        method insert_after (line 152) | def insert_after(idx_or_item, middleware, *args, **keywords, &block)
        method replace (line 165) | def replace(index, middleware, *args, **keywords, &block)
        method delete (line 176) | def delete(index)
        method call (line 182) | def call(env)
        method index (line 190) | def index(object)
        method to_app (line 205) | def to_app(env)
        method apply_dynamic_updates (line 232) | def apply_dynamic_updates(env)
        method apply_action_name (line 292) | def apply_action_name(env)

FILE: lib/vagrant/action/builtin/box_add.rb
  type Vagrant (line 15) | module Vagrant
    type Action (line 16) | module Action
      type Builtin (line 17) | module Builtin
        class BoxAdd (line 20) | class BoxAdd
          method initialize (line 29) | def initialize(app, env)
          method call (line 35) | def call(env)
          method add_direct (line 171) | def add_direct(urls, env)
          method add_from_metadata (line 208) | def add_from_metadata(url, env, expanded)
          method box_add (line 411) | def box_add(urls, name, version, provider, md_url, env, **opts)
          method downloader (line 512) | def downloader(url, env, **opts)
          method download (line 559) | def download(url, env, **opts)
          method metadata_url? (line 614) | def metadata_url?(url, env)
          method validate_checksum (line 665) | def validate_checksum(checksum_type, _checksum, path)

FILE: lib/vagrant/action/builtin/box_check_outdated.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class BoxCheckOutdated (line 12) | class BoxCheckOutdated
          method initialize (line 13) | def initialize(app, env)
          method call (line 19) | def call(env)
          method check_outdated_local (line 101) | def check_outdated_local(env)

FILE: lib/vagrant/action/builtin/box_remove.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class BoxRemove (line 10) | class BoxRemove
          method initialize (line 11) | def initialize(app, env)
          method call (line 16) | def call(env)

FILE: lib/vagrant/action/builtin/box_update.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class BoxUpdate (line 10) | class BoxUpdate
          method initialize (line 11) | def initialize(app, env)
          method call (line 17) | def call(env)

FILE: lib/vagrant/action/builtin/call.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class Call (line 22) | class Call
          method initialize (line 29) | def initialize(app, env, callable, *callable_args, &block)
          method call (line 39) | def call(env)
          method recover (line 62) | def recover(env)

FILE: lib/vagrant/action/builtin/cleanup_disks.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class CleanupDisks (line 9) | class CleanupDisks
          method initialize (line 11) | def initialize(app, env)
          method call (line 16) | def call(env)
          method read_disk_metadata (line 36) | def read_disk_metadata(machine)
          method get_disks (line 48) | def get_disks(machine, env)

FILE: lib/vagrant/action/builtin/cloud_init_setup.rb
  type Vagrant (line 7) | module Vagrant
    type Action (line 8) | module Action
      type Builtin (line 9) | module Builtin
        class CloudInitSetup (line 10) | class CloudInitSetup
          method initialize (line 13) | def initialize(app, env)
          method call (line 18) | def call(env)
          method setup_user_data (line 61) | def setup_user_data(machine, env, user_data_cfgs)
          method read_text_cfg (line 76) | def read_text_cfg(machine, cfg)
          method generate_cfg_msg (line 94) | def generate_cfg_msg(machine, text_cfgs)
          method write_cfg_iso (line 112) | def write_cfg_iso(machine, env, user_data, meta_data)
          method attach_disk_config (line 158) | def attach_disk_config(machine, env, iso_path)

FILE: lib/vagrant/action/builtin/cloud_init_wait.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class CloudInitWait (line 9) | class CloudInitWait
          method initialize (line 11) | def initialize(app, env)
          method call (line 16) | def call(env)

FILE: lib/vagrant/action/builtin/config_validate.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class ConfigValidate (line 11) | class ConfigValidate
          method initialize (line 12) | def initialize(app, env)
          method call (line 16) | def call(env)

FILE: lib/vagrant/action/builtin/confirm.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class Confirm (line 11) | class Confirm
          method initialize (line 17) | def initialize(app, env, message, force_key=nil, **opts)
          method call (line 24) | def call(env)

FILE: lib/vagrant/action/builtin/delayed.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class Delayed (line 9) | class Delayed
          method initialize (line 11) | def initialize(app, env, callable)
          method call (line 20) | def call(env)

FILE: lib/vagrant/action/builtin/destroy_confirm.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class DestroyConfirm (line 13) | class DestroyConfirm < Confirm
          method initialize (line 14) | def initialize(app, env)

FILE: lib/vagrant/action/builtin/disk.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class Disk (line 9) | class Disk
          method initialize (line 10) | def initialize(app, env)
          method call (line 15) | def call(env)
          method write_disk_metadata (line 39) | def write_disk_metadata(machine, current_disks)
          method get_disks (line 47) | def get_disks(machine, env)

FILE: lib/vagrant/action/builtin/env_set.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class EnvSet (line 11) | class EnvSet
          method initialize (line 12) | def initialize(app, env, new_env=nil)
          method call (line 17) | def call(env)

FILE: lib/vagrant/action/builtin/graceful_halt.rb
  type Vagrant (line 7) | module Vagrant
    type Action (line 8) | module Action
      type Builtin (line 9) | module Builtin
        class GracefulHalt (line 14) | class GracefulHalt
          method initialize (line 21) | def initialize(app, env, target_state, source_state=nil)
          method call (line 28) | def call(env)

FILE: lib/vagrant/action/builtin/handle_box.rb
  type Vagrant (line 7) | module Vagrant
    type Action (line 8) | module Action
      type Builtin (line 9) | module Builtin
        class HandleBox (line 13) | class HandleBox
          method initialize (line 17) | def initialize(app, env)
          method call (line 22) | def call(env)
          method handle_box (line 61) | def handle_box(env)

FILE: lib/vagrant/action/builtin/handle_box_url.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class HandleBoxUrl (line 7) | class HandleBoxUrl < HandleBox
          method call (line 8) | def call(env)

FILE: lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb
  type Vagrant (line 11) | module Vagrant
    type Action (line 12) | module Action
      type Builtin (line 13) | module Builtin
        class HandleForwardedPortCollisions (line 30) | class HandleForwardedPortCollisions
          method initialize (line 34) | def initialize(app, env)
          method call (line 39) | def call(env)
          method recover (line 60) | def recover(env)
          method handle (line 66) | def handle(env)
          method lease_check (line 179) | def lease_check(host_ip=nil, host_port)
          method lease_release (line 221) | def lease_release
          method is_forwarded_already (line 233) | def is_forwarded_already(extra_in_use, hostport, hostip)
          method port_check (line 251) | def port_check(host_ip, host_port)
          method port_check (line 255) | def self.port_check(machine, host_ip, host_port)
          method with_forwarded_ports (line 282) | def with_forwarded_ports(env)
          method call_port_checker (line 291) | def call_port_checker(port_checker, host_ip, host_port)

FILE: lib/vagrant/action/builtin/has_provisioner.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class HasProvisioner (line 9) | class HasProvisioner
          method initialize (line 10) | def initialize(app, env)
          method call (line 15) | def call(env)

FILE: lib/vagrant/action/builtin/is_env_set.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class IsEnvSet (line 9) | class IsEnvSet
          method initialize (line 10) | def initialize(app, env, key, **opts)
          method call (line 16) | def call(env)

FILE: lib/vagrant/action/builtin/is_state.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class IsState (line 9) | class IsState
          method initialize (line 16) | def initialize(app, env, check, **opts)
          method call (line 23) | def call(env)

FILE: lib/vagrant/action/builtin/lock.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class Lock (line 11) | class Lock
          method initialize (line 12) | def initialize(app, env, options=nil)
          method call (line 20) | def call(env)

FILE: lib/vagrant/action/builtin/message.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class Message (line 8) | class Message
          method initialize (line 9) | def initialize(app, env, message, **opts)
          method call (line 15) | def call(env)

FILE: lib/vagrant/action/builtin/mixin_provisioners.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        type MixinProvisioners (line 7) | module MixinProvisioners
          function provisioner_instances (line 12) | def provisioner_instances(env)
          function sort_provisioner_instances (line 71) | def sort_provisioner_instances(pvs)
          function provisioner_type_map (line 142) | def provisioner_type_map(env)
          function reset! (line 153) | def self.reset!

FILE: lib/vagrant/action/builtin/mixin_synced_folders.rb
  type Vagrant (line 8) | module Vagrant
    type Action (line 9) | module Action
      type Builtin (line 10) | module Builtin
        type MixinSyncedFolders (line 11) | module MixinSyncedFolders
          function default_synced_folder_type (line 16) | def default_synced_folder_type(machine, plugins)
          function impl_opts (line 49) | def impl_opts(name, env)
          function plugins (line 67) | def plugins
          function save_synced_folders (line 77) | def save_synced_folders(machine, folders, opts={})
          function synced_folders (line 115) | def synced_folders(machine, **opts)
          function synced_folders_diff (line 207) | def synced_folders_diff(one, two)
          function cached_synced_folders (line 242) | def cached_synced_folders(machine)

FILE: lib/vagrant/action/builtin/prepare_clone.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class PrepareClone (line 9) | class PrepareClone
          method initialize (line 10) | def initialize(app, env)
          method call (line 15) | def call(env)

FILE: lib/vagrant/action/builtin/provision.rb
  type Vagrant (line 8) | module Vagrant
    type Action (line 9) | module Action
      type Builtin (line 10) | module Builtin
        class Provision (line 17) | class Provision
          method initialize (line 20) | def initialize(app, env)
          method call (line 25) | def call(env)
          method run_provisioner (line 140) | def run_provisioner(env)

FILE: lib/vagrant/action/builtin/provisioner_cleanup.rb
  type Vagrant (line 8) | module Vagrant
    type Action (line 9) | module Action
      type Builtin (line 10) | module Builtin
        class ProvisionerCleanup (line 13) | class ProvisionerCleanup
          method initialize (line 16) | def initialize(app, env, place=nil)
          method call (line 24) | def call(env)
          method do_cleanup (line 33) | def do_cleanup(env)

FILE: lib/vagrant/action/builtin/set_hostname.rb
  type Vagrant (line 6) | module Vagrant
    type Action (line 7) | module Action
      type Builtin (line 8) | module Builtin
        class SetHostname (line 13) | class SetHostname
          method initialize (line 14) | def initialize(app, env)
          method call (line 19) | def call(env)

FILE: lib/vagrant/action/builtin/ssh_exec.rb
  type Vagrant (line 8) | module Vagrant
    type Action (line 9) | module Action
      type Builtin (line 10) | module Builtin
        class SSHExec (line 18) | class SSHExec
          method initialize (line 22) | def initialize(app, env)
          method call (line 26) | def call(env)

FILE: lib/vagrant/action/builtin/ssh_run.rb
  type Vagrant (line 10) | module Vagrant
    type Action (line 11) | module Action
      type Builtin (line 12) | module Builtin
        class SSHRun (line 16) | class SSHRun
          method initialize (line 20) | def initialize(app, env)
          method call (line 25) | def call(env)
          method _raw_ssh_exec (line 82) | def _raw_ssh_exec(env, info, opts)

FILE: lib/vagrant/action/builtin/synced_folder_cleanup.rb
  type Vagrant (line 8) | module Vagrant
    type Action (line 9) | module Action
      type Builtin (line 10) | module Builtin
        class SyncedFolderCleanup (line 13) | class SyncedFolderCleanup
          method initialize (line 16) | def initialize(app, env)
          method call (line 21) | def call(env)

FILE: lib/vagrant/action/builtin/synced_folders.rb
  type Vagrant (line 10) | module Vagrant
    type Action (line 11) | module Action
      type Builtin (line 12) | module Builtin
        class SyncedFolders (line 15) | class SyncedFolders
          method initialize (line 18) | def initialize(app, env)
          method call (line 23) | def call(env)

FILE: lib/vagrant/action/builtin/trigger.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class Trigger (line 9) | class Trigger
          method initialize (line 14) | def initialize(app, env, name, triggers, timing, type=:action, a...
          method call (line 29) | def call(env)

FILE: lib/vagrant/action/builtin/wait_for_communicator.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type Builtin (line 6) | module Builtin
        class WaitForCommunicator (line 9) | class WaitForCommunicator
          method initialize (line 10) | def initialize(app, env, states=nil)
          method call (line 15) | def call(env)

FILE: lib/vagrant/action/general/package.rb
  type Vagrant (line 10) | module Vagrant
    type Action (line 11) | module Action
      type General (line 12) | module General
        class Package (line 24) | class Package
          method validate! (line 36) | def self.validate!(output, directory)
          method fullpath (line 57) | def self.fullpath(output)
          method initialize (line 65) | def initialize(app, env)
          method call (line 75) | def call(env)
          method package_with_folder_path (line 97) | def package_with_folder_path
          method create_box_folder (line 102) | def create_box_folder(folder_path)
          method recover (line 107) | def recover(env)
          method copy_include_files (line 123) | def copy_include_files
          method copy_info (line 149) | def copy_info
          method compress (line 158) | def compress
          method write_metadata_json (line 175) | def write_metadata_json
          method setup_private_key (line 193) | def setup_private_key
          method invalid_info? (line 238) | def invalid_info?

FILE: lib/vagrant/action/general/package_setup_files.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      type General (line 6) | module General
        class PackageSetupFiles (line 7) | class PackageSetupFiles
          method initialize (line 8) | def initialize(app, env)
          method call (line 15) | def call(env)

FILE: lib/vagrant/action/general/package_setup_folders.rb
  type Vagrant (line 7) | module Vagrant
    type Action (line 8) | module Action
      type General (line 9) | module General
        class PackageSetupFolders (line 10) | class PackageSetupFolders
          method initialize (line 13) | def initialize(app, env)
          method call (line 17) | def call(env)
          method recover (line 31) | def recover(env)

FILE: lib/vagrant/action/hook.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      class Hook (line 9) | class Hook
        method initialize (line 32) | def initialize
        method before (line 43) | def before(existing, new, *args, **keywords, &block)
        method after (line 59) | def after(existing, new, *args, **keywords, &block)
        method append (line 76) | def append(new, *args, **keywords, &block)
        method prepend (line 91) | def prepend(new, *args, **keywords, &block)
        method empty? (line 104) | def empty?
        method apply (line 115) | def apply(builder, options={})

FILE: lib/vagrant/action/primary_runner.rb
  type Vagrant (line 4) | module Vagrant
    type Action (line 5) | module Action
      class PrimaryRunner (line 12) | class PrimaryRunner < Runner
        method primary? (line 13) | def primary?

FILE: lib/vagrant/action/runner.rb
  type Vagrant (line 10) | module Vagrant
    type Action (line 11) | module Action
      class Runner (line 12) | class Runner
        method initialize (line 17) | def initialize(globals=nil, &block)
        method primary? (line 25) | def primary?
        method run (line 29) | def run(callable_id, options=nil)

FILE: lib/vagrant/action/warden.rb
  type Vagrant (line 7) | module Vagrant
    type Action (line 8) | module Action
      class Warden (line 19) | class Warden
        method initialize (line 22) | def initialize(actions, env)
        method call (line 29) | def call(env)
        method recover (line 65) | def recover(env)
        method finalize_action (line 84) | def finalize_action(action, env)

FILE: lib/vagrant/alias.rb
  type Vagrant (line 6) | module Vagrant
    class Alias (line 8) | class Alias
      method initialize (line 9) | def initialize(env)
      method commands (line 26) | def commands
      method interpret (line 31) | def interpret(line)
      method register (line 46) | def register(keyword, command)

FILE: lib/vagrant/batch_action.rb
  type Vagrant (line 7) | module Vagrant
    class BatchAction (line 10) | class BatchAction
      method initialize (line 11) | def initialize(allow_parallel=true)
      method action (line 25) | def action(machine, action, options=nil)
      method custom (line 32) | def custom(machine, &block)
      method run (line 41) | def run

FILE: lib/vagrant/box.rb
  type Vagrant (line 16) | module Vagrant
    class Box (line 19) | class Box
      method initialize (line 74) | def initialize(name, provider, version, directory, architecture: nil...
      method validate_metadata_json (line 96) | def validate_metadata_json(metadata)
      method destroy! (line 109) | def destroy!
      method in_use? (line 129) | def in_use?(index)
      method load_metadata (line 153) | def load_metadata(download_options={})
      method has_update? (line 189) | def has_update?(version=nil, download_options: {})
      method automatic_update_check_allowed? (line 216) | def automatic_update_check_allowed?
      method repackage (line 234) | def repackage(path)
      method <=> (line 252) | def <=>(other)

FILE: lib/vagrant/box_collection.rb
  type Vagrant (line 12) | module Vagrant
    class BoxCollection (line 16) | class BoxCollection
      method initialize (line 50) | def initialize(directory, options=nil)
      method add (line 80) | def add(path, name, version, **opts)
      method all (line 226) | def all
      method find (line 315) | def find(name, providers, version, box_architecture=:auto)
      method upgrade_v1_1_v1_5 (line 423) | def upgrade_v1_1_v1_5
      method clean (line 457) | def clean(name)
      method dir_name (line 469) | def dir_name(name)
      method undir_name (line 477) | def undir_name(name)
      method v1_box? (line 489) | def v1_box?(dir)
      method v1_upgrade (line 505) | def v1_upgrade(dir)
      method with_collection_lock (line 538) | def with_collection_lock
      method with_temp_dir (line 549) | def with_temp_dir(dir=nil)
      method exists? (line 559) | def exists?(box_name)

FILE: lib/vagrant/box_metadata.rb
  type Vagrant (line 6) | module Vagrant
    class BoxMetadata (line 10) | class BoxMetadata
      method initialize (line 25) | def initialize(io, **_)
      method version (line 57) | def version(version, **opts)
      method versions (line 100) | def versions(**opts)
      method compatible_version_update? (line 122) | def compatible_version_update?(current_version, new_version, **opts)
      class Version (line 146) | class Version
        method initialize (line 152) | def initialize(raw=nil, **_)
        method provider (line 165) | def provider(name, architecture=nil)
        method providers (line 225) | def providers(architecture=nil)
      class Provider (line 236) | class Provider
        method initialize (line 267) | def initialize(raw, **_)
        method architecture_support? (line 276) | def architecture_support?

FILE: lib/vagrant/bundler.rb
  type Vagrant (line 19) | module Vagrant
    class Bundler (line 23) | class Bundler
      class SolutionFile (line 24) | class SolutionFile
        method initialize (line 34) | def initialize(plugin_file:, solution_file: nil)
        method dependency_list= (line 53) | def dependency_list=(dependency_list)
        method valid? (line 65) | def valid?
        method invalidate! (line 70) | def invalidate!
        method delete! (line 79) | def delete!
        method store! (line 90) | def store!
        method to_s (line 110) | def to_s # :nodoc:
        method load (line 120) | def load
        method valid_solution? (line 144) | def valid_solution?(checksum:, version:)
        method plugin_file_checksum (line 153) | def plugin_file_checksum
        method read_solution (line 162) | def read_solution
      method instance (line 183) | def self.instance
      method initialize (line 198) | def initialize
      method environment_path= (line 208) | def environment_path=(env_data_path)
      method load_solution_file (line 227) | def load_solution_file(opts={})
      method init! (line 241) | def init!(plugins, repair=false, **opts)
      method deinit (line 348) | def deinit
      method install (line 357) | def install(plugins, env_local=false)
      method install_local (line 365) | def install_local(path, opts={})
      method update (line 384) | def update(plugins, specific, **opts)
      method clean (line 391) | def clean(plugins, **opts)
      method verbose (line 476) | def verbose
      method internal_install (line 489) | def internal_install(plugins, update, **extra)
      method generate_vagrant_set (line 652) | def generate_vagrant_set
      method vagrant_internal_specs (line 661) | def vagrant_internal_specs
      method validate_configured_sources! (line 707) | def validate_configured_sources!
      method generate_builtin_set (line 727) | def generate_builtin_set(system_plugins=[])
      method generate_plugin_set (line 744) | def generate_plugin_set(*args)
      method activate_solution (line 764) | def activate_solution(solution)
      class VagrantSet (line 811) | class VagrantSet < Gem::Resolver::InstallerSet
        method initialize (line 815) | def initialize(domain, defined_sources={})
        method find_all (line 823) | def find_all(req)
      class BuiltinSet (line 850) | class BuiltinSet < Gem::Resolver::Set
        method initialize (line 851) | def initialize
        method add_builtin_spec (line 857) | def add_builtin_spec(spec)
        method find_all (line 861) | def find_all(req)
      class PluginSet (line 884) | class PluginSet < Gem::Resolver::VendorSet
        method add_vendor_gem (line 888) | def add_vendor_gem(name, directory)
        method find_all (line 909) | def find_all(req)
        method load_spec (line 921) | def load_spec(name, version, platform, source)
  class Gem::Specification (line 932) | class Gem::Specification
    method remove_spec (line 933) | def self.remove_spec(spec)

FILE: lib/vagrant/capability_host.rb
  type Vagrant (line 4) | module Vagrant
    type CapabilityHost (line 17) | module CapabilityHost
      function initialize_capabilities! (line 30) | def initialize_capabilities!(host, hosts, capabilities, *args)
      function capability_host_chain (line 77) | def capability_host_chain
      function capability? (line 85) | def capability?(cap_name)
      function capability (line 94) | def capability(cap_name, *args)
      function autodetect_capability_host (line 119) | def autodetect_capability_host(hosts, *args)
      function capability_module (line 165) | def capability_module(cap_name)

FILE: lib/vagrant/cli.rb
  type Vagrant (line 9) | module Vagrant
    class CLI (line 11) | class CLI < Vagrant.plugin("2", :command)
      method initialize (line 13) | def initialize(argv, env)
      method execute (line 26) | def execute
      method help (line 79) | def help

FILE: lib/vagrant/config.rb
  type Vagrant (line 6) | module Vagrant
    type Config (line 7) | module Config
      function run (line 38) | def self.run(version="1", &block)
      function capture_configures (line 50) | def self.capture_configures

FILE: lib/vagrant/config/loader.rb
  type Vagrant (line 8) | module Vagrant
    type Config (line 9) | module Config
      class Loader (line 17) | class Loader
        method initialize (line 26) | def initialize(versions, version_order)
        method set (line 46) | def set(name, sources)
        method load (line 87) | def load(order)
        method partial_load (line 215) | def partial_load(key)
        method procs_for_source (line 257) | def procs_for_source(source, reliably_inspected_sources)
        method procs_for_path (line 282) | def procs_for_path(path)

FILE: lib/vagrant/config/v1.rb
  type Vagrant (line 4) | module Vagrant
    type Config (line 5) | module Config
      type V1 (line 6) | module V1

FILE: lib/vagrant/config/v1/dummy_config.rb
  type Vagrant (line 4) | module Vagrant
    type Config (line 5) | module Config
      type V1 (line 6) | module V1
        class DummyConfig (line 9) | class DummyConfig
          method method_missing (line 10) | def method_missing(name, *args, &block)

FILE: lib/vagrant/config/v1/loader.rb
  type Vagrant (line 6) | module Vagrant
    type Config (line 7) | module Config
      type V1 (line 8) | module V1
        class Loader (line 11) | class Loader < VersionBase
          method init (line 15) | def self.init
          method finalize (line 21) | def self.finalize(config)
          method load (line 35) | def self.load(config_proc)
          method merge (line 52) | def self.merge(old, new)
          method new_root_object (line 89) | def self.new_root_object

FILE: lib/vagrant/config/v1/root.rb
  type Vagrant (line 6) | module Vagrant
    type Config (line 7) | module Config
      type V1 (line 8) | module V1
        class Root (line 11) | class Root
          method initialize (line 16) | def initialize(config_map, keys=nil)
          method method_missing (line 25) | def method_missing(name, *args)
          method finalize! (line 43) | def finalize!
          method __internal_state (line 53) | def __internal_state

FILE: lib/vagrant/config/v2.rb
  type Vagrant (line 4) | module Vagrant
    type Config (line 5) | module Config
      type V2 (line 6) | module V2

FILE: lib/vagrant/config/v2/dummy_config.rb
  type Vagrant (line 4) | module Vagrant
    type Config (line 5) | module Config
      type V2 (line 6) | module V2
        class DummyConfig (line 9) | class DummyConfig < Vagrant::Plugin::V2::Config
          method method_missing (line 12) | def method_missing(name, *args, &block)
          method merge (line 38) | def merge(c)
          method set_options (line 42) | def set_options(options)
          method instance_variables_hash (line 51) | def instance_variables_hash

FILE: lib/vagrant/config/v2/loader.rb
  type Vagrant (line 6) | module Vagrant
    type Config (line 7) | module Config
      type V2 (line 8) | module V2
        class Loader (line 11) | class Loader < VersionBase
          method init (line 15) | def self.init
          method finalize (line 21) | def self.finalize(config)
          method load (line 35) | def self.load(config_proc)
          method merge (line 52) | def self.merge(old, new)
          method upgrade (line 114) | def self.upgrade(old)
          method new_root_object (line 144) | def self.new_root_object

FILE: lib/vagrant/config/v2/root.rb
  type Vagrant (line 8) | module Vagrant
    type Config (line 9) | module Config
      type V2 (line 10) | module V2
        class Root (line 13) | class Root
          method initialize (line 18) | def initialize(config_map, keys=nil)
          method method_missing (line 28) | def method_missing(name, *args)
          method finalize! (line 48) | def finalize!
          method validate (line 67) | def validate(machine, ignore_provider=nil)
          method __internal_state (line 104) | def __internal_state
          method __set_internal_state (line 114) | def __set_internal_state(state)

FILE: lib/vagrant/config/v2/util.rb
  type Vagrant (line 4) | module Vagrant
    type Config (line 5) | module Config
      type V2 (line 6) | module V2
        class Util (line 7) | class Util
          method merge_errors (line 13) | def self.merge_errors(first, second)

FILE: lib/vagrant/config/version_base.rb
  type Vagrant (line 4) | module Vagrant
    type Config (line 5) | module Config
      class VersionBase (line 12) | class VersionBase
        method init (line 18) | def self.init
        method finalize (line 35) | def self.finalize(obj)
        method load (line 46) | def self.load(proc)
        method merge (line 60) | def self.merge(old, new)
        method upgrade (line 78) | def self.upgrade(old)

FILE: lib/vagrant/environment.rb
  type Vagrant (line 19) | module Vagrant
    class Environment (line 24) | class Environment
      method initialize (line 83) | def initialize(opts=nil)
      method default_private_key_path (line 210) | def default_private_key_path
      method inspect (line 219) | def inspect
      method action_runner (line 226) | def action_runner
      method active_machines (line 258) | def active_machines
      method batch (line 297) | def batch(parallel=true)
      method cli (line 316) | def cli(*args)
      method default_provider (line 330) | def default_provider(**opts)
      method can_install_provider? (line 477) | def can_install_provider?(name)
      method install_provider (line 489) | def install_provider(name)
      method boxes (line 496) | def boxes
      method config_loader (line 507) | def config_loader
      method environment (line 530) | def environment(vagrantfile, **opts)
      method hook (line 551) | def hook(name, opts=nil)
      method host (line 565) | def host
      method lock (line 609) | def lock(name="global", **opts)
      method push (line 690) | def push(name, manager: Vagrant.plugin("2").manager)
      method pushes (line 717) | def pushes
      method machine (line 731) | def machine(name, provider, refresh=false)
      method machine_index (line 763) | def machine_index
      method machine_names (line 772) | def machine_names
      method primary_machine_name (line 782) | def primary_machine_name
      method root_path (line 791) | def root_path
      method unload (line 814) | def unload
      method vagrantfile (line 832) | def vagrantfile
      method setup_home_path (line 843) | def setup_home_path
      method setup_local_data_path (line 928) | def setup_local_data_path(force=false)
      method guess_provider (line 971) | def guess_provider
      method find_configured_plugins (line 994) | def find_configured_plugins
      method process_configured_plugins (line 1012) | def process_configured_plugins
      method copy_insecure_private_keys (line 1083) | def copy_insecure_private_keys
      method find_vagrantfile (line 1137) | def find_vagrantfile(search_path, filenames=nil)
      method provider_install_key (line 1149) | def provider_install_key(name)
      method upgrade_home_path_v1_1 (line 1155) | def upgrade_home_path_v1_1
      method upgrade_v1_dotfile (line 1172) | def upgrade_v1_dotfile(path)

FILE: lib/vagrant/errors.rb
  type Vagrant (line 7) | module Vagrant
    type Errors (line 42) | module Errors
      class VagrantError (line 48) | class VagrantError < StandardError
        method error_key (line 52) | def self.error_key(key=nil, namespace=nil)
        method error_message (line 57) | def self.error_message(message)
        method error_namespace (line 61) | def self.error_namespace(namespace)
        method initialize (line 65) | def initialize(*args)
        method error_message (line 85) | def error_message; "No error message"; end
        method error_namespace (line 90) | def error_namespace; "vagrant.errors"; end
        method error_key (line 94) | def error_key; nil; end
        method status_code (line 100) | def status_code; 1; end
        method translate_error (line 104) | def translate_error(opts)
      class ActiveMachineWithDifferentProvider (line 110) | class ActiveMachineWithDifferentProvider < VagrantError
      class AliasInvalidError (line 114) | class AliasInvalidError < VagrantError
      class BatchMultiError (line 118) | class BatchMultiError < VagrantError
      class BoxAddDirectVersion (line 122) | class BoxAddDirectVersion < VagrantError
      class BoxAddMetadataMultiURL (line 126) | class BoxAddMetadataMultiURL < VagrantError
      class BoxAddNameMismatch (line 130) | class BoxAddNameMismatch < VagrantError
      class BoxAddNameRequired (line 134) | class BoxAddNameRequired < VagrantError
      class BoxAddNoMatchingProvider (line 138) | class BoxAddNoMatchingProvider < VagrantError
      class BoxAddNoArchitectureSupport (line 142) | class BoxAddNoArchitectureSupport < VagrantError
      class BoxAddNoMatchingArchitecture (line 146) | class BoxAddNoMatchingArchitecture < VagrantError
      class BoxAddNoMatchingProviderVersion (line 150) | class BoxAddNoMatchingProviderVersion < VagrantError
      class BoxAddNoMatchingVersion (line 154) | class BoxAddNoMatchingVersion < VagrantError
      class BoxAddShortNotFound (line 158) | class BoxAddShortNotFound < VagrantError
      class BoxAlreadyExists (line 162) | class BoxAlreadyExists < VagrantError
      class BoxChecksumInvalidType (line 166) | class BoxChecksumInvalidType < VagrantError
      class BoxChecksumMismatch (line 170) | class BoxChecksumMismatch < VagrantError
      class BoxConfigChangingBox (line 174) | class BoxConfigChangingBox < VagrantError
      class BoxFileNotExist (line 178) | class BoxFileNotExist < VagrantError
      class BoxMetadataCorrupted (line 182) | class BoxMetadataCorrupted < VagrantError
      class BoxMetadataMissingRequiredFields (line 186) | class BoxMetadataMissingRequiredFields < VagrantError
      class BoxMetadataDownloadError (line 190) | class BoxMetadataDownloadError < VagrantError
      class BoxMetadataFileNotFound (line 194) | class BoxMetadataFileNotFound < VagrantError
      class BoxMetadataMalformed (line 198) | class BoxMetadataMalformed < VagrantError
      class BoxMetadataMalformedVersion (line 202) | class BoxMetadataMalformedVersion < VagrantError
      class BoxNotFound (line 206) | class BoxNotFound < VagrantError
      class BoxNotFoundWithProvider (line 210) | class BoxNotFoundWithProvider < VagrantError
      class BoxNotFoundWithProviderArchitecture (line 214) | class BoxNotFoundWithProviderArchitecture < VagrantError
      class BoxNotFoundWithProviderAndVersion (line 218) | class BoxNotFoundWithProviderAndVersion < VagrantError
      class BoxProviderDoesntMatch (line 222) | class BoxProviderDoesntMatch < VagrantError
      class BoxRemoveNotFound (line 226) | class BoxRemoveNotFound < VagrantError
      class BoxRemoveArchitectureNotFound (line 230) | class BoxRemoveArchitectureNotFound < VagrantError
      class BoxRemoveProviderNotFound (line 234) | class BoxRemoveProviderNotFound < VagrantError
      class BoxRemoveVersionNotFound (line 238) | class BoxRemoveVersionNotFound < VagrantError
      class BoxRemoveMultiArchitecture (line 242) | class BoxRemoveMultiArchitecture < VagrantError
      class BoxRemoveMultiProvider (line 246) | class BoxRemoveMultiProvider < VagrantError
      class BoxRemoveMultiVersion (line 250) | class BoxRemoveMultiVersion < VagrantError
      class BoxServerNotSet (line 254) | class BoxServerNotSet < VagrantError
      class BoxUnpackageFailure (line 258) | class BoxUnpackageFailure < VagrantError
      class BoxUpdateMultiProvider (line 262) | class BoxUpdateMultiProvider < VagrantError
      class BoxUpdateMultiArchitecture (line 266) | class BoxUpdateMultiArchitecture < VagrantError
      class BoxUpdateNoMetadata (line 270) | class BoxUpdateNoMetadata < VagrantError
      class BoxVerificationFailed (line 274) | class BoxVerificationFailed < VagrantError
      class BoxVersionInvalid (line 278) | class BoxVersionInvalid < VagrantError
      class BundlerDisabled (line 282) | class BundlerDisabled < VagrantError
      class BundlerError (line 286) | class BundlerError < VagrantError
      class SourceSpecNotFound (line 290) | class SourceSpecNotFound < BundlerError
      class CantReadMACAddresses (line 294) | class CantReadMACAddresses < VagrantError
      class CapabilityHostExplicitNotDetected (line 298) | class CapabilityHostExplicitNotDetected < VagrantError
      class CapabilityHostNotDetected (line 302) | class CapabilityHostNotDetected < VagrantError
      class CapabilityInvalid (line 306) | class CapabilityInvalid < VagrantError
      class CapabilityNotFound (line 310) | class CapabilityNotFound < VagrantError
      class CFEngineBootstrapFailed (line 314) | class CFEngineBootstrapFailed < VagrantError
      class CFEngineCantAutodetectIP (line 318) | class CFEngineCantAutodetectIP < VagrantError
      class CFEngineInstallFailed (line 322) | class CFEngineInstallFailed < VagrantError
      class CFEngineNotInstalled (line 326) | class CFEngineNotInstalled < VagrantError
      class CLIInvalidUsage (line 330) | class CLIInvalidUsage < VagrantError
      class CLIInvalidOptions (line 334) | class CLIInvalidOptions < VagrantError
      class CloneNotFound (line 338) | class CloneNotFound < VagrantError
      class CloneMachineNotFound (line 342) | class CloneMachineNotFound < VagrantError
      class CloudInitNotFound (line 346) | class CloudInitNotFound < VagrantError
      class CloudInitCommandFailed (line 350) | class CloudInitCommandFailed < VagrantError
      class CommandDeprecated (line 354) | class CommandDeprecated < VagrantError
      class CommandSuspendAllArgs (line 358) | class CommandSuspendAllArgs < VagrantError
      class CommandUnavailable (line 362) | class CommandUnavailable < VagrantError
      class CommandUnavailableWindows (line 366) | class CommandUnavailableWindows < CommandUnavailable
      class CommunicatorNotFound (line 370) | class CommunicatorNotFound < VagrantError
      class ConfigInvalid (line 374) | class ConfigInvalid < VagrantError
      class ConfigUpgradeErrors (line 378) | class ConfigUpgradeErrors < VagrantError
      class CopyPrivateKeyFailed (line 382) | class CopyPrivateKeyFailed < VagrantError
      class CorruptMachineIndex (line 386) | class CorruptMachineIndex < VagrantError
      class CreateIsoHostCapNotFound (line 390) | class CreateIsoHostCapNotFound < VagrantError
      class DarwinMountFailed (line 394) | class DarwinMountFailed < VagrantError
      class DarwinVersionFailed (line 398) | class DarwinVersionFailed < VagrantError
      class DestroyRequiresForce (line 402) | class DestroyRequiresForce < VagrantError
      class DotfileUpgradeJSONError (line 406) | class DotfileUpgradeJSONError < VagrantError
      class DownloadAlreadyInProgress (line 410) | class DownloadAlreadyInProgress < VagrantError
      class DownloaderError (line 414) | class DownloaderError < VagrantError
      class DownloaderInterrupted (line 418) | class DownloaderInterrupted < DownloaderError
      class DownloaderChecksumError (line 422) | class DownloaderChecksumError < VagrantError
      class EnvInval (line 426) | class EnvInval < VagrantError
      class EnvironmentNonExistentCWD (line 430) | class EnvironmentNonExistentCWD < VagrantError
      class EnvironmentLockedError (line 434) | class EnvironmentLockedError < VagrantError
      class HomeDirectoryLaterVersion (line 438) | class HomeDirectoryLaterVersion < VagrantError
      class HomeDirectoryNotAccessible (line 442) | class HomeDirectoryNotAccessible < VagrantError
      class HomeDirectoryUnknownVersion (line 446) | class HomeDirectoryUnknownVersion < VagrantError
      class HypervVirtualBoxError (line 450) | class HypervVirtualBoxError < VagrantError
      class ForwardPortAdapterNotFound (line 454) | class ForwardPortAdapterNotFound < VagrantError
      class ForwardPortAutolistEmpty (line 458) | class ForwardPortAutolistEmpty < VagrantError
      class ForwardPortHostIPNotFound (line 462) | class ForwardPortHostIPNotFound < VagrantError
      class ForwardPortCollision (line 466) | class ForwardPortCollision < VagrantError
      class GuestCapabilityInvalid (line 470) | class GuestCapabilityInvalid < VagrantError
      class GuestCapabilityNotFound (line 474) | class GuestCapabilityNotFound < VagrantError
      class GuestExplicitNotDetected (line 478) | class GuestExplicitNotDetected < VagrantError
      class GuestNotDetected (line 482) | class GuestNotDetected < VagrantError
      class HostExplicitNotDetected (line 486) | class HostExplicitNotDetected < VagrantError
      class ISOBuildFailed (line 490) | class ISOBuildFailed < VagrantError
      class LinuxMountFailed (line 494) | class LinuxMountFailed < VagrantError
      class LinuxRDPClientNotFound (line 498) | class LinuxRDPClientNotFound < VagrantError
      class LocalDataDirectoryNotAccessible (line 502) | class LocalDataDirectoryNotAccessible < VagrantError
      class MachineActionLockedError (line 506) | class MachineActionLockedError < VagrantError
      class MachineFolderNotAccessible (line 510) | class MachineFolderNotAccessible < VagrantError
      class MachineGuestNotReady (line 514) | class MachineGuestNotReady < VagrantError
      class MachineLocked (line 518) | class MachineLocked < VagrantError
      class MachineNotFound (line 522) | class MachineNotFound < VagrantError
      class MachineStateInvalid (line 526) | class MachineStateInvalid < VagrantError
      class MultiVMTargetRequired (line 530) | class MultiVMTargetRequired < VagrantError
      class NetplanNoAvailableRenderers (line 534) | class NetplanNoAvailableRenderers < VagrantError
      class NetSSHException (line 538) | class NetSSHException < VagrantError
      class NetworkCollision (line 542) | class NetworkCollision < VagrantError
      class NetworkAddressInvalid (line 546) | class NetworkAddressInvalid < VagrantError
      class NetworkDHCPAlreadyAttached (line 550) | class NetworkDHCPAlreadyAttached < VagrantError
      class NetworkNotFound (line 554) | class NetworkNotFound < VagrantError
      class NetworkTypeNotSupported (line 558) | class NetworkTypeNotSupported < VagrantError
      class NetworkManagerNotInstalled (line 562) | class NetworkManagerNotInstalled < VagrantError
      class NFSBadExports (line 566) | class NFSBadExports < VagrantError
      class NFSDupePerms (line 570) | class NFSDupePerms < VagrantError
      class NFSExportsFailed (line 574) | class NFSExportsFailed < VagrantError
      class NFSCantReadExports (line 578) | class NFSCantReadExports < VagrantError
      class NFSMountFailed (line 582) | class NFSMountFailed < VagrantError
      class NFSNoGuestIP (line 586) | class NFSNoGuestIP < VagrantError
      class NFSNoHostIP (line 590) | class NFSNoHostIP < VagrantError
      class NFSNoHostonlyNetwork (line 594) | class NFSNoHostonlyNetwork < VagrantError
      class NFSNoValidIds (line 598) | class NFSNoValidIds < VagrantError
      class NFSNotSupported (line 602) | class NFSNotSupported < VagrantError
      class NFSClientNotInstalledInGuest (line 606) | class NFSClientNotInstalledInGuest < VagrantError
      class NoDefaultProvider (line 610) | class NoDefaultProvider < VagrantError
      class NoDefaultSyncedFolderImpl (line 614) | class NoDefaultSyncedFolderImpl < VagrantError
      class NoEnvironmentError (line 618) | class NoEnvironmentError < VagrantError
      class OscdimgCommandMissingError (line 622) | class OscdimgCommandMissingError < VagrantError
      class PackageIncludeMissing (line 626) | class PackageIncludeMissing < VagrantError
      class PackageIncludeSymlink (line 630) | class PackageIncludeSymlink < VagrantError
      class PackageOutputDirectory (line 634) | class PackageOutputDirectory < VagrantError
      class PackageOutputExists (line 638) | class PackageOutputExists < VagrantError
      class PackageRequiresDirectory (line 642) | class PackageRequiresDirectory < VagrantError
      class PackageInvalidInfo (line 646) | class PackageInvalidInfo < VagrantError
      class PowerShellNotFound (line 650) | class PowerShellNotFound < VagrantError
      class PowerShellInvalidVersion (line 654) | class PowerShellInvalidVersion < VagrantError
      class PowerShellError (line 658) | class PowerShellError < VagrantError
      class ProviderCantInstall (line 662) | class ProviderCantInstall < VagrantError
      class ProviderChecksumMismatch (line 666) | class ProviderChecksumMismatch < VagrantError
      class ProviderInstallFailed (line 670) | class ProviderInstallFailed < VagrantError
      class ProviderNotFound (line 674) | class ProviderNotFound < VagrantError
      class ProviderNotFoundSuggestion (line 678) | class ProviderNotFoundSuggestion < VagrantError
      class ProviderNotUsable (line 682) | class ProviderNotUsable < VagrantError
      class ProvisionerFlagInvalid (line 686) | class ProvisionerFlagInvalid < VagrantError
      class ProvisionerWinRMUnsupported (line 690) | class ProvisionerWinRMUnsupported < VagrantError
      class PluginNeedsDeveloperTools (line 694) | class PluginNeedsDeveloperTools < VagrantError
      class PluginMissingLibrary (line 698) | class PluginMissingLibrary < VagrantError
      class PluginMissingRubyDev (line 702) | class PluginMissingRubyDev < VagrantError
      class PluginGemNotFound (line 706) | class PluginGemNotFound < VagrantError
      class PluginInstallLicenseNotFound (line 710) | class PluginInstallLicenseNotFound < VagrantError
      class PluginInstallFailed (line 714) | class PluginInstallFailed < VagrantError
      class PluginInstallSpace (line 718) | class PluginInstallSpace < VagrantError
      class PluginInstallVersionConflict (line 722) | class PluginInstallVersionConflict < VagrantError
      class PluginLoadError (line 726) | class PluginLoadError < VagrantError
      class PluginNotInstalled (line 730) | class PluginNotInstalled < VagrantError
      class PluginStateFileParseError (line 734) | class PluginStateFileParseError < VagrantError
      class PluginUninstallSystem (line 738) | class PluginUninstallSystem < VagrantError
      class PluginInitError (line 742) | class PluginInitError < VagrantError
      class PluginSourceError (line 746) | class PluginSourceError < VagrantError
      class PluginNoLocalError (line 750) | class PluginNoLocalError < VagrantError
      class PluginMissingLocalError (line 754) | class PluginMissingLocalError < VagrantError
      class PushesNotDefined (line 758) | class PushesNotDefined < VagrantError
      class PushStrategyNotDefined (line 762) | class PushStrategyNotDefined < VagrantError
      class PushStrategyNotLoaded (line 766) | class PushStrategyNotLoaded < VagrantError
      class PushStrategyNotProvided (line 770) | class PushStrategyNotProvided < VagrantError
      class RSyncPostCommandError (line 774) | class RSyncPostCommandError < VagrantError
      class RSyncError (line 778) | class RSyncError < VagrantError
      class RSyncNotFound (line 782) | class RSyncNotFound < VagrantError
      class RSyncNotInstalledInGuest (line 786) | class RSyncNotInstalledInGuest < VagrantError
      class RSyncGuestInstallError (line 790) | class RSyncGuestInstallError < VagrantError
      class SCPPermissionDenied (line 794) | class SCPPermissionDenied < VagrantError
      class SCPUnavailable (line 798) | class SCPUnavailable < VagrantError
      class SharedFolderCreateFailed (line 802) | class SharedFolderCreateFailed < VagrantError
      class ShellExpandFailed (line 806) | class ShellExpandFailed < VagrantError
      class SnapshotConflictFailed (line 810) | class SnapshotConflictFailed < VagrantError
      class SnapshotNotFound (line 814) | class SnapshotNotFound < VagrantError
      class SnapshotNotSupported (line 818) | class SnapshotNotSupported < VagrantError
      class SSHAuthenticationFailed (line 822) | class SSHAuthenticationFailed < VagrantError
      class SSHChannelOpenFail (line 826) | class SSHChannelOpenFail < VagrantError
      class SSHConnectEACCES (line 830) | class SSHConnectEACCES < VagrantError
      class SSHConnectionRefused (line 834) | class SSHConnectionRefused < VagrantError
      class SSHConnectionAborted (line 838) | class SSHConnectionAborted < VagrantError
      class SSHConnectionReset (line 842) | class SSHConnectionReset < VagrantError
      class SSHConnectionTimeout (line 846) | class SSHConnectionTimeout < VagrantError
      class SSHDisconnected (line 850) | class SSHDisconnected < VagrantError
      class SSHHostDown (line 854) | class SSHHostDown < VagrantError
      class SSHInvalidShell (line 858) | class SSHInvalidShell< VagrantError
      class SSHInsertKeyUnsupported (line 862) | class SSHInsertKeyUnsupported < VagrantError
      class SSHIsPuttyLink (line 866) | class SSHIsPuttyLink < VagrantError
      class SSHKeyBadOwner (line 870) | class SSHKeyBadOwner < VagrantError
      class SSHKeyBadPermissions (line 874) | class SSHKeyBadPermissions < VagrantError
      class SSHKeyTypeNotSupported (line 878) | class SSHKeyTypeNotSupported < VagrantError
      class SSHKeyTypeNotSupportedByServer (line 882) | class SSHKeyTypeNotSupportedByServer < VagrantError
      class SSHNoExitStatus (line 886) | class SSHNoExitStatus < VagrantError
      class SSHNoRoute (line 890) | class SSHNoRoute < VagrantError
      class SSHNotReady (line 894) | class SSHNotReady < VagrantError
      class SSHRunRequiresKeys (line 898) | class SSHRunRequiresKeys < VagrantError
      class SSHUnavailable (line 902) | class SSHUnavailable < VagrantError
      class SSHUnavailableWindows (line 906) | class SSHUnavailableWindows < VagrantError
      class SyncedFolderUnusable (line 910) | class SyncedFolderUnusable < VagrantError
      class TriggersBadExitCodes (line 914) | class TriggersBadExitCodes < VagrantError
      class TriggersGuestNotExist (line 918) | class TriggersGuestNotExist < VagrantError
      class TriggersGuestNotRunning (line 922) | class TriggersGuestNotRunning < VagrantError
      class TriggersNoBlockGiven (line 926) | class TriggersNoBlockGiven < VagrantError
      class TriggersNoStageGiven (line 930) | class TriggersNoStageGiven < VagrantError
      class UIExpectsTTY (line 934) | class UIExpectsTTY < VagrantError
      class UnimplementedProviderAction (line 938) | class UnimplementedProviderAction < VagrantError
      class UploadInvalidCompressionType (line 942) | class UploadInvalidCompressionType < VagrantError
      class UploadMissingExtractCapability (line 946) | class UploadMissingExtractCapability < VagrantError
      class UploadMissingTempCapability (line 950) | class UploadMissingTempCapability < VagrantError
      class UploadSourceMissing (line 954) | class UploadSourceMissing < VagrantError
      class UploaderError (line 958) | class UploaderError < VagrantError
      class UploaderInterrupted (line 962) | class UploaderInterrupted < UploaderError
      class VagrantLocked (line 966) | class VagrantLocked < VagrantError
      class VagrantInterrupt (line 970) | class VagrantInterrupt < VagrantError
      class VagrantfileExistsError (line 974) | class VagrantfileExistsError < VagrantError
      class VagrantfileLoadError (line 978) | class VagrantfileLoadError < VagrantError
      class VagrantfileNameError (line 982) | class VagrantfileNameError < VagrantError
      class VagrantfileSyntaxError (line 986) | class VagrantfileSyntaxError < VagrantError
      class VagrantfileTemplateNotFoundError (line 990) | class VagrantfileTemplateNotFoundError < VagrantError
      class VagrantfileWriteError (line 994) | class VagrantfileWriteError < VagrantError
      class VagrantVersionBad (line 998) | class VagrantVersionBad < VagrantError
      class VBoxManageError (line 1002) | class VBoxManageError < VagrantError
      class VBoxManageLaunchError (line 1006) | class VBoxManageLaunchError < VagrantError
      class VBoxManageNotFoundError (line 1010) | class VBoxManageNotFoundError < VagrantError
      class VirtualBoxBrokenVersion040214 (line 1014) | class VirtualBoxBrokenVersion040214 < VagrantError
      class VirtualBoxConfigNotFound (line 1018) | class VirtualBoxConfigNotFound < VagrantError
      class VirtualBoxDisksDefinedExceedLimit (line 1022) | class VirtualBoxDisksDefinedExceedLimit < VagrantError
      class VirtualBoxDisksControllerNotFound (line 1026) | class VirtualBoxDisksControllerNotFound < VagrantError
      class VirtualBoxDisksNoSupportedControllers (line 1030) | class VirtualBoxDisksNoSupportedControllers < VagrantError
      class VirtualBoxDisksPrimaryNotFound (line 1034) | class VirtualBoxDisksPrimaryNotFound < VagrantError
      class VirtualBoxDisksUnsupportedController (line 1038) | class VirtualBoxDisksUnsupportedController < VagrantError
      class VirtualBoxGuestPropertyNotFound (line 1042) | class VirtualBoxGuestPropertyNotFound < VagrantError
      class VirtualBoxInvalidVersion (line 1046) | class VirtualBoxInvalidVersion < VagrantError
      class VirtualBoxNoRoomForHighLevelNetwork (line 1050) | class VirtualBoxNoRoomForHighLevelNetwork < VagrantError
      class VirtualBoxNotDetected (line 1054) | class VirtualBoxNotDetected < VagrantError
      class VirtualBoxKernelModuleNotLoaded (line 1058) | class VirtualBoxKernelModuleNotLoaded < VagrantError
      class VirtualBoxInstallIncomplete (line 1062) | class VirtualBoxInstallIncomplete < VagrantError
      class VirtualBoxMachineFolderNotFound (line 1066) | class VirtualBoxMachineFolderNotFound < VagrantError
      class VirtualBoxNoName (line 1070) | class VirtualBoxNoName < VagrantError
      class VirtualBoxMountFailed (line 1074) | class VirtualBoxMountFailed < VagrantError
      class VirtualBoxMountNotSupportedBSD (line 1078) | class VirtualBoxMountNotSupportedBSD < VagrantError
      class VirtualBoxNameExists (line 1082) | class VirtualBoxNameExists < VagrantError
      class VirtualBoxUserMismatch (line 1086) | class VirtualBoxUserMismatch < VagrantError
      class VirtualBoxVersionEmpty (line 1090) | class VirtualBoxVersionEmpty < VagrantError
      class VirtualBoxInvalidHostSubnet (line 1094) | class VirtualBoxInvalidHostSubnet < VagrantError
      class VMBaseMacNotSpecified (line 1098) | class VMBaseMacNotSpecified < VagrantError
      class VMBootBadState (line 1102) | class VMBootBadState < VagrantError
      class VMBootTimeout (line 1106) | class VMBootTimeout < VagrantError
      class VMCloneFailure (line 1110) | class VMCloneFailure < VagrantError
      class VMCreateMasterFailure (line 1114) | class VMCreateMasterFailure < VagrantError
      class VMCustomizationFailed (line 1118) | class VMCustomizationFailed < VagrantError
      class VMImportFailure (line 1122) | class VMImportFailure < VagrantError
      class VMInaccessible (line 1126) | class VMInaccessible < VagrantError
      class VMNameExists (line 1130) | class VMNameExists < VagrantError
      class VMNoMatchError (line 1134) | class VMNoMatchError < VagrantError
      class VMNotCreatedError (line 1138) | class VMNotCreatedError < VagrantError
      class VMNotFoundError (line 1142) | class VMNotFoundError < VagrantError
      class VMNotRunningError (line 1146) | class VMNotRunningError < VagrantError
      class VMPowerOffToPackage (line 1150) | class VMPowerOffToPackage < VagrantError
      class WinRMInvalidCommunicator (line 1154) | class WinRMInvalidCommunicator < VagrantError
      class WSLVagrantVersionMismatch (line 1158) | class WSLVagrantVersionMismatch < VagrantError
      class WSLVagrantAccessError (line 1162) | class WSLVagrantAccessError < VagrantError
      class WSLVirtualBoxWindowsAccessError (line 1166) | class WSLVirtualBoxWindowsAccessError < VagrantError
      class WSLRootFsNotFoundError (line 1170) | class WSLRootFsNotFoundError < VagrantError

FILE: lib/vagrant/guest.rb
  type Vagrant (line 7) | module Vagrant
    class Guest (line 23) | class Guest
      method initialize (line 26) | def initialize(machine, guests, capabilities)
      method detect! (line 34) | def detect!
      method capability (line 44) | def capability(*args)
      method name (line 59) | def name
      method ready? (line 68) | def ready?

FILE: lib/vagrant/host.rb
  type Vagrant (line 6) | module Vagrant
    class Host (line 12) | class Host
      method initialize (line 15) | def initialize(host, hosts, capabilities, env)

FILE: lib/vagrant/machine.rb
  type Vagrant (line 11) | module Vagrant
    class Machine (line 15) | class Machine
      method initialize (line 100) | def initialize(name, provider_name, provider_cls, provider_config, p...
      method action (line 172) | def action(name, opts=nil)
      method action_raw (line 232) | def action_raw(name, callable, extra_env={})
      method communicate (line 261) | def communicate
      method guest (line 278) | def guest
      method id= (line 293) | def id=(value)
      method index_uuid (line 388) | def index_uuid
      method inspect (line 398) | def inspect
      method reload (line 403) | def reload
      method ssh_info (line 447) | def ssh_info
      method state (line 543) | def state
      method recover_machine (line 573) | def recover_machine(state)
      method uid (line 608) | def uid
      method with_ui (line 617) | def with_ui(ui)
      method synced_folders (line 634) | def synced_folders
      method uid_file (line 641) | def uid_file
      method check_cwd (line 650) | def check_cwd

FILE: lib/vagrant/machine_index.rb
  type Vagrant (line 11) | module Vagrant
    class MachineIndex (line 42) | class MachineIndex
      method initialize (line 50) | def initialize(data_dir)
      method delete (line 69) | def delete(entry)
      method each (line 97) | def each(reload=false)
      method get (line 121) | def get(uuid)
      method include? (line 154) | def include?(uuid)
      method release (line 171) | def release(entry)
      method set (line 189) | def set(entry)
      method recover (line 245) | def recover(entry)
      method find_by_prefix (line 270) | def find_by_prefix(prefix)
      method lock_machine (line 287) | def lock_machine(uuid)
      method unlocked_release (line 302) | def unlocked_release(id)
      method unlocked_reload (line 320) | def unlocked_reload
      method unlocked_save (line 340) | def unlocked_save
      method with_index_lock (line 351) | def with_index_lock
      class Entry (line 360) | class Entry
        method initialize (line 422) | def initialize(id=nil, raw=nil)
        method valid? (line 463) | def valid?(home_path)
        method vagrant_env (line 500) | def vagrant_env(home_path, opts={})
        method to_json_struct (line 512) | def to_json_struct

FILE: lib/vagrant/machine_state.rb
  type Vagrant (line 4) | module Vagrant
    class MachineState (line 19) | class MachineState
      method initialize (line 48) | def initialize(id, short, long)

FILE: lib/vagrant/patches/builder/mkmf.rb
  function flag_cleaner (line 39) | def flag_cleaner(flags)
  function clean_flags! (line 57) | def clean_flags!
  function vagrant_create_makefile (line 66) | def vagrant_create_makefile(*args)
  function vagrant_append_cflags (line 74) | def vagrant_append_cflags(*args)
  function vagrant_append_cppflags (line 82) | def vagrant_append_cppflags(*args)
  function vagrant_append_ldflags (line 90) | def vagrant_append_ldflags(*args)
  function vagrant_cc_config (line 98) | def vagrant_cc_config(*args)
  function vagrant_link_config (line 105) | def vagrant_link_config(*args)

FILE: lib/vagrant/patches/fake_ftp.rb
  type FakeFtp (line 6) | module FakeFtp
    class File (line 7) | class File
      method initialize (line 8) | def initialize(name = nil, data = nil, type = nil,
      method data_is_bytes (line 19) | def data_is_bytes(d)
      method data= (line 23) | def data=(data)

FILE: lib/vagrant/patches/log4r.rb
  class Log4r::Logger::LoggerFactory (line 12) | class Log4r::Logger::LoggerFactory
    method fake_set_log (line 14) | def fake_set_log(logger, lname)
    method fake_undefine_methods (line 27) | def fake_undefine_methods(logger)
  class Log4r::Logger (line 43) | class Log4r::Logger
    method factory (line 48) | def self.factory(name, *args)

FILE: lib/vagrant/patches/net-ssh.rb
  function vagrant_read_private_keyblob (line 13) | def vagrant_read_private_keyblob(type)
  function to_pem (line 72) | def to_pem

FILE: lib/vagrant/patches/rubygems.rb
  function vagrant_ruby (line 14) | def vagrant_ruby

FILE: lib/vagrant/patches/timeout_error.rb
  class IO::TimeoutError (line 3) | class IO::TimeoutError < StandardError

FILE: lib/vagrant/plugin.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin

FILE: lib/vagrant/plugin/manager.rb
  type Vagrant (line 11) | module Vagrant
    type Plugin (line 12) | module Plugin
      class Manager (line 14) | class Manager
        method user_plugins_file (line 18) | def self.user_plugins_file
        method system_plugins_file (line 23) | def self.system_plugins_file
        method instance (line 29) | def self.instance
        method initialize (line 38) | def initialize(user_file)
        method globalize! (line 53) | def globalize!
        method localize! (line 65) | def localize!(env)
        method ready? (line 78) | def ready?
        method bundler_init (line 86) | def bundler_init(plugins, **opts)
        method install_plugin (line 119) | def install_plugin(name, **opts)
        method uninstall_plugin (line 210) | def uninstall_plugin(name, **opts)
        method update_plugins (line 238) | def update_plugins(specific, **opts)
        method installed_plugins (line 269) | def installed_plugins
        method installed_specs (line 295) | def installed_specs
        method load_plugins (line 331) | def load_plugins(plugins)
        method plugin_installed? (line 384) | def plugin_installed?(name, version=nil)

FILE: lib/vagrant/plugin/state_file.rb
  type Vagrant (line 8) | module Vagrant
    type Plugin (line 9) | module Plugin
      class StateFile (line 12) | class StateFile
        method initialize (line 17) | def initialize(path)
        method add_plugin (line 39) | def add_plugin(name, **opts)
        method add_source (line 56) | def add_source(url)
        method installed_plugins (line 67) | def installed_plugins
        method has_plugin? (line 74) | def has_plugin?(name)
        method remove_plugin (line 81) | def remove_plugin(name)
        method remove_source (line 89) | def remove_source(url)
        method sources (line 99) | def sources
        method save! (line 104) | def save!
        method upgrade_v0! (line 119) | def upgrade_v0!

FILE: lib/vagrant/plugin/v1.rb
  type Vagrant (line 7) | module Vagrant
    type Plugin (line 8) | module Plugin
      type V1 (line 9) | module V1

FILE: lib/vagrant/plugin/v1/command.rb
  type Vagrant (line 7) | module Vagrant
    type Plugin (line 8) | module Plugin
      type V1 (line 9) | module V1
        class Command (line 11) | class Command
          method initialize (line 14) | def initialize(argv, env)
          method execute (line 23) | def execute
          method parse_options (line 39) | def parse_options(opts=nil)
          method with_target_vms (line 68) | def with_target_vms(names=nil, options=nil)
          method split_main_and_subcommand (line 140) | def split_main_and_subcommand(argv)

FILE: lib/vagrant/plugin/v1/communicator.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V1 (line 6) | module V1
        class Communicator (line 19) | class Communicator
          method match? (line 26) | def self.match?(machine)
          method initialize (line 38) | def initialize(machine)
          method ready? (line 46) | def ready?
          method download (line 54) | def download(from, to)
          method upload (line 62) | def upload(from, to)
          method execute (line 79) | def execute(command, opts=nil)
          method sudo (line 87) | def sudo(command, opts=nil)
          method test (line 96) | def test(command, opts=nil)

FILE: lib/vagrant/plugin/v1/config.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V1 (line 6) | module V1
        class Config (line 10) | class Config
          method finalize! (line 28) | def finalize!
          method merge (line 46) | def merge(other)
          method set_options (line 72) | def set_options(options)
          method to_json (line 79) | def to_json(*a)
          method instance_variables_hash (line 84) | def instance_variables_hash
          method upgrade (line 99) | def upgrade(new)
          method validate (line 110) | def validate(env, errors)

FILE: lib/vagrant/plugin/v1/errors.rb
  type Vagrant (line 7) | module Vagrant
    type Plugin (line 8) | module Plugin
      type V1 (line 9) | module V1
        class Error (line 12) | class Error < StandardError; end
        class InvalidCommandName (line 15) | class InvalidCommandName < Error; end

FILE: lib/vagrant/plugin/v1/guest.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V1 (line 6) | module V1
        class Guest (line 12) | class Guest
          class BaseError (line 13) | class BaseError < Errors::VagrantError
          method initialize (line 25) | def initialize(vm)
          method distro_dispatch (line 35) | def distro_dispatch
          method halt (line 45) | def halt
          method mount_shared_folder (line 61) | def mount_shared_folder(name, guestpath, options)
          method mount_nfs (line 67) | def mount_nfs(ip, folders)
          method configure_networks (line 84) | def configure_networks(networks)
          method change_host_name (line 89) | def change_host_name(name)

FILE: lib/vagrant/plugin/v1/host.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V1 (line 6) | module V1
        class Host (line 11) | class Host
          method match? (line 16) | def self.match?
          method precedence (line 27) | def self.precedence
          method initialize (line 37) | def initialize(ui)
          method nfs? (line 46) | def nfs?
          method nfs_export (line 56) | def nfs_export(id, ip, folders)
          method nfs_prune (line 64) | def nfs_prune(valid_ids)

FILE: lib/vagrant/plugin/v1/manager.rb
  type Vagrant (line 6) | module Vagrant
    type Plugin (line 7) | module Plugin
      type V1 (line 8) | module V1
        class Manager (line 12) | class Manager
          method initialize (line 15) | def initialize
          method communicators (line 23) | def communicators
          method config (line 36) | def config
          method config_upgrade_safe (line 52) | def config_upgrade_safe
          method guests (line 70) | def guests
          method hosts (line 83) | def hosts
          method providers (line 96) | def providers
          method register (line 110) | def register(plugin)
          method reset! (line 119) | def reset!
          method unregister (line 125) | def unregister(plugin)

FILE: lib/vagrant/plugin/v1/plugin.rb
  type Vagrant (line 7) | module Vagrant
    type Plugin (line 8) | module Plugin
      type V1 (line 9) | module V1
        class Plugin (line 11) | class Plugin
          method manager (line 26) | def self.manager
          method name (line 37) | def self.name(name=UNSET_VALUE)
          method description (line 53) | def self.description(value=UNSET_VALUE)
          method action_hook (line 63) | def self.action_hook(name, &block)
          method command (line 80) | def self.command(name=UNSET_VALUE, &block)
          method communicator (line 105) | def self.communicator(name=UNSET_VALUE, &block)
          method config (line 129) | def self.config(name=UNSET_VALUE, upgrade_safe=false, &block)
          method guest (line 152) | def self.guest(name=UNSET_VALUE, &block)
          method host (line 166) | def self.host(name=UNSET_VALUE, &block)
          method provider (line 179) | def self.provider(name=UNSET_VALUE, &block)
          method provisioner (line 192) | def self.provisioner(name=UNSET_VALUE, &block)
          method data (line 206) | def self.data
          method get_or_set (line 221) | def self.get_or_set(key, value=UNSET_VALUE)

FILE: lib/vagrant/plugin/v1/provider.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V1 (line 6) | module V1
        class Provider (line 10) | class Provider
          method initialize (line 15) | def initialize(machine)
          method action (line 23) | def action(name)
          method machine_id_changed (line 33) | def machine_id_changed
          method ssh_info (line 57) | def ssh_info
          method state (line 65) | def state

FILE: lib/vagrant/plugin/v1/provisioner.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V1 (line 6) | module V1
        class Provisioner (line 9) | class Provisioner
          method initialize (line 18) | def initialize(env, config)
          method config_class (line 28) | def self.config_class
          method prepare (line 37) | def prepare
          method provision! (line 43) | def provision!
          method cleanup (line 48) | def cleanup

FILE: lib/vagrant/plugin/v2.rb
  type Vagrant (line 11) | module Vagrant
    type Plugin (line 12) | module Plugin
      type V2 (line 13) | module V2

FILE: lib/vagrant/plugin/v2/command.rb
  type Vagrant (line 7) | module Vagrant
    type Plugin (line 8) | module Plugin
      type V2 (line 9) | module V2
        class Command (line 11) | class Command
          method synopsis (line 18) | def self.synopsis
          method initialize (line 22) | def initialize(argv, env)
          method execute (line 31) | def execute
          method parse_options (line 47) | def parse_options(opts=nil)
          method with_target_vms (line 85) | def with_target_vms(names=nil, options=nil)
          method split_main_and_subcommand (line 278) | def split_main_and_subcommand(argv)

FILE: lib/vagrant/plugin/v2/communicator.rb
  type Vagrant (line 6) | module Vagrant
    type Plugin (line 7) | module Plugin
      type V2 (line 8) | module V2
        class Communicator (line 21) | class Communicator
          method match? (line 28) | def self.match?(machine)
          method initialize (line 40) | def initialize(machine)
          method ready? (line 48) | def ready?
          method wait_for_ready (line 59) | def wait_for_ready(duration)
          method download (line 79) | def download(from, to)
          method upload (line 87) | def upload(from, to)
          method execute (line 104) | def execute(command, opts=nil)
          method sudo (line 112) | def sudo(command, opts=nil)
          method test (line 121) | def test(command, opts=nil)
          method reset! (line 128) | def reset!

FILE: lib/vagrant/plugin/v2/components.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V2 (line 6) | module V2
        class Components (line 11) | class Components
          method initialize (line 75) | def initialize

FILE: lib/vagrant/plugin/v2/config.rb
  type Vagrant (line 6) | module Vagrant
    type Plugin (line 7) | module Plugin
      type V2 (line 8) | module V2
        class Config (line 12) | class Config
          method finalize! (line 31) | def finalize!
          method merge (line 49) | def merge(other)
          method method_missing (line 76) | def method_missing(name, *args, &block)
          method set_options (line 111) | def set_options(options)
          method to_json (line 118) | def to_json(*a)
          method to_s (line 123) | def to_s
          method instance_variables_hash (line 128) | def instance_variables_hash
          method validate (line 141) | def validate(machine)
          method _detected_errors (line 148) | def _detected_errors
          method _finalize! (line 155) | def _finalize!
          method clean_up_config_object (line 159) | def clean_up_config_object(config)

FILE: lib/vagrant/plugin/v2/errors.rb
  type Vagrant (line 7) | module Vagrant
    type Plugin (line 8) | module Plugin
      type V2 (line 9) | module V2
        class Error (line 12) | class Error < StandardError; end
        class InvalidCommandName (line 15) | class InvalidCommandName < Error; end

FILE: lib/vagrant/plugin/v2/guest.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V2 (line 6) | module V2
        class Guest (line 14) | class Guest
          method detect? (line 20) | def detect?(machine)

FILE: lib/vagrant/plugin/v2/host.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V2 (line 6) | module V2
        class Host (line 11) | class Host
          method detect? (line 16) | def detect?(env)

FILE: lib/vagrant/plugin/v2/manager.rb
  type Vagrant (line 6) | module Vagrant
    type Plugin (line 7) | module Plugin
      type V2 (line 8) | module V2
        class Manager (line 12) | class Manager
          method initialize (line 15) | def initialize
          method action_hooks (line 23) | def action_hooks(hook_name)
          method find_action_hooks (line 52) | def find_action_hooks(key)
          method generate_hook_keys (line 69) | def generate_hook_keys(key)
          method commands (line 90) | def commands
          method communicators (line 101) | def communicators
          method config (line 112) | def config
          method guests (line 123) | def guests
          method guest_capabilities (line 134) | def guest_capabilities
          method hosts (line 149) | def hosts
          method host_capabilities (line 160) | def host_capabilities
          method providers (line 175) | def providers
          method provider_capabilities (line 186) | def provider_capabilities
          method provider_configs (line 201) | def provider_configs
          method provisioner_configs (line 212) | def provisioner_configs
          method provisioners (line 223) | def provisioners
          method pushes (line 234) | def pushes
          method push_configs (line 245) | def push_configs
          method synced_folders (line 256) | def synced_folders
          method synced_folder_capabilities (line 267) | def synced_folder_capabilities
          method register (line 282) | def register(plugin)
          method reset! (line 291) | def reset!
          method unregister (line 297) | def unregister(plugin)

FILE: lib/vagrant/plugin/v2/plugin.rb
  type Vagrant (line 8) | module Vagrant
    type Plugin (line 9) | module Plugin
      type V2 (line 10) | module V2
        class Plugin (line 12) | class Plugin
          method manager (line 27) | def self.manager
          method local_manager (line 31) | def self.local_manager
          method components (line 38) | def self.components
          method name (line 49) | def self.name(name=UNSET_VALUE)
          method description (line 65) | def self.description(value=UNSET_VALUE)
          method action_hook (line 77) | def self.action_hook(name, hook_name=nil, &block)
          method command (line 90) | def self.command(name, **opts, &block)
          method communicator (line 115) | def self.communicator(name=UNSET_VALUE, &block)
          method config (line 133) | def self.config(name, scope=nil, &block)
          method guest (line 144) | def self.guest(name, parent=nil, &block)
          method guest_capability (line 160) | def self.guest_capability(guest, cap, &block)
          method host (line 170) | def self.host(name, parent=nil, &block)
          method host_capability (line 186) | def self.host_capability(host, cap, &block)
          method provider (line 194) | def self.provider(name=UNSET_VALUE, options=nil, &block)
          method provider_capability (line 212) | def self.provider_capability(provider, cap, &block)
          method provisioner (line 220) | def self.provisioner(name=UNSET_VALUE, &block)
          method push (line 234) | def self.push(name, options=nil, &block)
          method synced_folder (line 247) | def self.synced_folder(name, priority=10, &block)
          method synced_folder_capability (line 262) | def self.synced_folder_capability(synced_folder, cap, &block)
          method data (line 271) | def self.data
          method get_or_set (line 286) | def self.get_or_set(key, value=UNSET_VALUE)

FILE: lib/vagrant/plugin/v2/provider.rb
  type Vagrant (line 6) | module Vagrant
    type Plugin (line 7) | module Plugin
      type V2 (line 8) | module V2
        class Provider (line 12) | class Provider
          method usable? (line 24) | def self.usable?(raise_error=false)
          method installed? (line 39) | def self.installed?
          method initialize (line 49) | def initialize(machine)
          method action (line 57) | def action(name)
          method machine_id_changed (line 67) | def machine_id_changed
          method ssh_info (line 91) | def ssh_info
          method state (line 100) | def state
          method _initialize (line 107) | def _initialize(name, machine)

FILE: lib/vagrant/plugin/v2/provisioner.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V2 (line 6) | module V2
        class Provisioner (line 9) | class Provisioner
          method initialize (line 22) | def initialize(machine, config)
          method configure (line 37) | def configure(root_config)
          method provision (line 45) | def provision
          method cleanup (line 51) | def cleanup

FILE: lib/vagrant/plugin/v2/push.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V2 (line 6) | module V2
        class Push (line 7) | class Push
          method initialize (line 16) | def initialize(env, config)
          method push (line 25) | def push

FILE: lib/vagrant/plugin/v2/synced_folder.rb
  type Vagrant (line 4) | module Vagrant
    type Plugin (line 5) | module Plugin
      type V2 (line 6) | module V2
        class SyncedFolder (line 8) | class SyncedFolder
          class Collection (line 9) | class Collection < Hash
            method types (line 12) | def types
            method type (line 20) | def type(t)
            method to_h (line 31) | def to_h
          method usable? (line 60) | def usable?(machine, raise_error=false)
          method prepare (line 66) | def prepare(machine, folders, opts)
          method enable (line 77) | def enable(machine, folders, opts)
          method disable (line 90) | def disable(machine, folders, opts)
          method cleanup (line 101) | def cleanup(machine, opts)
          method _initialize (line 104) | def _initialize(machine, synced_folder_type)

FILE: lib/vagrant/plugin/v2/trigger.rb
  type Vagrant (line 13) | module Vagrant
    type Plugin (line 14) | module Plugin
      type V2 (line 15) | module V2
        class Trigger (line 16) | class Trigger
          method initialize (line 27) | def initialize(env, config, machine, ui)
          method fire (line 43) | def fire(name, stage, guest, type, all: false)
          method find (line 72) | def find(name, stage, guest, type, all: false)
          method nameify (line 105) | def nameify(object)
          method matched_hook? (line 121) | def matched_hook?(key, subject)
          method community_plugin_detected? (line 132) | def community_plugin_detected?
          method filter_triggers (line 146) | def filter_triggers(triggers, guest_name, type)
          method execute (line 182) | def execute(triggers)
          method info (line 223) | def info(message)
          method warn (line 230) | def warn(message)
          method run (line 237) | def run(config, on_error, exit_codes)
          method run_remote (line 300) | def run_remote(config, on_error, exit_codes)
          method trigger_abort (line 344) | def trigger_abort(exit_code)
          method execute_ruby (line 361) | def execute_ruby(ruby_block)

FILE: lib/vagrant/registry.rb
  type Vagrant (line 4) | module Vagrant
    class Registry (line 9) | class Registry
      method initialize (line 10) | def initialize
      method register (line 18) | def register(key, &block)
      method get (line 27) | def get(key)
      method key? (line 37) | def key?(key)
      method keys (line 45) | def keys
      method each (line 50) | def each(&block)
      method map (line 59) | def map(&block)
      method length (line 68) | def length
      method empty? (line 76) | def empty?
      method merge (line 83) | def merge(other)
      method merge! (line 91) | def merge!(other)
      method to_hash (line 97) | def to_hash
      method __internal_state (line 106) | def __internal_state

FILE: lib/vagrant/shared_helpers.rb
  type Vagrant (line 8) | module Vagrant
    function global_lock (line 31) | def self.global_lock
    function in_installer? (line 41) | def self.in_installer?
    function in_bundler? (line 48) | def self.in_bundler?
    function installer_embedded_dir (line 57) | def self.installer_embedded_dir
    function plugins_init? (line 65) | def self.plugins_init?
    function plugins_enabled? (line 72) | def self.plugins_enabled?
    function very_quiet? (line 79) | def self.very_quiet?
    function log_level (line 86) | def self.log_level
    function server_url (line 93) | def self.server_url(config_server_url=nil)
    function source_root (line 102) | def self.source_root
    function user_data_path (line 110) | def self.user_data_path
    function prerelease? (line 131) | def self.prerelease?
    function allow_prerelease_dependencies? (line 139) | def self.allow_prerelease_dependencies?
    function strict_dependency_enforcement (line 148) | def self.strict_dependency_enforcement
    function auto_install_local_plugins? (line 160) | def self.auto_install_local_plugins?
    function enable_resolv_replace (line 171) | def self.enable_resolv_replace
    function global_logger= (line 190) | def self.global_logger=(log)
    function global_logger (line 197) | def self.global_logger
    function add_default_cli_options (line 210) | def self.add_default_cli_options(block)
    function default_cli_options (line 228) | def self.default_cli_options
    function detect_missing_tools (line 233) | def self.detect_missing_tools

FILE: lib/vagrant/ui.rb
  type Vagrant (line 11) | module Vagrant
    type UI (line 12) | module UI
      class Interface (line 20) | class Interface
        method initialize (line 34) | def initialize
        method initialize_copy (line 43) | def initialize_copy(original)
        method color? (line 68) | def color?
        method machine (line 76) | def machine(type, *data)
        method rewriting (line 83) | def rewriting
        method to_proto (line 87) | def to_proto
      class Silent (line 94) | class Silent < Interface
        method ask (line 95) | def ask(*args, **opts)
      class MachineReadable (line 103) | class MachineReadable < Interface
        method initialize (line 106) | def initialize
        method ask (line 112) | def ask(*args, **opts)
        method machine (line 125) | def machine(type, *data)
      class Basic (line 150) | class Basic < Interface
        method initialize (line 153) | def initialize
        method ask (line 171) | def ask(message, **opts)
        method report_progress (line 215) | def report_progress(progress, total, show_parts=true)
        method clear_line (line 227) | def clear_line
        method say (line 236) | def say(type, message, opts={})
        method format_message (line 263) | def format_message(type, message, **opts)
      class NonInteractive (line 268) | class NonInteractive < Basic
        method initialize (line 269) | def initialize
        method rewriting (line 273) | def rewriting
        method report_progress (line 277) | def report_progress(progress, total, show_parts=true)
        method clear_line (line 281) | def clear_line
        method ask (line 286) | def ask(*args, **opts)
      class Prefixed (line 293) | class Prefixed < Interface
        method initialize (line 297) | def initialize(ui, prefix)
        method to_proto (line 304) | def to_proto
        method client (line 308) | def client
        method initialize_copy (line 312) | def initialize_copy(original)
        method machine (line 345) | def machine(type, *data)
        method opts (line 356) | def opts
        method format_message (line 360) | def format_message(type, message, **opts)
        method rewriting (line 395) | def rewriting
      class Colored (line 406) | class Colored < Basic
        method color? (line 419) | def color?
        method format_message (line 424) | def format_message(type, message, **opts)

FILE: lib/vagrant/util.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util

FILE: lib/vagrant/util/ansi_escape_code_remover.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type ANSIEscapeCodeRemover (line 6) | module ANSIEscapeCodeRemover
        function remove_ansi_escape_codes (line 14) | def remove_ansi_escape_codes(text)

FILE: lib/vagrant/util/busy.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class Busy (line 11) | class Busy
        method busy (line 20) | def busy(sig_callback)
        method register (line 30) | def register(sig_callback)
        method unregister (line 41) | def unregister(sig_callback)
        method fire_callbacks (line 51) | def fire_callbacks
        method registered (line 58) | def registered; @@registered; end

FILE: lib/vagrant/util/caps.rb
  type Vagrant (line 10) | module Vagrant
    type Util (line 11) | module Util
      type Caps (line 12) | module Caps
        type BuildISO (line 13) | module BuildISO
          function build_iso (line 20) | def build_iso(iso_command, source_directory, file_destination)
          function ensure_output_iso (line 32) | def ensure_output_iso(file_destination)

FILE: lib/vagrant/util/checkpoint_client.rb
  type Vagrant (line 7) | module Vagrant
    type Util (line 8) | module Util
      class CheckpointClient (line 9) | class CheckpointClient
        method initialize (line 28) | def initialize
        method setup (line 38) | def setup(env)
        method complete? (line 59) | def complete?
        method result (line 66) | def result
        method check (line 80) | def check
        method display (line 110) | def display
        method alerts_check (line 128) | def alerts_check
        method version_check (line 162) | def version_check
        method reset! (line 178) | def reset!

FILE: lib/vagrant/util/command_deprecation.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type CommandDeprecation (line 7) | module CommandDeprecation
        function deprecation_command_name (line 10) | def deprecation_command_name
        function included (line 18) | def self.included(klass)
        type Complete (line 46) | module Complete
          function included (line 47) | def self.included(klass)

FILE: lib/vagrant/util/counter.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      type Counter (line 10) | module Counter
        function get_and_update_counter (line 11) | def get_and_update_counter(name=nil)
        function mutex (line 22) | def mutex

FILE: lib/vagrant/util/credential_scrubber.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class CredentialScrubber (line 7) | class CredentialScrubber
        method scrub (line 15) | def self.scrub(string)
        method url_scrubber (line 23) | def self.url_scrubber(string)
        method desensitize (line 35) | def self.desensitize(string)
        method sensitive (line 44) | def self.sensitive(string)
        method unsensitive (line 53) | def self.unsensitive(string)
        method sensitive_strings (line 59) | def self.sensitive_strings
        method reset! (line 69) | def self.reset!

FILE: lib/vagrant/util/curl_helper.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class CurlHelper (line 6) | class CurlHelper
        method capture_output_proc (line 16) | def self.capture_output_proc(logger, ui, source=nil)

FILE: lib/vagrant/util/deep_merge.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type DeepMerge (line 6) | module DeepMerge
        function deep_merge (line 9) | def self.deep_merge(myself, other_hash, &block)

FILE: lib/vagrant/util/directory.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      class Directory (line 8) | class Directory
        method directory_changed? (line 15) | def self.directory_changed?(dir_path, threshold_time)

FILE: lib/vagrant/util/downloader.rb
  type Vagrant (line 17) | module Vagrant
    type Util (line 18) | module Util
      class Downloader (line 22) | class Downloader
        method initialize (line 33) | def initialize(source, destination, options=nil)
        method download! (line 88) | def download!
        method head (line 153) | def head
        method validate_download! (line 174) | def validate_download!(source, path, checksums)
        method execute_curl (line 192) | def execute_curl(options, subprocess_options, &data_proc)
        method options (line 239) | def options

FILE: lib/vagrant/util/env.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class Env (line 6) | class Env
        method with_original_env (line 7) | def self.with_original_env
        method with_clean_env (line 41) | def self.with_clean_env

FILE: lib/vagrant/util/experimental.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class Experimental (line 6) | class Experimental
        method enabled? (line 12) | def enabled?
        method global_enabled? (line 28) | def global_enabled?
        method feature_enabled? (line 45) | def feature_enabled?(feature)
        method features_requested (line 55) | def features_requested
        method guard_with (line 66) | def guard_with(*features, &block)
        method reset! (line 73) | def reset!

FILE: lib/vagrant/util/file_checksum.rb
  class DigestClass (line 11) | class DigestClass
    method update (line 12) | def update(string); end
    method hexdigest (line 13) | def hexdigest; end
  type Vagrant (line 16) | module Vagrant
    type Util (line 17) | module Util
      class FileChecksum (line 18) | class FileChecksum
        method initialize (line 34) | def initialize(path, digest_klass)
        method checksum (line 48) | def checksum
        method load_digest (line 70) | def load_digest(type)

FILE: lib/vagrant/util/file_mode.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class FileMode (line 6) | class FileMode
        method from_octal (line 9) | def self.from_octal(octal)

FILE: lib/vagrant/util/file_mutex.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class FileMutex (line 7) | class FileMutex
        method initialize (line 11) | def initialize(mutex_path)
        method with_lock (line 17) | def with_lock(&block)
        method lock (line 29) | def lock
        method unlock (line 36) | def unlock
        method lock_file (line 44) | def lock_file

FILE: lib/vagrant/util/guest_hosts.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type GuestHosts (line 7) | module GuestHosts
        type Unix (line 9) | module Unix
          function add_hostname_to_loopback_interface (line 19) | def add_hostname_to_loopback_interface(comm, name, loop_bound=DE...
        type Linux (line 35) | module Linux
          function replace_host (line 43) | def replace_host(comm, name, ip)
        type BSD (line 53) | module BSD
          function replace_host (line 61) | def replace_host(comm, name, ip)

FILE: lib/vagrant/util/guest_inspection.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type GuestInspection (line 8) | module GuestInspection
        type Linux (line 10) | module Linux
          function systemd? (line 17) | def systemd?(comm)
          function systemd_networkd? (line 25) | def systemd_networkd?(comm)
          function systemd_network_manager? (line 33) | def systemd_network_manager?(comm)
          function systemd_unit_file? (line 43) | def systemd_unit_file?(comm, name)
          function systemd_unit? (line 52) | def systemd_unit?(comm, name)
          function systemd_controlled? (line 61) | def systemd_controlled?(comm, service_name)
          function hostnamectl? (line 73) | def hostnamectl?(comm)
          function netplan? (line 83) | def netplan?(comm)
          function networkd? (line 91) | def networkd?(comm)
          function nmcli? (line 101) | def nmcli?(comm)
          function nm_controlled? (line 110) | def nm_controlled?(comm, device_name)

FILE: lib/vagrant/util/guest_networks.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type GuestNetworks (line 7) | module GuestNetworks
        type Linux (line 8) | module Linux
          function configure_network_manager (line 11) | def configure_network_manager(machine, networks, **opts)
          function get_current_devices (line 101) | def get_current_devices(comm)

FILE: lib/vagrant/util/hash_with_indifferent_access.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class HashWithIndifferentAccess (line 15) | class HashWithIndifferentAccess < ::Hash
        method initialize (line 16) | def initialize(hash={}, &block)
        method [] (line 24) | def [](key)
        method []= (line 28) | def []=(key, value)
        method delete (line 32) | def delete(key)
        method values_at (line 36) | def values_at(*indices)
        method merge (line 40) | def merge(other)
        method merge! (line 44) | def merge!(other)
        method key? (line 51) | def key?(key)
        method convert_key (line 61) | def convert_key(key)

FILE: lib/vagrant/util/install_cli_autocomplete.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class InstallShellConfig (line 7) | class InstallShellConfig
        method initialize (line 17) | def initialize(string_insert, config_paths)
        method shell_installed (line 31) | def shell_installed(home)
        method is_installed (line 48) | def is_installed(path)
        method install (line 63) | def install(home)
      class InstallZSHShellConfig (line 81) | class InstallZSHShellConfig < InstallShellConfig
        method initialize (line 82) | def initialize
      class InstallBashShellConfig (line 90) | class InstallBashShellConfig < InstallShellConfig
        method initialize (line 91) | def initialize
      class InstallCLIAutocomplete (line 99) | class InstallCLIAutocomplete
        method install (line 105) | def self.install(shells=[])

FILE: lib/vagrant/util/io.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      class IO (line 8) | class IO
        method read_until_block (line 17) | def self.read_until_block(io)

FILE: lib/vagrant/util/ipv4_interfaces.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type IPv4Interfaces (line 6) | module IPv4Interfaces
        function ipv4_interfaces (line 7) | def ipv4_interfaces

FILE: lib/vagrant/util/is_port_open.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      type IsPortOpen (line 11) | module IsPortOpen
        function is_port_open? (line 18) | def is_port_open?(host, port)

FILE: lib/vagrant/util/keypair.rb
  type Vagrant (line 10) | module Vagrant
    type Util (line 11) | module Util
      class Keypair (line 12) | class Keypair
        method valid_type? (line 24) | def self.valid_type?(key)
        method available_types (line 29) | def self.available_types
        method create (line 38) | def self.create(password=nil, type: :rsa)
        class Ed25519 (line 47) | class Ed25519
          method string (line 55) | def self.string(s)
          method padded_string (line 64) | def self.padded_string(s, blocksize)
          method create (line 73) | def self.create(password=nil)
        class Rsa (line 123) | class Rsa
          method create (line 135) | def self.create(password=nil)
        class Ecdsa (line 175) | class Ecdsa
          method string (line 180) | def self.string(s)
          method padded_string (line 189) | def self.padded_string(s, blocksize)
          method create (line 198) | def self.create(password=nil)
        class Ecdsa256 (line 254) | class Ecdsa256 < Ecdsa
        class Ecdsa384 (line 260) | class Ecdsa384 < Ecdsa
        class Ecdsa521 (line 266) | class Ecdsa521 < Ecdsa

FILE: lib/vagrant/util/line_buffer.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class LineBuffer (line 6) | class LineBuffer
        method initialize (line 15) | def initialize(&callback)
        method << (line 27) | def <<(str)
        method close (line 50) | def close

FILE: lib/vagrant/util/line_ending_helpers.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type LineEndingHelpers (line 6) | module LineEndingHelpers
        function dos_to_unix (line 12) | def dos_to_unix(string)

FILE: lib/vagrant/util/logging_formatter.rb
  type Vagrant (line 7) | module Vagrant
    type Util (line 8) | module Util
      class LoggingFormatter (line 12) | class LoggingFormatter < Log4r::BasicFormatter
        method initialize (line 19) | def initialize(formatter)
        method format (line 24) | def format(event)
      class HCLogFormatter (line 30) | class HCLogFormatter < Log4r::BasicFormatter
        method format (line 33) | def format(event)
      class HCLogOutputter (line 62) | class HCLogOutputter < Log4r::StderrOutputter
        method write (line 63) | def write(data)

FILE: lib/vagrant/util/map_command_options.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class MapCommandOptions (line 6) | class MapCommandOptions
        method map_to_command_options (line 17) | def self.map_to_command_options(map, cmd_flag="--")

FILE: lib/vagrant/util/mime.rb
  type Vagrant (line 7) | module Vagrant
    type Util (line 8) | module Util
      type Mime (line 9) | module Mime
        class Multipart (line 10) | class Multipart
          method initialize (line 23) | def initialize(content_type="multipart/mixed")
          method add (line 37) | def add(entry)
          method to_s (line 44) | def to_s
        class Entity (line 58) | class Entity
          method initialize (line 71) | def initialize(content, content_type)
          method to_s (line 83) | def to_s

FILE: lib/vagrant/util/network_ip.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      type NetworkIP (line 8) | module NetworkIP
        function network_address (line 17) | def network_address(ip, subnet)

FILE: lib/vagrant/util/numeric.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      class Numeric (line 8) | class Numeric
        method string_to_bytes (line 36) | def string_to_bytes(str)
        method bytes_to_string (line 59) | def bytes_to_string(bytes)
        method bytes_to_megabytes (line 79) | def bytes_to_megabytes(bytes)
        method reset! (line 86) | def reset!

FILE: lib/vagrant/util/platform.rb
  type Vagrant (line 14) | module Vagrant
    type Util (line 15) | module Util
      class Platform (line 17) | class Platform
        method architecture (line 23) | def architecture
        method logger (line 43) | def logger
        method cygwin? (line 50) | def cygwin?
        method msys? (line 59) | def msys?
        method wsl? (line 68) | def wsl?
        method windows? (line 90) | def windows?
        method windows_admin? (line 103) | def windows_admin?
        method windows_hyperv_admin? (line 127) | def windows_hyperv_admin?
        method windows_hyperv_enabled? (line 164) | def windows_hyperv_enabled?
        method cygwin_path (line 195) | def cygwin_path(path)
        method msys_path (line 225) | def msys_path(path)
        method cygwin_windows_path (line 244) | def cygwin_windows_path(path)
        method unix_windows_path (line 258) | def unix_windows_path(path)
        method fs_case_sensitive? (line 266) | def fs_case_sensitive?
        method fs_real_path (line 283) | def fs_real_path(path, **opts)
        method windows_unc_path (line 336) | def windows_unc_path(path)
        method terminal_supports_colors? (line 353) | def terminal_supports_colors?
        method platform (line 368) | def platform
        method wsl_path? (line 379) | def wsl_path?(path)
        method wsl_rootfs (line 386) | def wsl_rootfs
        method wsl_to_windows_path (line 476) | def wsl_to_windows_path(path)
        method format_windows_path (line 512) | def format_windows_path(path, *args)
        method windows_path (line 529) | def windows_path(path)
        method wsl_windows_access? (line 542) | def wsl_windows_access?
        method wsl_windows_accessible_path (line 553) | def wsl_windows_accessible_path
        method wsl_windows_access_bypass? (line 578) | def wsl_windows_access_bypass?(path)
        method wsl_drvfs_mounts (line 590) | def wsl_drvfs_mounts
        method wsl_drvfs_path? (line 610) | def wsl_drvfs_path?(path)
        method wsl_init (line 625) | def wsl_init(env, logger=nil)
        method wsl_windows_username (line 658) | def wsl_windows_username
        method wsl_windows_home (line 671) | def wsl_windows_home
        method wsl_windows_appdata_local (line 684) | def wsl_windows_appdata_local
        method wsl_validate_matching_vagrant_versions! (line 696) | def wsl_validate_matching_vagrant_versions!
        method systemd? (line 716) | def systemd?
        method reset! (line 731) | def reset!

FILE: lib/vagrant/util/powershell.rb
  type Vagrant (line 10) | module Vagrant
    type Util (line 11) | module Util
      class PowerShell (line 16) | class PowerShell
        method executable (line 34) | def self.executable
        method available? (line 97) | def self.available?
        method execute (line 108) | def self.execute(path, *args, **opts, &block)
        method execute_cmd (line 147) | def self.execute_cmd(command, **opts)
        method execute_inline (line 178) | def self.execute_inline(*command, **opts, &block)
        method version (line 208) | def self.version
        method validate_install! (line 244) | def self.validate_install!
        method powerup_command (line 262) | def self.powerup_command(path, args, opts)
        method reset! (line 311) | def self.reset!

FILE: lib/vagrant/util/presence.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type Presence (line 6) | module Presence
        function present? (line 16) | def present?(obj)
        function presence (line 39) | def presence(obj)

FILE: lib/vagrant/util/retryable.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      type Retryable (line 8) | module Retryable
        function retryable (line 15) | def retryable(opts=nil)

FILE: lib/vagrant/util/safe_chdir.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      class SafeChdir (line 8) | class SafeChdir
        method safe_chdir (line 16) | def self.safe_chdir(dir)

FILE: lib/vagrant/util/safe_env.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class SafeEnv (line 6) | class SafeEnv
        method change_env (line 10) | def self.change_env

FILE: lib/vagrant/util/safe_exec.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class SafeExec (line 12) | class SafeExec
        method exec (line 16) | def self.exec(command, *args)

FILE: lib/vagrant/util/safe_puts.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type SafePuts (line 11) | module SafePuts
        function safe_puts (line 17) | def safe_puts(message=nil, opts=nil)

FILE: lib/vagrant/util/scoped_hash_override.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type ScopedHashOverride (line 22) | module ScopedHashOverride
        function scoped_hash_override (line 23) | def scoped_hash_override(original, scope)

FILE: lib/vagrant/util/shell_quote.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type ShellQuote (line 6) | module ShellQuote
        function escape (line 11) | def self.escape(text, quote)

FILE: lib/vagrant/util/silence_warnings.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type SilenceWarnings (line 6) | module SilenceWarnings
        function silence! (line 8) | def self.silence!

FILE: lib/vagrant/util/ssh.rb
  type Vagrant (line 15) | module Vagrant
    type Util (line 16) | module Util
      class SSH (line 20) | class SSH
        method check_key_permissions (line 31) | def self.check_key_permissions(key_path)
        method exec (line 69) | def self.exec(ssh_info, opts={})
        method _raw_exec (line 244) | def self._raw_exec(ssh, command_options, ssh_info, opts)
        method _raw_subprocess (line 248) | def self._raw_subprocess(ssh, command_options, ssh_info, opts)

FILE: lib/vagrant/util/stacked_proc_runner.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      type StackedProcRunner (line 10) | module StackedProcRunner
        function proc_stack (line 16) | def proc_stack
        function push_proc (line 24) | def push_proc(&block)
        function run_procs! (line 31) | def run_procs!(*args)

FILE: lib/vagrant/util/string_block_editor.rb
  type Vagrant (line 4) | module Vagrant
    type Util (line 5) | module Util
      class StringBlockEditor (line 27) | class StringBlockEditor
        method initialize (line 34) | def initialize(string)
        method keys (line 41) | def keys
        method delete (line 49) | def delete(key)
        method get (line 56) | def get(key)
        method insert (line 68) | def insert(key, value)

FILE: lib/vagrant/util/subprocess.rb
  type Vagrant (line 14) | module Vagrant
    type Util (line 15) | module Util
      class Subprocess (line 22) | class Subprocess
        method execute (line 24) | def self.execute(*command, &block)
        method initialize (line 28) | def initialize(*command)
        method running? (line 41) | def running?
        method stop (line 48) | def stop
        method execute (line 60) | def execute
        class LaunchError (line 284) | class LaunchError < StandardError; end
        class TimeoutExceeded (line 288) | class TimeoutExceeded < StandardError
          method initialize (line 291) | def initialize(pid)
        class Result (line 298) | class Result
          method initialize (line 303) | def initialize(exit_code, stdout, stderr)
        method jailbreak (line 339) | def jailbreak(env = {})

FILE: lib/vagrant/util/template_renderer.rb
  type Vagrant (line 9) | module Vagrant
    type Util (line 10) | module Util
      class TemplateRenderer (line 13) | class TemplateRenderer < OpenStruct
        method render (line 20) | def render(*args)
        method render_string (line 30) | def render_string(*args)
        method render_with (line 36) | def render_with(method, template, data={})
        method initialize (line 43) | def initialize(template, data = {})
        method render (line 61) | def render
        method render_string (line 78) | def render_string
        method full_template_path (line 86) | def full_template_path

FILE: lib/vagrant/util/uploader.rb
  type Vagrant (line 12) | module Vagrant
    type Util (line 13) | module Util
      class Uploader (line 17) | class Uploader
        method initialize (line 24) | def initialize(destination, file, options=nil)
        method upload! (line 38) | def upload!
        method build_options (line 59) | def build_options
        method execute_curl (line 64) | def execute_curl(options, subprocess_options, &data_proc)

FILE: lib/vagrant/util/which.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      class Which (line 8) | class Which
        method which (line 20) | def self.which(cmd, **opts)

FILE: lib/vagrant/util/windows_path.rb
  type Vagrant (line 6) | module Vagrant
    type Util (line 7) | module Util
      type WindowsPath (line 8) | module WindowsPath
        type API (line 9) | module API
        function longname (line 18) | def self.longname(name)

FILE: lib/vagrant/vagrantfile.rb
  type Vagrant (line 7) | module Vagrant
    class Vagrantfile (line 17) | class Vagrantfile
      method initialize (line 29) | def initialize(loader, keys)
      method machine (line 48) | def machine(name, provider, boxes, data_path, env)
      method machine_config (line 117) | def machine_config(name, provider, boxes, data_path=nil, validate_pr...
      method machine_names (line 271) | def machine_names
      method machine_names_and_options (line 279) | def machine_names_and_options
      method primary_machine_name (line 296) | def primary_machine_name
      method find_vagrantfile (line 311) | def find_vagrantfile(search_path)

FILE: lib/vagrant/version.rb
  type Vagrant (line 4) | module Vagrant

FILE: plugins/commands/autocomplete/command/install.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandAutocomplete (line 9) | module CommandAutocomplete
      type Command (line 10) | module Command
        class Install (line 11) | class Install < Vagrant.plugin("2", :command)
          method execute (line 12) | def execute

FILE: plugins/commands/autocomplete/command/root.rb
  type VagrantPlugins (line 7) | module VagrantPlugins
    type CommandAutocomplete (line 8) | module CommandAutocomplete
      type Command (line 9) | module Command
        class Root (line 10) | class Root < Vagrant.plugin("2", :command)
          method synopsis (line 11) | def self.synopsis
          method initialize (line 15) | def initialize(argv, env)
          method execute (line 27) | def execute
          method help (line 43) | def help

FILE: plugins/commands/autocomplete/plugin.rb
  type VagrantPlugins (line 7) | module VagrantPlugins
    type CommandAutocomplete (line 8) | module CommandAutocomplete
      class Plugin (line 9) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/box/command/add.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandBox (line 9) | module CommandBox
      type Command (line 10) | module Command
        class Add (line 11) | class Add < Vagrant.plugin("2", :command)
          method execute (line 14) | def execute

FILE: plugins/commands/box/command/download_mixins.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommandBox (line 5) | module CommandBox
      type DownloadMixins (line 6) | module DownloadMixins
        function build_download_options (line 12) | def build_download_options(parser, options)

FILE: plugins/commands/box/command/list.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandBox (line 7) | module CommandBox
      type Command (line 8) | module Command
        class List (line 9) | class List < Vagrant.plugin("2", :command)
          method execute (line 10) | def execute
          method list_boxes (line 42) | def list_boxes(boxes, extra_info)

FILE: plugins/commands/box/command/outdated.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandBox (line 9) | module CommandBox
      type Command (line 10) | module Command
        class Outdated (line 11) | class Outdated < Vagrant.plugin("2", :command)
          method execute (line 14) | def execute
          method outdated_global (line 59) | def outdated_global(download_options)

FILE: plugins/commands/box/command/prune.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandBox (line 7) | module CommandBox
      type Command (line 8) | module Command
        class Prune (line 9) | class Prune < Vagrant.plugin("2", :command)
          method execute (line 10) | def execute
          method delete_oldest_boxes (line 59) | def delete_oldest_boxes(boxes, only_provider, skip_confirm, only...

FILE: plugins/commands/box/command/remove.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandBox (line 7) | module CommandBox
      type Command (line 8) | module Command
        class Remove (line 9) | class Remove < Vagrant.plugin("2", :command)
          method execute (line 10) | def execute

FILE: plugins/commands/box/command/repackage.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandBox (line 9) | module CommandBox
      type Command (line 10) | module Command
        class Repackage (line 11) | class Repackage < Vagrant.plugin("2", :command)
          method execute (line 12) | def execute

FILE: plugins/commands/box/command/root.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandBox (line 7) | module CommandBox
      type Command (line 8) | module Command
        class Root (line 9) | class Root < Vagrant.plugin("2", :command)
          method synopsis (line 10) | def self.synopsis
          method initialize (line 14) | def initialize(argv, env)
          method execute (line 56) | def execute
          method help (line 73) | def help

FILE: plugins/commands/box/command/update.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandBox (line 9) | module CommandBox
      type Command (line 10) | module Command
        class Update (line 11) | class Update < Vagrant.plugin("2", :command)
          method execute (line 14) | def execute
          method update_specific (line 62) | def update_specific(name, provider, architecture, download_optio...
          method update_vms (line 120) | def update_vms(argv, provider, download_options, force)
          method box_update (line 169) | def box_update(box, version, ui, download_options, force)

FILE: plugins/commands/box/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandBox (line 7) | module CommandBox
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/cap/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandCap (line 7) | module CommandCap
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/cap/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandCap (line 7) | module CommandCap
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/cloud/auth/login.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type AuthCommand (line 8) | module AuthCommand
        type Command (line 9) | module Command
          class Login (line 10) | class Login < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method execute_check (line 64) | def execute_check(client)
            method execute_token (line 74) | def execute_token(client, token)

FILE: plugins/commands/cloud/auth/logout.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type AuthCommand (line 8) | module AuthCommand
        type Command (line 9) | module Command
          class Logout (line 10) | class Logout < Vagrant.plugin("2", :command)
            method execute (line 11) | def execute

FILE: plugins/commands/cloud/auth/middleware/add_authentication.rb
  type VagrantPlugins (line 10) | module VagrantPlugins
    type CloudCommand (line 11) | module CloudCommand
      class AddAuthentication (line 12) | class AddAuthentication
        method custom_host_notified! (line 20) | def self.custom_host_notified!
        method custom_host_notified? (line 24) | def self.custom_host_notified?
        method initialize (line 32) | def initialize(app, env)
        method call (line 38) | def call(env)

FILE: plugins/commands/cloud/auth/middleware/add_downloader_authentication.rb
  type VagrantPlugins (line 14) | module VagrantPlugins
    type CloudCommand (line 15) | module CloudCommand
      class AddDownloaderAuthentication (line 16) | class AddDownloaderAuthentication <  AddAuthentication
        method initialize (line 18) | def initialize(app, env)
        method call (line 23) | def call(env)

FILE: plugins/commands/cloud/auth/plugin.rb
  type VagrantPlugins (line 7) | module VagrantPlugins
    type CloudCommand (line 8) | module CloudCommand
      type AuthCommand (line 9) | module AuthCommand
        class Plugin (line 10) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/cloud/auth/root.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CloudCommand (line 5) | module CloudCommand
      type AuthCommand (line 6) | module AuthCommand
        type Command (line 7) | module Command
          class Root (line 8) | class Root < Vagrant.plugin("2", :command)
            method synopsis (line 9) | def self.synopsis
            method initialize (line 13) | def initialize(argv, env)
            method execute (line 32) | def execute
            method help (line 49) | def help

FILE: plugins/commands/cloud/auth/whoami.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type AuthCommand (line 8) | module AuthCommand
        type Command (line 9) | module Command
          class Whoami (line 10) | class Whoami < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method whoami (line 40) | def whoami(access_token)

FILE: plugins/commands/cloud/box/create.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type BoxCommand (line 8) | module BoxCommand
        type Command (line 9) | module Command
          class Create (line 10) | class Create < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method create_box (line 59) | def create_box(org, box_name, access_token, options={})

FILE: plugins/commands/cloud/box/delete.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type BoxCommand (line 8) | module BoxCommand
        type Command (line 9) | module Command
          class Delete (line 10) | class Delete < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method delete_box (line 55) | def delete_box(org, box_name, access_token)

FILE: plugins/commands/cloud/box/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type BoxCommand (line 8) | module BoxCommand
        class Plugin (line 9) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/cloud/box/root.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CloudCommand (line 5) | module CloudCommand
      type BoxCommand (line 6) | module BoxCommand
        type Command (line 7) | module Command
          class Root (line 8) | class Root < Vagrant.plugin("2", :command)
            method synopsis (line 9) | def self.synopsis
            method initialize (line 13) | def initialize(argv, env)
            method execute (line 36) | def execute
            method help (line 53) | def help

FILE: plugins/commands/cloud/box/show.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type BoxCommand (line 8) | module BoxCommand
        type Command (line 9) | module Command
          class Show (line 10) | class Show < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method show_box (line 65) | def show_box(org, box_name, access_token, options={})

FILE: plugins/commands/cloud/box/update.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type BoxCommand (line 8) | module BoxCommand
        type Command (line 9) | module Command
          class Update (line 10) | class Update < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method update_box (line 59) | def update_box(org, box_name, access_token, options={})

FILE: plugins/commands/cloud/client/client.rb
  type VagrantPlugins (line 10) | module VagrantPlugins
    type CloudCommand (line 11) | module CloudCommand
      class Client (line 12) | class Client
        method reset! (line 16) | def self.reset!
        method initialize (line 37) | def initialize(env)
        method clear_token (line 50) | def clear_token
        method logged_in? (line 59) | def logged_in?
        method login (line 78) | def login(description: nil, code: nil)
        method request_code (line 97) | def request_code(delivery_method)
        method store_token (line 115) | def store_token(token)
        method token (line 134) | def token
        method with_error_handling (line 178) | def with_error_handling(&block)
        method token_path (line 225) | def token_path
        method store_two_factor_information (line 229) | def store_two_factor_information(two_factor)

FILE: plugins/commands/cloud/errors.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CloudCommand (line 5) | module CloudCommand
      type Errors (line 6) | module Errors
        class Error (line 7) | class Error < Vagrant::Errors::VagrantError
        class ServerError (line 11) | class ServerError < Error
        class ServerUnreachable (line 15) | class ServerUnreachable < Error
        class Unauthorized (line 19) | class Unauthorized < Error
        class Unexpected (line 23) | class Unexpected < Error
        class TwoFactorRequired (line 27) | class TwoFactorRequired < Error

FILE: plugins/commands/cloud/list.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type Command (line 8) | module Command
        class List (line 9) | class List < Vagrant.plugin("2", :command)
          method execute (line 12) | def execute

FILE: plugins/commands/cloud/plugin.rb
  type VagrantPlugins (line 9) | module VagrantPlugins
    type CloudCommand (line 10) | module CloudCommand
      class Plugin (line 11) | class Plugin < Vagrant.plugin("2")
        method init! (line 35) | def self.init!

FILE: plugins/commands/cloud/provider/create.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type ProviderCommand (line 8) | module ProviderCommand
        type Command (line 9) | module Command
          class Create (line 10) | class Create < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method create_provider (line 72) | def create_provider(org, box, version, provider, url, access_t...

FILE: plugins/commands/cloud/provider/delete.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type ProviderCommand (line 8) | module ProviderCommand
        type Command (line 9) | module Command
          class Delete (line 10) | class Delete < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method select_provider_architecture (line 62) | def select_provider_architecture(account, org, box, version, p...
            method delete_provider (line 92) | def delete_provider(org, box, version, provider, architecture,...

FILE: plugins/commands/cloud/provider/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type ProviderCommand (line 8) | module ProviderCommand
        class Plugin (line 9) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/cloud/provider/root.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CloudCommand (line 5) | module CloudCommand
      type ProviderCommand (line 6) | module ProviderCommand
        type Command (line 7) | module Command
          class Root (line 8) | class Root < Vagrant.plugin("2", :command)
            method synopsis (line 9) | def self.synopsis
            method initialize (line 13) | def initialize(argv, env)
            method execute (line 36) | def execute
            method help (line 53) | def help

FILE: plugins/commands/cloud/provider/update.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type ProviderCommand (line 8) | module ProviderCommand
        type Command (line 9) | module Command
          class Update (line 10) | class Update < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method update_provider (line 69) | def update_provider(org, box, version, provider, architecture,...

FILE: plugins/commands/cloud/provider/upload.rb
  type VagrantPlugins (line 7) | module VagrantPlugins
    type CloudCommand (line 8) | module CloudCommand
      type ProviderCommand (line 9) | module ProviderCommand
        type Command (line 10) | module Command
          class Upload (line 11) | class Upload < Vagrant.plugin("2", :command)
            method execute (line 14) | def execute
            method upload_provider (line 60) | def upload_provider(org, box, version, provider, architecture,...

FILE: plugins/commands/cloud/publish.rb
  type VagrantPlugins (line 7) | module VagrantPlugins
    type CloudCommand (line 8) | module CloudCommand
      type Command (line 9) | module Command
        class Publish (line 10) | class Publish < Vagrant.plugin("2", :command)
          method execute (line 13) | def execute
          method upload_box_file (line 144) | def upload_box_file(provider, box_file, options={})
          method release_version (line 167) | def release_version(version)
          method set_box_info (line 181) | def set_box_info(box, options={})
          method set_version_info (line 194) | def set_version_info(version, options={})
          method set_provider_info (line 209) | def set_provider_info(provider, options={})
          method load_version_provider (line 223) | def load_version_provider(version, provider_name, architecture)
          method load_box_version (line 237) | def load_box_version(box, version)
          method load_box (line 249) | def load_box(org, box_name, access_token)
          method display_preamble (line 275) | def display_preamble(org, box_name, version, provider_name, opti...

FILE: plugins/commands/cloud/root.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CloudCommand (line 5) | module CloudCommand
      type Command (line 6) | module Command
        class Root (line 7) | class Root < Vagrant.plugin("2", :command)
          method synopsis (line 8) | def self.synopsis
          method initialize (line 12) | def initialize(argv, env)
          method execute (line 63) | def execute
          method help (line 80) | def help

FILE: plugins/commands/cloud/search.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type Command (line 8) | module Command
        class Search (line 9) | class Search < Vagrant.plugin("2", :command)
          method execute (line 12) | def execute
          method search (line 79) | def search(query, access_token, options={})

FILE: plugins/commands/cloud/util.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CloudCommand (line 5) | module CloudCommand
      type Util (line 6) | module Util
        function api_server_url (line 8) | def api_server_url
        function client_login (line 31) | def client_login(env, options={})
        function format_search_results (line 99) | def format_search_results(search_results, short, json, env)
        function format_box_results (line 130) | def format_box_results(box, env, options={})
        function with_box (line 162) | def with_box(account:, org:, box:)
        function with_version (line 182) | def with_version(account:, org:, box:, version:)
        function with_provider (line 204) | def with_provider(account:, org:, box:, version:, provider:, archi...
        function box_info (line 225) | def box_info(box, options={})
        function version_info (line 270) | def version_info(version)
        function provider_info (line 289) | def provider_info(provider)
        function print_search_table (line 308) | def print_search_table(env, column_labels, results, to_rjust_keys)
        function write_header (line 327) | def write_header(env, columns)
        function write_divider (line 337) | def write_divider(env, columns)
        function write_line (line 349) | def write_line(env, columns, h, to_rjust_keys)
        function format_downloads (line 366) | def format_downloads(number)

FILE: plugins/commands/cloud/version/create.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type VersionCommand (line 8) | module VersionCommand
        type Command (line 9) | module Command
          class Create (line 10) | class Create < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method create_version (line 53) | def create_version(org, box_name, box_version, access_token, o...

FILE: plugins/commands/cloud/version/delete.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type VersionCommand (line 8) | module VersionCommand
        type Command (line 9) | module Command
          class Delete (line 10) | class Delete < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method delete_version (line 57) | def delete_version(org, box_name, box_version, access_token, o...

FILE: plugins/commands/cloud/version/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type VersionCommand (line 8) | module VersionCommand
        class Plugin (line 9) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/cloud/version/release.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type VersionCommand (line 8) | module VersionCommand
        type Command (line 9) | module Command
          class Release (line 10) | class Release < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method release_version (line 57) | def release_version(org, box_name, version, access_token, opti...

FILE: plugins/commands/cloud/version/revoke.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type VersionCommand (line 8) | module VersionCommand
        type Command (line 9) | module Command
          class Revoke (line 10) | class Revoke < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method revoke_version (line 57) | def revoke_version(org, box_name, box_version, access_token, o...

FILE: plugins/commands/cloud/version/root.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CloudCommand (line 5) | module CloudCommand
      type VersionCommand (line 6) | module VersionCommand
        type Command (line 7) | module Command
          class Root (line 8) | class Root < Vagrant.plugin("2", :command)
            method synopsis (line 9) | def self.synopsis
            method initialize (line 13) | def initialize(argv, env)
            method execute (line 40) | def execute
            method help (line 57) | def help

FILE: plugins/commands/cloud/version/update.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CloudCommand (line 7) | module CloudCommand
      type VersionCommand (line 8) | module VersionCommand
        type Command (line 9) | module Command
          class Update (line 10) | class Update < Vagrant.plugin("2", :command)
            method execute (line 13) | def execute
            method update_version (line 52) | def update_version(org, box_name, box_version, access_token, o...

FILE: plugins/commands/destroy/command.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommandDestroy (line 5) | module CommandDestroy
      class Command (line 6) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 7) | def self.synopsis
        method execute (line 11) | def execute

FILE: plugins/commands/destroy/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandDestroy (line 7) | module CommandDestroy
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/global-status/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandGlobalStatus (line 7) | module CommandGlobalStatus
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/global-status/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandGlobalStatus (line 7) | module CommandGlobalStatus
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/halt/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandHalt (line 7) | module CommandHalt
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/halt/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandHalt (line 7) | module CommandHalt
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/help/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandHelp (line 7) | module CommandHelp
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/help/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandHelp (line 7) | module CommandHelp
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/init/command.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandInit (line 9) | module CommandInit
      class Command (line 10) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 11) | def self.synopsis
        method execute (line 15) | def execute

FILE: plugins/commands/init/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandInit (line 7) | module CommandInit
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/list-commands/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandListCommands (line 7) | module CommandListCommands
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/list-commands/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandListCommands (line 7) | module CommandListCommands
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/login/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type LoginCommand (line 7) | module LoginCommand
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")
        method init! (line 20) | def self.init!

FILE: plugins/commands/package/command.rb
  type VagrantPlugins (line 7) | module VagrantPlugins
    type CommandPackage (line 8) | module CommandPackage
      class Command (line 9) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 10) | def self.synopsis
        method execute (line 14) | def execute
        method package_base (line 61) | def package_base(options)
        method package_target (line 83) | def package_target(name, options)
        method package_vm (line 90) | def package_vm(vm, options)

FILE: plugins/commands/package/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPackage (line 7) | module CommandPackage
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/plugin/action.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandPlugin (line 9) | module CommandPlugin
      type Action (line 10) | module Action
        function action_expunge (line 12) | def self.action_expunge
        function action_install (line 19) | def self.action_install
        function action_license (line 26) | def self.action_license
        function action_list (line 34) | def self.action_list
        function action_repair (line 41) | def self.action_repair
        function action_repair_local (line 48) | def self.action_repair_local
        function action_uninstall (line 55) | def self.action_uninstall
        function action_update (line 63) | def self.action_update

FILE: plugins/commands/plugin/action/expunge_plugins.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPlugin (line 7) | module CommandPlugin
      type Action (line 8) | module Action
        class ExpungePlugins (line 16) | class ExpungePlugins
          method initialize (line 17) | def initialize(app, env)
          method call (line 21) | def call(env)

FILE: plugins/commands/plugin/action/install_gem.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandPlugin (line 9) | module CommandPlugin
      type Action (line 10) | module Action
        class InstallGem (line 13) | class InstallGem
          method initialize (line 14) | def initialize(app, env)
          method call (line 19) | def call(env)
          method recover (line 66) | def recover(env)

FILE: plugins/commands/plugin/action/license_plugin.rb
  type VagrantPlugins (line 11) | module VagrantPlugins
    type CommandPlugin (line 12) | module CommandPlugin
      type Action (line 13) | module Action
        class LicensePlugin (line 16) | class LicensePlugin
          method initialize (line 17) | def initialize(app, env)
          method call (line 22) | def call(env)

FILE: plugins/commands/plugin/action/list_plugins.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPlugin (line 7) | module CommandPlugin
      type Action (line 8) | module Action
        class ListPlugins (line 16) | class ListPlugins
          method initialize (line 17) | def initialize(app, env)
          method call (line 21) | def call(env)

FILE: plugins/commands/plugin/action/plugin_exists_check.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPlugin (line 7) | module CommandPlugin
      type Action (line 8) | module Action
        class PluginExistsCheck (line 11) | class PluginExistsCheck
          method initialize (line 12) | def initialize(app, env)
          method call (line 16) | def call(env)

FILE: plugins/commands/plugin/action/repair_plugins.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPlugin (line 7) | module CommandPlugin
      type Action (line 8) | module Action
        class RepairPlugins (line 17) | class RepairPlugins
          method initialize (line 18) | def initialize(app, env)
          method call (line 23) | def call(env)
        class RepairPluginsLocal (line 43) | class RepairPluginsLocal
          method initialize (line 44) | def initialize(app, env)
          method call (line 49) | def call(env)

FILE: plugins/commands/plugin/action/uninstall_plugin.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommandPlugin (line 5) | module CommandPlugin
      type Action (line 6) | module Action
        class UninstallPlugin (line 10) | class UninstallPlugin
          method initialize (line 11) | def initialize(app, env)
          method call (line 15) | def call(env)

FILE: plugins/commands/plugin/action/update_gems.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPlugin (line 7) | module CommandPlugin
      type Action (line 8) | module Action
        class UpdateGems (line 9) | class UpdateGems
          method initialize (line 10) | def initialize(app, env)
          method call (line 14) | def call(env)

FILE: plugins/commands/plugin/command/base.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPlugin (line 7) | module CommandPlugin
      type Command (line 8) | module Command
        class Base (line 9) | class Base < Vagrant.plugin("2", :command)
          method action (line 16) | def action(callable, env=nil)

FILE: plugins/commands/plugin/command/expunge.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandPlugin (line 9) | module CommandPlugin
      type Command (line 10) | module Command
        class Expunge (line 11) | class Expunge < Base
          method execute (line 12) | def execute

FILE: plugins/commands/plugin/command/install.rb
  type VagrantPlugins (line 9) | module VagrantPlugins
    type CommandPlugin (line 10) | module CommandPlugin
      type Command (line 11) | module Command
        class Install (line 12) | class Install < Base
          method execute (line 17) | def execute

FILE: plugins/commands/plugin/command/license.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandPlugin (line 9) | module CommandPlugin
      type Command (line 10) | module Command
        class License (line 11) | class License < Base
          method execute (line 12) | def execute

FILE: plugins/commands/plugin/command/list.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandPlugin (line 9) | module CommandPlugin
      type Command (line 10) | module Command
        class List (line 11) | class List < Base
          method execute (line 12) | def execute

FILE: plugins/commands/plugin/command/mixin_install_opts.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommandPlugin (line 5) | module CommandPlugin
      type Command (line 6) | module Command
        type MixinInstallOpts (line 7) | module MixinInstallOpts
          function build_install_opts (line 8) | def build_install_opts(o, options)

FILE: plugins/commands/plugin/command/repair.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandPlugin (line 9) | module CommandPlugin
      type Command (line 10) | module Command
        class Repair (line 11) | class Repair < Base
          method execute (line 12) | def execute

FILE: plugins/commands/plugin/command/root.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPlugin (line 7) | module CommandPlugin
      type Command (line 8) | module Command
        class Root (line 9) | class Root < Vagrant.plugin("2", :command)
          method synopsis (line 10) | def self.synopsis
          method initialize (line 14) | def initialize(argv, env)
          method execute (line 56) | def execute
          method help (line 73) | def help

FILE: plugins/commands/plugin/command/uninstall.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandPlugin (line 9) | module CommandPlugin
      type Command (line 10) | module Command
        class Uninstall (line 11) | class Uninstall < Base
          method execute (line 12) | def execute

FILE: plugins/commands/plugin/command/update.rb
  type VagrantPlugins (line 9) | module VagrantPlugins
    type CommandPlugin (line 10) | module CommandPlugin
      type Command (line 11) | module Command
        class Update (line 12) | class Update < Base
          method execute (line 15) | def execute

FILE: plugins/commands/plugin/gem_helper.rb
  type VagrantPlugins (line 10) | module VagrantPlugins
    type CommandPlugin (line 11) | module CommandPlugin
      class GemHelper (line 14) | class GemHelper
        method initialize (line 15) | def initialize(gem_home)
        method with_environment (line 23) | def with_environment
        class NilGemConfig (line 72) | class NilGemConfig < Gem::ConfigFile
          method initialize (line 73) | def initialize

FILE: plugins/commands/plugin/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPlugin (line 7) | module CommandPlugin
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/port/command.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandPort (line 9) | module CommandPort
      class Command (line 10) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 13) | def self.synopsis
        method execute (line 17) | def execute
        method print_all (line 65) | def print_all(vm, ports)
        method print_single (line 77) | def print_single(vm, ports, target)

FILE: plugins/commands/port/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPort (line 7) | module CommandPort
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")
        method init! (line 22) | def self.init!

FILE: plugins/commands/powershell/command.rb
  type VagrantPlugins (line 9) | module VagrantPlugins
    type CommandPS (line 10) | module CommandPS
      class Command (line 11) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 12) | def self.synopsis
        method execute (line 16) | def execute
        method ready_ps_remoting_for (line 98) | def ready_ps_remoting_for(machine, ps_info)
        method reset_ps_remoting_for (line 118) | def reset_ps_remoting_for(machine, ps_info)

FILE: plugins/commands/powershell/errors.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommandPS (line 5) | module CommandPS
      type Errors (line 6) | module Errors
        class PSCommandError (line 8) | class PSCommandError < Vagrant::Errors::VagrantError
        class HostUnsupported (line 12) | class HostUnsupported < PSCommandError
        class PSRemotingUndetected (line 16) | class PSRemotingUndetected < PSCommandError
        class PowerShellError (line 20) | class PowerShellError < PSCommandError
        class ElevatedNoCommand (line 24) | class ElevatedNoCommand < PSCommandError

FILE: plugins/commands/powershell/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPS (line 7) | module CommandPS
      class Plugin (line 10) | class Plugin < Vagrant.plugin("2")
        method init! (line 25) | def self.init!

FILE: plugins/commands/provider/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandProvider (line 7) | module CommandProvider
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/provider/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandProvider (line 7) | module CommandProvider
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/provision/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandProvision (line 7) | module CommandProvision
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/provision/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandProvision (line 7) | module CommandProvision
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/push/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPush (line 7) | module CommandPush
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 14) | def execute
        method validate_pushes! (line 53) | def validate_pushes!(pushes, name = nil)

FILE: plugins/commands/push/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandPush (line 7) | module CommandPush
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/rdp/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandRDP (line 7) | module CommandRDP
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute
        method get_rdp_info (line 59) | def get_rdp_info(machine)

FILE: plugins/commands/rdp/config.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommandRDP (line 5) | module CommandRDP
      class Config (line 6) | class Config < Vagrant.plugin("2", :config)
        method initialize (line 11) | def initialize
        method finalize! (line 17) | def finalize!
        method validate (line 23) | def validate(machine)

FILE: plugins/commands/rdp/errors.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommandRDP (line 5) | module CommandRDP
      type Errors (line 6) | module Errors
        class RDPError (line 8) | class RDPError < Vagrant::Errors::VagrantError
        class HostUnsupported (line 12) | class HostUnsupported < RDPError
        class RDPUndetected (line 16) | class RDPUndetected < RDPError

FILE: plugins/commands/rdp/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandRDP (line 7) | module CommandRDP
      class Plugin (line 10) | class Plugin < Vagrant.plugin("2")
        method init! (line 30) | def self.init!

FILE: plugins/commands/reload/command.rb
  type VagrantPlugins (line 10) | module VagrantPlugins
    type CommandReload (line 11) | module CommandReload
      class Command (line 12) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 17) | def self.synopsis
        method execute (line 21) | def execute

FILE: plugins/commands/reload/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandReload (line 7) | module CommandReload
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/resume/command.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandResume (line 9) | module CommandResume
      class Command (line 10) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 15) | def self.synopsis
        method execute (line 19) | def execute

FILE: plugins/commands/resume/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandResume (line 7) | module CommandResume
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/snapshot/command/delete.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSnapshot (line 7) | module CommandSnapshot
      type Command (line 8) | module Command
        class Delete (line 9) | class Delete < Vagrant.plugin("2", :command)
          method execute (line 10) | def execute

FILE: plugins/commands/snapshot/command/list.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSnapshot (line 7) | module CommandSnapshot
      type Command (line 8) | module Command
        class List (line 9) | class List < Vagrant.plugin("2", :command)
          method execute (line 10) | def execute

FILE: plugins/commands/snapshot/command/pop.rb
  type VagrantPlugins (line 11) | module VagrantPlugins
    type CommandSnapshot (line 12) | module CommandSnapshot
      type Command (line 13) | module Command
        class Pop (line 14) | class Pop < Vagrant.plugin("2", :command)
          method execute (line 18) | def execute

FILE: plugins/commands/snapshot/command/push.rb
  type VagrantPlugins (line 9) | module VagrantPlugins
    type CommandSnapshot (line 10) | module CommandSnapshot
      type Command (line 11) | module Command
        class Push (line 12) | class Push < Vagrant.plugin("2", :command)
          method execute (line 15) | def execute

FILE: plugins/commands/snapshot/command/push_shared.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSnapshot (line 7) | module CommandSnapshot
      type Command (line 8) | module Command
        type PushShared (line 9) | module PushShared
          function shared_exec (line 10) | def shared_exec(argv, m, opts={})
          function push (line 26) | def push(machine, opts={})
          function pop (line 33) | def pop(machine, opts={})

FILE: plugins/commands/snapshot/command/restore.rb
  type VagrantPlugins (line 8) | module VagrantPlugins
    type CommandSnapshot (line 9) | module CommandSnapshot
      type Command (line 10) | module Command
        class Restore (line 11) | class Restore < Vagrant.plugin("2", :command)
          method execute (line 15) | def execute

FILE: plugins/commands/snapshot/command/root.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSnapshot (line 7) | module CommandSnapshot
      type Command (line 8) | module Command
        class Root (line 9) | class Root < Vagrant.plugin("2", :command)
          method synopsis (line 10) | def self.synopsis
          method initialize (line 14) | def initialize(argv, env)
          method execute (line 51) | def execute
          method help (line 72) | def help

FILE: plugins/commands/snapshot/command/save.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSnapshot (line 7) | module CommandSnapshot
      type Command (line 8) | module Command
        class Save (line 9) | class Save < Vagrant.plugin("2", :command)
          method execute (line 10) | def execute

FILE: plugins/commands/snapshot/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSnapshot (line 7) | module CommandSnapshot
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/ssh/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSSH (line 7) | module CommandSSH
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/ssh/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSSH (line 7) | module CommandSSH
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/ssh_config/command.rb
  type VagrantPlugins (line 9) | module VagrantPlugins
    type CommandSSHConfig (line 10) | module CommandSSHConfig
      class Command (line 11) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 14) | def self.synopsis
        method convert_win_paths (line 18) | def convert_win_paths(paths)
        method execute (line 22) | def execute

FILE: plugins/commands/ssh_config/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSSHConfig (line 7) | module CommandSSHConfig
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/status/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandStatus (line 7) | module CommandStatus
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/status/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandStatus (line 7) | module CommandStatus
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/suspend/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSuspend (line 7) | module CommandSuspend
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/suspend/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandSuspend (line 7) | module CommandSuspend
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/up/command.rb
  type VagrantPlugins (line 9) | module VagrantPlugins
    type CommandUp (line 10) | module CommandUp
      class Command (line 11) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 14) | def self.synopsis
        method execute (line 18) | def execute
        method install_providers (line 137) | def install_providers(names, provider: nil)

FILE: plugins/commands/up/middleware/store_box_metadata.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandUp (line 7) | module CommandUp
      class StoreBoxMetadata (line 13) | class StoreBoxMetadata
        method initialize (line 14) | def initialize(app, env)
        method call (line 19) | def call(env)

FILE: plugins/commands/up/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandUp (line 7) | module CommandUp
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/up/start_mixins.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandUp (line 7) | module CommandUp
      type StartMixins (line 8) | module StartMixins
        function build_start_options (line 14) | def build_start_options(parser, options)
        function validate_provisioner_flags! (line 34) | def validate_provisioner_flags!(options, argv)

FILE: plugins/commands/upload/command.rb
  type VagrantPlugins (line 7) | module VagrantPlugins
    type CommandUpload (line 8) | module CommandUpload
      class Command (line 9) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 13) | def self.synopsis
        method execute (line 17) | def execute
        method compression_setup! (line 135) | def compression_setup!(machine, options)
        method compress_source_zip (line 159) | def compress_source_zip(path)
        method compress_source_tgz (line 191) | def compress_source_tgz(path)

FILE: plugins/commands/upload/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandUpload (line 7) | module CommandUpload
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/validate/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandValidate (line 7) | module CommandValidate
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute
        method mockup_providers! (line 61) | def mockup_providers!

FILE: plugins/commands/validate/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandValidate (line 7) | module CommandValidate
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/version/command.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandVersion (line 7) | module CommandVersion
      class Command (line 8) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 9) | def self.synopsis
        method execute (line 13) | def execute

FILE: plugins/commands/version/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandVersion (line 7) | module CommandVersion
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/winrm/command.rb
  type VagrantPlugins (line 7) | module VagrantPlugins
    type CommandWinRM (line 8) | module CommandWinRM
      class Command (line 9) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 12) | def self.synopsis
        method execute (line 16) | def execute

FILE: plugins/commands/winrm/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandWinRM (line 7) | module CommandWinRM
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/commands/winrm_config/command.rb
  type VagrantPlugins (line 9) | module VagrantPlugins
    type CommandWinRMConfig (line 10) | module CommandWinRMConfig
      class Command (line 11) | class Command < Vagrant.plugin("2", :command)
        method synopsis (line 14) | def self.synopsis
        method convert_win_paths (line 18) | def convert_win_paths(paths)
        method execute (line 22) | def execute
        method get_rdp_info (line 74) | def get_rdp_info(machine)

FILE: plugins/commands/winrm_config/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommandWinRMConfig (line 7) | module CommandWinRMConfig
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/communicators/none/communicator.rb
  type VagrantPlugins (line 7) | module VagrantPlugins
    type CommunicatorNone (line 8) | module CommunicatorNone
      class Communicator (line 15) | class Communicator < Vagrant.plugin("2", :communicator)
        method match? (line 16) | def self.match?(_)
        method initialize (line 21) | def initialize(_)
        method ready? (line 25) | def ready?
        method execute (line 30) | def execute(*_)
        method sudo (line 35) | def sudo(*_)
        method test (line 40) | def test(*_)

FILE: plugins/communicators/none/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommunicatorNone (line 8) | module CommunicatorNone
      class Plugin (line 9) | class Plugin < Vagrant.plugin("2")

FILE: plugins/communicators/ssh/communicator.rb
  type VagrantPlugins (line 22) | module VagrantPlugins
    type CommunicatorSSH (line 23) | module CommunicatorSSH
      class Communicator (line 25) | class Communicator < Vagrant.plugin("2", :communicator)
        method match? (line 52) | def self.match?(machine)
        method initialize (line 57) | def initialize(machine)
        method wait_for_ready (line 65) | def wait_for_ready(timeout)
        method ready? (line 149) | def ready?
        method execute (line 281) | def execute(command, opts=nil, &block)
        method sudo (line 333) | def sudo(command, opts=nil, &block)
        method download (line 339) | def download(from, to=nil)
        method test (line 347) | def test(command, opts=nil)
        method upload (line 352) | def upload(from, to)
        method reset! (line 411) | def reset!
        method generate_environment_export (line 420) | def generate_environment_export(env_key, env_value)
        method connect (line 428) | def connect(**opts)
        method shell_cmd (line 592) | def shell_cmd(opts)
        method shell_execute (line 606) | def shell_execute(connection, command, **opts)
        method scp_connect (line 790) | def scp_connect
        method insecure_key? (line 807) | def insecure_key?(path)
        method create_remote_directory (line 815) | def create_remote_directory(dir)
        method machine_config_ssh (line 819) | def machine_config_ssh
        class ServerDataError (line 825) | class ServerDataError < StandardError; end
        method supports_key_type? (line 833) | def supports_key_type?(type)
        method supported_key_types (line 841) | def supported_key_types

FILE: plugins/communicators/ssh/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommunicatorSSH (line 7) | module CommunicatorSSH
      class Plugin (line 8) | class Plugin < Vagrant.plugin("2")

FILE: plugins/communicators/winrm/command_filter.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommunicatorWinRM (line 5) | module CommunicatorWinRM
      class CommandFilter (line 7) | class CommandFilter
        method filter (line 24) | def filter(command)
        method command_filters (line 32) | def command_filters
        method create_command_filters (line 38) | def create_command_filters

FILE: plugins/communicators/winrm/command_filters/cat.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommunicatorWinRM (line 5) | module CommunicatorWinRM
      type CommandFilters (line 6) | module CommandFilters
        class Cat (line 8) | class Cat
          method filter (line 9) | def filter(command)
          method accept? (line 17) | def accept?(command)

FILE: plugins/communicators/winrm/command_filters/chmod.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommunicatorWinRM (line 5) | module CommunicatorWinRM
      type CommandFilters (line 6) | module CommandFilters
        class Chmod (line 8) | class Chmod
          method filter (line 9) | def filter(command)
          method accept? (line 14) | def accept?(command)

FILE: plugins/communicators/winrm/command_filters/chown.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommunicatorWinRM (line 5) | module CommunicatorWinRM
      type CommandFilters (line 6) | module CommandFilters
        class Chown (line 8) | class Chown
          method filter (line 9) | def filter(command)
          method accept? (line 14) | def accept?(command)

FILE: plugins/communicators/winrm/command_filters/grep.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommunicatorWinRM (line 5) | module CommunicatorWinRM
      type CommandFilters (line 6) | module CommandFilters
        class Grep (line 8) | class Grep
          method filter (line 10) | def filter(command)
          method accept? (line 20) | def accept?(command)

FILE: plugins/communicators/winrm/command_filters/mkdir.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommunicatorWinRM (line 7) | module CommunicatorWinRM
      type CommandFilters (line 8) | module CommandFilters
        class Mkdir (line 10) | class Mkdir
          method filter (line 11) | def filter(command)
          method accept? (line 24) | def accept?(command)

FILE: plugins/communicators/winrm/command_filters/rm.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommunicatorWinRM (line 7) | module CommunicatorWinRM
      type CommandFilters (line 8) | module CommandFilters
        class Rm (line 10) | class Rm
          method filter (line 11) | def filter(command)
          method accept? (line 44) | def accept?(command)

FILE: plugins/communicators/winrm/command_filters/test.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommunicatorWinRM (line 7) | module CommunicatorWinRM
      type CommandFilters (line 8) | module CommandFilters
        class Test (line 10) | class Test
          method filter (line 11) | def filter(command)
          method accept? (line 30) | def accept?(command)
          method check_for_directory (line 36) | def check_for_directory(path)
          method check_for_file (line 46) | def check_for_file(path)
          method check_exists (line 56) | def check_exists(path)

FILE: plugins/communicators/winrm/command_filters/uname.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommunicatorWinRM (line 5) | module CommunicatorWinRM
      type CommandFilters (line 6) | module CommandFilters
        class Uname (line 8) | class Uname
          method filter (line 9) | def filter(command)
          method accept? (line 24) | def accept?(command)

FILE: plugins/communicators/winrm/command_filters/which.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommunicatorWinRM (line 7) | module CommunicatorWinRM
      type CommandFilters (line 8) | module CommandFilters
        class Which (line 10) | class Which
          method filter (line 11) | def filter(command)
          method accept? (line 21) | def accept?(command)

FILE: plugins/communicators/winrm/communicator.rb
  type VagrantPlugins (line 12) | module VagrantPlugins
    type CommunicatorWinRM (line 13) | module CommunicatorWinRM
      class Communicator (line 15) | class Communicator < Vagrant.plugin("2", :communicator)
        method match? (line 18) | def self.match?(machine)
        method initialize (line 24) | def initialize(machine)
        method wait_for_ready (line 33) | def wait_for_ready(timeout)
        method ready? (line 106) | def ready?
        method reset! (line 127) | def reset!
        method shell (line 131) | def shell(reload=false)
        method execute (line 136) | def execute(command, opts={}, &block)
        method test (line 160) | def test(command, opts=nil)
        method upload (line 178) | def upload(from, to)
        method download (line 183) | def download(from, to)
        method create_shell (line 192) | def create_shell
        method execution_output (line 204) | def execution_output(output, opts)
        method raise_execution_error (line 214) | def raise_execution_error(output, opts)

FILE: plugins/communicators/winrm/config.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommunicatorWinRM (line 5) | module CommunicatorWinRM
      class Config (line 6) | class Config < Vagrant.plugin("2", :config)
        method initialize (line 21) | def initialize
        method finalize! (line 37) | def finalize!
        method validate (line 54) | def validate(machine)

FILE: plugins/communicators/winrm/errors.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommunicatorWinRM (line 5) | module CommunicatorWinRM
      type Errors (line 6) | module Errors
        class WinRMError (line 8) | class WinRMError < Vagrant::Errors::VagrantError
        class TransientError (line 12) | class TransientError < WinRMError
        class AuthenticationFailed (line 15) | class AuthenticationFailed < WinRMError
        class ExecutionError (line 19) | class ExecutionError < WinRMError
        class InvalidShell (line 23) | class InvalidShell < WinRMError
        class WinRMBadExitStatus (line 27) | class WinRMBadExitStatus < WinRMError
        class WinRMNotReady (line 31) | class WinRMNotReady < WinRMError
        class WinRMFileTransferError (line 35) | class WinRMFileTransferError < WinRMError
        class InvalidTransport (line 39) | class InvalidTransport < WinRMError
        class SSLError (line 43) | class SSLError < WinRMError
        class ConnectionTimeout (line 47) | class ConnectionTimeout < TransientError
        class Disconnected (line 51) | class Disconnected < TransientError
        class ConnectionRefused (line 55) | class ConnectionRefused < TransientError
        class ConnectionReset (line 59) | class ConnectionReset < TransientError
        class HostDown (line 63) | class HostDown < TransientError
        class NoRoute (line 67) | class NoRoute < TransientError

FILE: plugins/communicators/winrm/helper.rb
  type VagrantPlugins (line 4) | module VagrantPlugins
    type CommunicatorWinRM (line 5) | module CommunicatorWinRM
      type Helper (line 9) | module Helper
        function winrm_info (line 17) | def self.winrm_info(machine)
        function winrm_address (line 34) | def self.winrm_address(machine)
        function winrm_info_invalid? (line 43) | def self.winrm_info_invalid?(ssh_info)
        function winrm_port (line 52) | def self.winrm_port(machine, local=true)

FILE: plugins/communicators/winrm/plugin.rb
  type VagrantPlugins (line 6) | module VagrantPlugins
    type CommunicatorWinRM (line 7) | module CommunicatorWinRM
      class Plugin (line 10) | class Plugin < Vagrant.plugin("2")
        method init! (line 30) | def self.init!
        method reset! (line 64) | def self.reset!

FILE: plugins/communicators/winrm/shell.rb
  type VagrantPlugins (line 18) | module VagrantPlugins
    type CommunicatorWinRM (line 19) | module CommunicatorWinRM
      class WinRMShell (line 20) | class WinRMShell
        method initialize (line 52) | def initialize(host, port, config)
        method powershell (line 64) | def powershell(command, opts = {}, &block)
        method cmd (line 70) | def cmd(command, opts = {}, &block)
        method elevated (line 78) | def elevated(command, opts = {}, &block)
        method wql (line 100) | def wql(query, opts = {}, &block)
        method upload (line 112) | def upload(from, to)
        method download (line 133) | def download(from, to)
        method execute_with_rescue (line 140) | def execute_with_rescue(shell, command, &block)
        method handle_output (line 146) | def handle_output(shell, command, &block)
        method raise_winrm_exception (line 167) | def raise_winrm_exception(exception, shell = nil, command = nil)
        method new_connection (line 210) | def new_connection
        method connection (line 222) | def connection
        method endpoint (line 226) | def endpoint
        method endpoint_options (line 237) | def endpoint_options
        method elevated_username (line 251) | def elevated_username

FILE: plugins/communicators/winssh/communicator.rb
  type VagrantPlugins (line 8)
Condensed preview — 1925 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,781K chars).
[
  {
    "path": ".ci/.ci-utility-files/common.sh",
    "chars": 120851,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2019, 2025\n# SPDX-License-Identifier: MPL-2.0\n#\n# shellcheck disable=SC2119\n# "
  },
  {
    "path": ".ci/build",
    "chars": 960,
    "preview": "#!/usr/bin/env bash\n\ncsource=\"${BASH_SOURCE[0]}\"\nwhile [ -h \"$csource\" ] ; do csource=\"$(readlink \"$csource\")\"; done\nroo"
  },
  {
    "path": ".ci/dev-build",
    "chars": 1063,
    "preview": "#!/usr/bin/env bash\n\ncsource=\"${BASH_SOURCE[0]}\"\nwhile [ -h \"$csource\" ] ; do csource=\"$(readlink \"$csource\")\"; done\nroo"
  },
  {
    "path": ".ci/generate-licenses",
    "chars": 2408,
    "preview": "#!/usr/bin/env bash\n\ncsource=\"${BASH_SOURCE[0]}\"\nwhile [ -h \"$csource\" ] ; do csource=\"$(readlink \"$csource\")\"; done\nroo"
  },
  {
    "path": ".ci/load-ci.sh",
    "chars": 631,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2019, 2025\n# SPDX-License-Identifier: MPL-2.0\n\ncsource=\"${BASH_SOURCE[0]}\"\nwhi"
  },
  {
    "path": ".ci/nightly-build",
    "chars": 568,
    "preview": "#!/usr/bin/env bash\n\ncsource=\"${BASH_SOURCE[0]}\"\nwhile [ -h \"$csource\" ] ; do csource=\"$(readlink \"$csource\")\"; done\nroo"
  },
  {
    "path": ".ci/release",
    "chars": 890,
    "preview": "#!/usr/bin/env bash\n\ncsource=\"${BASH_SOURCE[0]}\"\nwhile [ -h \"$csource\" ] ; do csource=\"$(readlink \"$csource\")\"; done\nroo"
  },
  {
    "path": ".ci/release-initiator",
    "chars": 4076,
    "preview": "#!/usr/bin/env bash\n\ncsource=\"${BASH_SOURCE[0]}\"\nwhile [ -h \"$csource\" ] ; do csource=\"$(readlink \"$csource\")\"; done\nroo"
  },
  {
    "path": ".ci/spec/clean-packet.sh",
    "chars": 995,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n\ncsource=\"${BASH_SOURCE[0]}\"\nw"
  },
  {
    "path": ".ci/spec/create-hosts.sh",
    "chars": 1901,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n\ncsource=\"${BASH_SOURCE[0]}\"\nw"
  },
  {
    "path": ".ci/spec/create-packet.sh",
    "chars": 736,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n\nexport PACKET_EXEC_PREFER_FAC"
  },
  {
    "path": ".ci/spec/env.sh",
    "chars": 1246,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n\n# packet and job configuratio"
  },
  {
    "path": ".ci/spec/notify-success.sh",
    "chars": 363,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n\ncsource=\"${BASH_SOURCE[0]}\"\nw"
  },
  {
    "path": ".ci/spec/pull-log.sh",
    "chars": 1055,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n\ncsource=\"${BASH_SOURCE[0]}\"\nw"
  },
  {
    "path": ".ci/spec/run-test.sh",
    "chars": 1151,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n\ncsource=\"${BASH_SOURCE[0]}\"\nw"
  },
  {
    "path": ".ci/sync.sh",
    "chars": 1430,
    "preview": "#!/usr/bin/env bash\n# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n\ncsource=\"${BASH_SOURCE[0]}\"\nw"
  },
  {
    "path": ".copywrite.hcl",
    "chars": 294,
    "preview": "schema_version = 1\n\nproject {\n  license        = \"BUSL-1.1\"\n  copyright_year = 2024\n\n  header_ignore = [\n    \"internal/p"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 21,
    "preview": "* @hashicorp/Vagrant\n"
  },
  {
    "path": ".github/CODE_OF_CONDUCT.md",
    "chars": 214,
    "preview": "# Code of Conduct\n\nHashiCorp Community Guidelines apply to you when interacting with the community here on GitHub and co"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 10989,
    "preview": "# Contributing to Vagrant\n\n**First:** We like to encourage you to contribute to the repository. If you're unsure or afra"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.md",
    "chars": 1537,
    "preview": "---\nname: Bug Report\nabout: Let us know about an unexpected error, a crash, or an incorrect behavior.\nlabels: \"waiting-i"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 253,
    "preview": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: BUSL-1.1\n\ncontact_links:\n  - name: Ask a Question\n    url: ht"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/engineering-task.md",
    "chars": 1436,
    "preview": "---\nname: Vagrant Engineering\nabout: For Vagrant Engineers to track tasks. \n---\n\n<!--\nThis template is intended for the "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/vagrant-feature-request.md",
    "chars": 686,
    "preview": "---\nname: Vagrant Feature request\nabout: Suggest an idea or enhancement for Vagrant\ntitle: 'Enhancement Request: Your de"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 118,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n"
  },
  {
    "path": ".github/workflows/backport.yml",
    "chars": 558,
    "preview": "---\nname: Backport Assistant Runner\n\non:\n  pull_request_target:\n    types:\n      - closed\n      - labeled\n\njobs:\n  backp"
  },
  {
    "path": ".github/workflows/check-legacy-links-format.yml",
    "chars": 469,
    "preview": "name: Legacy Link Format Checker\n\non:\n  push:\n    paths:\n      - \"website/content/**/*.mdx\"\n      - \"website/data/*-nav-"
  },
  {
    "path": ".github/workflows/code.yml",
    "chars": 671,
    "preview": "on:\n  push:\n    branches:\n      - 'main'\n      - 'spec-test-*'\n\njobs:\n  sync-acceptance:\n    if: github.repository == 'h"
  },
  {
    "path": ".github/workflows/dev-appimage-build.yml",
    "chars": 638,
    "preview": "name: Appimage Vagrant Development Build\non:\n  push:\n    branches: 'dev-appimage-*'\n  workflow_dispatch:\n\njobs:\n  trigge"
  },
  {
    "path": ".github/workflows/dev-arch-build.yml",
    "chars": 634,
    "preview": "name: Arch Linux Vagrant Development Build\non:\n  push:\n    branches: 'dev-arch-*'\n  workflow_dispatch:\n\njobs:\n  trigger-"
  },
  {
    "path": ".github/workflows/dev-build.yml",
    "chars": 609,
    "preview": "name: Full Vagrant Development Build\non:\n  push:\n    branches: 'build-*'\n  workflow_dispatch:\n\njobs:\n  trigger-build:\n  "
  },
  {
    "path": ".github/workflows/dev-debs-build.yml",
    "chars": 620,
    "preview": "name: DEB Vagrant Development Build\non:\n  push:\n    branches: 'dev-debs-*'\n  workflow_dispatch:\n\njobs:\n  trigger-build:\n"
  },
  {
    "path": ".github/workflows/dev-macos-build.yml",
    "chars": 626,
    "preview": "name: macOS Vagrant Development Build\non:\n  push:\n    branches: 'dev-macos-*'\n  workflow_dispatch:\n\njobs:\n  trigger-buil"
  },
  {
    "path": ".github/workflows/dev-rpms-build.yml",
    "chars": 620,
    "preview": "name: RPM Vagrant Development Build\non:\n  push:\n    branches: 'dev-rpms-*'\n  workflow_dispatch:\n\njobs:\n  trigger-build:\n"
  },
  {
    "path": ".github/workflows/dev-windows-build.yml",
    "chars": 634,
    "preview": "name: Windows Vagrant Development Build\non:\n  push:\n    branches: 'dev-windows-*'\n  workflow_dispatch:\n\njobs:\n  trigger-"
  },
  {
    "path": ".github/workflows/initiate-release.yml",
    "chars": 895,
    "preview": "name: Start Vagrant Release Process\non:\n  workflow_dispatch:\n    inputs:\n      release_version:\n        description: 'Re"
  },
  {
    "path": ".github/workflows/lock.yml",
    "chars": 392,
    "preview": "name: 'Lock Threads'\n\non:\n  schedule:\n    - cron: '50 1 * * *'\n\njobs:\n  lock:\n    runs-on: ubuntu-latest\n    permissions"
  },
  {
    "path": ".github/workflows/nightlies.yml",
    "chars": 514,
    "preview": "name: Vagrant Nightly Builds\non:\n  schedule:\n    - cron: 30 4 * * *\n\njobs:\n  trigger-nightly:\n    if: github.repository "
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 526,
    "preview": "name: Vagrant Release\non:\n  push:\n    tags: 'v*'\n\njobs:\n  trigger-release:\n    if: github.repository == 'hashicorp/vagra"
  },
  {
    "path": ".github/workflows/testing-skipped.yml",
    "chars": 557,
    "preview": "name: Vagrant Ruby Tests\non:\n  pull_request:\n    branches:\n      - main\n    ignored-paths:\n      - 'bin/**'\n      - 'lib"
  },
  {
    "path": ".github/workflows/testing.yml",
    "chars": 1182,
    "preview": "name: Vagrant Ruby Tests\non:\n  push:\n    branches:\n      - main\n      - 'test-*'\n    paths:\n      - 'bin/**'\n      - 'li"
  },
  {
    "path": ".gitignore",
    "chars": 905,
    "preview": "# OS-specific\n.DS_Store\n\n# Editor swapfiles\n.*.sw?\n*~\n\n# Vagrant stuff\nacceptance_config.yml\nboxes/*\n/.vagrant\n/website/"
  },
  {
    "path": ".gitmodules",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".vimrc",
    "chars": 82,
    "preview": "\" tabstop settings\nset tabstop=2\nset softtabstop=2\nset shiftwidth=2\nset expandtab\n"
  },
  {
    "path": ".yardopts",
    "chars": 12,
    "preview": "-m markdown\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 232317,
    "preview": "## 2.4.10.dev (UNRELEASED)\n\nFEATURES:\n\n- provider/virtualbox: Add support for LSI Logic SAS storage controller [GH-13692"
  },
  {
    "path": "Gemfile",
    "chars": 320,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nsource \"https://rubygems.org\"\n\ngemspec\n\nif File.ex"
  },
  {
    "path": "LICENSE",
    "chars": 4917,
    "preview": "License text copyright (c) 2020 MariaDB Corporation Ab, All Rights Reserved.\n\"Business Source License\" is a trademark of"
  },
  {
    "path": "README.md",
    "chars": 2484,
    "preview": "# Vagrant\n\n- Website: [https://www.vagrantup.com/](https://www.vagrantup.com/)\n- Source: [https://github.com/hashicorp/v"
  },
  {
    "path": "RELEASE.md",
    "chars": 565,
    "preview": "# Releasing Vagrant\n\nThis documents how to release Vagrant. Various steps in this document will\nrequire privileged acces"
  },
  {
    "path": "Rakefile",
    "chars": 640,
    "preview": "require 'rubygems'\nrequire 'bundler/setup'\nrequire \"rake/extensiontask\"\n\n# Immediately sync all stdout so that tools lik"
  },
  {
    "path": "Vagrantfile",
    "chars": 1100,
    "preview": "# This Vagrantfile can be used to develop Vagrant. Note that VirtualBox\n# doesn't run in VirtualBox so you can't actuall"
  },
  {
    "path": "bin/vagrant",
    "chars": 8395,
    "preview": "#!/usr/bin/env ruby\n\n# Trap interrupts to quit cleanly. This will be overridden at some point\n# by Vagrant. This is made"
  },
  {
    "path": "builtin/README.md",
    "chars": 473,
    "preview": "# Built-in Plugins\n\nThis directory contains all the \"built-in\" plugins. These are real plugins,\nthey dogfood the full pl"
  },
  {
    "path": "builtin/configvagrant/main.go",
    "chars": 3694,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage configvagrant\n\nimport (\n\t\"github.com/has"
  },
  {
    "path": "builtin/httpdownloader/downloader/downloader.go",
    "chars": 2816,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage downloader\n\nimport (\n\t\"bytes\"\n\t\"io/iouti"
  },
  {
    "path": "builtin/httpdownloader/downloader/httpmethod_string.go",
    "chars": 724,
    "preview": "// Code generated by \"stringer -type=HTTPMethod -linecomment ./downloader\"; DO NOT EDIT.\n\npackage downloader\n\nimport \"st"
  },
  {
    "path": "builtin/httpdownloader/main.go",
    "chars": 410,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage httpdownloader\n\nimport (\n\tsdk \"github.co"
  },
  {
    "path": "builtin/myplugin/command/command.go",
    "chars": 3407,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage command\n\nimport (\n\t\"github.com/hashicorp"
  },
  {
    "path": "builtin/myplugin/command/dothing.go",
    "chars": 2833,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage command\n\nimport (\n\t\"github.com/hashicorp"
  },
  {
    "path": "builtin/myplugin/command/host.go",
    "chars": 1698,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage command\n\nimport (\n\t\"github.com/hashicorp"
  },
  {
    "path": "builtin/myplugin/command/info.go",
    "chars": 2320,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage command\n\nimport (\n\t\"strings\"\n\n\t\"github.c"
  },
  {
    "path": "builtin/myplugin/command/interactive.go",
    "chars": 2035,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage command\n\nimport (\n\t\"github.com/hashicorp"
  },
  {
    "path": "builtin/myplugin/communicator/communicator.go",
    "chars": 3088,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage communicator\n\nimport (\n\t\"github.com/hash"
  },
  {
    "path": "builtin/myplugin/host/alwaystrue.go",
    "chars": 1768,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage host\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/hash"
  },
  {
    "path": "builtin/myplugin/host/cap/write_hello.go",
    "chars": 538,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage cap\n\nimport (\n\t\"os\"\n\n\t\"github.com/hashic"
  },
  {
    "path": "builtin/myplugin/locales/assets/en.json",
    "chars": 56,
    "preview": "{\n  \"dothing\": \"Tricked ya! I actually do nothing :P\"\n}\n"
  },
  {
    "path": "builtin/myplugin/locales/assets/es.json",
    "chars": 59,
    "preview": "{\n  \"dothing\": \"¡Te engañé! en realidad no hago nada :P\"\n}\n"
  },
  {
    "path": "builtin/myplugin/locales/locales.go",
    "chars": 7295,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\n// Code generated for package locales by go-bind"
  },
  {
    "path": "builtin/myplugin/main.go",
    "chars": 1249,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage myplugin\n\nimport (\n\tsdk \"github.com/hash"
  },
  {
    "path": "builtin/myplugin/mappers.go",
    "chars": 433,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage myplugin\n\nimport (\n\tpb \"github.com/hashi"
  },
  {
    "path": "builtin/myplugin/proto/plugin.pb.go",
    "chars": 7493,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.26.0\n// \tprotoc        v3.19.4\n// sou"
  },
  {
    "path": "builtin/myplugin/proto/plugin.proto",
    "chars": 270,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\nsyntax = \"proto3\";\n\npackage myplugin;\n\noption go"
  },
  {
    "path": "builtin/myplugin/provider/happy.go",
    "chars": 2087,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage provider\n\nimport (\n\t\"context\"\n\n\t\"github."
  },
  {
    "path": "builtin/myplugin/push/encouragement.go",
    "chars": 2414,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage push\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n"
  },
  {
    "path": "builtin/otherplugin/command.go",
    "chars": 5082,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage otherplugin\n\nimport (\n\t\"strings\"\n\n\t\"gith"
  },
  {
    "path": "builtin/otherplugin/guest/alwaystrue.go",
    "chars": 1795,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage guest\n\nimport (\n\t\"errors\"\n\n\t\"github.com/"
  },
  {
    "path": "builtin/otherplugin/guest/cap/write_hello.go",
    "chars": 402,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage cap\n\nimport (\n\t\"io/ioutil\"\n\n\tplugincore "
  },
  {
    "path": "builtin/otherplugin/main.go",
    "chars": 507,
    "preview": "// Copyright IBM Corp. 2010, 2025\n// SPDX-License-Identifier: BUSL-1.1\n\npackage otherplugin\n\nimport (\n\tsdk \"github.com/h"
  },
  {
    "path": "contrib/README.md",
    "chars": 808,
    "preview": "# Vagrant Contrib\n\nMiscellaneous contributions which assist people in using Vagrant will\nmake their way into this direct"
  },
  {
    "path": "contrib/bash/completion.sh",
    "chars": 6653,
    "preview": "#!/bin/bash\n\n# (The MIT License)\n#\n# Copyright (c) 2014 Kura\n#\n# Permission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "contrib/emacs/vagrant.el",
    "chars": 492,
    "preview": ";; Copyright IBM Corp. 2010, 2025\n;; SPDX-License-Identifier: BUSL-1.1\n\n;;----------------------------------------------"
  },
  {
    "path": "contrib/st/Ruby.sublime-settings",
    "chars": 41,
    "preview": "{\n\t\"extensions\":\n\t[\n\t\t\"Vagrantfile\"\n\t]\n}\n"
  },
  {
    "path": "contrib/sudoers/linux-fedora",
    "chars": 583,
    "preview": "Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports\nCmnd_Alias VAGRANT_NFSD_CHECK = /usr/bin/systemctl status "
  },
  {
    "path": "contrib/sudoers/linux-suse",
    "chars": 447,
    "preview": "Cmnd_Alias VAGRANT_CHOWN = /usr/bin/chown 0\\:0 /tmp/vagrant[a-z0-9-]*\nCmnd_Alias VAGRANT_MV = /usr/bin/mv -f /tmp/vagran"
  },
  {
    "path": "contrib/sudoers/linux-ubuntu",
    "chars": 519,
    "preview": "# These work with Ubuntu - they might need tweaking for other distributions\n\nCmnd_Alias VAGRANT_EXPORTS_CHOWN = /bin/cho"
  },
  {
    "path": "contrib/sudoers/osx",
    "chars": 871,
    "preview": "Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports\nCmnd_Alias VAGRANT_NFSD = /sbin/nfsd ^(restart|status|upda"
  },
  {
    "path": "contrib/vim/vagrantfile.vim",
    "chars": 227,
    "preview": "\" Teach vim to syntax highlight Vagrantfile as ruby\n\"\n\" Install: $HOME/.vim/plugin/vagrant.vim\n\" Author: Brandon Philips"
  },
  {
    "path": "contrib/zsh/_vagrant",
    "chars": 26743,
    "preview": "#compdef _vagrant vagrant\n\n# ZSH completion for Vagrant\n#\n# To use this completion add this to ~/.zshrc\n# fpath=(/path/t"
  },
  {
    "path": "contrib/zsh/generate_zsh_completion.rb",
    "chars": 4589,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'open3'\n\nHEAD = \"\"\"#compdef _vagrant vagra"
  },
  {
    "path": "ext/vagrant/vagrant_ssl/extconf.rb",
    "chars": 770,
    "preview": "#!/usr/bin/env ruby\n# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n\nrequire \"mkmf\"\nrequire \"shell"
  },
  {
    "path": "ext/vagrant/vagrant_ssl/vagrant_ssl.c",
    "chars": 789,
    "preview": "/*\n * Copyright IBM Corp. 2010, 2025\n * SPDX-License-Identifier: BUSL-1.1\n */\n\n#include \"vagrant_ssl.h\"\n\n#if defined(_VA"
  },
  {
    "path": "ext/vagrant/vagrant_ssl/vagrant_ssl.h",
    "chars": 329,
    "preview": "/*\n * Copyright IBM Corp. 2010, 2025\n * SPDX-License-Identifier: BUSL-1.1\n */\n\n#if !defined(_VAGRANT_SSL_H_)\n#define _VA"
  },
  {
    "path": "keys/README.md",
    "chars": 905,
    "preview": "# Insecure Keypairs\n\nThese keys are the \"insecure\" public/private keypair we offer to\n[base box creators](https://www.va"
  },
  {
    "path": "keys/vagrant",
    "chars": 1675,
    "preview": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI\nw+niNltGEFHzD8+v1I2YJ6o"
  },
  {
    "path": "keys/vagrant.key.ed25519",
    "chars": 411,
    "preview": "-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW\nQyNTUxOQAAACD"
  },
  {
    "path": "keys/vagrant.key.rsa",
    "chars": 1675,
    "preview": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI\nw+niNltGEFHzD8+v1I2YJ6o"
  },
  {
    "path": "keys/vagrant.pub",
    "chars": 518,
    "preview": "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9H"
  },
  {
    "path": "keys/vagrant.pub.ed25519",
    "chars": 109,
    "preview": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN1YdxBpNlzxDqfJyw/QKow1F+wvG9hXGoqiysfJOn5Y vagrant insecure public key\n"
  },
  {
    "path": "keys/vagrant.pub.rsa",
    "chars": 409,
    "preview": "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9H"
  },
  {
    "path": "lib/vagrant/action/builder.rb",
    "chars": 13146,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    # Action builde"
  },
  {
    "path": "lib/vagrant/action/builtin/box_add.rb",
    "chars": 24981,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"digest/sha1\"\nrequire \"log4r\"\nrequire \"pat"
  },
  {
    "path": "lib/vagrant/action/builtin/box_check_outdated.rb",
    "chars": 4339,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nmodule Vagrant\n  module Action\n  "
  },
  {
    "path": "lib/vagrant/action/builtin/box_remove.rb",
    "chars": 7320,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nmodule Vagrant\n  module Action\n  "
  },
  {
    "path": "lib/vagrant/action/builtin/box_update.rb",
    "chars": 495,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nmodule Vagrant\n  module Action\n  "
  },
  {
    "path": "lib/vagrant/action/builtin/call.rb",
    "chars": 2615,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/builtin/cleanup_disks.rb",
    "chars": 1632,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"json\"\n\nmodule Vagrant\n  module Action\n   "
  },
  {
    "path": "lib/vagrant/action/builtin/cloud_init_setup.rb",
    "chars": 6495,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'vagrant/util/mime'\nrequire 'tmpdir'\n\nmodu"
  },
  {
    "path": "lib/vagrant/action/builtin/cloud_init_wait.rb",
    "chars": 1760,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nmodule Vagrant\n  module Action\n  "
  },
  {
    "path": "lib/vagrant/action/builtin/config_validate.rb",
    "chars": 863,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"vagrant/util/template_renderer\"\n\nmodule V"
  },
  {
    "path": "lib/vagrant/action/builtin/confirm.rb",
    "chars": 1648,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/builtin/delayed.rb",
    "chars": 807,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/builtin/destroy_confirm.rb",
    "chars": 765,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire_relative \"confirm\"\n\nmodule Vagrant\n  modul"
  },
  {
    "path": "lib/vagrant/action/builtin/disk.rb",
    "chars": 1698,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"json\"\n\nmodule Vagrant\n  module Action\n   "
  },
  {
    "path": "lib/vagrant/action/builtin/env_set.rb",
    "chars": 670,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/builtin/graceful_halt.rb",
    "chars": 3209,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\nrequire \"timeout\"\n\nmodule Vagrant\n"
  },
  {
    "path": "lib/vagrant/action/builtin/handle_box.rb",
    "chars": 4449,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"thread\"\nrequire \"log4r\"\n\nmodule Vagrant\n "
  },
  {
    "path": "lib/vagrant/action/builtin/handle_box_url.rb",
    "chars": 475,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb",
    "chars": 10821,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"set\"\nrequire \"log4r\"\nrequire \"socket\"\n\nre"
  },
  {
    "path": "lib/vagrant/action/builtin/has_provisioner.rb",
    "chars": 1096,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/builtin/is_env_set.rb",
    "chars": 678,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/builtin/is_state.rb",
    "chars": 1161,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\r\n  module Action\r\n    module Builti"
  },
  {
    "path": "lib/vagrant/action/builtin/lock.rb",
    "chars": 2130,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nmodule Vagrant\n  module Action\n  "
  },
  {
    "path": "lib/vagrant/action/builtin/message.rb",
    "chars": 615,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\r\n  module Action\r\n    module Builti"
  },
  {
    "path": "lib/vagrant/action/builtin/mixin_provisioners.rb",
    "chars": 5680,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/builtin/mixin_synced_folders.rb",
    "chars": 9109,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"json\"\nrequire \"set\"\nrequire 'vagrant/util"
  },
  {
    "path": "lib/vagrant/action/builtin/prepare_clone.rb",
    "chars": 1165,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nmodule Vagrant\n  module Action\n  "
  },
  {
    "path": "lib/vagrant/action/builtin/provision.rb",
    "chars": 5294,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nrequire_relative \"mixin_provision"
  },
  {
    "path": "lib/vagrant/action/builtin/provisioner_cleanup.rb",
    "chars": 1663,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nrequire_relative \"mixin_provision"
  },
  {
    "path": "lib/vagrant/action/builtin/set_hostname.rb",
    "chars": 1196,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nmodule Vagrant\n  module Action\n  "
  },
  {
    "path": "lib/vagrant/action/builtin/ssh_exec.rb",
    "chars": 1381,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"pathname\"\n\nrequire \"vagrant/util/ssh\"\n\nmo"
  },
  {
    "path": "lib/vagrant/action/builtin/ssh_run.rb",
    "chars": 2875,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nrequire \"vagrant/util/platform\"\nr"
  },
  {
    "path": "lib/vagrant/action/builtin/synced_folder_cleanup.rb",
    "chars": 955,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nrequire_relative \"mixin_synced_fo"
  },
  {
    "path": "lib/vagrant/action/builtin/synced_folders.rb",
    "chars": 5416,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nrequire 'vagrant/util/platform'\n\n"
  },
  {
    "path": "lib/vagrant/action/builtin/trigger.rb",
    "chars": 1278,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/builtin/wait_for_communicator.rb",
    "chars": 2450,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module Builtin\n"
  },
  {
    "path": "lib/vagrant/action/general/package.rb",
    "chars": 8996,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'fileutils'\nrequire \"pathname\"\nrequire 'va"
  },
  {
    "path": "lib/vagrant/action/general/package_setup_files.rb",
    "chars": 1469,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    module General\n"
  },
  {
    "path": "lib/vagrant/action/general/package_setup_folders.rb",
    "chars": 996,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"fileutils\"\nrequire_relative \"package\"\n\nmo"
  },
  {
    "path": "lib/vagrant/action/hook.rb",
    "chars": 5080,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    # This class ma"
  },
  {
    "path": "lib/vagrant/action/primary_runner.rb",
    "chars": 537,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Action\n    # A PrimaryRunn"
  },
  {
    "path": "lib/vagrant/action/runner.rb",
    "chars": 3775,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'log4r'\n\nrequire 'vagrant/action/hook'\nreq"
  },
  {
    "path": "lib/vagrant/action/warden.rb",
    "chars": 4343,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\nrequire 'vagrant/util/experimental"
  },
  {
    "path": "lib/vagrant/action.rb",
    "chars": 4202,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'vagrant/action/builder'\n\nmodule Vagrant\n "
  },
  {
    "path": "lib/vagrant/alias.rb",
    "chars": 1515,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"vagrant/registry\"\n\nmodule Vagrant\n  # Thi"
  },
  {
    "path": "lib/vagrant/batch_action.rb",
    "chars": 6081,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'thread'\nrequire \"log4r\"\n\nmodule Vagrant\n "
  },
  {
    "path": "lib/vagrant/box.rb",
    "chars": 8332,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'fileutils'\nrequire \"tempfile\"\n\nrequire \"j"
  },
  {
    "path": "lib/vagrant/box_collection.rb",
    "chars": 21173,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"digest/sha1\"\nrequire \"fileutils\"\nrequire "
  },
  {
    "path": "lib/vagrant/box_metadata.rb",
    "chars": 9196,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"json\"\n\nmodule Vagrant\n  # BoxMetadata rep"
  },
  {
    "path": "lib/vagrant/bundler.rb",
    "chars": 34511,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"monitor\"\nrequire \"pathname\"\nrequire \"set\""
  },
  {
    "path": "lib/vagrant/capability_host.rb",
    "chars": 5977,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  # This module enables a class to "
  },
  {
    "path": "lib/vagrant/cli.rb",
    "chars": 3999,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'log4r'\nrequire 'optparse'\n\nrequire 'vagra"
  },
  {
    "path": "lib/vagrant/config/loader.rb",
    "chars": 12792,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"pathname\"\n\nrequire \"log4r\"\n\nmodule Vagran"
  },
  {
    "path": "lib/vagrant/config/v1/dummy_config.rb",
    "chars": 382,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Config\n    module V1\n     "
  },
  {
    "path": "lib/vagrant/config/v1/loader.rb",
    "chars": 3459,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"vagrant/config/v1/root\"\n\nmodule Vagrant\n "
  },
  {
    "path": "lib/vagrant/config/v1/root.rb",
    "chars": 2086,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"set\"\n\nmodule Vagrant\n  module Config\n    "
  },
  {
    "path": "lib/vagrant/config/v1.rb",
    "chars": 295,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Config\n    module V1\n     "
  },
  {
    "path": "lib/vagrant/config/v2/dummy_config.rb",
    "chars": 2128,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Config\n    module V2\n     "
  },
  {
    "path": "lib/vagrant/config/v2/loader.rb",
    "chars": 4961,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"vagrant/config/v2/root\"\n\nmodule Vagrant\n "
  },
  {
    "path": "lib/vagrant/config/v2/root.rb",
    "chars": 4253,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"set\"\n\nrequire \"vagrant/config/v2/util\"\n\nm"
  },
  {
    "path": "lib/vagrant/config/v2/util.rb",
    "chars": 563,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Config\n    module V2\n     "
  },
  {
    "path": "lib/vagrant/config/v2.rb",
    "chars": 340,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Config\n    module V2\n     "
  },
  {
    "path": "lib/vagrant/config/version_base.rb",
    "chars": 3490,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Config\n    # This is the b"
  },
  {
    "path": "lib/vagrant/config.rb",
    "chars": 2269,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"vagrant/registry\"\n\nmodule Vagrant\n  modul"
  },
  {
    "path": "lib/vagrant/environment.rb",
    "chars": 43729,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'fileutils'\nrequire 'json'\nrequire 'pathna"
  },
  {
    "path": "lib/vagrant/errors.rb",
    "chars": 30257,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n# This file contains all of the internal errors in"
  },
  {
    "path": "lib/vagrant/guest.rb",
    "chars": 2317,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\nrequire \"vagrant/capability_host\"\n"
  },
  {
    "path": "lib/vagrant/host.rb",
    "chars": 519,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"vagrant/capability_host\"\n\nmodule Vagrant\n"
  },
  {
    "path": "lib/vagrant/machine.rb",
    "chars": 22885,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire_relative \"./util/ssh\"\nrequire_relative \"./"
  },
  {
    "path": "lib/vagrant/machine_index.rb",
    "chars": 14930,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"json\"\nrequire \"pathname\"\nrequire \"securer"
  },
  {
    "path": "lib/vagrant/machine_state.rb",
    "chars": 1772,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  # This represents the state of a "
  },
  {
    "path": "lib/vagrant/patches/builder/mkmf.rb",
    "chars": 3194,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n# This custom mkmf.rb file is used on Windows plat"
  },
  {
    "path": "lib/vagrant/patches/fake_ftp.rb",
    "chars": 676,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"fake_ftp\"\n\nmodule FakeFtp\n  class File\n  "
  },
  {
    "path": "lib/vagrant/patches/log4r.rb",
    "chars": 1648,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n# This adds trace level support to log4r. Since lo"
  },
  {
    "path": "lib/vagrant/patches/net-ssh.rb",
    "chars": 2640,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"net/ssh\"\nrequire \"net/ssh/buffer\"\n\n# Set "
  },
  {
    "path": "lib/vagrant/patches/rubygems.rb",
    "chars": 784,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n# This allows for effective monkey patching of the"
  },
  {
    "path": "lib/vagrant/patches/timeout_error.rb",
    "chars": 162,
    "preview": "# Adds an IO::TimeoutError for versions of ruby where it isn't defined (< 3.2). \nif !defined?(IO::TimeoutError)\n  class "
  },
  {
    "path": "lib/vagrant/plugin/manager.rb",
    "chars": 13866,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"pathname\"\nrequire \"set\"\n\nrequire_relative"
  },
  {
    "path": "lib/vagrant/plugin/state_file.rb",
    "chars": 3582,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"json\"\nrequire \"fileutils\"\nrequire \"tempfi"
  },
  {
    "path": "lib/vagrant/plugin/v1/command.rb",
    "chars": 5868,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'log4r'\nrequire \"vagrant/util/safe_puts\"\n\n"
  },
  {
    "path": "lib/vagrant/plugin/v1/communicator.rb",
    "chars": 3945,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Plugin\n    module V1\n     "
  },
  {
    "path": "lib/vagrant/plugin/v1/config.rb",
    "chars": 4547,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Plugin\n    module V1\n     "
  },
  {
    "path": "lib/vagrant/plugin/v1/errors.rb",
    "chars": 471,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n# This file contains all the errors that the V1 pl"
  },
  {
    "path": "lib/vagrant/plugin/v1/guest.rb",
    "chars": 3607,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Plugin\n    module V1\n     "
  },
  {
    "path": "lib/vagrant/plugin/v1/host.rb",
    "chars": 2191,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Plugin\n    module V1\n     "
  },
  {
    "path": "lib/vagrant/plugin/v1/manager.rb",
    "chars": 3382,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nmodule Vagrant\n  module Plugin\n  "
  },
  {
    "path": "lib/vagrant/plugin/v1/plugin.rb",
    "chars": 8392,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"set\"\nrequire \"log4r\"\n\nmodule Vagrant\n  mo"
  },
  {
    "path": "lib/vagrant/plugin/v1/provider.rb",
    "chars": 2476,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Plugin\n    module V1\n     "
  },
  {
    "path": "lib/vagrant/plugin/v1/provisioner.rb",
    "chars": 1786,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Plugin\n    module V1\n     "
  },
  {
    "path": "lib/vagrant/plugin/v1.rb",
    "chars": 798,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\nrequire \"vagrant/plugin/v1/errors\""
  },
  {
    "path": "lib/vagrant/plugin/v2/command.rb",
    "chars": 12163,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire 'log4r'\nrequire \"vagrant/util/safe_puts\"\n\n"
  },
  {
    "path": "lib/vagrant/plugin/v2/communicator.rb",
    "chars": 5032,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"timeout\"\n\nmodule Vagrant\n  module Plugin\n"
  },
  {
    "path": "lib/vagrant/plugin/v2/components.rb",
    "chars": 3221,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Plugin\n    module V2\n     "
  },
  {
    "path": "lib/vagrant/plugin/v2/config.rb",
    "chars": 6538,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"set\"\n\nmodule Vagrant\n  module Plugin\n    "
  },
  {
    "path": "lib/vagrant/plugin/v2/errors.rb",
    "chars": 471,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\n# This file contains all the errors that the V2 pl"
  },
  {
    "path": "lib/vagrant/plugin/v2/guest.rb",
    "chars": 853,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Plugin\n    module V2\n     "
  },
  {
    "path": "lib/vagrant/plugin/v2/host.rb",
    "chars": 626,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nmodule Vagrant\n  module Plugin\n    module V2\n     "
  },
  {
    "path": "lib/vagrant/plugin/v2/manager.rb",
    "chars": 9122,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"log4r\"\n\nmodule Vagrant\n  module Plugin\n  "
  },
  {
    "path": "lib/vagrant/plugin/v2/plugin.rb",
    "chars": 10868,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"set\"\nrequire \"log4r\"\nrequire \"vagrant/plu"
  },
  {
    "path": "lib/vagrant/plugin/v2/provider.rb",
    "chars": 4391,
    "preview": "# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"vagrant/capability_host\"\n\nmodule Vagrant\n"
  }
]

// ... and 1725 more files (download for full content)

About this extraction

This page contains the full source code of the hashicorp/vagrant GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1925 files (6.1 MB), approximately 1.7M tokens, and a symbol index with 7228 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!