tnargav 1.2.2
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.
- data/.gitignore +31 -0
- data/.gitsetup.yml +5 -0
- data/.travis.yml +7 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +1067 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +89 -0
- data/Rakefile +18 -0
- data/bin/vagrant +106 -0
- data/config/default.rb +36 -0
- data/contrib/README.md +12 -0
- data/contrib/bash/completion.sh +3 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/keys/README.md +17 -0
- data/keys/vagrant +27 -0
- data/keys/vagrant.pub +1 -0
- data/lib/vagrant/action/builder.rb +174 -0
- data/lib/vagrant/action/builtin/box_add.rb +81 -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/destroy_confirm.rb +21 -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 +77 -0
- data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +134 -0
- data/lib/vagrant/action/builtin/lock.rb +57 -0
- data/lib/vagrant/action/builtin/nfs.rb +118 -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 +103 -0
- data/lib/vagrant/action/hook.rb +107 -0
- data/lib/vagrant/action/runner.rb +69 -0
- data/lib/vagrant/action/warden.rb +103 -0
- data/lib/vagrant/action.rb +43 -0
- data/lib/vagrant/batch_action.rb +113 -0
- data/lib/vagrant/box.rb +97 -0
- data/lib/vagrant/box_collection.rb +375 -0
- data/lib/vagrant/cli.rb +82 -0
- data/lib/vagrant/config/loader.rb +222 -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/v1.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/v2.rb +9 -0
- data/lib/vagrant/config/version_base.rb +80 -0
- data/lib/vagrant/config.rb +61 -0
- data/lib/vagrant/environment.rb +843 -0
- data/lib/vagrant/errors.rb +570 -0
- data/lib/vagrant/guest.rb +163 -0
- data/lib/vagrant/hosts.rb +28 -0
- data/lib/vagrant/machine.rb +325 -0
- data/lib/vagrant/machine_state.rb +45 -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/v1.rb +19 -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 +47 -0
- data/lib/vagrant/plugin/v2/config.rb +136 -0
- data/lib/vagrant/plugin/v2/errors.rb +15 -0
- data/lib/vagrant/plugin/v2/guest.rb +78 -0
- data/lib/vagrant/plugin/v2/host.rb +66 -0
- data/lib/vagrant/plugin/v2/manager.rb +173 -0
- data/lib/vagrant/plugin/v2/plugin.rb +226 -0
- data/lib/vagrant/plugin/v2/provider.rb +69 -0
- data/lib/vagrant/plugin/v2/provisioner.rb +47 -0
- data/lib/vagrant/plugin/v2.rb +22 -0
- data/lib/vagrant/plugin.rb +6 -0
- data/lib/vagrant/registry.rb +78 -0
- data/lib/vagrant/ui.rb +215 -0
- data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
- data/lib/vagrant/util/busy.rb +59 -0
- data/lib/vagrant/util/counter.rb +24 -0
- data/lib/vagrant/util/downloader.rb +146 -0
- data/lib/vagrant/util/file_checksum.rb +38 -0
- data/lib/vagrant/util/file_mode.rb +12 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/is_port_open.rb +38 -0
- data/lib/vagrant/util/line_ending_helpers.rb +14 -0
- data/lib/vagrant/util/network_ip.rb +28 -0
- data/lib/vagrant/util/platform.rb +58 -0
- data/lib/vagrant/util/retryable.rb +31 -0
- data/lib/vagrant/util/safe_chdir.rb +33 -0
- data/lib/vagrant/util/safe_exec.rb +36 -0
- data/lib/vagrant/util/safe_puts.rb +31 -0
- data/lib/vagrant/util/scoped_hash_override.rb +45 -0
- data/lib/vagrant/util/ssh.rb +150 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/string_block_editor.rb +77 -0
- data/lib/vagrant/util/subprocess.rb +273 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/util/which.rb +43 -0
- data/lib/vagrant/util.rb +12 -0
- data/lib/vagrant/version.rb +6 -0
- data/lib/vagrant.rb +258 -0
- data/plugins/README.md +5 -0
- data/plugins/commands/box/command/add.rb +51 -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/plugins/commands/init/command.rb +40 -0
- 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/bundler_check.rb +25 -0
- data/plugins/commands/plugin/action/install_gem.rb +81 -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/action.rb +52 -0
- data/plugins/commands/plugin/command/base.rb +22 -0
- data/plugins/commands/plugin/command/install.rb +58 -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/plugins/commands/ssh/command.rb +63 -0
- data/plugins/commands/ssh/plugin.rb +17 -0
- data/plugins/commands/ssh_config/command.rb +49 -0
- 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 +57 -0
- data/plugins/commands/up/plugin.rb +17 -0
- data/plugins/commands/up/start_mixins.rb +26 -0
- data/plugins/communicators/ssh/communicator.rb +342 -0
- data/plugins/communicators/ssh/plugin.rb +19 -0
- data/plugins/guests/arch/cap/change_host_name.rb +18 -0
- data/plugins/guests/arch/cap/configure_networks.rb +23 -0
- data/plugins/guests/arch/guest.rb +11 -0
- data/plugins/guests/arch/plugin.rb +25 -0
- data/plugins/guests/debian/cap/change_host_name.rb +18 -0
- data/plugins/guests/debian/cap/configure_networks.rb +61 -0
- data/plugins/guests/debian/guest.rb +9 -0
- data/plugins/guests/debian/plugin.rb +25 -0
- data/plugins/guests/fedora/cap/configure_networks.rb +59 -0
- data/plugins/guests/fedora/cap/network_scripts_dir.rb +15 -0
- data/plugins/guests/fedora/guest.rb +11 -0
- data/plugins/guests/fedora/plugin.rb +25 -0
- data/plugins/guests/freebsd/cap/change_host_name.rb +14 -0
- data/plugins/guests/freebsd/cap/configure_networks.rb +39 -0
- data/plugins/guests/freebsd/cap/halt.rb +16 -0
- data/plugins/guests/freebsd/cap/mount_nfs_folder.rb +14 -0
- data/plugins/guests/freebsd/guest.rb +14 -0
- data/plugins/guests/freebsd/plugin.rb +35 -0
- data/plugins/guests/gentoo/cap/change_host_name.rb +17 -0
- data/plugins/guests/gentoo/cap/configure_networks.rb +43 -0
- data/plugins/guests/gentoo/guest.rb +9 -0
- data/plugins/guests/gentoo/plugin.rb +25 -0
- data/plugins/guests/linux/cap/halt.rb +16 -0
- data/plugins/guests/linux/cap/mount_nfs.rb +30 -0
- data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +40 -0
- data/plugins/guests/linux/cap/read_ip_address.rb +17 -0
- data/plugins/guests/linux/cap/shell_expand_guest_path.rb +26 -0
- data/plugins/guests/linux/guest.rb +11 -0
- data/plugins/guests/linux/plugin.rb +40 -0
- data/plugins/guests/openbsd/cap/halt.rb +16 -0
- data/plugins/guests/openbsd/guest.rb +11 -0
- data/plugins/guests/openbsd/plugin.rb +20 -0
- data/plugins/guests/pld/cap/network_scripts_dir.rb +11 -0
- data/plugins/guests/pld/guest.rb +11 -0
- data/plugins/guests/pld/plugin.rb +20 -0
- data/plugins/guests/redhat/cap/change_host_name.rb +18 -0
- data/plugins/guests/redhat/cap/configure_networks.rb +60 -0
- data/plugins/guests/redhat/cap/network_scripts_dir.rb +11 -0
- data/plugins/guests/redhat/guest.rb +11 -0
- data/plugins/guests/redhat/plugin.rb +30 -0
- data/plugins/guests/solaris/cap/change_host_name.rb +17 -0
- data/plugins/guests/solaris/cap/configure_networks.rb +25 -0
- data/plugins/guests/solaris/cap/halt.rb +21 -0
- data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +28 -0
- data/plugins/guests/solaris/config.rb +18 -0
- data/plugins/guests/solaris/guest.rb +14 -0
- data/plugins/guests/solaris/plugin.rb +40 -0
- data/plugins/guests/suse/cap/change_host_name.rb +18 -0
- data/plugins/guests/suse/cap/network_scripts_dir.rb +11 -0
- data/plugins/guests/suse/guest.rb +11 -0
- data/plugins/guests/suse/plugin.rb +25 -0
- data/plugins/guests/ubuntu/cap/change_host_name.rb +23 -0
- data/plugins/guests/ubuntu/guest.rb +32 -0
- data/plugins/guests/ubuntu/plugin.rb +20 -0
- data/plugins/hosts/arch/host.rb +68 -0
- data/plugins/hosts/arch/plugin.rb +15 -0
- data/plugins/hosts/bsd/host.rb +102 -0
- data/plugins/hosts/bsd/plugin.rb +15 -0
- data/plugins/hosts/fedora/host.rb +51 -0
- data/plugins/hosts/fedora/plugin.rb +15 -0
- data/plugins/hosts/freebsd/host.rb +43 -0
- data/plugins/hosts/freebsd/plugin.rb +15 -0
- data/plugins/hosts/gentoo/host.rb +24 -0
- data/plugins/hosts/gentoo/plugin.rb +15 -0
- data/plugins/hosts/linux/host.rb +95 -0
- data/plugins/hosts/linux/plugin.rb +15 -0
- data/plugins/hosts/opensuse/host.rb +34 -0
- data/plugins/hosts/opensuse/plugin.rb +15 -0
- data/plugins/hosts/windows/host.rb +17 -0
- 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 +14 -0
- data/plugins/kernel_v2/config/package.rb +13 -0
- data/plugins/kernel_v2/config/ssh.rb +76 -0
- data/plugins/kernel_v2/config/ssh_connect.rb +40 -0
- data/plugins/kernel_v2/config/vagrant.rb +13 -0
- data/plugins/kernel_v2/config/vm.rb +416 -0
- data/plugins/kernel_v2/config/vm_provisioner.rb +55 -0
- data/plugins/kernel_v2/config/vm_subvm.rb +30 -0
- data/plugins/kernel_v2/plugin.rb +44 -0
- data/plugins/providers/virtualbox/action/boot.rb +49 -0
- data/plugins/providers/virtualbox/action/check_accessible.rb +23 -0
- data/plugins/providers/virtualbox/action/check_created.rb +21 -0
- data/plugins/providers/virtualbox/action/check_guest_additions.rb +45 -0
- data/plugins/providers/virtualbox/action/check_running.rb +21 -0
- data/plugins/providers/virtualbox/action/check_virtualbox.rb +22 -0
- data/plugins/providers/virtualbox/action/clean_machine_folder.rb +43 -0
- data/plugins/providers/virtualbox/action/clear_forwarded_ports.rb +18 -0
- data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +31 -0
- data/plugins/providers/virtualbox/action/clear_shared_folders.rb +17 -0
- data/plugins/providers/virtualbox/action/created.rb +20 -0
- data/plugins/providers/virtualbox/action/customize.rb +36 -0
- data/plugins/providers/virtualbox/action/destroy.rb +19 -0
- data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +16 -0
- data/plugins/providers/virtualbox/action/discard_state.rb +20 -0
- data/plugins/providers/virtualbox/action/export.rb +57 -0
- data/plugins/providers/virtualbox/action/forced_halt.rb +25 -0
- data/plugins/providers/virtualbox/action/forward_ports.rb +87 -0
- data/plugins/providers/virtualbox/action/import.rb +51 -0
- 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/plugins/providers/virtualbox/action/match_mac_address.rb +21 -0
- data/plugins/providers/virtualbox/action/message_already_running.rb +16 -0
- 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 +410 -0
- data/plugins/providers/virtualbox/action/package.rb +20 -0
- data/plugins/providers/virtualbox/action/package_vagrantfile.rb +33 -0
- data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +35 -0
- data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +64 -0
- data/plugins/providers/virtualbox/action/prune_nfs_exports.rb +20 -0
- data/plugins/providers/virtualbox/action/resume.rb +25 -0
- data/plugins/providers/virtualbox/action/sane_defaults.rb +91 -0
- data/plugins/providers/virtualbox/action/set_name.rb +40 -0
- data/plugins/providers/virtualbox/action/setup_package_files.rb +51 -0
- data/plugins/providers/virtualbox/action/share_folders.rb +128 -0
- data/plugins/providers/virtualbox/action/suspend.rb +20 -0
- data/plugins/providers/virtualbox/action.rb +311 -0
- data/plugins/providers/virtualbox/config.rb +86 -0
- data/plugins/providers/virtualbox/driver/base.rb +360 -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 +482 -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/ansible/config.rb +72 -0
- data/plugins/provisioners/ansible/plugin.rb +23 -0
- data/plugins/provisioners/ansible/provisioner.rb +45 -0
- data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +19 -0
- data/plugins/provisioners/cfengine/cap/linux/cfengine_installed.rb +14 -0
- data/plugins/provisioners/cfengine/cap/linux/cfengine_needs_bootstrap.rb +34 -0
- data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +24 -0
- data/plugins/provisioners/cfengine/config.rb +120 -0
- data/plugins/provisioners/cfengine/plugin.rb +42 -0
- data/plugins/provisioners/cfengine/provisioner.rb +136 -0
- data/plugins/provisioners/chef/config/base.rb +85 -0
- data/plugins/provisioners/chef/config/chef_client.rb +57 -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 +93 -0
- data/plugins/provisioners/chef/provisioner/chef_client.rb +107 -0
- data/plugins/provisioners/chef/provisioner/chef_solo.rb +192 -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 +117 -0
- data/plugins/provisioners/puppet/provisioner/puppet_server.rb +67 -0
- data/plugins/provisioners/shell/config.rb +56 -0
- data/plugins/provisioners/shell/plugin.rb +23 -0
- data/plugins/provisioners/shell/provisioner.rb +86 -0
- data/tasks/acceptance.rake +113 -0
- data/tasks/bundler.rake +3 -0
- data/tasks/test.rake +20 -0
- data/templates/commands/init/Vagrantfile.erb +111 -0
- data/templates/commands/ssh_config/config.erb +16 -0
- data/templates/config/messages.erb +14 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/guests/arch/network_dhcp.erb +4 -0
- data/templates/guests/arch/network_static.erb +6 -0
- data/templates/guests/debian/network_dhcp.erb +11 -0
- data/templates/guests/debian/network_static.erb +7 -0
- data/templates/guests/fedora/network_dhcp.erb +6 -0
- data/templates/guests/fedora/network_static.erb +13 -0
- data/templates/guests/freebsd/network_dhcp.erb +3 -0
- data/templates/guests/freebsd/network_static.erb +3 -0
- data/templates/guests/gentoo/network_dhcp.erb +4 -0
- data/templates/guests/gentoo/network_static.erb +4 -0
- data/templates/guests/redhat/network_dhcp.erb +6 -0
- data/templates/guests/redhat/network_static.erb +8 -0
- data/templates/locales/en.yml +1126 -0
- data/templates/nfs/exports.erb +5 -0
- data/templates/nfs/exports_freebsd.erb +5 -0
- data/templates/nfs/exports_linux.erb +5 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/provisioners/chef_client/client.erb +32 -0
- data/templates/provisioners/chef_solo/solo.erb +25 -0
- data/templates/rgloader.rb +9 -0
- data/test/acceptance/base.rb +48 -0
- data/test/acceptance/box_test.rb +99 -0
- data/test/acceptance/destroy_test.rb +37 -0
- data/test/acceptance/halt_test.rb +72 -0
- data/test/acceptance/init_test.rb +33 -0
- data/test/acceptance/networking/host_only_test.rb +37 -0
- data/test/acceptance/networking/port_forward_test.rb +125 -0
- data/test/acceptance/package_test.rb +46 -0
- data/test/acceptance/provisioning/basic_test.rb +61 -0
- data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
- data/test/acceptance/provisioning/shell_test.rb +53 -0
- data/test/acceptance/resume_test.rb +17 -0
- data/test/acceptance/shared_folders_test.rb +84 -0
- data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
- data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
- data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/ssh_test.rb +46 -0
- data/test/acceptance/support/config.rb +42 -0
- data/test/acceptance/support/isolated_environment.rb +118 -0
- data/test/acceptance/support/matchers/have_color.rb +9 -0
- data/test/acceptance/support/matchers/match_output.rb +14 -0
- data/test/acceptance/support/matchers/succeed.rb +14 -0
- data/test/acceptance/support/network_tests.rb +29 -0
- data/test/acceptance/support/output.rb +95 -0
- data/test/acceptance/support/shared/base_context.rb +72 -0
- data/test/acceptance/support/shared/command_examples.rb +33 -0
- data/test/acceptance/support/virtualbox.rb +36 -0
- data/test/acceptance/suspend_test.rb +56 -0
- data/test/acceptance/up_basic_test.rb +33 -0
- data/test/acceptance/up_with_box_url.rb +40 -0
- data/test/acceptance/vagrant_test.rb +47 -0
- data/test/acceptance/version_test.rb +15 -0
- data/test/config/acceptance_boxes.yml +7 -0
- data/test/support/isolated_environment.rb +46 -0
- data/test/support/tempdir.rb +43 -0
- data/test/unit/base.rb +27 -0
- data/test/unit/support/dummy_provider.rb +16 -0
- data/test/unit/support/isolated_environment.rb +179 -0
- data/test/unit/support/shared/base_context.rb +104 -0
- data/test/unit/vagrant/action/builder_test.rb +242 -0
- 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 +120 -0
- data/test/unit/vagrant/action/runner_test.rb +71 -0
- data/test/unit/vagrant/action/warden_test.rb +92 -0
- data/test/unit/vagrant/batch_action_test.rb +36 -0
- data/test/unit/vagrant/box_collection_test.rb +237 -0
- data/test/unit/vagrant/box_test.rb +122 -0
- data/test/unit/vagrant/cli_test.rb +27 -0
- data/test/unit/vagrant/config/loader_test.rb +184 -0
- 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 +66 -0
- data/test/unit/vagrant/environment_test.rb +721 -0
- data/test/unit/vagrant/guest_test.rb +166 -0
- data/test/unit/vagrant/hosts_test.rb +37 -0
- data/test/unit/vagrant/machine_state_test.rb +26 -0
- data/test/unit/vagrant/machine_test.rb +384 -0
- data/test/unit/vagrant/plugin/v1/command_test.rb +143 -0
- 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 +174 -0
- data/test/unit/vagrant/plugin/v2/plugin_test.rb +305 -0
- data/test/unit/vagrant/plugin/v2/provider_test.rb +18 -0
- data/test/unit/vagrant/registry_test.rb +128 -0
- data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
- data/test/unit/vagrant/util/downloader_test.rb +57 -0
- data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
- data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
- data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
- data/test/unit/vagrant/util/network_ip_test.rb +17 -0
- data/test/unit/vagrant/util/retryable_test.rb +106 -0
- data/test/unit/vagrant/util/safe_chdir_test.rb +43 -0
- 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 +106 -0
- data/test/unit/vagrant/util/which_test.rb +43 -0
- data/test/unit/vagrant_test.rb +56 -0
- data/tnargav.gemspec +69 -0
- data/vagrant.gemspec +69 -0
- metadata +730 -0
data/lib/vagrant.rb
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
require 'log4r'
|
|
2
|
+
|
|
3
|
+
# Enable logging if it is requested. We do this before
|
|
4
|
+
# anything else so that we can setup the output before
|
|
5
|
+
# any logging occurs.
|
|
6
|
+
if ENV["VAGRANT_LOG"] && ENV["VAGRANT_LOG"] != ""
|
|
7
|
+
# Require Log4r and define the levels we'll be using
|
|
8
|
+
require 'log4r/config'
|
|
9
|
+
Log4r.define_levels(*Log4r::Log4rConfig::LogLevels)
|
|
10
|
+
|
|
11
|
+
level = nil
|
|
12
|
+
begin
|
|
13
|
+
level = Log4r.const_get(ENV["VAGRANT_LOG"].upcase)
|
|
14
|
+
rescue NameError
|
|
15
|
+
# This means that the logging constant wasn't found,
|
|
16
|
+
# which is fine. We just keep `level` as `nil`. But
|
|
17
|
+
# we tell the user.
|
|
18
|
+
level = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Some constants, such as "true" resolve to booleans, so the
|
|
22
|
+
# above error checking doesn't catch it. This will check to make
|
|
23
|
+
# sure that the log level is an integer, as Log4r requires.
|
|
24
|
+
level = nil if !level.is_a?(Integer)
|
|
25
|
+
|
|
26
|
+
if !level
|
|
27
|
+
# We directly write to stderr here because the VagrantError system
|
|
28
|
+
# is not setup yet.
|
|
29
|
+
$stderr.puts "Invalid VAGRANT_LOG level is set: #{ENV["VAGRANT_LOG"]}"
|
|
30
|
+
$stderr.puts ""
|
|
31
|
+
$stderr.puts "Please use one of the standard log levels: debug, info, warn, or error"
|
|
32
|
+
exit 1
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Set the logging level on all "vagrant" namespaced
|
|
36
|
+
# logs as long as we have a valid level.
|
|
37
|
+
if level
|
|
38
|
+
logger = Log4r::Logger.new("vagrant")
|
|
39
|
+
logger.outputters = Log4r::Outputter.stderr
|
|
40
|
+
logger.level = level
|
|
41
|
+
logger = nil
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
require 'json'
|
|
46
|
+
require 'pathname'
|
|
47
|
+
require 'stringio'
|
|
48
|
+
|
|
49
|
+
require 'childprocess'
|
|
50
|
+
require 'i18n'
|
|
51
|
+
|
|
52
|
+
# OpenSSL must be loaded here since when it is loaded via `autoload`
|
|
53
|
+
# there are issues with ciphers not being properly loaded.
|
|
54
|
+
require 'openssl'
|
|
55
|
+
|
|
56
|
+
# Always make the version available
|
|
57
|
+
require 'vagrant/version'
|
|
58
|
+
global_logger = Log4r::Logger.new("vagrant::global")
|
|
59
|
+
global_logger.info("Vagrant version: #{Vagrant::VERSION}")
|
|
60
|
+
|
|
61
|
+
# We need these components always so instead of an autoload we
|
|
62
|
+
# just require them explicitly here.
|
|
63
|
+
require "vagrant/registry"
|
|
64
|
+
|
|
65
|
+
module Vagrant
|
|
66
|
+
autoload :Action, 'vagrant/action'
|
|
67
|
+
autoload :BatchAction, 'vagrant/batch_action'
|
|
68
|
+
autoload :Box, 'vagrant/box'
|
|
69
|
+
autoload :BoxCollection, 'vagrant/box_collection'
|
|
70
|
+
autoload :CLI, 'vagrant/cli'
|
|
71
|
+
autoload :Command, 'vagrant/command'
|
|
72
|
+
autoload :Config, 'vagrant/config'
|
|
73
|
+
autoload :Driver, 'vagrant/driver'
|
|
74
|
+
autoload :Environment, 'vagrant/environment'
|
|
75
|
+
autoload :Errors, 'vagrant/errors'
|
|
76
|
+
autoload :Guest, 'vagrant/guest'
|
|
77
|
+
autoload :Hosts, 'vagrant/hosts'
|
|
78
|
+
autoload :Machine, 'vagrant/machine'
|
|
79
|
+
autoload :MachineState, 'vagrant/machine_state'
|
|
80
|
+
autoload :Plugin, 'vagrant/plugin'
|
|
81
|
+
autoload :UI, 'vagrant/ui'
|
|
82
|
+
autoload :Util, 'vagrant/util'
|
|
83
|
+
|
|
84
|
+
# These are the various plugin versions and their components in
|
|
85
|
+
# a lazy loaded Hash-like structure.
|
|
86
|
+
PLUGIN_COMPONENTS = Registry.new.tap do |c|
|
|
87
|
+
c.register(:"1") { Plugin::V1::Plugin }
|
|
88
|
+
c.register([:"1", :command]) { Plugin::V1::Command }
|
|
89
|
+
c.register([:"1", :communicator]) { Plugin::V1::Communicator }
|
|
90
|
+
c.register([:"1", :config]) { Plugin::V1::Config }
|
|
91
|
+
c.register([:"1", :guest]) { Plugin::V1::Guest }
|
|
92
|
+
c.register([:"1", :host]) { Plugin::V1::Host }
|
|
93
|
+
c.register([:"1", :provider]) { Plugin::V1::Provider }
|
|
94
|
+
c.register([:"1", :provisioner]) { Plugin::V1::Provisioner }
|
|
95
|
+
|
|
96
|
+
c.register(:"2") { Plugin::V2::Plugin }
|
|
97
|
+
c.register([:"2", :command]) { Plugin::V2::Command }
|
|
98
|
+
c.register([:"2", :communicator]) { Plugin::V2::Communicator }
|
|
99
|
+
c.register([:"2", :config]) { Plugin::V2::Config }
|
|
100
|
+
c.register([:"2", :guest]) { Plugin::V2::Guest }
|
|
101
|
+
c.register([:"2", :host]) { Plugin::V2::Host }
|
|
102
|
+
c.register([:"2", :provider]) { Plugin::V2::Provider }
|
|
103
|
+
c.register([:"2", :provisioner]) { Plugin::V2::Provisioner }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# This returns a true/false showing whether we're running from the
|
|
107
|
+
# environment setup by the Vagrant installers.
|
|
108
|
+
#
|
|
109
|
+
# @return [Boolean]
|
|
110
|
+
def self.in_installer?
|
|
111
|
+
!!ENV["VAGRANT_INSTALLER_ENV"]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# The source root is the path to the root directory of
|
|
115
|
+
# the Vagrant gem.
|
|
116
|
+
def self.source_root
|
|
117
|
+
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Configure a Vagrant environment. The version specifies the version
|
|
121
|
+
# of the configuration that is expected by the block. The block, based
|
|
122
|
+
# on that version, configures the environment.
|
|
123
|
+
#
|
|
124
|
+
# Note that the block isn't run immediately. Instead, the configuration
|
|
125
|
+
# block is stored until later, and is run when an environment is loaded.
|
|
126
|
+
#
|
|
127
|
+
# @param [String] version Version of the configuration
|
|
128
|
+
def self.configure(version, &block)
|
|
129
|
+
Config.run(version, &block)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Returns a superclass to use when creating a plugin for Vagrant.
|
|
133
|
+
# Given a specific version, this returns a proper superclass to use
|
|
134
|
+
# to register plugins for that version.
|
|
135
|
+
#
|
|
136
|
+
# Optionally, if you give a specific component, then it will return
|
|
137
|
+
# the proper superclass for that component as well.
|
|
138
|
+
#
|
|
139
|
+
# Plugins and plugin components should subclass the classes returned by
|
|
140
|
+
# this method. This method lets Vagrant core control these superclasses
|
|
141
|
+
# and change them over time without affecting plugins. For example, if
|
|
142
|
+
# the V1 superclass happens to be "Vagrant::V1," future versions of
|
|
143
|
+
# Vagrant may move it to "Vagrant::Plugins::V1" and plugins will not be
|
|
144
|
+
# affected.
|
|
145
|
+
#
|
|
146
|
+
# @param [String] version
|
|
147
|
+
# @param [String] component
|
|
148
|
+
# @return [Class]
|
|
149
|
+
def self.plugin(version, component=nil)
|
|
150
|
+
# Build up the key and return a result
|
|
151
|
+
key = version.to_s.to_sym
|
|
152
|
+
key = [key, component.to_s.to_sym] if component
|
|
153
|
+
result = PLUGIN_COMPONENTS.get(key)
|
|
154
|
+
|
|
155
|
+
# If we found our component then we return that
|
|
156
|
+
return result if result
|
|
157
|
+
|
|
158
|
+
# If we didn't find a result, then raise an exception, depending
|
|
159
|
+
# on if we got a component or not.
|
|
160
|
+
raise ArgumentError, "Plugin superclass not found for version/component: " +
|
|
161
|
+
"#{version} #{component}"
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# This should be used instead of Ruby's built-in `require` in order to
|
|
165
|
+
# load a Vagrant plugin. This will load the given plugin by first doing
|
|
166
|
+
# a normal `require`, giving a nice error message if things go wrong,
|
|
167
|
+
# and second by verifying that a Vagrant plugin was actually defined in
|
|
168
|
+
# the process.
|
|
169
|
+
#
|
|
170
|
+
# @param [String] name Name of the plugin to load.
|
|
171
|
+
def self.require_plugin(name)
|
|
172
|
+
if ENV["VAGRANT_NO_PLUGINS"]
|
|
173
|
+
logger = Log4r::Logger.new("vagrant::root")
|
|
174
|
+
logger.warn("VAGRANT_NO_PLUGINS is set, not loading 3rd party plugin: #{name}")
|
|
175
|
+
return
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Redirect stdout/stderr so that we can output it in our own way.
|
|
179
|
+
previous_stderr = $stderr
|
|
180
|
+
previous_stdout = $stdout
|
|
181
|
+
$stderr = StringIO.new
|
|
182
|
+
$stdout = StringIO.new
|
|
183
|
+
|
|
184
|
+
# Attempt the normal require
|
|
185
|
+
begin
|
|
186
|
+
require name
|
|
187
|
+
rescue Exception => e
|
|
188
|
+
# Since this is a rare case, we create a one-time logger here
|
|
189
|
+
# in order to output the error
|
|
190
|
+
logger = Log4r::Logger.new("vagrant::root")
|
|
191
|
+
logger.error("Failed to load plugin: #{name}")
|
|
192
|
+
logger.error(" -- Error: #{e.inspect}")
|
|
193
|
+
logger.error(" -- Backtrace:")
|
|
194
|
+
logger.error(e.backtrace.join("\n"))
|
|
195
|
+
|
|
196
|
+
# If it is a LoadError we first try to see if it failed loading
|
|
197
|
+
# the top-level entrypoint. If so, then we report a different error.
|
|
198
|
+
if e.is_a?(LoadError)
|
|
199
|
+
# Parse the message in order to get what failed to load, and
|
|
200
|
+
# add some extra protection around if the message is different.
|
|
201
|
+
parts = e.to_s.split(" -- ", 2)
|
|
202
|
+
if parts.length == 2 && parts[1] == name
|
|
203
|
+
raise Errors::PluginLoadError, :plugin => name
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Get the string data out from the stdout/stderr captures
|
|
208
|
+
stderr = $stderr.string
|
|
209
|
+
stdout = $stdout.string
|
|
210
|
+
if !stderr.empty? || !stdout.empty?
|
|
211
|
+
raise Errors::PluginLoadFailedWithOutput,
|
|
212
|
+
:plugin => name,
|
|
213
|
+
:stderr => stderr,
|
|
214
|
+
:stdout => stdout
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# And raise an error itself
|
|
218
|
+
raise Errors::PluginLoadFailed,
|
|
219
|
+
:plugin => name
|
|
220
|
+
end
|
|
221
|
+
ensure
|
|
222
|
+
$stderr = previous_stderr if previous_stderr
|
|
223
|
+
$stdout = previous_stdout if previous_stdout
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# Default I18n to load the en locale
|
|
228
|
+
I18n.load_path << File.expand_path("templates/locales/en.yml", Vagrant.source_root)
|
|
229
|
+
|
|
230
|
+
# A lambda that knows how to load plugins from a single directory.
|
|
231
|
+
plugin_load_proc = lambda do |directory|
|
|
232
|
+
# We only care about directories
|
|
233
|
+
next false if !directory.directory?
|
|
234
|
+
|
|
235
|
+
# If there is a plugin file in the top-level directory, then load
|
|
236
|
+
# that up.
|
|
237
|
+
plugin_file = directory.join("plugin.rb")
|
|
238
|
+
if plugin_file.file?
|
|
239
|
+
global_logger.debug("Loading core plugin: #{plugin_file}")
|
|
240
|
+
load(plugin_file)
|
|
241
|
+
next true
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
# Go through the `plugins` directory and attempt to load any plugins. The
|
|
246
|
+
# plugins are allowed to be in a directory in `plugins` or at most one
|
|
247
|
+
# directory deep within the plugins directory. So a plugin can be at
|
|
248
|
+
# `plugins/foo` or also at `plugins/foo/bar`, but no deeper.
|
|
249
|
+
Vagrant.source_root.join("plugins").children(true).each do |directory|
|
|
250
|
+
# Ignore non-directories
|
|
251
|
+
next if !directory.directory?
|
|
252
|
+
|
|
253
|
+
# Load from this directory, and exit if we successfully loaded a plugin
|
|
254
|
+
next if plugin_load_proc.call(directory)
|
|
255
|
+
|
|
256
|
+
# Otherwise, attempt to load from sub-directories
|
|
257
|
+
directory.children(true).each(&plugin_load_proc)
|
|
258
|
+
end
|
data/plugins/README.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandBox
|
|
5
|
+
module Command
|
|
6
|
+
class Add < Vagrant.plugin("2", :command)
|
|
7
|
+
def execute
|
|
8
|
+
options = {}
|
|
9
|
+
|
|
10
|
+
opts = OptionParser.new do |o|
|
|
11
|
+
o.banner = "Usage: vagrant box add <name> <url> [--provider provider] [-h]"
|
|
12
|
+
o.separator ""
|
|
13
|
+
|
|
14
|
+
o.on("-f", "--force", "Overwrite an existing box if it exists.") do |f|
|
|
15
|
+
options[:force] = f
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
o.on("--insecure", "If set, SSL certs will not be validated.") do |i|
|
|
19
|
+
options[:insecure] = i
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
o.on("--provider provider", String,
|
|
23
|
+
"The provider that backs the box.") do |p|
|
|
24
|
+
options[:provider] = p
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Parse the options
|
|
29
|
+
argv = parse_options(opts)
|
|
30
|
+
return if !argv
|
|
31
|
+
raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 2
|
|
32
|
+
|
|
33
|
+
# Get the provider if one was set
|
|
34
|
+
provider = nil
|
|
35
|
+
provider = options[:provider].to_sym if options[:provider]
|
|
36
|
+
|
|
37
|
+
@env.action_runner.run(Vagrant::Action.action_box_add, {
|
|
38
|
+
:box_name => argv[0],
|
|
39
|
+
:box_provider => provider,
|
|
40
|
+
:box_url => argv[1],
|
|
41
|
+
:box_force => options[:force],
|
|
42
|
+
:box_download_insecure => options[:insecure],
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
# Success, exit status 0
|
|
46
|
+
0
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandBox
|
|
5
|
+
module Command
|
|
6
|
+
class List < Vagrant.plugin("2", :command)
|
|
7
|
+
def execute
|
|
8
|
+
options = {}
|
|
9
|
+
|
|
10
|
+
opts = OptionParser.new do |opts|
|
|
11
|
+
opts.banner = "Usage: vagrant box list"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Parse the options
|
|
15
|
+
argv = parse_options(opts)
|
|
16
|
+
return if !argv
|
|
17
|
+
|
|
18
|
+
boxes = @env.boxes.all.sort
|
|
19
|
+
if boxes.empty?
|
|
20
|
+
return @env.ui.warn(I18n.t("vagrant.commands.box.no_installed_boxes"), :prefix => false)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Find the longest box name
|
|
24
|
+
longest_box = boxes.max_by { |x| x[0].length }
|
|
25
|
+
longest_box_length = longest_box[0].length
|
|
26
|
+
|
|
27
|
+
# Go through each box and output the information about it. We
|
|
28
|
+
# ignore the "v1" param for now since I'm not yet sure if its
|
|
29
|
+
# important for the user to know what boxes need to be upgraded
|
|
30
|
+
# and which don't, since we plan on doing that transparently.
|
|
31
|
+
boxes.each do |name, provider, _v1|
|
|
32
|
+
@env.ui.info("#{name.ljust(longest_box_length)} (#{provider})", :prefix => false)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Success, exit status 0
|
|
36
|
+
0
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandBox
|
|
5
|
+
module Command
|
|
6
|
+
class Remove < Vagrant.plugin("2", :command)
|
|
7
|
+
def execute
|
|
8
|
+
opts = OptionParser.new do |o|
|
|
9
|
+
o.banner = "Usage: vagrant box remove <name> <provider>"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Parse the options
|
|
13
|
+
argv = parse_options(opts)
|
|
14
|
+
return if !argv
|
|
15
|
+
raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 2
|
|
16
|
+
|
|
17
|
+
b = nil
|
|
18
|
+
begin
|
|
19
|
+
b = @env.boxes.find(argv[0], argv[1].to_sym)
|
|
20
|
+
rescue Vagrant::Errors::BoxUpgradeRequired
|
|
21
|
+
@env.boxes.upgrade(argv[0])
|
|
22
|
+
retry
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
raise Vagrant::Errors::BoxNotFound, :name => argv[0] if !b
|
|
26
|
+
@env.ui.info(I18n.t("vagrant.commands.box.removing",
|
|
27
|
+
:name => argv[0],
|
|
28
|
+
:provider => argv[1]))
|
|
29
|
+
b.destroy!
|
|
30
|
+
|
|
31
|
+
# Success, exit status 0
|
|
32
|
+
0
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require "fileutils"
|
|
2
|
+
require 'optparse'
|
|
3
|
+
require "pathname"
|
|
4
|
+
|
|
5
|
+
module VagrantPlugins
|
|
6
|
+
module CommandBox
|
|
7
|
+
module Command
|
|
8
|
+
class Repackage < Vagrant.plugin("2", :command)
|
|
9
|
+
def execute
|
|
10
|
+
opts = OptionParser.new do |o|
|
|
11
|
+
o.banner = "Usage: vagrant box repackage <name> <provider>"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Parse the options
|
|
15
|
+
argv = parse_options(opts)
|
|
16
|
+
return if !argv
|
|
17
|
+
raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 2
|
|
18
|
+
|
|
19
|
+
box_name = argv[0]
|
|
20
|
+
box_provider = argv[1].to_sym
|
|
21
|
+
|
|
22
|
+
# Verify the box exists that we want to repackage
|
|
23
|
+
box = nil
|
|
24
|
+
begin
|
|
25
|
+
box = @env.boxes.find(box_name, box_provider)
|
|
26
|
+
rescue Vagrant::Errors::BoxUpgradeRequired
|
|
27
|
+
@env.boxes.upgrade(box_name)
|
|
28
|
+
retry
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
raise Vagrant::Errors::BoxNotFound, :name => box_name if !box
|
|
32
|
+
|
|
33
|
+
# Repackage the box
|
|
34
|
+
output_path = Pathname.new(File.expand_path(@env.config_global.package.name, FileUtils.pwd))
|
|
35
|
+
box.repackage(output_path)
|
|
36
|
+
|
|
37
|
+
# Success, exit status 0
|
|
38
|
+
0
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandBox
|
|
5
|
+
module Command
|
|
6
|
+
class Root < Vagrant.plugin("2", :command)
|
|
7
|
+
def initialize(argv, env)
|
|
8
|
+
super
|
|
9
|
+
|
|
10
|
+
@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
|
|
11
|
+
|
|
12
|
+
@subcommands = Vagrant::Registry.new
|
|
13
|
+
@subcommands.register(:add) do
|
|
14
|
+
require File.expand_path("../add", __FILE__)
|
|
15
|
+
Add
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
@subcommands.register(:list) do
|
|
19
|
+
require File.expand_path("../list", __FILE__)
|
|
20
|
+
List
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@subcommands.register(:remove) do
|
|
24
|
+
require File.expand_path("../remove", __FILE__)
|
|
25
|
+
Remove
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
@subcommands.register(:repackage) do
|
|
29
|
+
require File.expand_path("../repackage", __FILE__)
|
|
30
|
+
Repackage
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def execute
|
|
35
|
+
if @main_args.include?("-h") || @main_args.include?("--help")
|
|
36
|
+
# Print the help for all the box commands.
|
|
37
|
+
return help
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# If we reached this far then we must have a subcommand. If not,
|
|
41
|
+
# then we also just print the help and exit.
|
|
42
|
+
command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
|
|
43
|
+
return help if !command_class || !@sub_command
|
|
44
|
+
@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
|
|
45
|
+
|
|
46
|
+
# Initialize and execute the command class
|
|
47
|
+
command_class.new(@sub_args, @env).execute
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Prints the help out for this command
|
|
51
|
+
def help
|
|
52
|
+
opts = OptionParser.new do |opts|
|
|
53
|
+
opts.banner = "Usage: vagrant box <command> [<args>]"
|
|
54
|
+
opts.separator ""
|
|
55
|
+
opts.separator "Available subcommands:"
|
|
56
|
+
|
|
57
|
+
# Add the available subcommands as separators in order to print them
|
|
58
|
+
# out as well.
|
|
59
|
+
keys = []
|
|
60
|
+
@subcommands.each { |key, value| keys << key.to_s }
|
|
61
|
+
|
|
62
|
+
keys.sort.each do |key|
|
|
63
|
+
opts.separator " #{key}"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
opts.separator ""
|
|
67
|
+
opts.separator "For help on any individual command run `vagrant box COMMAND -h`"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
@env.ui.info(opts.help, :prefix => false)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require "vagrant"
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandBox
|
|
5
|
+
class Plugin < Vagrant.plugin("2")
|
|
6
|
+
name "box command"
|
|
7
|
+
description "The `box` command gives you a way to manage boxes."
|
|
8
|
+
|
|
9
|
+
command("box") do
|
|
10
|
+
require File.expand_path("../command/root", __FILE__)
|
|
11
|
+
Command::Root
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module CommandDestroy
|
|
3
|
+
class Command < Vagrant.plugin("2", :command)
|
|
4
|
+
def execute
|
|
5
|
+
options = {}
|
|
6
|
+
options[:force] = false
|
|
7
|
+
|
|
8
|
+
opts = OptionParser.new do |o|
|
|
9
|
+
o.banner = "Usage: vagrant destroy [vm-name]"
|
|
10
|
+
o.separator ""
|
|
11
|
+
|
|
12
|
+
o.on("-f", "--force", "Destroy without confirmation.") do |f|
|
|
13
|
+
options[:force] = f
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Parse the options
|
|
18
|
+
argv = parse_options(opts)
|
|
19
|
+
return if !argv
|
|
20
|
+
|
|
21
|
+
@logger.debug("'Destroy' each target VM...")
|
|
22
|
+
with_target_vms(argv, :reverse => true) do |vm|
|
|
23
|
+
vm.action(:destroy, :force_confirm_destroy => options[:force])
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Success, exit status 0
|
|
27
|
+
0
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require "vagrant"
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandDestroy
|
|
5
|
+
class Plugin < Vagrant.plugin("2")
|
|
6
|
+
name "destroy command"
|
|
7
|
+
description <<-DESC
|
|
8
|
+
The `destroy` command deletes and removes the files and record of your virtual machines.
|
|
9
|
+
All data is lost and a new VM will have to be created using `up`
|
|
10
|
+
DESC
|
|
11
|
+
|
|
12
|
+
command("destroy") do
|
|
13
|
+
require File.expand_path("../command", __FILE__)
|
|
14
|
+
Command
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandHalt
|
|
5
|
+
class Command < Vagrant.plugin("2", :command)
|
|
6
|
+
def execute
|
|
7
|
+
options = {}
|
|
8
|
+
options[:force] = false
|
|
9
|
+
|
|
10
|
+
opts = OptionParser.new do |o|
|
|
11
|
+
o.banner = "Usage: vagrant halt [vm-name] [--force] [-h]"
|
|
12
|
+
o.separator ""
|
|
13
|
+
|
|
14
|
+
o.on("-f", "--force", "Force shut down (equivalent of pulling power)") do |f|
|
|
15
|
+
options[:force] = f
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Parse the options
|
|
20
|
+
argv = parse_options(opts)
|
|
21
|
+
return if !argv
|
|
22
|
+
|
|
23
|
+
@logger.debug("Halt command: #{argv.inspect} #{options.inspect}")
|
|
24
|
+
with_target_vms(argv) do |vm|
|
|
25
|
+
vm.action(:halt, :force_halt => options[:force])
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Success, exit status 0
|
|
29
|
+
0
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require "vagrant"
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandHalt
|
|
5
|
+
class Plugin < Vagrant.plugin("2")
|
|
6
|
+
name "halt command"
|
|
7
|
+
description <<-DESC
|
|
8
|
+
The `halt` command shuts your virtual machine down forcefully.
|
|
9
|
+
The command `up` recreates it.
|
|
10
|
+
DESC
|
|
11
|
+
|
|
12
|
+
command("halt") do
|
|
13
|
+
require File.expand_path("../command", __FILE__)
|
|
14
|
+
Command
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
require 'vagrant/util/template_renderer'
|
|
4
|
+
|
|
5
|
+
module VagrantPlugins
|
|
6
|
+
module CommandInit
|
|
7
|
+
class Command < Vagrant.plugin("2", :command)
|
|
8
|
+
def execute
|
|
9
|
+
options = {}
|
|
10
|
+
|
|
11
|
+
opts = OptionParser.new do |opts|
|
|
12
|
+
opts.banner = "Usage: vagrant init [box-name] [box-url]"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Parse the options
|
|
16
|
+
argv = parse_options(opts)
|
|
17
|
+
return if !argv
|
|
18
|
+
|
|
19
|
+
save_path = @env.cwd.join("Vagrantfile")
|
|
20
|
+
raise Vagrant::Errors::VagrantfileExistsError if save_path.exist?
|
|
21
|
+
|
|
22
|
+
template_path = ::Vagrant.source_root.join("templates/commands/init/Vagrantfile")
|
|
23
|
+
contents = Vagrant::Util::TemplateRenderer.render(template_path,
|
|
24
|
+
:box_name => argv[0] || "base",
|
|
25
|
+
:box_url => argv[1])
|
|
26
|
+
|
|
27
|
+
# Write out the contents
|
|
28
|
+
save_path.open("w+") do |f|
|
|
29
|
+
f.write(contents)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
@env.ui.info(I18n.t("vagrant.commands.init.success"),
|
|
33
|
+
:prefix => false)
|
|
34
|
+
|
|
35
|
+
# Success, exit status 0
|
|
36
|
+
0
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|