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
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
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.