vagrant 1.0.7 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +14 -43
- data/Gemfile +2 -1
- data/LICENSE.txt +22 -0
- data/README.md +3 -90
- data/Rakefile +1 -18
- data/bin/vagrant +2 -58
- data/message.txt +17 -0
- data/vagrant.gemspec +20 -69
- metadata +43 -655
- data/.yardopts +0 -1
- data/CHANGELOG.md +0 -723
- data/LICENSE +0 -21
- data/config/default.rb +0 -30
- data/contrib/README.md +0 -12
- data/contrib/emacs/vagrant.el +0 -8
- data/contrib/vim/vagrantfile.vim +0 -9
- data/keys/README.md +0 -17
- data/keys/vagrant +0 -27
- data/keys/vagrant.pub +0 -1
- data/lib/vagrant.rb +0 -197
- data/lib/vagrant/action.rb +0 -63
- data/lib/vagrant/action/box/destroy.rb +0 -25
- data/lib/vagrant/action/box/download.rb +0 -84
- data/lib/vagrant/action/box/package.rb +0 -19
- data/lib/vagrant/action/box/unpackage.rb +0 -61
- data/lib/vagrant/action/box/verify.rb +0 -23
- data/lib/vagrant/action/builder.rb +0 -128
- data/lib/vagrant/action/builtin.rb +0 -171
- data/lib/vagrant/action/env/set.rb +0 -21
- data/lib/vagrant/action/environment.rb +0 -12
- data/lib/vagrant/action/general/check_virtualbox.rb +0 -28
- data/lib/vagrant/action/general/package.rb +0 -101
- data/lib/vagrant/action/general/validate.rb +0 -18
- data/lib/vagrant/action/runner.rb +0 -53
- data/lib/vagrant/action/vm/boot.rb +0 -53
- data/lib/vagrant/action/vm/check_accessible.rb +0 -23
- data/lib/vagrant/action/vm/check_box.rb +0 -33
- data/lib/vagrant/action/vm/check_guest_additions.rb +0 -38
- data/lib/vagrant/action/vm/check_port_collisions.rb +0 -89
- data/lib/vagrant/action/vm/clean_machine_folder.rb +0 -43
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +0 -18
- data/lib/vagrant/action/vm/clear_network_interfaces.rb +0 -31
- data/lib/vagrant/action/vm/clear_shared_folders.rb +0 -18
- data/lib/vagrant/action/vm/customize.rb +0 -36
- data/lib/vagrant/action/vm/default_name.rb +0 -22
- data/lib/vagrant/action/vm/destroy.rb +0 -19
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +0 -20
- data/lib/vagrant/action/vm/discard_state.rb +0 -22
- data/lib/vagrant/action/vm/export.rb +0 -57
- data/lib/vagrant/action/vm/forward_ports.rb +0 -92
- data/lib/vagrant/action/vm/halt.rb +0 -32
- data/lib/vagrant/action/vm/host_name.rb +0 -21
- data/lib/vagrant/action/vm/import.rb +0 -48
- data/lib/vagrant/action/vm/match_mac_address.rb +0 -21
- data/lib/vagrant/action/vm/network.rb +0 -403
- data/lib/vagrant/action/vm/nfs.rb +0 -196
- data/lib/vagrant/action/vm/package.rb +0 -23
- data/lib/vagrant/action/vm/package_vagrantfile.rb +0 -36
- data/lib/vagrant/action/vm/provision.rb +0 -61
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +0 -26
- data/lib/vagrant/action/vm/prune_nfs_exports.rb +0 -20
- data/lib/vagrant/action/vm/resume.rb +0 -20
- data/lib/vagrant/action/vm/sane_defaults.rb +0 -78
- data/lib/vagrant/action/vm/setup_package_files.rb +0 -54
- data/lib/vagrant/action/vm/share_folders.rb +0 -114
- data/lib/vagrant/action/vm/suspend.rb +0 -20
- data/lib/vagrant/action/warden.rb +0 -92
- data/lib/vagrant/box.rb +0 -44
- data/lib/vagrant/box_collection.rb +0 -58
- data/lib/vagrant/cli.rb +0 -76
- data/lib/vagrant/command.rb +0 -24
- data/lib/vagrant/command/base.rb +0 -167
- data/lib/vagrant/command/box.rb +0 -58
- data/lib/vagrant/command/box_add.rb +0 -37
- data/lib/vagrant/command/box_list.rb +0 -28
- data/lib/vagrant/command/box_remove.rb +0 -27
- data/lib/vagrant/command/box_repackage.rb +0 -27
- data/lib/vagrant/command/destroy.rb +0 -64
- data/lib/vagrant/command/gem.rb +0 -39
- data/lib/vagrant/command/halt.rb +0 -39
- data/lib/vagrant/command/init.rb +0 -40
- data/lib/vagrant/command/package.rb +0 -75
- data/lib/vagrant/command/provision.rb +0 -40
- data/lib/vagrant/command/reload.rb +0 -39
- data/lib/vagrant/command/resume.rb +0 -33
- data/lib/vagrant/command/ssh.rb +0 -90
- data/lib/vagrant/command/ssh_config.rb +0 -51
- data/lib/vagrant/command/start_mixins.rb +0 -26
- data/lib/vagrant/command/status.rb +0 -36
- data/lib/vagrant/command/suspend.rb +0 -33
- data/lib/vagrant/command/up.rb +0 -40
- data/lib/vagrant/communication.rb +0 -7
- data/lib/vagrant/communication/base.rb +0 -56
- data/lib/vagrant/communication/ssh.rb +0 -230
- data/lib/vagrant/config.rb +0 -49
- data/lib/vagrant/config/base.rb +0 -82
- data/lib/vagrant/config/container.rb +0 -37
- data/lib/vagrant/config/error_recorder.rb +0 -19
- data/lib/vagrant/config/loader.rb +0 -127
- data/lib/vagrant/config/nfs.rb +0 -8
- data/lib/vagrant/config/package.rb +0 -7
- data/lib/vagrant/config/ssh.rb +0 -27
- data/lib/vagrant/config/top.rb +0 -72
- data/lib/vagrant/config/vagrant.rb +0 -14
- data/lib/vagrant/config/vm.rb +0 -168
- data/lib/vagrant/config/vm/provisioner.rb +0 -52
- data/lib/vagrant/config/vm/sub_vm.rb +0 -17
- data/lib/vagrant/data_store.rb +0 -92
- data/lib/vagrant/downloaders.rb +0 -7
- data/lib/vagrant/downloaders/base.rb +0 -25
- data/lib/vagrant/downloaders/file.rb +0 -22
- data/lib/vagrant/downloaders/http.rb +0 -97
- data/lib/vagrant/driver.rb +0 -8
- data/lib/vagrant/driver/virtualbox.rb +0 -134
- data/lib/vagrant/driver/virtualbox_4_0.rb +0 -459
- data/lib/vagrant/driver/virtualbox_4_1.rb +0 -459
- data/lib/vagrant/driver/virtualbox_4_2.rb +0 -606
- data/lib/vagrant/driver/virtualbox_base.rb +0 -326
- data/lib/vagrant/environment.rb +0 -522
- data/lib/vagrant/errors.rb +0 -445
- data/lib/vagrant/guest.rb +0 -18
- data/lib/vagrant/guest/arch.rb +0 -56
- data/lib/vagrant/guest/base.rb +0 -99
- data/lib/vagrant/guest/debian.rb +0 -64
- data/lib/vagrant/guest/fedora.rb +0 -66
- data/lib/vagrant/guest/freebsd.rb +0 -86
- data/lib/vagrant/guest/gentoo.rb +0 -46
- data/lib/vagrant/guest/linux.rb +0 -118
- data/lib/vagrant/guest/linux/config.rb +0 -19
- data/lib/vagrant/guest/linux/error.rb +0 -9
- data/lib/vagrant/guest/openbsd.rb +0 -20
- data/lib/vagrant/guest/redhat.rb +0 -67
- data/lib/vagrant/guest/solaris.rb +0 -118
- data/lib/vagrant/guest/suse.rb +0 -17
- data/lib/vagrant/guest/ubuntu.rb +0 -23
- data/lib/vagrant/hosts.rb +0 -37
- data/lib/vagrant/hosts/arch.rb +0 -55
- data/lib/vagrant/hosts/base.rb +0 -66
- data/lib/vagrant/hosts/bsd.rb +0 -97
- data/lib/vagrant/hosts/fedora.rb +0 -47
- data/lib/vagrant/hosts/freebsd.rb +0 -41
- data/lib/vagrant/hosts/gentoo.rb +0 -20
- data/lib/vagrant/hosts/linux.rb +0 -94
- data/lib/vagrant/hosts/opensuse.rb +0 -30
- data/lib/vagrant/hosts/windows.rb +0 -16
- data/lib/vagrant/plugin.rb +0 -81
- data/lib/vagrant/provisioners.rb +0 -12
- data/lib/vagrant/provisioners/base.rb +0 -44
- data/lib/vagrant/provisioners/chef.rb +0 -168
- data/lib/vagrant/provisioners/chef_client.rb +0 -132
- data/lib/vagrant/provisioners/chef_solo.rb +0 -234
- data/lib/vagrant/provisioners/puppet.rb +0 -176
- data/lib/vagrant/provisioners/puppet_server.rb +0 -78
- data/lib/vagrant/provisioners/shell.rb +0 -103
- data/lib/vagrant/registry.rb +0 -52
- data/lib/vagrant/ssh.rb +0 -126
- data/lib/vagrant/test_helpers.rb +0 -154
- data/lib/vagrant/ui.rb +0 -168
- data/lib/vagrant/util.rb +0 -12
- data/lib/vagrant/util/ansi_escape_code_remover.rb +0 -34
- data/lib/vagrant/util/busy.rb +0 -59
- data/lib/vagrant/util/counter.rb +0 -24
- data/lib/vagrant/util/file_checksum.rb +0 -38
- data/lib/vagrant/util/file_mode.rb +0 -12
- data/lib/vagrant/util/hash_with_indifferent_access.rb +0 -63
- data/lib/vagrant/util/is_port_open.rb +0 -38
- data/lib/vagrant/util/line_ending_helpers.rb +0 -14
- data/lib/vagrant/util/network_ip.rb +0 -28
- data/lib/vagrant/util/platform.rb +0 -68
- data/lib/vagrant/util/retryable.rb +0 -25
- data/lib/vagrant/util/safe_exec.rb +0 -36
- data/lib/vagrant/util/safe_puts.rb +0 -31
- data/lib/vagrant/util/stacked_proc_runner.rb +0 -35
- data/lib/vagrant/util/subprocess.rb +0 -247
- data/lib/vagrant/util/template_renderer.rb +0 -83
- data/lib/vagrant/version.rb +0 -6
- data/lib/vagrant/vm.rb +0 -195
- data/tasks/acceptance.rake +0 -113
- data/tasks/bundler.rake +0 -3
- data/tasks/test.rake +0 -20
- data/templates/commands/init/Vagrantfile.erb +0 -99
- data/templates/commands/ssh_config/config.erb +0 -15
- data/templates/config/validation_failed.erb +0 -7
- data/templates/guests/arch/network_dhcp.erb +0 -7
- data/templates/guests/arch/network_static.erb +0 -7
- data/templates/guests/debian/network_dhcp.erb +0 -6
- data/templates/guests/debian/network_static.erb +0 -7
- data/templates/guests/fedora/network_dhcp.erb +0 -6
- data/templates/guests/fedora/network_static.erb +0 -13
- data/templates/guests/freebsd/network_dhcp.erb +0 -3
- data/templates/guests/freebsd/network_static.erb +0 -3
- data/templates/guests/gentoo/network_dhcp.erb +0 -4
- data/templates/guests/gentoo/network_static.erb +0 -4
- data/templates/guests/redhat/network_dhcp.erb +0 -6
- data/templates/guests/redhat/network_static.erb +0 -7
- data/templates/locales/en.yml +0 -759
- data/templates/nfs/exports.erb +0 -5
- data/templates/nfs/exports_freebsd.erb +0 -5
- data/templates/nfs/exports_linux.erb +0 -5
- data/templates/package_Vagrantfile.erb +0 -11
- data/templates/provisioners/chef_client/client.erb +0 -32
- data/templates/provisioners/chef_solo/solo.erb +0 -25
- data/test/acceptance/base.rb +0 -48
- data/test/acceptance/box_test.rb +0 -99
- data/test/acceptance/destroy_test.rb +0 -37
- data/test/acceptance/halt_test.rb +0 -72
- data/test/acceptance/init_test.rb +0 -33
- data/test/acceptance/networking/host_only_test.rb +0 -37
- data/test/acceptance/networking/port_forward_test.rb +0 -125
- data/test/acceptance/package_test.rb +0 -46
- data/test/acceptance/provisioning/basic_test.rb +0 -61
- data/test/acceptance/provisioning/chef_solo_test.rb +0 -37
- data/test/acceptance/provisioning/shell_test.rb +0 -53
- data/test/acceptance/resume_test.rb +0 -17
- data/test/acceptance/shared_folders_test.rb +0 -84
- data/test/acceptance/skeletons/chef_solo_basic/README.md +0 -3
- data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +0 -5
- data/test/acceptance/skeletons/chef_solo_json/README.md +0 -3
- data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +0 -6
- data/test/acceptance/skeletons/provisioner_multi/README.md +0 -3
- data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +0 -5
- data/test/acceptance/ssh_test.rb +0 -46
- data/test/acceptance/support/config.rb +0 -42
- data/test/acceptance/support/isolated_environment.rb +0 -117
- data/test/acceptance/support/matchers/have_color.rb +0 -9
- data/test/acceptance/support/matchers/match_output.rb +0 -14
- data/test/acceptance/support/matchers/succeed.rb +0 -14
- data/test/acceptance/support/network_tests.rb +0 -29
- data/test/acceptance/support/output.rb +0 -95
- data/test/acceptance/support/shared/base_context.rb +0 -72
- data/test/acceptance/support/shared/command_examples.rb +0 -33
- data/test/acceptance/support/virtualbox.rb +0 -36
- data/test/acceptance/suspend_test.rb +0 -56
- data/test/acceptance/up_basic_test.rb +0 -33
- data/test/acceptance/up_with_box_url.rb +0 -40
- data/test/acceptance/vagrant_test.rb +0 -47
- data/test/acceptance/version_test.rb +0 -15
- data/test/buildbot/README.md +0 -72
- data/test/buildbot/buildbot_config/__init__.py +0 -0
- data/test/buildbot/buildbot_config/config/__init__.py +0 -0
- data/test/buildbot/buildbot_config/config/loader.py +0 -24
- data/test/buildbot/buildbot_config/config/master.py +0 -24
- data/test/buildbot/buildbot_config/config/slave.py +0 -22
- data/test/buildbot/buildbot_config/master/__init__.py +0 -6
- data/test/buildbot/buildbot_config/master/builders.py +0 -78
- data/test/buildbot/buildbot_config/master/buildsteps.py +0 -100
- data/test/buildbot/buildbot_config/master/change_sources.py +0 -8
- data/test/buildbot/buildbot_config/master/schedulers.py +0 -32
- data/test/buildbot/buildbot_config/master/slaves.py +0 -60
- data/test/buildbot/buildbot_config/master/status.py +0 -52
- data/test/buildbot/master/Makefile.sample +0 -28
- data/test/buildbot/master/buildbot.tac +0 -36
- data/test/buildbot/master/master.cfg +0 -67
- data/test/buildbot/master/public_html/bg_gradient.jpg +0 -0
- data/test/buildbot/master/public_html/default.css +0 -545
- data/test/buildbot/master/public_html/favicon.ico +0 -0
- data/test/buildbot/master/public_html/robots.txt +0 -10
- data/test/buildbot/master/public_html/static/css/bootstrap-1.4.0.min.css +0 -356
- data/test/buildbot/master/public_html/static/css/prettify.css +0 -97
- data/test/buildbot/master/public_html/static/css/syntax.css +0 -60
- data/test/buildbot/master/public_html/static/css/vagrant.base.css +0 -205
- data/test/buildbot/master/public_html/static/images/base_box_mac.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/getting-started/success.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/icons/error.png +0 -0
- data/test/buildbot/master/public_html/static/images/vagrant_chilling.png +0 -0
- data/test/buildbot/master/public_html/static/images/vagrant_holding.png +0 -0
- data/test/buildbot/master/public_html/static/images/vagrant_looking.png +0 -0
- data/test/buildbot/master/public_html/static/images/windows/alter_path.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/edit_path.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/environment_variables_button.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/port_and_ppk_path.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/ppk_selection.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/putty_first_screen.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/save_result.jpg +0 -0
- data/test/buildbot/master/public_html/static/images/windows/vbox_manage_default_location.jpg +0 -0
- data/test/buildbot/master/public_html/static/js/bootstrap-tabs.js +0 -80
- data/test/buildbot/master/public_html/static/js/jquery-1.7.min.js +0 -4
- data/test/buildbot/master/templates/authfail.html +0 -9
- data/test/buildbot/master/templates/build.html +0 -205
- data/test/buildbot/master/templates/builder.html +0 -118
- data/test/buildbot/master/templates/builders.html +0 -33
- data/test/buildbot/master/templates/buildslave.html +0 -72
- data/test/buildbot/master/templates/buildslaves.html +0 -70
- data/test/buildbot/master/templates/change.html +0 -15
- data/test/buildbot/master/templates/layouts/base.html +0 -58
- data/test/buildbot/master/templates/macros/box.html +0 -37
- data/test/buildbot/master/templates/macros/build_line.html +0 -50
- data/test/buildbot/master/templates/macros/change.html +0 -81
- data/test/buildbot/master/templates/macros/forms.html +0 -300
- data/test/buildbot/master/templates/root.html +0 -42
- data/test/buildbot/master/templates/waterfall.html +0 -53
- data/test/buildbot/requirements.txt +0 -4
- data/test/buildbot/scripts/deploy.sh +0 -38
- data/test/buildbot/scripts/setup.sh +0 -107
- data/test/buildbot/slave/buildbot.tac +0 -43
- data/test/buildbot/slave/info/admin +0 -1
- data/test/buildbot/slave/info/host +0 -1
- data/test/buildbot/tests/__init__.py +0 -0
- data/test/buildbot/tests/master/__init__.py +0 -0
- data/test/buildbot/tests/master/test_slaves.py +0 -41
- data/test/buildbot/vendor/choices-0.4.0.tar.gz +0 -0
- data/test/config/acceptance_boxes.yml +0 -7
- data/test/support/isolated_environment.rb +0 -46
- data/test/support/tempdir.rb +0 -34
- data/test/unit/base.rb +0 -21
- data/test/unit/support/isolated_environment.rb +0 -47
- data/test/unit/support/shared/base_context.rb +0 -30
- data/test/unit/vagrant/action/builder_test.rb +0 -156
- data/test/unit/vagrant/action/environment_test.rb +0 -16
- data/test/unit/vagrant/action/runner_test.rb +0 -65
- data/test/unit/vagrant/action/warden_test.rb +0 -92
- data/test/unit/vagrant/box_collection_test.rb +0 -56
- data/test/unit/vagrant/box_test.rb +0 -34
- data/test/unit/vagrant/command/base_test.rb +0 -150
- data/test/unit/vagrant/config/base_test.rb +0 -48
- data/test/unit/vagrant/config/loader_test.rb +0 -79
- data/test/unit/vagrant/config/ssh_test.rb +0 -17
- data/test/unit/vagrant/config/top_test.rb +0 -69
- data/test/unit/vagrant/config/vm_test.rb +0 -71
- data/test/unit/vagrant/config_test.rb +0 -27
- data/test/unit/vagrant/data_store_test.rb +0 -79
- data/test/unit/vagrant/downloaders/base_test.rb +0 -18
- data/test/unit/vagrant/downloaders/file_test.rb +0 -75
- data/test/unit/vagrant/downloaders/http_test.rb +0 -19
- data/test/unit/vagrant/environment_test.rb +0 -220
- data/test/unit/vagrant/hosts_test.rb +0 -36
- data/test/unit/vagrant/registry_test.rb +0 -74
- data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +0 -16
- data/test/unit/vagrant/util/file_checksum_test.rb +0 -23
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +0 -38
- data/test/unit/vagrant/util/is_port_open_test.rb +0 -53
- data/test/unit/vagrant/util/line_endings_helper_test.rb +0 -16
- data/test/unit/vagrant/util/network_ip_test.rb +0 -17
- data/test/unit/vagrant/util/retryable_test.rb +0 -106
- data/test/unit/vagrant_test.rb +0 -27
- data/test/unit_legacy/locales/en.yml +0 -8
- data/test/unit_legacy/test_helper.rb +0 -32
- data/test/unit_legacy/vagrant/action/box/destroy_test.rb +0 -18
- data/test/unit_legacy/vagrant/action/box/download_test.rb +0 -125
- data/test/unit_legacy/vagrant/action/box/package_test.rb +0 -25
- data/test/unit_legacy/vagrant/action/box/unpackage_test.rb +0 -84
- data/test/unit_legacy/vagrant/action/box/verify_test.rb +0 -30
- data/test/unit_legacy/vagrant/action/env/set_test.rb +0 -24
- data/test/unit_legacy/vagrant/action/general/package_test.rb +0 -268
- data/test/unit_legacy/vagrant/action/general/validate_test.rb +0 -31
- data/test/unit_legacy/vagrant/action/vm/boot_test.rb +0 -66
- data/test/unit_legacy/vagrant/action/vm/check_accessible_test.rb +0 -61
- data/test/unit_legacy/vagrant/action/vm/check_box_test.rb +0 -61
- data/test/unit_legacy/vagrant/action/vm/check_guest_additions_test.rb +0 -9
- data/test/unit_legacy/vagrant/action/vm/clean_machine_folder_test.rb +0 -84
- data/test/unit_legacy/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -52
- data/test/unit_legacy/vagrant/action/vm/clear_nfs_exports_test.rb +0 -22
- data/test/unit_legacy/vagrant/action/vm/clear_shared_folders_test.rb +0 -40
- data/test/unit_legacy/vagrant/action/vm/customize_test.rb +0 -37
- data/test/unit_legacy/vagrant/action/vm/destroy_test.rb +0 -25
- data/test/unit_legacy/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -49
- data/test/unit_legacy/vagrant/action/vm/discard_state_test.rb +0 -45
- data/test/unit_legacy/vagrant/action/vm/export_test.rb +0 -107
- data/test/unit_legacy/vagrant/action/vm/forward_ports_helpers_test.rb +0 -77
- data/test/unit_legacy/vagrant/action/vm/forward_ports_test.rb +0 -197
- data/test/unit_legacy/vagrant/action/vm/halt_test.rb +0 -79
- data/test/unit_legacy/vagrant/action/vm/host_name_test.rb +0 -36
- data/test/unit_legacy/vagrant/action/vm/import_test.rb +0 -66
- data/test/unit_legacy/vagrant/action/vm/match_mac_address_test.rb +0 -40
- data/test/unit_legacy/vagrant/action/vm/modify_test.rb +0 -38
- data/test/unit_legacy/vagrant/action/vm/network_test.rb +0 -286
- data/test/unit_legacy/vagrant/action/vm/nfs_helpers_test.rb +0 -26
- data/test/unit_legacy/vagrant/action/vm/nfs_test.rb +0 -260
- data/test/unit_legacy/vagrant/action/vm/package_test.rb +0 -25
- data/test/unit_legacy/vagrant/action/vm/package_vagrantfile_test.rb +0 -46
- data/test/unit_legacy/vagrant/action/vm/provision_test.rb +0 -65
- data/test/unit_legacy/vagrant/action/vm/provisioner_cleanup_test.rb +0 -56
- data/test/unit_legacy/vagrant/action/vm/resume_test.rb +0 -35
- data/test/unit_legacy/vagrant/action/vm/share_folders_test.rb +0 -144
- data/test/unit_legacy/vagrant/action/vm/suspend_test.rb +0 -35
- data/test/unit_legacy/vagrant/action_test.rb +0 -89
- data/test/unit_legacy/vagrant/box_collection_test.rb +0 -45
- data/test/unit_legacy/vagrant/box_test.rb +0 -74
- data/test/unit_legacy/vagrant/cli_test.rb +0 -35
- data/test/unit_legacy/vagrant/command/base_test.rb +0 -23
- data/test/unit_legacy/vagrant/command/group_base_test.rb +0 -15
- data/test/unit_legacy/vagrant/command/helpers_test.rb +0 -88
- data/test/unit_legacy/vagrant/command/init_test.rb +0 -10
- data/test/unit_legacy/vagrant/command/package_test.rb +0 -27
- data/test/unit_legacy/vagrant/config/base_test.rb +0 -52
- data/test/unit_legacy/vagrant/config/error_recorder_test.rb +0 -18
- data/test/unit_legacy/vagrant/config/ssh_test.rb +0 -12
- data/test/unit_legacy/vagrant/config/vagrant_test.rb +0 -35
- data/test/unit_legacy/vagrant/config/vm/provisioner_test.rb +0 -92
- data/test/unit_legacy/vagrant/config/vm_test.rb +0 -47
- data/test/unit_legacy/vagrant/config_test.rb +0 -148
- data/test/unit_legacy/vagrant/downloaders/http_test.rb +0 -93
- data/test/unit_legacy/vagrant/environment_test.rb +0 -539
- data/test/unit_legacy/vagrant/errors_test.rb +0 -42
- data/test/unit_legacy/vagrant/hosts/base_test.rb +0 -46
- data/test/unit_legacy/vagrant/hosts/bsd_test.rb +0 -53
- data/test/unit_legacy/vagrant/hosts/linux_test.rb +0 -54
- data/test/unit_legacy/vagrant/plugin_test.rb +0 -9
- data/test/unit_legacy/vagrant/provisioners/base_test.rb +0 -63
- data/test/unit_legacy/vagrant/provisioners/chef_client_test.rb +0 -190
- data/test/unit_legacy/vagrant/provisioners/chef_solo_test.rb +0 -115
- data/test/unit_legacy/vagrant/provisioners/chef_test.rb +0 -209
- data/test/unit_legacy/vagrant/provisioners/puppet_server_test.rb +0 -68
- data/test/unit_legacy/vagrant/provisioners/puppet_test.rb +0 -182
- data/test/unit_legacy/vagrant/provisioners/shell_test.rb +0 -79
- data/test/unit_legacy/vagrant/ssh/session_test.rb +0 -40
- data/test/unit_legacy/vagrant/ssh_test.rb +0 -304
- data/test/unit_legacy/vagrant/systems/base_test.rb +0 -18
- data/test/unit_legacy/vagrant/systems/linux_test.rb +0 -104
- data/test/unit_legacy/vagrant/util/busy_test.rb +0 -106
- data/test/unit_legacy/vagrant/util/counter_test.rb +0 -29
- data/test/unit_legacy/vagrant/util/platform_test.rb +0 -18
- data/test/unit_legacy/vagrant/util/stacked_proc_runner_test.rb +0 -43
- data/test/unit_legacy/vagrant/util/template_renderer_test.rb +0 -145
- data/test/unit_legacy/vagrant/vm_test.rb +0 -300
data/lib/vagrant/downloaders.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
module Downloaders
|
3
|
-
# Represents a base class for a downloader. A downloader handles
|
4
|
-
# downloading a box file to a temporary file.
|
5
|
-
class Base
|
6
|
-
include Vagrant::Util
|
7
|
-
|
8
|
-
def initialize(ui)
|
9
|
-
@ui = ui
|
10
|
-
end
|
11
|
-
|
12
|
-
# Tests whether a URL matches this download. Subclasses must
|
13
|
-
# override this and return `true` for any URLs they wish to
|
14
|
-
# handle.
|
15
|
-
def self.match?(url); false; end
|
16
|
-
|
17
|
-
# Called prior to execution so any error checks can be done
|
18
|
-
def prepare(source_url); end
|
19
|
-
|
20
|
-
# Downloads the source file to the destination file. It is up to
|
21
|
-
# implementors of this class to handle the logic.
|
22
|
-
def download!(source_url, destination_file); end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
module Vagrant
|
4
|
-
module Downloaders
|
5
|
-
# "Downloads" a file to a temporary file. Basically, this downloader
|
6
|
-
# simply does a file copy.
|
7
|
-
class File < Base
|
8
|
-
def self.match?(uri)
|
9
|
-
::File.file?(::File.expand_path(uri))
|
10
|
-
end
|
11
|
-
|
12
|
-
def prepare(source_url)
|
13
|
-
raise Errors::DownloaderFileDoesntExist if !::File.file?(::File.expand_path(source_url))
|
14
|
-
end
|
15
|
-
|
16
|
-
def download!(source_url, destination_file)
|
17
|
-
@ui.info I18n.t("vagrant.downloaders.file.download")
|
18
|
-
FileUtils.cp(::File.expand_path(source_url), destination_file.path)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,97 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'net/https'
|
3
|
-
require 'uri'
|
4
|
-
require 'base64'
|
5
|
-
|
6
|
-
module Vagrant
|
7
|
-
module Downloaders
|
8
|
-
# Downloads a file from an HTTP URL to a temporary file. This
|
9
|
-
# downloader reports its progress to stdout while downloading.
|
10
|
-
class HTTP < Base
|
11
|
-
def self.match?(uri)
|
12
|
-
# URI.parse barfs on '<drive letter>:\\files \on\ windows'
|
13
|
-
extracted = URI.extract(uri).first
|
14
|
-
extracted && extracted.include?(uri)
|
15
|
-
end
|
16
|
-
|
17
|
-
def download!(source_url, destination_file)
|
18
|
-
uri = URI.parse(source_url)
|
19
|
-
proxy_uri = resolve_proxy(uri)
|
20
|
-
|
21
|
-
http = Net::HTTP.new(uri.host, uri.port, proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password)
|
22
|
-
http.read_timeout = nil # Disable the read timeout, just let it try to download
|
23
|
-
|
24
|
-
if uri.scheme == "https"
|
25
|
-
http.use_ssl = true
|
26
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
27
|
-
end
|
28
|
-
|
29
|
-
http.start do |h|
|
30
|
-
@ui.info I18n.t("vagrant.downloaders.http.download", :url => source_url)
|
31
|
-
|
32
|
-
headers = nil
|
33
|
-
if uri.user && uri.password
|
34
|
-
headers = {'Authorization' => 'Basic ' + Base64.encode64(uri.user + ':' + uri.password)}
|
35
|
-
end
|
36
|
-
|
37
|
-
h.request_get(uri.request_uri, headers) do |response|
|
38
|
-
if response.is_a?(Net::HTTPRedirection)
|
39
|
-
# Follow the HTTP redirect.
|
40
|
-
# TODO: Error on some redirect limit
|
41
|
-
download!(response["Location"], destination_file)
|
42
|
-
return
|
43
|
-
elsif !response.is_a?(Net::HTTPOK)
|
44
|
-
raise Errors::DownloaderHTTPStatusError, :status => response.code
|
45
|
-
end
|
46
|
-
|
47
|
-
total = response.content_length
|
48
|
-
progress = 0
|
49
|
-
segment_count = 0
|
50
|
-
|
51
|
-
response.read_body do |segment|
|
52
|
-
# Report the progress out
|
53
|
-
progress += segment.length
|
54
|
-
segment_count += 1
|
55
|
-
|
56
|
-
# Progress reporting is limited to every 25 segments just so
|
57
|
-
# we're not constantly updating
|
58
|
-
if segment_count % 25 == 0
|
59
|
-
@ui.clear_line
|
60
|
-
@ui.report_progress(progress, total)
|
61
|
-
segment_count = 0
|
62
|
-
end
|
63
|
-
|
64
|
-
# Store the segment
|
65
|
-
destination_file.write(segment)
|
66
|
-
end
|
67
|
-
|
68
|
-
# Clear the line one last time so that the progress meter disappears
|
69
|
-
@ui.clear_line
|
70
|
-
end
|
71
|
-
end
|
72
|
-
rescue SocketError
|
73
|
-
raise Errors::DownloaderHTTPSocketError
|
74
|
-
end
|
75
|
-
|
76
|
-
private
|
77
|
-
|
78
|
-
# This method respects the "http_proxy" and "no_proxy" environmental
|
79
|
-
# variables so that HTTP proxies can properly be used with Vagrant.
|
80
|
-
def resolve_proxy(source_uri)
|
81
|
-
proxy_string = ENV["http_proxy"] || ""
|
82
|
-
if !proxy_string.empty? && ENV.has_key?("no_proxy")
|
83
|
-
# Respect the "no_proxy" environmental variable which contains a list
|
84
|
-
# of hosts that a proxy should not be used for.
|
85
|
-
ENV["no_proxy"].split(",").each do |host|
|
86
|
-
if source_uri.host =~ /#{Regexp.quote(host.strip)}$/
|
87
|
-
proxy_string = ""
|
88
|
-
break
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
URI.parse(proxy_string)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
data/lib/vagrant/driver.rb
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
module Driver
|
3
|
-
autoload :VirtualBox, 'vagrant/driver/virtualbox'
|
4
|
-
autoload :VirtualBox_4_0, 'vagrant/driver/virtualbox_4_0'
|
5
|
-
autoload :VirtualBox_4_1, 'vagrant/driver/virtualbox_4_1'
|
6
|
-
autoload :VirtualBox_4_2, 'vagrant/driver/virtualbox_4_2'
|
7
|
-
end
|
8
|
-
end
|
@@ -1,134 +0,0 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
|
3
|
-
require 'log4r'
|
4
|
-
|
5
|
-
require 'vagrant/driver/virtualbox_base'
|
6
|
-
|
7
|
-
module Vagrant
|
8
|
-
module Driver
|
9
|
-
# This class contains the logic to drive VirtualBox.
|
10
|
-
#
|
11
|
-
# Read the VirtualBoxBase source for documentation on each method.
|
12
|
-
class VirtualBox < VirtualBoxBase
|
13
|
-
# This is raised if the VM is not found when initializing a driver
|
14
|
-
# with a UUID.
|
15
|
-
class VMNotFound < StandardError; end
|
16
|
-
|
17
|
-
# We use forwardable to do all our driver forwarding
|
18
|
-
extend Forwardable
|
19
|
-
|
20
|
-
# The UUID of the virtual machine we represent
|
21
|
-
attr_reader :uuid
|
22
|
-
|
23
|
-
# The version of virtualbox that is running.
|
24
|
-
attr_reader :version
|
25
|
-
|
26
|
-
def initialize(uuid=nil)
|
27
|
-
# Setup the base
|
28
|
-
super()
|
29
|
-
|
30
|
-
@logger = Log4r::Logger.new("vagrant::driver::virtualbox")
|
31
|
-
@uuid = uuid
|
32
|
-
|
33
|
-
# Read and assign the version of VirtualBox we know which
|
34
|
-
# specific driver to instantiate.
|
35
|
-
begin
|
36
|
-
@version = read_version || ""
|
37
|
-
rescue Subprocess::LaunchError
|
38
|
-
# This means that VirtualBox was not found, so we raise this
|
39
|
-
# error here.
|
40
|
-
raise Errors::VirtualBoxNotDetected
|
41
|
-
end
|
42
|
-
|
43
|
-
# Instantiate the proper version driver for VirtualBox
|
44
|
-
@logger.debug("Finding driver for VirtualBox version: #{@version}")
|
45
|
-
driver_map = {
|
46
|
-
"4.0" => VirtualBox_4_0,
|
47
|
-
"4.1" => VirtualBox_4_1,
|
48
|
-
"4.2" => VirtualBox_4_2
|
49
|
-
}
|
50
|
-
|
51
|
-
driver_klass = nil
|
52
|
-
driver_map.each do |key, klass|
|
53
|
-
if @version.start_with?(key)
|
54
|
-
driver_klass = klass
|
55
|
-
break
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
if !driver_klass
|
60
|
-
supported_versions = driver_map.keys.sort.join(", ")
|
61
|
-
raise Errors::VirtualBoxInvalidVersion, :supported_versions => supported_versions
|
62
|
-
end
|
63
|
-
|
64
|
-
@logger.info("Using VirtualBox driver: #{driver_klass}")
|
65
|
-
@driver = driver_klass.new(@uuid)
|
66
|
-
|
67
|
-
if @uuid
|
68
|
-
# Verify the VM exists, and if it doesn't, then don't worry
|
69
|
-
# about it (mark the UUID as nil)
|
70
|
-
raise VMNotFound if !@driver.vm_exists?(@uuid)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def_delegators :@driver, :clear_forwarded_ports,
|
75
|
-
:clear_shared_folders,
|
76
|
-
:create_dhcp_server,
|
77
|
-
:create_host_only_network,
|
78
|
-
:delete,
|
79
|
-
:delete_unused_host_only_networks,
|
80
|
-
:discard_saved_state,
|
81
|
-
:enable_adapters,
|
82
|
-
:execute_command,
|
83
|
-
:export,
|
84
|
-
:forward_ports,
|
85
|
-
:halt,
|
86
|
-
:import,
|
87
|
-
:read_forwarded_ports,
|
88
|
-
:read_bridged_interfaces,
|
89
|
-
:read_guest_additions_version,
|
90
|
-
:read_host_only_interfaces,
|
91
|
-
:read_mac_address,
|
92
|
-
:read_machine_folder,
|
93
|
-
:read_network_interfaces,
|
94
|
-
:read_state,
|
95
|
-
:read_used_ports,
|
96
|
-
:read_vms,
|
97
|
-
:set_mac_address,
|
98
|
-
:set_name,
|
99
|
-
:share_folders,
|
100
|
-
:ssh_port,
|
101
|
-
:start,
|
102
|
-
:suspend,
|
103
|
-
:verify!,
|
104
|
-
:verify_image,
|
105
|
-
:vm_exists?
|
106
|
-
|
107
|
-
protected
|
108
|
-
|
109
|
-
# This returns the version of VirtualBox that is running.
|
110
|
-
#
|
111
|
-
# @return [String]
|
112
|
-
def read_version
|
113
|
-
# The version string is usually in one of the following formats:
|
114
|
-
#
|
115
|
-
# * 4.1.8r1234
|
116
|
-
# * 4.1.8r1234_OSE
|
117
|
-
# * 4.1.8_MacPortsr1234
|
118
|
-
#
|
119
|
-
# Below accounts for all of these.
|
120
|
-
|
121
|
-
# Note: We split this into multiple lines because apparently "".split("_")
|
122
|
-
# is [], so we have to check for an empty array in between.
|
123
|
-
output = execute("--version")
|
124
|
-
if output =~ /vboxdrv kernel module is not loaded/
|
125
|
-
raise Errors::VirtualBoxKernelModuleNotLoaded
|
126
|
-
end
|
127
|
-
|
128
|
-
parts = output.split("_")
|
129
|
-
return nil if parts.empty?
|
130
|
-
parts[0].split("r")[0]
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
@@ -1,459 +0,0 @@
|
|
1
|
-
require 'log4r'
|
2
|
-
|
3
|
-
require 'vagrant/driver/virtualbox_base'
|
4
|
-
|
5
|
-
module Vagrant
|
6
|
-
module Driver
|
7
|
-
# Driver for VirtualBox 4.0.x
|
8
|
-
class VirtualBox_4_0 < VirtualBoxBase
|
9
|
-
def initialize(uuid)
|
10
|
-
super()
|
11
|
-
|
12
|
-
@logger = Log4r::Logger.new("vagrant::driver::virtualbox_4_0")
|
13
|
-
@uuid = uuid
|
14
|
-
end
|
15
|
-
|
16
|
-
def clear_forwarded_ports
|
17
|
-
args = []
|
18
|
-
read_forwarded_ports(@uuid).each do |nic, name, _, _|
|
19
|
-
args.concat(["--natpf#{nic}", "delete", name])
|
20
|
-
end
|
21
|
-
|
22
|
-
execute("modifyvm", @uuid, *args) if !args.empty?
|
23
|
-
end
|
24
|
-
|
25
|
-
def clear_shared_folders
|
26
|
-
info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
|
27
|
-
info.split("\n").each do |line|
|
28
|
-
if line =~ /^SharedFolderNameMachineMapping\d+="(.+?)"$/
|
29
|
-
execute("sharedfolder", "remove", @uuid, "--name", $1.to_s)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def create_dhcp_server(network, options)
|
35
|
-
execute("dhcpserver", "add", "--ifname", network,
|
36
|
-
"--ip", options[:dhcp_ip],
|
37
|
-
"--netmask", options[:netmask],
|
38
|
-
"--lowerip", options[:dhcp_lower],
|
39
|
-
"--upperip", options[:dhcp_upper],
|
40
|
-
"--enable")
|
41
|
-
end
|
42
|
-
|
43
|
-
def create_host_only_network(options)
|
44
|
-
# Create the interface
|
45
|
-
execute("hostonlyif", "create") =~ /^Interface '(.+?)' was successfully created$/
|
46
|
-
name = $1.to_s
|
47
|
-
|
48
|
-
# Configure it
|
49
|
-
execute("hostonlyif", "ipconfig", name,
|
50
|
-
"--ip", options[:adapter_ip],
|
51
|
-
"--netmask", options[:netmask])
|
52
|
-
|
53
|
-
# Return the details
|
54
|
-
return {
|
55
|
-
:name => name,
|
56
|
-
:ip => options[:adapter_ip],
|
57
|
-
:netmask => options[:netmask],
|
58
|
-
:dhcp => nil
|
59
|
-
}
|
60
|
-
end
|
61
|
-
|
62
|
-
def delete
|
63
|
-
execute("unregistervm", @uuid, "--delete")
|
64
|
-
end
|
65
|
-
|
66
|
-
def delete_unused_host_only_networks
|
67
|
-
networks = []
|
68
|
-
execute("list", "hostonlyifs").split("\n").each do |line|
|
69
|
-
networks << $1.to_s if line =~ /^Name:\s+(.+?)$/
|
70
|
-
end
|
71
|
-
|
72
|
-
execute("list", "vms").split("\n").each do |line|
|
73
|
-
if line =~ /^".+?"\s+\{(.+?)\}$/
|
74
|
-
info = execute("showvminfo", $1.to_s, "--machinereadable", :retryable => true)
|
75
|
-
info.split("\n").each do |line|
|
76
|
-
if line =~ /^hostonlyadapter\d+="(.+?)"$/
|
77
|
-
networks.delete($1.to_s)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
networks.each do |name|
|
84
|
-
# First try to remove any DHCP servers attached. We use `raw` because
|
85
|
-
# it is okay if this fails. It usually means that a DHCP server was
|
86
|
-
# never attached.
|
87
|
-
raw("dhcpserver", "remove", "--ifname", name)
|
88
|
-
|
89
|
-
# Delete the actual host only network interface.
|
90
|
-
execute("hostonlyif", "remove", name)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
def discard_saved_state
|
95
|
-
execute("discardstate", @uuid)
|
96
|
-
end
|
97
|
-
|
98
|
-
def enable_adapters(adapters)
|
99
|
-
args = []
|
100
|
-
adapters.each do |adapter|
|
101
|
-
args.concat(["--nic#{adapter[:adapter]}", adapter[:type].to_s])
|
102
|
-
|
103
|
-
if adapter[:bridge]
|
104
|
-
args.concat(["--bridgeadapter#{adapter[:adapter]}",
|
105
|
-
adapter[:bridge]])
|
106
|
-
end
|
107
|
-
|
108
|
-
if adapter[:hostonly]
|
109
|
-
args.concat(["--hostonlyadapter#{adapter[:adapter]}",
|
110
|
-
adapter[:hostonly]])
|
111
|
-
end
|
112
|
-
|
113
|
-
if adapter[:mac_address]
|
114
|
-
args.concat(["--macaddress#{adapter[:adapter]}",
|
115
|
-
adapter[:mac_address]])
|
116
|
-
end
|
117
|
-
|
118
|
-
if adapter[:nic_type]
|
119
|
-
args.concat(["--nictype#{adapter[:adapter]}", adapter[:nic_type].to_s])
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
execute("modifyvm", @uuid, *args)
|
124
|
-
end
|
125
|
-
|
126
|
-
def execute_command(command)
|
127
|
-
raw(*command)
|
128
|
-
end
|
129
|
-
|
130
|
-
def export(path)
|
131
|
-
# TODO: Progress
|
132
|
-
execute("export", @uuid, "--output", path.to_s)
|
133
|
-
end
|
134
|
-
|
135
|
-
def forward_ports(ports)
|
136
|
-
args = []
|
137
|
-
ports.each do |options|
|
138
|
-
pf_builder = [options[:name],
|
139
|
-
options[:protocol] || "tcp",
|
140
|
-
"",
|
141
|
-
options[:hostport],
|
142
|
-
"",
|
143
|
-
options[:guestport]]
|
144
|
-
|
145
|
-
args.concat(["--natpf#{options[:adapter] || 1}",
|
146
|
-
pf_builder.join(",")])
|
147
|
-
end
|
148
|
-
|
149
|
-
execute("modifyvm", @uuid, *args) if !args.empty?
|
150
|
-
end
|
151
|
-
|
152
|
-
def halt
|
153
|
-
execute("controlvm", @uuid, "poweroff")
|
154
|
-
end
|
155
|
-
|
156
|
-
def import(ovf)
|
157
|
-
output = ""
|
158
|
-
total = ""
|
159
|
-
last = 0
|
160
|
-
execute("import", ovf) do |type, data|
|
161
|
-
if type == :stdout
|
162
|
-
# Keep track of the stdout so that we can get the VM name
|
163
|
-
output << data
|
164
|
-
elsif type == :stderr
|
165
|
-
# Append the data so we can see the full view
|
166
|
-
total << data
|
167
|
-
|
168
|
-
# Break up the lines. We can't get the progress until we see an "OK"
|
169
|
-
lines = total.split("\n")
|
170
|
-
if lines.include?("OK.")
|
171
|
-
# The progress of the import will be in the last line. Do a greedy
|
172
|
-
# regular expression to find what we're looking for.
|
173
|
-
if lines.last =~ /.+(\d{2})%/
|
174
|
-
current = $1.to_i
|
175
|
-
if current > last
|
176
|
-
last = current
|
177
|
-
yield current if block_given?
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
# Find the name of the VM name
|
185
|
-
if output !~ /Suggested VM name "(.+?)"/
|
186
|
-
@logger.error("Couldn't find VM name in the output.")
|
187
|
-
return nil
|
188
|
-
end
|
189
|
-
|
190
|
-
name = $1.to_s
|
191
|
-
|
192
|
-
output = execute("list", "vms")
|
193
|
-
if output =~ /^"#{Regexp.escape(name)}" \{(.+?)\}$/
|
194
|
-
return $1.to_s
|
195
|
-
end
|
196
|
-
|
197
|
-
nil
|
198
|
-
end
|
199
|
-
|
200
|
-
def read_forwarded_ports(uuid=nil, active_only=false)
|
201
|
-
uuid ||= @uuid
|
202
|
-
|
203
|
-
@logger.debug("read_forward_ports: uuid=#{uuid} active_only=#{active_only}")
|
204
|
-
|
205
|
-
results = []
|
206
|
-
current_nic = nil
|
207
|
-
info = execute("showvminfo", uuid, "--machinereadable", :retryable => true)
|
208
|
-
info.split("\n").each do |line|
|
209
|
-
# This is how we find the nic that a FP is attached to,
|
210
|
-
# since this comes first.
|
211
|
-
current_nic = $1.to_i if line =~ /^nic(\d+)=".+?"$/
|
212
|
-
|
213
|
-
# If we care about active VMs only, then we check the state
|
214
|
-
# to verify the VM is running.
|
215
|
-
if active_only && line =~ /^VMState="(.+?)"$/ && $1.to_s != "running"
|
216
|
-
return []
|
217
|
-
end
|
218
|
-
|
219
|
-
# Parse out the forwarded port information
|
220
|
-
if line =~ /^Forwarding.+?="(.+?),.+?,.*?,(.+?),.*?,(.+?)"$/
|
221
|
-
result = [current_nic, $1.to_s, $2.to_i, $3.to_i]
|
222
|
-
@logger.debug(" - #{result.inspect}")
|
223
|
-
results << result
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
results
|
228
|
-
end
|
229
|
-
|
230
|
-
def read_bridged_interfaces
|
231
|
-
execute("list", "bridgedifs").split("\n\n").collect do |block|
|
232
|
-
info = {}
|
233
|
-
|
234
|
-
block.split("\n").each do |line|
|
235
|
-
if line =~ /^Name:\s+(.+?)$/
|
236
|
-
info[:name] = $1.to_s
|
237
|
-
elsif line =~ /^IPAddress:\s+(.+?)$/
|
238
|
-
info[:ip] = $1.to_s
|
239
|
-
elsif line =~ /^NetworkMask:\s+(.+?)$/
|
240
|
-
info[:netmask] = $1.to_s
|
241
|
-
elsif line =~ /^Status:\s+(.+?)$/
|
242
|
-
info[:status] = $1.to_s
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
# Return the info to build up the results
|
247
|
-
info
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
def read_guest_additions_version
|
252
|
-
output = execute("guestproperty", "get", @uuid, "/VirtualBox/GuestAdd/Version",
|
253
|
-
:retryable => true)
|
254
|
-
if output =~ /^Value: (.+?)$/
|
255
|
-
# Split the version by _ since some distro versions modify it
|
256
|
-
# to look like this: 4.1.2_ubuntu, and the distro part isn't
|
257
|
-
# too important.
|
258
|
-
value = $1.to_s
|
259
|
-
return value.split("_").first
|
260
|
-
end
|
261
|
-
|
262
|
-
return nil
|
263
|
-
end
|
264
|
-
|
265
|
-
def read_host_only_interfaces
|
266
|
-
dhcp = {}
|
267
|
-
execute("list", "dhcpservers", :retryable => true).split("\n\n").each do |block|
|
268
|
-
info = {}
|
269
|
-
|
270
|
-
block.split("\n").each do |line|
|
271
|
-
if line =~ /^NetworkName:\s+HostInterfaceNetworking-(.+?)$/
|
272
|
-
info[:network] = $1.to_s
|
273
|
-
elsif line =~ /^IP:\s+(.+?)$/
|
274
|
-
info[:ip] = $1.to_s
|
275
|
-
elsif line =~ /^lowerIPAddress:\s+(.+?)$/
|
276
|
-
info[:lower] = $1.to_s
|
277
|
-
elsif line =~ /^upperIPAddress:\s+(.+?)$/
|
278
|
-
info[:upper] = $1.to_s
|
279
|
-
end
|
280
|
-
end
|
281
|
-
|
282
|
-
# Set the DHCP info
|
283
|
-
dhcp[info[:network]] = info
|
284
|
-
end
|
285
|
-
|
286
|
-
execute("list", "hostonlyifs", :retryable => true).split("\n\n").collect do |block|
|
287
|
-
info = {}
|
288
|
-
|
289
|
-
block.split("\n").each do |line|
|
290
|
-
if line =~ /^Name:\s+(.+?)$/
|
291
|
-
info[:name] = $1.to_s
|
292
|
-
elsif line =~ /^IPAddress:\s+(.+?)$/
|
293
|
-
info[:ip] = $1.to_s
|
294
|
-
elsif line =~ /^NetworkMask:\s+(.+?)$/
|
295
|
-
info[:netmask] = $1.to_s
|
296
|
-
elsif line =~ /^Status:\s+(.+?)$/
|
297
|
-
info[:status] = $1.to_s
|
298
|
-
end
|
299
|
-
end
|
300
|
-
|
301
|
-
# Set the DHCP info if it exists
|
302
|
-
info[:dhcp] = dhcp[info[:name]] if dhcp[info[:name]]
|
303
|
-
|
304
|
-
info
|
305
|
-
end
|
306
|
-
end
|
307
|
-
|
308
|
-
def read_mac_address
|
309
|
-
info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
|
310
|
-
info.split("\n").each do |line|
|
311
|
-
return $1.to_s if line =~ /^macaddress1="(.+?)"$/
|
312
|
-
end
|
313
|
-
|
314
|
-
nil
|
315
|
-
end
|
316
|
-
|
317
|
-
def read_machine_folder
|
318
|
-
execute("list", "systemproperties", :retryable => true).split("\n").each do |line|
|
319
|
-
if line =~ /^Default machine folder:\s+(.+?)$/i
|
320
|
-
return $1.to_s
|
321
|
-
end
|
322
|
-
end
|
323
|
-
|
324
|
-
nil
|
325
|
-
end
|
326
|
-
|
327
|
-
def read_network_interfaces
|
328
|
-
nics = {}
|
329
|
-
info = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
|
330
|
-
info.split("\n").each do |line|
|
331
|
-
if line =~ /^nic(\d+)="(.+?)"$/
|
332
|
-
adapter = $1.to_i
|
333
|
-
type = $2.to_sym
|
334
|
-
|
335
|
-
nics[adapter] ||= {}
|
336
|
-
nics[adapter][:type] = type
|
337
|
-
elsif line =~ /^hostonlyadapter(\d+)="(.+?)"$/
|
338
|
-
adapter = $1.to_i
|
339
|
-
network = $2.to_s
|
340
|
-
|
341
|
-
nics[adapter] ||= {}
|
342
|
-
nics[adapter][:hostonly] = network
|
343
|
-
elsif line =~ /^bridgeadapter(\d+)="(.+?)"$/
|
344
|
-
adapter = $1.to_i
|
345
|
-
network = $2.to_s
|
346
|
-
|
347
|
-
nics[adapter] ||= {}
|
348
|
-
nics[adapter][:bridge] = network
|
349
|
-
end
|
350
|
-
end
|
351
|
-
|
352
|
-
nics
|
353
|
-
end
|
354
|
-
|
355
|
-
def read_state
|
356
|
-
output = execute("showvminfo", @uuid, "--machinereadable", :retryable => true)
|
357
|
-
if output =~ /^name="<inaccessible>"$/
|
358
|
-
return :inaccessible
|
359
|
-
elsif output =~ /^VMState="(.+?)"$/
|
360
|
-
return $1.to_sym
|
361
|
-
end
|
362
|
-
|
363
|
-
nil
|
364
|
-
end
|
365
|
-
|
366
|
-
def read_used_ports
|
367
|
-
ports = []
|
368
|
-
execute("list", "vms", :retryable => true).split("\n").each do |line|
|
369
|
-
if line =~ /^".+?" \{(.+?)\}$/
|
370
|
-
uuid = $1.to_s
|
371
|
-
|
372
|
-
# Ignore our own used ports
|
373
|
-
next if uuid == @uuid
|
374
|
-
|
375
|
-
read_forwarded_ports(uuid, true).each do |_, _, hostport, _|
|
376
|
-
ports << hostport
|
377
|
-
end
|
378
|
-
end
|
379
|
-
end
|
380
|
-
|
381
|
-
ports
|
382
|
-
end
|
383
|
-
|
384
|
-
def read_vms
|
385
|
-
results = []
|
386
|
-
execute("list", "vms", :retryable => true).split("\n").each do |line|
|
387
|
-
if line =~ /^".+?" \{(.+?)\}$/
|
388
|
-
results << $1.to_s
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
results
|
393
|
-
end
|
394
|
-
|
395
|
-
def set_mac_address(mac)
|
396
|
-
execute("modifyvm", @uuid, "--macaddress1", mac)
|
397
|
-
end
|
398
|
-
|
399
|
-
def set_name(name)
|
400
|
-
execute("modifyvm", @uuid, "--name", name)
|
401
|
-
end
|
402
|
-
|
403
|
-
def share_folders(folders)
|
404
|
-
folders.each do |folder|
|
405
|
-
args = ["--name",
|
406
|
-
folder[:name],
|
407
|
-
"--hostpath",
|
408
|
-
folder[:hostpath]]
|
409
|
-
args << "--transient" if folder.has_key?(:transient) && folder[:transient]
|
410
|
-
execute("sharedfolder", "add", @uuid, *args)
|
411
|
-
end
|
412
|
-
end
|
413
|
-
|
414
|
-
def ssh_port(expected_port)
|
415
|
-
@logger.debug("Searching for SSH port: #{expected_port.inspect}")
|
416
|
-
|
417
|
-
# Look for the forwarded port only by comparing the guest port
|
418
|
-
read_forwarded_ports.each do |_, _, hostport, guestport|
|
419
|
-
return hostport if guestport == expected_port
|
420
|
-
end
|
421
|
-
|
422
|
-
nil
|
423
|
-
end
|
424
|
-
|
425
|
-
def start(mode)
|
426
|
-
command = ["startvm", @uuid, "--type", mode.to_s]
|
427
|
-
r = raw(*command)
|
428
|
-
|
429
|
-
if r.exit_code == 0 || r.stdout =~ /VM ".+?" has been successfully started/
|
430
|
-
# Some systems return an exit code 1 for some reason. For that
|
431
|
-
# we depend on the output.
|
432
|
-
return true
|
433
|
-
end
|
434
|
-
|
435
|
-
# If we reached this point then it didn't work out.
|
436
|
-
raise Errors::VBoxManageError, :command => command.inspect
|
437
|
-
end
|
438
|
-
|
439
|
-
def suspend
|
440
|
-
execute("controlvm", @uuid, "savestate")
|
441
|
-
end
|
442
|
-
|
443
|
-
def verify!
|
444
|
-
# This command sometimes fails if kernel drivers aren't properly loaded
|
445
|
-
# so we just run the command and verify that it succeeded.
|
446
|
-
execute("list", "hostonlyifs")
|
447
|
-
end
|
448
|
-
|
449
|
-
def verify_image(path)
|
450
|
-
r = raw("import", path.to_s, "--dry-run")
|
451
|
-
return r.exit_code == 0
|
452
|
-
end
|
453
|
-
|
454
|
-
def vm_exists?(uuid)
|
455
|
-
raw("showvminfo", uuid).exit_code == 0
|
456
|
-
end
|
457
|
-
end
|
458
|
-
end
|
459
|
-
end
|