vagrantup 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +91 -0
- data/LICENSE +2 -2
- data/README.md +11 -13
- data/bin/vagrant +29 -5
- data/config/default.rb +14 -9
- data/contrib/bash/completion.sh +3 -0
- data/keys/README.md +3 -3
- data/lib/vagrant.rb +156 -102
- data/lib/vagrant/action.rb +26 -47
- data/lib/vagrant/action/builder.rb +49 -23
- data/lib/vagrant/action/builtin/box_add.rb +85 -0
- data/lib/vagrant/action/builtin/call.rb +67 -0
- data/lib/vagrant/action/builtin/config_validate.rb +30 -0
- data/lib/vagrant/action/builtin/confirm.rb +38 -0
- data/lib/vagrant/action/builtin/env_set.rb +24 -0
- data/lib/vagrant/action/builtin/graceful_halt.rb +73 -0
- data/lib/vagrant/action/builtin/handle_box_url.rb +43 -0
- data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +117 -0
- data/lib/vagrant/action/builtin/lock.rb +57 -0
- data/lib/vagrant/action/builtin/nfs.rb +117 -0
- data/lib/vagrant/action/builtin/provision.rb +70 -0
- data/lib/vagrant/action/builtin/set_hostname.rb +27 -0
- data/lib/vagrant/action/builtin/ssh_exec.rb +42 -0
- data/lib/vagrant/action/builtin/ssh_run.rb +43 -0
- data/lib/vagrant/action/general/package.rb +19 -18
- data/lib/vagrant/action/hook.rb +103 -0
- data/lib/vagrant/action/runner.rb +21 -5
- data/lib/vagrant/action/warden.rb +20 -9
- data/lib/vagrant/box.rb +75 -26
- data/lib/vagrant/box_collection.rb +301 -35
- data/lib/vagrant/cli.rb +20 -14
- data/lib/vagrant/config.rb +23 -9
- data/lib/vagrant/config/loader.rb +131 -36
- data/lib/vagrant/config/v1.rb +9 -0
- data/lib/vagrant/config/v1/dummy_config.rb +13 -0
- data/lib/vagrant/config/v1/loader.rb +105 -0
- data/lib/vagrant/config/v1/root.rb +60 -0
- data/lib/vagrant/config/v2.rb +9 -0
- data/lib/vagrant/config/v2/dummy_config.rb +13 -0
- data/lib/vagrant/config/v2/loader.rb +141 -0
- data/lib/vagrant/config/v2/root.rb +105 -0
- data/lib/vagrant/config/v2/util.rb +21 -0
- data/lib/vagrant/config/version_base.rb +80 -0
- data/lib/vagrant/downloaders/base.rb +0 -3
- data/lib/vagrant/downloaders/file.rb +10 -4
- data/lib/vagrant/downloaders/http.rb +29 -10
- data/lib/vagrant/environment.rb +447 -240
- data/lib/vagrant/errors.rb +138 -97
- data/lib/vagrant/hosts.rb +3 -12
- data/lib/vagrant/machine.rb +325 -0
- data/lib/vagrant/machine_state.rb +45 -0
- data/lib/vagrant/plugin.rb +3 -78
- data/lib/vagrant/plugin/v1.rb +19 -0
- data/lib/vagrant/plugin/v1/command.rb +169 -0
- data/lib/vagrant/plugin/v1/communicator.rb +98 -0
- data/lib/vagrant/plugin/v1/config.rb +112 -0
- data/lib/vagrant/plugin/v1/errors.rb +15 -0
- data/lib/vagrant/plugin/v1/guest.rb +92 -0
- data/lib/vagrant/plugin/v1/host.rb +66 -0
- data/lib/vagrant/plugin/v1/manager.rb +131 -0
- data/lib/vagrant/plugin/v1/plugin.rb +229 -0
- data/lib/vagrant/plugin/v1/provider.rb +68 -0
- data/lib/vagrant/plugin/v1/provisioner.rb +50 -0
- data/lib/vagrant/plugin/v2.rb +22 -0
- data/lib/vagrant/plugin/v2/command.rb +234 -0
- data/lib/vagrant/plugin/v2/communicator.rb +98 -0
- data/lib/vagrant/plugin/v2/components.rb +29 -0
- data/lib/vagrant/plugin/v2/config.rb +101 -0
- data/lib/vagrant/plugin/v2/errors.rb +15 -0
- data/lib/vagrant/plugin/v2/guest.rb +92 -0
- data/lib/vagrant/plugin/v2/host.rb +66 -0
- data/lib/vagrant/plugin/v2/manager.rb +158 -0
- data/lib/vagrant/plugin/v2/plugin.rb +217 -0
- data/lib/vagrant/plugin/v2/provider.rb +69 -0
- data/lib/vagrant/plugin/v2/provisioner.rb +47 -0
- data/lib/vagrant/registry.rb +43 -17
- data/lib/vagrant/ssh.rb +15 -9
- data/lib/vagrant/ui.rb +7 -5
- data/lib/vagrant/util/is_port_open.rb +1 -1
- data/lib/vagrant/util/platform.rb +19 -0
- data/lib/vagrant/util/retryable.rb +8 -2
- data/lib/vagrant/util/safe_exec.rb +2 -2
- data/lib/vagrant/util/scoped_hash_override.rb +45 -0
- data/lib/vagrant/util/ssh.rb +126 -0
- data/lib/vagrant/util/string_block_editor.rb +75 -0
- data/lib/vagrant/util/subprocess.rb +33 -10
- data/lib/vagrant/util/which.rb +43 -0
- data/lib/vagrant/version.rb +1 -1
- data/plugins/README.md +5 -0
- data/plugins/commands/box/command/add.rb +46 -0
- data/plugins/commands/box/command/list.rb +41 -0
- data/plugins/commands/box/command/remove.rb +37 -0
- data/plugins/commands/box/command/repackage.rb +43 -0
- data/plugins/commands/box/command/root.rb +75 -0
- data/plugins/commands/box/plugin.rb +15 -0
- data/plugins/commands/destroy/command.rb +31 -0
- data/plugins/commands/destroy/plugin.rb +18 -0
- data/plugins/commands/halt/command.rb +33 -0
- data/plugins/commands/halt/plugin.rb +18 -0
- data/{lib/vagrant/command/init.rb → plugins/commands/init/command.rb} +4 -4
- data/plugins/commands/init/plugin.rb +18 -0
- data/plugins/commands/package/command.rb +83 -0
- data/plugins/commands/package/plugin.rb +18 -0
- data/plugins/commands/plugin/action.rb +52 -0
- data/plugins/commands/plugin/action/bundler_check.rb +25 -0
- data/plugins/commands/plugin/action/install_gem.rb +70 -0
- data/plugins/commands/plugin/action/license_plugin.rb +54 -0
- data/plugins/commands/plugin/action/list_plugins.rb +54 -0
- data/plugins/commands/plugin/action/prune_gems.rb +149 -0
- data/plugins/commands/plugin/action/uninstall_plugin.rb +23 -0
- data/plugins/commands/plugin/command/base.rb +22 -0
- data/plugins/commands/plugin/command/install.rb +39 -0
- data/plugins/commands/plugin/command/license.rb +31 -0
- data/plugins/commands/plugin/command/list.rb +28 -0
- data/plugins/commands/plugin/command/root.rb +75 -0
- data/plugins/commands/plugin/command/uninstall.rb +28 -0
- data/plugins/commands/plugin/gem_helper.rb +74 -0
- data/plugins/commands/plugin/plugin.rb +22 -0
- data/plugins/commands/plugin/state_file.rb +57 -0
- data/plugins/commands/provision/command.rb +34 -0
- data/plugins/commands/provision/plugin.rb +18 -0
- data/plugins/commands/reload/command.rb +37 -0
- data/plugins/commands/reload/plugin.rb +18 -0
- data/plugins/commands/resume/command.rb +25 -0
- data/plugins/commands/resume/plugin.rb +17 -0
- data/{lib/vagrant/command/ssh.rb → plugins/commands/ssh/command.rb} +17 -41
- data/plugins/commands/ssh/plugin.rb +17 -0
- data/{lib/vagrant/command/ssh_config.rb → plugins/commands/ssh_config/command.rb} +14 -16
- data/plugins/commands/ssh_config/plugin.rb +18 -0
- data/plugins/commands/status/command.rb +39 -0
- data/plugins/commands/status/plugin.rb +18 -0
- data/plugins/commands/suspend/command.rb +25 -0
- data/plugins/commands/suspend/plugin.rb +18 -0
- data/plugins/commands/up/command.rb +45 -0
- data/plugins/commands/up/plugin.rb +17 -0
- data/{lib/vagrant/command → plugins/commands/up}/start_mixins.rb +6 -6
- data/{lib/vagrant/communication/ssh.rb → plugins/communicators/ssh/communicator.rb} +139 -52
- data/plugins/communicators/ssh/plugin.rb +19 -0
- data/plugins/guests/arch/guest.rb +41 -0
- data/plugins/guests/arch/plugin.rb +15 -0
- data/{lib/vagrant/guest/debian.rb → plugins/guests/debian/guest.rb} +21 -13
- data/plugins/guests/debian/plugin.rb +15 -0
- data/{lib/vagrant/guest/fedora.rb → plugins/guests/fedora/guest.rb} +19 -14
- data/plugins/guests/fedora/plugin.rb +15 -0
- data/plugins/guests/freebsd/config.rb +13 -0
- data/plugins/guests/freebsd/guest.rb +70 -0
- data/plugins/guests/freebsd/plugin.rb +20 -0
- data/plugins/guests/gentoo/guest.rb +51 -0
- data/plugins/guests/gentoo/plugin.rb +15 -0
- data/plugins/guests/linux/config.rb +13 -0
- data/{lib/vagrant/guest/linux.rb → plugins/guests/linux/guest.rb} +35 -34
- data/plugins/guests/linux/plugin.rb +20 -0
- data/plugins/guests/openbsd/guest.rb +13 -0
- data/plugins/guests/openbsd/plugin.rb +15 -0
- data/{lib/vagrant/guest/redhat.rb → plugins/guests/redhat/guest.rb} +22 -15
- data/plugins/guests/redhat/plugin.rb +15 -0
- data/plugins/guests/solaris/config.rb +18 -0
- data/plugins/guests/solaris/guest.rb +73 -0
- data/plugins/guests/solaris/plugin.rb +20 -0
- data/plugins/guests/suse/guest.rb +24 -0
- data/plugins/guests/suse/plugin.rb +15 -0
- data/plugins/guests/ubuntu/guest.rb +44 -0
- data/plugins/guests/ubuntu/plugin.rb +15 -0
- data/{lib/vagrant/hosts/arch.rb → plugins/hosts/arch/host.rb} +18 -5
- data/plugins/hosts/arch/plugin.rb +15 -0
- data/{lib/vagrant/hosts/bsd.rb → plugins/hosts/bsd/host.rb} +16 -11
- data/plugins/hosts/bsd/plugin.rb +15 -0
- data/{lib/vagrant/hosts/fedora.rb → plugins/hosts/fedora/host.rb} +8 -4
- data/plugins/hosts/fedora/plugin.rb +15 -0
- data/{lib/vagrant/hosts/freebsd.rb → plugins/hosts/freebsd/host.rb} +10 -8
- data/plugins/hosts/freebsd/plugin.rb +15 -0
- data/{lib/vagrant/hosts/gentoo.rb → plugins/hosts/gentoo/host.rb} +7 -3
- data/plugins/hosts/gentoo/plugin.rb +15 -0
- data/{lib/vagrant/hosts/linux.rb → plugins/hosts/linux/host.rb} +12 -11
- data/plugins/hosts/linux/plugin.rb +15 -0
- data/{lib/vagrant/hosts/opensuse.rb → plugins/hosts/opensuse/host.rb} +8 -4
- data/plugins/hosts/opensuse/plugin.rb +15 -0
- data/{lib/vagrant/hosts/windows.rb → plugins/hosts/windows/host.rb} +5 -4
- data/plugins/hosts/windows/plugin.rb +15 -0
- data/plugins/kernel_v1/config/nfs.rb +20 -0
- data/plugins/kernel_v1/config/package.rb +17 -0
- data/plugins/kernel_v1/config/ssh.rb +46 -0
- data/plugins/kernel_v1/config/vagrant.rb +31 -0
- data/plugins/kernel_v1/config/vm.rb +184 -0
- data/plugins/kernel_v1/plugin.rb +44 -0
- data/plugins/kernel_v2/config/nfs.rb +10 -0
- data/plugins/kernel_v2/config/package.rb +9 -0
- data/plugins/kernel_v2/config/ssh.rb +35 -0
- data/plugins/kernel_v2/config/vagrant.rb +9 -0
- data/plugins/kernel_v2/config/vm.rb +314 -0
- data/plugins/kernel_v2/config/vm_provisioner.rb +40 -0
- data/plugins/kernel_v2/config/vm_subvm.rb +30 -0
- data/plugins/kernel_v2/plugin.rb +44 -0
- data/plugins/providers/virtualbox/action.rb +308 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/boot.rb +12 -16
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/check_accessible.rb +5 -5
- data/plugins/providers/virtualbox/action/check_created.rb +21 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/check_guest_additions.rb +18 -11
- data/plugins/providers/virtualbox/action/check_running.rb +21 -0
- data/plugins/providers/virtualbox/action/check_virtualbox.rb +22 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clean_machine_folder.rb +5 -5
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clear_forwarded_ports.rb +4 -4
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clear_network_interfaces.rb +4 -4
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/clear_shared_folders.rb +4 -5
- data/plugins/providers/virtualbox/action/created.rb +20 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/customize.rb +7 -7
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/destroy.rb +5 -5
- data/plugins/providers/virtualbox/action/destroy_confirm.rb +17 -0
- data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +16 -0
- data/plugins/providers/virtualbox/action/discard_state.rb +20 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/export.rb +7 -7
- data/plugins/providers/virtualbox/action/forced_halt.rb +25 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/forward_ports.rb +29 -42
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/import.rb +15 -12
- data/plugins/providers/virtualbox/action/is_paused.rb +20 -0
- data/plugins/providers/virtualbox/action/is_running.rb +20 -0
- data/plugins/providers/virtualbox/action/is_saved.rb +20 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/match_mac_address.rb +5 -5
- data/plugins/providers/virtualbox/action/message_not_created.rb +16 -0
- data/plugins/providers/virtualbox/action/message_not_running.rb +16 -0
- data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +17 -0
- data/plugins/providers/virtualbox/action/network.rb +366 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/package.rb +4 -7
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/package_vagrantfile.rb +5 -8
- data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +35 -0
- data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +51 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/prune_nfs_exports.rb +5 -5
- data/plugins/providers/virtualbox/action/resume.rb +25 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/sane_defaults.rb +41 -32
- data/plugins/providers/virtualbox/action/set_name.rb +40 -0
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/setup_package_files.rb +5 -8
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/share_folders.rb +24 -25
- data/{lib/vagrant/action/vm → plugins/providers/virtualbox/action}/suspend.rb +5 -5
- data/plugins/providers/virtualbox/config.rb +82 -0
- data/plugins/providers/virtualbox/driver/base.rb +344 -0
- data/plugins/providers/virtualbox/driver/meta.rb +142 -0
- data/plugins/providers/virtualbox/driver/version_4_0.rb +485 -0
- data/plugins/providers/virtualbox/driver/version_4_1.rb +485 -0
- data/plugins/providers/virtualbox/driver/version_4_2.rb +475 -0
- data/plugins/providers/virtualbox/model/forwarded_port.rb +58 -0
- data/plugins/providers/virtualbox/plugin.rb +42 -0
- data/plugins/providers/virtualbox/provider.rb +92 -0
- data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +31 -0
- data/plugins/provisioners/chef/config/base.rb +65 -0
- data/plugins/provisioners/chef/config/chef_client.rb +39 -0
- data/plugins/provisioners/chef/config/chef_solo.rb +87 -0
- data/plugins/provisioners/chef/plugin.rb +33 -0
- data/plugins/provisioners/chef/provisioner/base.rb +91 -0
- data/plugins/provisioners/chef/provisioner/chef_client.rb +103 -0
- data/plugins/provisioners/chef/provisioner/chef_solo.rb +182 -0
- data/plugins/provisioners/puppet/config/puppet.rb +70 -0
- data/plugins/provisioners/puppet/config/puppet_server.rb +16 -0
- data/plugins/provisioners/puppet/plugin.rb +33 -0
- data/plugins/provisioners/puppet/provisioner/puppet.rb +110 -0
- data/plugins/provisioners/puppet/provisioner/puppet_server.rb +67 -0
- data/plugins/provisioners/shell/config.rb +46 -0
- data/plugins/provisioners/shell/plugin.rb +23 -0
- data/plugins/provisioners/shell/provisioner.rb +66 -0
- data/templates/commands/init/Vagrantfile.erb +33 -21
- data/templates/commands/ssh_config/config.erb +1 -0
- data/templates/config/messages.erb +14 -0
- data/templates/config/validation_failed.erb +3 -3
- data/templates/guests/arch/network_dhcp.erb +4 -7
- data/templates/guests/arch/network_static.erb +6 -7
- data/templates/guests/debian/network_dhcp.erb +5 -0
- data/templates/locales/en.yml +336 -100
- data/templates/rgloader.rb +9 -0
- data/test/acceptance/support/isolated_environment.rb +3 -2
- data/test/support/tempdir.rb +13 -4
- data/test/unit/base.rb +6 -0
- data/test/unit/support/dummy_provider.rb +16 -0
- data/test/unit/support/isolated_environment.rb +132 -0
- data/test/unit/support/shared/base_context.rb +74 -0
- data/test/unit/vagrant/action/builder_test.rb +88 -48
- data/test/unit/vagrant/action/builtin/call_test.rb +145 -0
- data/test/unit/vagrant/action/builtin/confirm_test.rb +36 -0
- data/test/unit/vagrant/action/builtin/env_set_test.rb +20 -0
- data/test/unit/vagrant/action/builtin/graceful_halt_test.rb +61 -0
- data/test/unit/vagrant/action/builtin/lock_test.rb +98 -0
- data/test/unit/vagrant/action/builtin/ssh_exec_test.rb +57 -0
- data/test/unit/vagrant/action/hook_test.rb +101 -0
- data/test/unit/vagrant/action/runner_test.rb +15 -9
- data/test/unit/vagrant/box_collection_test.rb +219 -38
- data/test/unit/vagrant/box_test.rb +94 -19
- data/test/unit/vagrant/cli_test.rb +27 -0
- data/test/unit/vagrant/config/loader_test.rb +154 -49
- data/test/unit/vagrant/config/v1/dummy_config_test.rb +24 -0
- data/test/unit/vagrant/config/v1/loader_test.rb +145 -0
- data/test/unit/vagrant/config/v1/root_test.rb +40 -0
- data/test/unit/vagrant/config/v2/dummy_config_test.rb +24 -0
- data/test/unit/vagrant/config/v2/loader_test.rb +151 -0
- data/test/unit/vagrant/config/v2/root_test.rb +97 -0
- data/test/unit/vagrant/config/v2/util_test.rb +21 -0
- data/test/unit/vagrant/config_test.rb +40 -1
- data/test/unit/vagrant/downloaders/base_test.rb +0 -4
- data/test/unit/vagrant/downloaders/file_test.rb +21 -9
- data/test/unit/vagrant/downloaders/http_test.rb +4 -0
- data/test/unit/vagrant/environment_test.rb +414 -63
- data/test/unit/vagrant/hosts_test.rb +10 -9
- data/test/unit/vagrant/machine_state_test.rb +26 -0
- data/test/unit/vagrant/machine_test.rb +418 -0
- data/test/unit/vagrant/{command/base_test.rb → plugin/v1/command_test.rb} +2 -9
- data/test/unit/vagrant/plugin/v1/communicator_test.rb +9 -0
- data/test/unit/vagrant/plugin/v1/config_test.rb +50 -0
- data/test/unit/vagrant/plugin/v1/host_test.rb +5 -0
- data/test/unit/vagrant/plugin/v1/manager_test.rb +114 -0
- data/test/unit/vagrant/plugin/v1/plugin_test.rb +267 -0
- data/test/unit/vagrant/plugin/v1/provider_test.rb +18 -0
- data/test/unit/vagrant/plugin/v2/command_test.rb +238 -0
- data/test/unit/vagrant/plugin/v2/communicator_test.rb +9 -0
- data/test/unit/vagrant/plugin/v2/components_test.rb +17 -0
- data/test/unit/vagrant/plugin/v2/config_test.rb +60 -0
- data/test/unit/vagrant/plugin/v2/host_test.rb +5 -0
- data/test/unit/vagrant/plugin/v2/manager_test.rb +157 -0
- data/test/unit/vagrant/plugin/v2/plugin_test.rb +287 -0
- data/test/unit/vagrant/plugin/v2/provider_test.rb +18 -0
- data/test/unit/vagrant/registry_test.rb +59 -5
- data/test/unit/vagrant/util/scoped_hash_override_test.rb +48 -0
- data/test/unit/vagrant/util/ssh_test.rb +30 -0
- data/test/unit/vagrant/util/string_block_editor_test.rb +98 -0
- data/test/unit/vagrant/util/which_test.rb +43 -0
- data/test/unit/vagrant_test.rb +42 -13
- data/vagrant.gemspec +6 -7
- data/vagrant.gemspecbak +6 -7
- metadata +273 -358
- 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/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/validate.rb +0 -18
- data/lib/vagrant/action/vm/check_box.rb +0 -33
- data/lib/vagrant/action/vm/check_port_collisions.rb +0 -89
- data/lib/vagrant/action/vm/default_name.rb +0 -22
- 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/halt.rb +0 -32
- data/lib/vagrant/action/vm/host_name.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/provision.rb +0 -61
- data/lib/vagrant/action/vm/provisioner_cleanup.rb +0 -26
- data/lib/vagrant/action/vm/resume.rb +0 -20
- 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/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/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/config/base.rb +0 -82
- data/lib/vagrant/config/error_recorder.rb +0 -19
- 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/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/guest.rb +0 -18
- data/lib/vagrant/guest/arch.rb +0 -56
- data/lib/vagrant/guest/base.rb +0 -99
- data/lib/vagrant/guest/freebsd.rb +0 -86
- data/lib/vagrant/guest/gentoo.rb +0 -46
- 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/solaris.rb +0 -118
- data/lib/vagrant/guest/suse.rb +0 -17
- data/lib/vagrant/guest/ubuntu.rb +0 -23
- data/lib/vagrant/hosts/base.rb +0 -66
- 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/vm.rb +0 -195
- 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/unit/vagrant/action/environment_test.rb +0 -16
- data/test/unit/vagrant/config/base_test.rb +0 -48
- 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/data_store_test.rb +0 -79
- 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/vagrant-1.1.4.gem +0 -0
- data/vagrantup-0.1.0.gem +0 -0
- data/vagrantup-0.1.1.gem +0 -0
- data/vagrantup-0.1.2.gem +0 -0
- data/vagrantup-0.1.3.gem +0 -0
- data/vagrantup-0.1.4.gem +0 -0
- data/vagrantup-0.2.0.gem +0 -0
- data/vagrantup-0.3.0.gem +0 -0
- data/vagrantup-0.3.1.gem +0 -0
- data/vagrantup-0.3.2.gem +0 -0
- data/vagrantup-0.3.3.gem +0 -0
- data/vagrantup-0.3.4.gem +0 -0
- data/vagrantup-0.4.0.gem +0 -0
- data/vagrantup-0.4.1.gem +0 -0
- data/vagrantup-0.4.3.dev.gem +0 -0
- data/vagrantup-0.5.0.gem +0 -0
- data/vagrantup-0.5.1.gem +0 -0
- data/vagrantup-0.5.2.gem +0 -0
- data/vagrantup-0.5.3.gem +0 -0
- data/vagrantup-0.5.4.gem +0 -0
- data/vagrantup-0.6.0.gem +0 -0
- data/vagrantup-0.6.1.gem +0 -0
- data/vagrantup-0.6.2.gem +0 -0
- data/vagrantup-0.6.3.gem +0 -0
- data/vagrantup-0.6.4.gem +0 -0
- data/vagrantup-0.6.5.gem +0 -0
- data/vagrantup-0.6.6.gem +0 -0
- data/vagrantup-0.6.7.gem +0 -0
- data/vagrantup-0.6.8.gem +0 -0
- data/vagrantup-0.6.9.gem +0 -0
- data/vagrantup-0.7.0.gem +0 -0
- data/vagrantup-0.7.1.gem +0 -0
- data/vagrantup-0.7.2.gem +0 -0
- data/vagrantup-0.7.3.gem +0 -0
- data/vagrantup-0.7.4.gem +0 -0
- data/vagrantup-0.7.5.gem +0 -0
- data/vagrantup-0.7.6.gem +0 -0
- data/vagrantup-0.7.7.gem +0 -0
- data/vagrantup-0.7.8.gem +0 -0
- data/vagrantup-0.8.0.gem +0 -0
- data/vagrantup-0.8.1.gem +0 -0
- data/vagrantup-0.8.10.gem +0 -0
- data/vagrantup-0.8.2.gem +0 -0
- data/vagrantup-0.8.3.gem +0 -0
- data/vagrantup-0.8.4.gem +0 -0
- data/vagrantup-0.8.5.gem +0 -0
- data/vagrantup-0.8.6.gem +0 -0
- data/vagrantup-0.8.7.gem +0 -0
- data/vagrantup-0.8.8.gem +0 -0
- data/vagrantup-0.8.9.gem +0 -0
- data/vagrantup-0.9.0.gem +0 -0
- data/vagrantup-0.9.1.gem +0 -0
- data/vagrantup-0.9.2.gem +0 -0
- data/vagrantup-0.9.3.gem +0 -0
- data/vagrantup-0.9.4.gem +0 -0
- data/vagrantup-0.9.5.gem +0 -0
- data/vagrantup-0.9.6.gem +0 -0
- data/vagrantup-0.9.7.gem +0 -0
- data/vagrantup-0.9.99.1.gem +0 -0
- data/vagrantup-0.9.99.2.gem +0 -0
- data/vagrantup-1.0.0.gem +0 -0
- data/vagrantup-1.0.1.gem +0 -0
- data/vagrantup-1.0.2.gem +0 -0
- data/vagrantup-1.0.3.gem +0 -0
- data/vagrantup-1.0.4.gem +0 -0
- data/vagrantup-1.0.5.gem +0 -0
- data/vagrantup-1.0.6.gem +0 -0
- data/vagrantup-1.1.4.gem +0 -0
|
@@ -1,58 +1,324 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "digest/sha1"
|
|
2
|
+
require "tmpdir"
|
|
3
|
+
|
|
4
|
+
require "log4r"
|
|
5
|
+
|
|
6
|
+
require "vagrant/util/subprocess"
|
|
2
7
|
|
|
3
8
|
module Vagrant
|
|
4
|
-
# Represents a collection
|
|
5
|
-
# finding boxes
|
|
9
|
+
# Represents a collection a boxes found on disk. This provides methods
|
|
10
|
+
# for accessing/finding individual boxes, adding new boxes, or deleting
|
|
11
|
+
# boxes.
|
|
6
12
|
class BoxCollection
|
|
7
|
-
|
|
8
|
-
extend Forwardable
|
|
9
|
-
def_delegators :@boxes, :length, :each
|
|
13
|
+
TEMP_PREFIX = "vagrant-box-add-temp-"
|
|
10
14
|
|
|
11
|
-
# The directory
|
|
15
|
+
# The directory where the boxes in this collection are stored.
|
|
16
|
+
#
|
|
17
|
+
# A box collection matches a very specific folder structure that Vagrant
|
|
18
|
+
# expects in order to easily manage and modify boxes. The folder structure
|
|
19
|
+
# is the following:
|
|
20
|
+
#
|
|
21
|
+
# COLLECTION_ROOT/BOX_NAME/PROVIDER/metadata.json
|
|
22
|
+
#
|
|
23
|
+
# Where:
|
|
24
|
+
#
|
|
25
|
+
# * COLLECTION_ROOT - This is the root of the box collection, and is
|
|
26
|
+
# the directory given to the initializer.
|
|
27
|
+
# * BOX_NAME - The name of the box. This is a logical name given by
|
|
28
|
+
# the user of Vagrant.
|
|
29
|
+
# * PROVIDER - The provider that the box was built for (VirtualBox,
|
|
30
|
+
# VMWare, etc.).
|
|
31
|
+
# * metadata.json - A simple JSON file that at the bare minimum
|
|
32
|
+
# contains a "provider" key that matches the provider for the
|
|
33
|
+
# box. This metadata JSON, however, can contain anything.
|
|
34
|
+
#
|
|
35
|
+
# @return [Pathname]
|
|
12
36
|
attr_reader :directory
|
|
13
37
|
|
|
14
|
-
# Initializes the
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
38
|
+
# Initializes the collection.
|
|
39
|
+
#
|
|
40
|
+
# @param [Pathname] directory The directory that contains the collection
|
|
41
|
+
# of boxes.
|
|
42
|
+
def initialize(directory)
|
|
43
|
+
@directory = directory
|
|
44
|
+
@logger = Log4r::Logger.new("vagrant::box_collection")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# This adds a new box to the system.
|
|
48
|
+
#
|
|
49
|
+
# There are some exceptional cases:
|
|
50
|
+
# * BoxAlreadyExists - The box you're attempting to add already exists.
|
|
51
|
+
# * BoxProviderDoesntMatch - If the given box provider doesn't match the
|
|
52
|
+
# actual box provider in the untarred box.
|
|
53
|
+
# * BoxUnpackageFailure - An invalid tar file.
|
|
54
|
+
# * BoxUpgradeRequired - You're attempting to add a box when there is a
|
|
55
|
+
# V1 box with the same name that must first be upgraded.
|
|
56
|
+
#
|
|
57
|
+
# Preconditions:
|
|
58
|
+
# * File given in `path` must exist.
|
|
59
|
+
#
|
|
60
|
+
# @param [Pathname] path Path to the box file on disk.
|
|
61
|
+
# @param [String] name Logical name for the box.
|
|
62
|
+
# @param [Symbol] provider The provider that the box should be for. This
|
|
63
|
+
# will be verified with the `metadata.json` file in the box and is
|
|
64
|
+
# meant as a basic check. If this isn't given, then whatever provider
|
|
65
|
+
# the box represents will be added.
|
|
66
|
+
# @param [Boolean] force If true, any existing box with the same name
|
|
67
|
+
# and provider will be replaced.
|
|
68
|
+
def add(path, name, provider=nil, force=false)
|
|
69
|
+
# A helper to check if a box exists. We store this in a variable
|
|
70
|
+
# since we call it multiple times.
|
|
71
|
+
check_box_exists = lambda do |box_provider|
|
|
72
|
+
box = find(name, box_provider)
|
|
73
|
+
next if !box
|
|
74
|
+
|
|
75
|
+
if !force
|
|
76
|
+
@logger.error("Box already exists, can't add: #{name} #{box_provider}")
|
|
77
|
+
raise Errors::BoxAlreadyExists, :name => name, :provider => box_provider
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# We're forcing, so just delete the old box
|
|
81
|
+
@logger.info("Box already exists, but forcing so removing: #{name} #{box_provider}")
|
|
82
|
+
box.destroy!
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
log_provider = provider ? provider : "any provider"
|
|
86
|
+
@logger.debug("Adding box: #{name} (#{log_provider}) from #{path}")
|
|
87
|
+
|
|
88
|
+
# Verify the box doesn't exist early if we're given a provider. This
|
|
89
|
+
# can potentially speed things up considerably since we don't need
|
|
90
|
+
# to unpack any files.
|
|
91
|
+
check_box_exists.call(provider) if provider
|
|
92
|
+
|
|
93
|
+
# Verify that a V1 box doesn't exist. If it does, then we signal
|
|
94
|
+
# to the user that we need an upgrade.
|
|
95
|
+
raise Errors::BoxUpgradeRequired, :name => name if v1_box?(@directory.join(name))
|
|
19
96
|
|
|
20
|
-
|
|
97
|
+
# Create a temporary directory since we're not sure at this point if
|
|
98
|
+
# the box we're unpackaging already exists (if no provider was given)
|
|
99
|
+
Dir.mktmpdir(TEMP_PREFIX) do |temp_dir|
|
|
100
|
+
temp_dir = Pathname.new(temp_dir)
|
|
101
|
+
|
|
102
|
+
# Extract the box into a temporary directory.
|
|
103
|
+
@logger.debug("Unpacking box into temporary directory: #{temp_dir}")
|
|
104
|
+
result = Util::Subprocess.execute(
|
|
105
|
+
"bsdtar", "-v", "-x", "-C", temp_dir.to_s, "-f", path.to_s)
|
|
106
|
+
raise Errors::BoxUnpackageFailure, :output => result.stderr.to_s \
|
|
107
|
+
if result.exit_code != 0
|
|
108
|
+
|
|
109
|
+
# If we get a V1 box, we want to update it in place
|
|
110
|
+
if v1_box?(temp_dir)
|
|
111
|
+
@logger.debug("Added box is a V1 box. Upgrading in place.")
|
|
112
|
+
temp_dir = v1_upgrade(temp_dir)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Get an instance of the box we just added before it is finalized
|
|
116
|
+
# in the system so we can inspect and use its metadata.
|
|
117
|
+
box = Box.new(name, provider, temp_dir)
|
|
118
|
+
|
|
119
|
+
# Get the provider, since we'll need that to at the least add it
|
|
120
|
+
# to the system or check that it matches what is given to us.
|
|
121
|
+
box_provider = box.metadata["provider"]
|
|
122
|
+
|
|
123
|
+
if provider
|
|
124
|
+
# Verify that the given provider matches what the box has.
|
|
125
|
+
if box_provider.to_sym != provider
|
|
126
|
+
@logger.error("Added box provider doesnt match expected: #{box_provider}")
|
|
127
|
+
raise Errors::BoxProviderDoesntMatch, :expected => provider, :actual => box_provider
|
|
128
|
+
end
|
|
129
|
+
else
|
|
130
|
+
# We weren't given a provider, so store this one.
|
|
131
|
+
provider = box_provider.to_sym
|
|
132
|
+
|
|
133
|
+
# Verify the box doesn't already exist
|
|
134
|
+
check_box_exists.call(provider)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Create the directory for this box, not including the provider
|
|
138
|
+
box_dir = @directory.join(name)
|
|
139
|
+
box_dir.mkpath
|
|
140
|
+
@logger.debug("Box directory: #{box_dir}")
|
|
141
|
+
|
|
142
|
+
# This is the final directory we'll move it to
|
|
143
|
+
final_dir = box_dir.join(provider.to_s)
|
|
144
|
+
if final_dir.exist?
|
|
145
|
+
@logger.debug("Removing existing provider directory...")
|
|
146
|
+
final_dir.rmtree
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Move to final destination
|
|
150
|
+
FileUtils.mv(temp_dir.to_s, final_dir.to_s)
|
|
151
|
+
|
|
152
|
+
# Recreate the directory. This avoids a bug in Ruby where `mktmpdir`
|
|
153
|
+
# cleanup doesn't check if the directory is already gone. Ruby bug
|
|
154
|
+
# #6715: http://bugs.ruby-lang.org/issues/6715
|
|
155
|
+
Dir.mkdir(temp_dir, 0700)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Return the box
|
|
159
|
+
find(name, provider)
|
|
21
160
|
end
|
|
22
161
|
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
162
|
+
# This returns an array of all the boxes on the system, given by
|
|
163
|
+
# their name and their provider.
|
|
164
|
+
#
|
|
165
|
+
# @return [Array] Array of `[name, provider]` pairs of the boxes
|
|
166
|
+
# installed on this system. An optional third element in the array
|
|
167
|
+
# may specify `:v1` if the box is a version 1 box.
|
|
168
|
+
def all
|
|
169
|
+
results = []
|
|
170
|
+
|
|
171
|
+
@logger.debug("Finding all boxes in: #{@directory}")
|
|
172
|
+
@directory.children(true).each do |child|
|
|
173
|
+
# Ignore non-directories, since files are not interesting to
|
|
174
|
+
# us in our folder structure.
|
|
175
|
+
next if !child.directory?
|
|
176
|
+
|
|
177
|
+
box_name = child.basename.to_s
|
|
178
|
+
|
|
179
|
+
# If this is a V1 box, we still return that name, but specify
|
|
180
|
+
# that the box is a V1 box.
|
|
181
|
+
if v1_box?(child)
|
|
182
|
+
@logger.debug("V1 box found: #{box_name}")
|
|
183
|
+
results << [box_name, :virtualbox, :v1]
|
|
184
|
+
next
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Otherwise, traverse the subdirectories and see what providers
|
|
188
|
+
# we have.
|
|
189
|
+
child.children(true).each do |provider|
|
|
190
|
+
# Verify this is a potentially valid box. If it looks
|
|
191
|
+
# correct enough then include it.
|
|
192
|
+
if provider.directory? && provider.join("metadata.json").file?
|
|
193
|
+
provider_name = provider.basename.to_s.to_sym
|
|
194
|
+
@logger.debug("Box: #{box_name} (#{provider_name})")
|
|
195
|
+
results << [box_name, provider_name]
|
|
196
|
+
else
|
|
197
|
+
@logger.debug("Invalid box, ignoring: #{provider}")
|
|
198
|
+
end
|
|
199
|
+
end
|
|
28
200
|
end
|
|
29
201
|
|
|
202
|
+
results
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# Find a box in the collection with the given name and provider.
|
|
206
|
+
#
|
|
207
|
+
# @param [String] name Name of the box (logical name).
|
|
208
|
+
# @Param [String] provider Provider that the box implements.
|
|
209
|
+
# @return [Box] The box found, or `nil` if not found.
|
|
210
|
+
def find(name, provider)
|
|
211
|
+
# First look directly for the box we're asking for.
|
|
212
|
+
box_directory = @directory.join(name, provider.to_s, "metadata.json")
|
|
213
|
+
@logger.info("Searching for box: #{name} (#{provider}) in #{box_directory}")
|
|
214
|
+
if box_directory.file?
|
|
215
|
+
@logger.info("Box found: #{name} (#{provider})")
|
|
216
|
+
return Box.new(name, provider, box_directory.dirname)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# If we're looking for a VirtualBox box, then we check if there is
|
|
220
|
+
# a V1 box.
|
|
221
|
+
if provider == :virtualbox
|
|
222
|
+
# Check if a V1 version of this box exists, and if so, raise an
|
|
223
|
+
# exception notifying the caller that the box exists but needs
|
|
224
|
+
# to be upgraded. We don't do the upgrade here because it can be
|
|
225
|
+
# a fairly intensive activity and don't want to immediately degrade
|
|
226
|
+
# user performance on a find.
|
|
227
|
+
#
|
|
228
|
+
# To determine if it is a V1 box we just do a simple heuristic
|
|
229
|
+
# based approach.
|
|
230
|
+
@logger.info("Searching for V1 box: #{name}")
|
|
231
|
+
if v1_box?(@directory.join(name))
|
|
232
|
+
@logger.warn("V1 box found: #{name}")
|
|
233
|
+
raise Errors::BoxUpgradeRequired, :name => name
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
# Didn't find it, return nil
|
|
238
|
+
@logger.info("Box not found: #{name} (#{provider})")
|
|
30
239
|
nil
|
|
31
240
|
end
|
|
32
241
|
|
|
33
|
-
#
|
|
34
|
-
#
|
|
35
|
-
|
|
36
|
-
|
|
242
|
+
# Upgrades a V1 box with the given name to a V2 box. If a box with the
|
|
243
|
+
# given name doesn't exist, then a `BoxNotFound` exception will be raised.
|
|
244
|
+
# If the given box is found but is not a V1 box then `true` is returned
|
|
245
|
+
# because this just works fine.
|
|
246
|
+
#
|
|
247
|
+
# @return [Boolean] `true` otherwise an exception is raised.
|
|
248
|
+
def upgrade(name)
|
|
249
|
+
@logger.debug("Upgrade request for box: #{name}")
|
|
250
|
+
box_dir = @directory.join(name)
|
|
251
|
+
|
|
252
|
+
# If the box doesn't exist at all, raise an exception
|
|
253
|
+
raise Errors::BoxNotFound, :name => name if !box_dir.directory?
|
|
254
|
+
|
|
255
|
+
if v1_box?(box_dir)
|
|
256
|
+
@logger.debug("V1 box #{name} found. Upgrading!")
|
|
257
|
+
|
|
258
|
+
# First we actually perform the upgrade
|
|
259
|
+
temp_dir = v1_upgrade(box_dir)
|
|
260
|
+
|
|
261
|
+
# Rename the temporary directory to the provider.
|
|
262
|
+
FileUtils.mv(temp_dir.to_s, box_dir.join("virtualbox").to_s)
|
|
263
|
+
@logger.info("Box '#{name}' upgraded from V1 to V2.")
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
# We did it! Or the v1 box didn't exist so it doesn't matter.
|
|
267
|
+
return true
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
protected
|
|
37
271
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
272
|
+
# This checks if the given directory represents a V1 box on the
|
|
273
|
+
# system.
|
|
274
|
+
#
|
|
275
|
+
# @param [Pathname] dir Directory where the box is unpacked.
|
|
276
|
+
# @return [Boolean]
|
|
277
|
+
def v1_box?(dir)
|
|
278
|
+
# We detect a V1 box given by whether there is a "box.ovf" which
|
|
279
|
+
# is a heuristic but is pretty accurate.
|
|
280
|
+
dir.join("box.ovf").file?
|
|
42
281
|
end
|
|
43
282
|
|
|
44
|
-
#
|
|
45
|
-
#
|
|
46
|
-
|
|
47
|
-
|
|
283
|
+
# This upgrades the V1 box contained unpacked in the given directory
|
|
284
|
+
# and returns the directory of the upgraded version. This is
|
|
285
|
+
# _destructive_ to the contents of the old directory. That is, the
|
|
286
|
+
# contents of the old V1 box will be destroyed or moved.
|
|
287
|
+
#
|
|
288
|
+
# Preconditions:
|
|
289
|
+
# * `dir` is a valid V1 box. Verify with {#v1_box?}
|
|
290
|
+
#
|
|
291
|
+
# @param [Pathname] dir Directory where the V1 box is unpacked.
|
|
292
|
+
# @return [Pathname] Path to the unpackaged V2 box.
|
|
293
|
+
def v1_upgrade(dir)
|
|
294
|
+
@logger.debug("Upgrading box in directory: #{dir}")
|
|
48
295
|
|
|
49
|
-
Dir.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
296
|
+
temp_dir = Pathname.new(Dir.mktmpdir("vagrant-"))
|
|
297
|
+
@logger.debug("Temporary directory for upgrading: #{temp_dir}")
|
|
298
|
+
|
|
299
|
+
# Move all the things into the temporary directory
|
|
300
|
+
dir.children(true).each do |child|
|
|
301
|
+
# Don't move the temp_dir
|
|
302
|
+
next if child == temp_dir
|
|
303
|
+
|
|
304
|
+
# Move every other directory into the temporary directory
|
|
305
|
+
@logger.debug("Copying to upgrade directory: #{child}")
|
|
306
|
+
FileUtils.mv(child, temp_dir.join(child.basename))
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
# If there is no metadata.json file, make one, since this is how
|
|
310
|
+
# we determine if the box is a V2 box.
|
|
311
|
+
metadata_file = temp_dir.join("metadata.json")
|
|
312
|
+
if !metadata_file.file?
|
|
313
|
+
metadata_file.open("w") do |f|
|
|
314
|
+
f.write(JSON.generate({
|
|
315
|
+
:provider => "virtualbox"
|
|
316
|
+
}))
|
|
53
317
|
end
|
|
54
318
|
end
|
|
319
|
+
|
|
320
|
+
# Return the temporary directory
|
|
321
|
+
temp_dir
|
|
55
322
|
end
|
|
56
323
|
end
|
|
57
324
|
end
|
|
58
|
-
|
data/lib/vagrant/cli.rb
CHANGED
|
@@ -3,7 +3,7 @@ require 'optparse'
|
|
|
3
3
|
|
|
4
4
|
module Vagrant
|
|
5
5
|
# Manages the command line interface to Vagrant.
|
|
6
|
-
class CLI <
|
|
6
|
+
class CLI < Vagrant.plugin("2", :command)
|
|
7
7
|
def initialize(argv, env)
|
|
8
8
|
super
|
|
9
9
|
|
|
@@ -31,10 +31,14 @@ module Vagrant
|
|
|
31
31
|
|
|
32
32
|
# If we reached this far then we must have a subcommand. If not,
|
|
33
33
|
# then we also just print the help and exit.
|
|
34
|
-
command_class =
|
|
34
|
+
command_class = nil
|
|
35
|
+
if @sub_command
|
|
36
|
+
command_class = Vagrant.plugin("2").manager.commands[@sub_command.to_sym]
|
|
37
|
+
end
|
|
38
|
+
|
|
35
39
|
if !command_class || !@sub_command
|
|
36
40
|
help
|
|
37
|
-
return
|
|
41
|
+
return 1
|
|
38
42
|
end
|
|
39
43
|
@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
|
|
40
44
|
|
|
@@ -49,25 +53,27 @@ module Vagrant
|
|
|
49
53
|
# We use the optionparser for this. Its just easier. We don't use
|
|
50
54
|
# an optionparser above because I don't think the performance hits
|
|
51
55
|
# of creating a whole object are worth checking only a couple flags.
|
|
52
|
-
opts = OptionParser.new do |
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
opts = OptionParser.new do |o|
|
|
57
|
+
o.banner = "Usage: vagrant [-v] [-h] command [<args>]"
|
|
58
|
+
o.separator ""
|
|
59
|
+
o.on("-v", "--version", "Print the version and exit.")
|
|
60
|
+
o.on("-h", "--help", "Print this help.")
|
|
61
|
+
o.separator ""
|
|
62
|
+
o.separator "Available subcommands:"
|
|
59
63
|
|
|
60
64
|
# Add the available subcommands as separators in order to print them
|
|
61
65
|
# out as well.
|
|
62
66
|
keys = []
|
|
63
|
-
Vagrant.commands.each
|
|
67
|
+
Vagrant.plugin("2").manager.commands.each do |key, _|
|
|
68
|
+
keys << key
|
|
69
|
+
end
|
|
64
70
|
|
|
65
71
|
keys.sort.each do |key|
|
|
66
|
-
|
|
72
|
+
o.separator " #{key}"
|
|
67
73
|
end
|
|
68
74
|
|
|
69
|
-
|
|
70
|
-
|
|
75
|
+
o.separator ""
|
|
76
|
+
o.separator "For help on any individual command run `vagrant COMMAND -h`"
|
|
71
77
|
end
|
|
72
78
|
|
|
73
79
|
@env.ui.info(opts.help, :prefix => false)
|
data/lib/vagrant/config.rb
CHANGED
|
@@ -1,29 +1,43 @@
|
|
|
1
|
+
require "vagrant/registry"
|
|
2
|
+
|
|
1
3
|
module Vagrant
|
|
2
4
|
module Config
|
|
3
5
|
autoload :Base, 'vagrant/config/base'
|
|
4
6
|
autoload :Container, 'vagrant/config/container'
|
|
5
|
-
autoload :ErrorRecorder, 'vagrant/config/error_recorder'
|
|
6
7
|
autoload :Loader, 'vagrant/config/loader'
|
|
7
|
-
autoload :
|
|
8
|
+
autoload :VersionBase, 'vagrant/config/version_base'
|
|
8
9
|
|
|
9
|
-
autoload :
|
|
10
|
-
autoload :
|
|
11
|
-
autoload :SSHConfig, 'vagrant/config/ssh'
|
|
12
|
-
autoload :VagrantConfig, 'vagrant/config/vagrant'
|
|
13
|
-
autoload :VMConfig, 'vagrant/config/vm'
|
|
10
|
+
autoload :V1, 'vagrant/config/v1'
|
|
11
|
+
autoload :V2, 'vagrant/config/v2'
|
|
14
12
|
|
|
13
|
+
# This is a mutex used to guarantee that only one thread can load
|
|
14
|
+
# procs at any given time.
|
|
15
15
|
CONFIGURE_MUTEX = Mutex.new
|
|
16
16
|
|
|
17
|
+
# This is the registry which keeps track of what configuration
|
|
18
|
+
# versions are available, mapped by the version string used in
|
|
19
|
+
# `Vagrant.configure` calls.
|
|
20
|
+
VERSIONS = Registry.new
|
|
21
|
+
VERSIONS.register("1") { V1::Loader }
|
|
22
|
+
VERSIONS.register("2") { V2::Loader }
|
|
23
|
+
|
|
24
|
+
# This is the order of versions. This is used by the loader to figure out
|
|
25
|
+
# how to "upgrade" versions up to the desired (current) version. The
|
|
26
|
+
# current version is always considered to be the last version in this
|
|
27
|
+
# list.
|
|
28
|
+
VERSIONS_ORDER = ["1", "2"]
|
|
29
|
+
CURRENT_VERSION = VERSIONS_ORDER.last
|
|
30
|
+
|
|
17
31
|
# This is the method which is called by all Vagrantfiles to configure Vagrant.
|
|
18
32
|
# This method expects a block which accepts a single argument representing
|
|
19
33
|
# an instance of the {Config::Top} class.
|
|
20
34
|
#
|
|
21
35
|
# Note that the block is not run immediately. Instead, it's proc is stored
|
|
22
36
|
# away for execution later.
|
|
23
|
-
def self.run(&block)
|
|
37
|
+
def self.run(version="1", &block)
|
|
24
38
|
# Store it for later
|
|
25
39
|
@last_procs ||= []
|
|
26
|
-
@last_procs << block
|
|
40
|
+
@last_procs << [version, block]
|
|
27
41
|
end
|
|
28
42
|
|
|
29
43
|
# This is a method which will yield to a block and will capture all
|