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
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require "vagrant"
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandInit
|
|
5
|
+
class Plugin < Vagrant.plugin("2")
|
|
6
|
+
name "init command"
|
|
7
|
+
description <<-DESC
|
|
8
|
+
The `init` command sets up your working directory to be a
|
|
9
|
+
Vagrant-managed environment.
|
|
10
|
+
DESC
|
|
11
|
+
|
|
12
|
+
command("init") do
|
|
13
|
+
require File.expand_path("../command", __FILE__)
|
|
14
|
+
Command
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandPackage
|
|
5
|
+
class Command < Vagrant.plugin("2", :command)
|
|
6
|
+
def execute
|
|
7
|
+
options = {}
|
|
8
|
+
|
|
9
|
+
opts = OptionParser.new do |o|
|
|
10
|
+
o.banner = "Usage: vagrant package [vm-name] [--base name] [--output name.box]"
|
|
11
|
+
o.separator " [--include one,two,three] [--vagrantfile file]"
|
|
12
|
+
|
|
13
|
+
o.separator ""
|
|
14
|
+
|
|
15
|
+
o.on("--base NAME", "Name of a VM in virtualbox to package as a base box") do |b|
|
|
16
|
+
options[:base] = b
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
o.on("--output NAME", "Name of the file to output") do |output|
|
|
20
|
+
options[:output] = output
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
o.on("--include x,y,z", Array, "Additional files to package with the box.") do |i|
|
|
24
|
+
options[:include] = i
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
o.on("--vagrantfile file", "Vagrantfile to package with the box.") do |v|
|
|
28
|
+
options[:vagrantfile] = v
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Parse the options
|
|
33
|
+
argv = parse_options(opts)
|
|
34
|
+
return if !argv
|
|
35
|
+
|
|
36
|
+
@logger.debug("package options: #{options.inspect}")
|
|
37
|
+
if options[:base]
|
|
38
|
+
package_base(options)
|
|
39
|
+
else
|
|
40
|
+
package_target(argv[0], options)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Success, exit status 0
|
|
44
|
+
0
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
protected
|
|
48
|
+
|
|
49
|
+
def package_base(options)
|
|
50
|
+
# XXX: This whole thing is hardcoded and very temporary. The whole
|
|
51
|
+
# `vagrant package --base` process is deprecated for something much
|
|
52
|
+
# better in the future. We just hardcode this to keep VirtualBox working
|
|
53
|
+
# for now.
|
|
54
|
+
provider = Vagrant.plugin("2").manager.providers[:virtualbox]
|
|
55
|
+
vm = Vagrant::Machine.new(
|
|
56
|
+
options[:base],
|
|
57
|
+
:virtualbox, provider[0], nil, provider[1],
|
|
58
|
+
@env.config_global,
|
|
59
|
+
nil, nil,
|
|
60
|
+
@env, true)
|
|
61
|
+
@logger.debug("Packaging base VM: #{vm.name}")
|
|
62
|
+
package_vm(vm, options)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def package_target(name, options)
|
|
66
|
+
with_target_vms(name, :single_target => true) do |vm|
|
|
67
|
+
@logger.debug("Packaging VM: #{vm.name}")
|
|
68
|
+
package_vm(vm, options)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def package_vm(vm, options)
|
|
73
|
+
opts = options.inject({}) do |acc, data|
|
|
74
|
+
k,v = data
|
|
75
|
+
acc["package.#{k}"] = v
|
|
76
|
+
acc
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
vm.action(:package, opts)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require "vagrant"
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins
|
|
4
|
+
module CommandPackage
|
|
5
|
+
class Plugin < Vagrant.plugin("2")
|
|
6
|
+
name "package command"
|
|
7
|
+
description <<-DESC
|
|
8
|
+
The `package` command will take a previously existing Vagrant
|
|
9
|
+
environment and package it into a box file.
|
|
10
|
+
DESC
|
|
11
|
+
|
|
12
|
+
command("package") do
|
|
13
|
+
require File.expand_path("../command", __FILE__)
|
|
14
|
+
Command
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module CommandPlugin
|
|
3
|
+
module Action
|
|
4
|
+
class BundlerCheck
|
|
5
|
+
def initialize(app, env)
|
|
6
|
+
@app = app
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def call(env)
|
|
10
|
+
# Bundler sets up its own custom gem load paths such that our
|
|
11
|
+
# own gems are never loaded. Therefore, give an error if a user
|
|
12
|
+
# tries to install gems while within a Bundler-managed environment.
|
|
13
|
+
if defined?(Bundler)
|
|
14
|
+
require 'bundler/shared_helpers'
|
|
15
|
+
if Bundler::SharedHelpers.in_bundle?
|
|
16
|
+
raise Vagrant::Errors::GemCommandInBundler
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
@app.call(env)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
require "rubygems/dependency_installer"
|
|
3
|
+
|
|
4
|
+
require "log4r"
|
|
5
|
+
|
|
6
|
+
module VagrantPlugins
|
|
7
|
+
module CommandPlugin
|
|
8
|
+
module Action
|
|
9
|
+
# This action takes the `:plugin_name` variable in the environment
|
|
10
|
+
# and installs it using the RubyGems API.
|
|
11
|
+
class InstallGem
|
|
12
|
+
def initialize(app, env)
|
|
13
|
+
@app = app
|
|
14
|
+
@logger = Log4r::Logger.new("vagrant::plugins::plugincommand::installgem")
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call(env)
|
|
18
|
+
plugin_name = env[:plugin_name]
|
|
19
|
+
prerelease = env[:plugin_prerelease]
|
|
20
|
+
version = env[:plugin_version]
|
|
21
|
+
|
|
22
|
+
# Install the gem
|
|
23
|
+
plugin_name_label = plugin_name
|
|
24
|
+
plugin_name_label += ' --prerelease' if prerelease
|
|
25
|
+
plugin_name_label += " --version '#{version}'" if version
|
|
26
|
+
env[:ui].info(I18n.t("vagrant.commands.plugin.installing",
|
|
27
|
+
:name => plugin_name_label))
|
|
28
|
+
installed_gems = env[:gem_helper].with_environment do
|
|
29
|
+
# Override the list of sources by the ones set as a parameter if given
|
|
30
|
+
if env[:plugin_sources]
|
|
31
|
+
@logger.info("Custom plugin sources: #{env[:plugin_sources]}")
|
|
32
|
+
Gem.sources = env[:plugin_sources]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
installer = Gem::DependencyInstaller.new(:document => [], :prerelease => prerelease)
|
|
36
|
+
|
|
37
|
+
begin
|
|
38
|
+
installer.install(plugin_name, version)
|
|
39
|
+
rescue Gem::GemNotFoundException
|
|
40
|
+
raise Vagrant::Errors::PluginInstallNotFound,
|
|
41
|
+
:name => plugin_name
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# The plugin spec is the last installed gem since RubyGems
|
|
46
|
+
# currently always installed the requested gem last.
|
|
47
|
+
@logger.debug("Installed #{installed_gems.length} gems.")
|
|
48
|
+
plugin_spec = installed_gems.last
|
|
49
|
+
|
|
50
|
+
# Store the installed name so we can uninstall it if things go
|
|
51
|
+
# wrong.
|
|
52
|
+
@installed_plugin_name = plugin_spec.name
|
|
53
|
+
|
|
54
|
+
# Mark that we installed the gem
|
|
55
|
+
@logger.info("Adding the plugin to the state file...")
|
|
56
|
+
env[:plugin_state_file].add_plugin(plugin_spec.name)
|
|
57
|
+
|
|
58
|
+
# Tell the user
|
|
59
|
+
env[:ui].success(I18n.t("vagrant.commands.plugin.installed",
|
|
60
|
+
:name => plugin_spec.name,
|
|
61
|
+
:version => plugin_spec.version.to_s))
|
|
62
|
+
|
|
63
|
+
# Continue
|
|
64
|
+
@app.call(env)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def recover(env)
|
|
68
|
+
# If any error happens, we uninstall it and remove it from
|
|
69
|
+
# the state file. We can only do this if we successfully installed
|
|
70
|
+
# the gem in the first place.
|
|
71
|
+
if @installed_plugin_name
|
|
72
|
+
new_env = env.dup
|
|
73
|
+
new_env.delete(:interrupted)
|
|
74
|
+
new_env[:plugin_name] = @installed_plugin_name
|
|
75
|
+
new_env[:action_runner].run(Action.action_uninstall, new_env)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require "fileutils"
|
|
2
|
+
require "pathname"
|
|
3
|
+
require "rubygems"
|
|
4
|
+
require "set"
|
|
5
|
+
|
|
6
|
+
require "log4r"
|
|
7
|
+
|
|
8
|
+
module VagrantPlugins
|
|
9
|
+
module CommandPlugin
|
|
10
|
+
module Action
|
|
11
|
+
# This middleware licenses a plugin by copying the license file to
|
|
12
|
+
# the proper place.
|
|
13
|
+
class LicensePlugin
|
|
14
|
+
def initialize(app, env)
|
|
15
|
+
@app = app
|
|
16
|
+
@logger = Log4r::Logger.new("vagrant::plugins::plugincommand::license")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def call(env)
|
|
20
|
+
# Get the list of installed plugins according to the state file
|
|
21
|
+
installed = Set.new(env[:plugin_state_file].installed_plugins)
|
|
22
|
+
|
|
23
|
+
# If the plugin we're trying to license doesn't exist in the
|
|
24
|
+
# state file, then it is an error.
|
|
25
|
+
if !installed.include?(env[:plugin_name])
|
|
26
|
+
raise Vagrant::Errors::PluginNotFound, :name => env[:plugin_name]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Verify the license file exists
|
|
30
|
+
license_file = Pathname.new(env[:plugin_license_path])
|
|
31
|
+
if !license_file.file?
|
|
32
|
+
raise Vagrant::Errors::PluginInstallLicenseNotFound,
|
|
33
|
+
:name => env[:plugin_name],
|
|
34
|
+
:path => license_file.to_s
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Copy it in.
|
|
38
|
+
final_path = env[:home_path].join("license-#{env[:plugin_name]}.lic")
|
|
39
|
+
@logger.info("Copying license from: #{license_file}")
|
|
40
|
+
@logger.info("Copying license to: #{final_path}")
|
|
41
|
+
env[:ui].info(I18n.t("vagrant.commands.plugin.installing_license",
|
|
42
|
+
:name => env[:plugin_name]))
|
|
43
|
+
FileUtils.cp(license_file, final_path)
|
|
44
|
+
|
|
45
|
+
# Installed!
|
|
46
|
+
env[:ui].success(I18n.t("vagrant.commands.plugin.installed_license",
|
|
47
|
+
:name => env[:plugin_name]))
|
|
48
|
+
|
|
49
|
+
@app.call(env)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
require "set"
|
|
3
|
+
|
|
4
|
+
module VagrantPlugins
|
|
5
|
+
module CommandPlugin
|
|
6
|
+
module Action
|
|
7
|
+
# This middleware lists all the installed plugins.
|
|
8
|
+
#
|
|
9
|
+
# This is a bit more complicated than simply listing installed
|
|
10
|
+
# gems or what is in the state file as installed. Instead, this
|
|
11
|
+
# actually compares installed gems with what the state file claims
|
|
12
|
+
# is installed, and outputs the appropriate truly installed
|
|
13
|
+
# plugins.
|
|
14
|
+
class ListPlugins
|
|
15
|
+
def initialize(app, env)
|
|
16
|
+
@app = app
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def call(env)
|
|
20
|
+
# Get the list of installed plugins according to the state file
|
|
21
|
+
installed = Set.new(env[:plugin_state_file].installed_plugins)
|
|
22
|
+
|
|
23
|
+
# Go through the plugins installed in this environment and
|
|
24
|
+
# get the latest version of each.
|
|
25
|
+
installed_map = {}
|
|
26
|
+
env[:gem_helper].with_environment do
|
|
27
|
+
Gem::Specification.find_all.each do |spec|
|
|
28
|
+
# Ignore specs that aren't in our installed list
|
|
29
|
+
next if !installed.include?(spec.name)
|
|
30
|
+
|
|
31
|
+
# If we already have a newer version in our list of installed,
|
|
32
|
+
# then ignore it
|
|
33
|
+
next if installed_map.has_key?(spec.name) &&
|
|
34
|
+
installed_map[spec.name].version >= spec.version
|
|
35
|
+
|
|
36
|
+
installed_map[spec.name] = spec
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Output!
|
|
41
|
+
if installed_map.empty?
|
|
42
|
+
env[:ui].info(I18n.t("vagrant.commands.plugin.no_plugins"))
|
|
43
|
+
else
|
|
44
|
+
installed_map.values.each do |spec|
|
|
45
|
+
env[:ui].info "#{spec.name} (#{spec.version})"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
@app.call(env)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
require "rubygems/user_interaction"
|
|
3
|
+
require "rubygems/uninstaller"
|
|
4
|
+
require "set"
|
|
5
|
+
|
|
6
|
+
require "log4r"
|
|
7
|
+
|
|
8
|
+
module VagrantPlugins
|
|
9
|
+
module CommandPlugin
|
|
10
|
+
module Action
|
|
11
|
+
# This class prunes any unnecessary gems from the Vagrant-managed
|
|
12
|
+
# gem folder. This keeps the gem folder to the absolute minimum set
|
|
13
|
+
# of required gems and doesn't let it blow up out of control.
|
|
14
|
+
#
|
|
15
|
+
# A high-level description of how this works:
|
|
16
|
+
#
|
|
17
|
+
# 1. Get the list of installed plugins. Vagrant maintains this
|
|
18
|
+
# list on its own.
|
|
19
|
+
# 2. Get the list of installed RubyGems.
|
|
20
|
+
# 3. Find the latest version of each RubyGem that matches an installed
|
|
21
|
+
# plugin. These are our root RubyGems that must be installed.
|
|
22
|
+
# 4. Go through each root and mark all dependencies recursively as
|
|
23
|
+
# necessary.
|
|
24
|
+
# 5. Set subtraction between all gems and necessary gems yields a
|
|
25
|
+
# list of gems that aren't needed. Uninstall them.
|
|
26
|
+
#
|
|
27
|
+
class PruneGems
|
|
28
|
+
def initialize(app, env)
|
|
29
|
+
@app = app
|
|
30
|
+
@logger = Log4r::Logger.new("vagrant::plugins::plugincommand::prune")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def call(env)
|
|
34
|
+
@logger.info("Pruning gems...")
|
|
35
|
+
|
|
36
|
+
# Get the list of installed plugins according to the state file
|
|
37
|
+
installed = Set.new(env[:plugin_state_file].installed_plugins)
|
|
38
|
+
|
|
39
|
+
# Get the actual specifications of installed gems
|
|
40
|
+
all_specs = env[:gem_helper].with_environment do
|
|
41
|
+
result = []
|
|
42
|
+
Gem::Specification.find_all { |s| result << s }
|
|
43
|
+
result
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# The list of specs to prune initially starts out as all of them
|
|
47
|
+
all_specs = Set.new(all_specs)
|
|
48
|
+
|
|
49
|
+
# Go through each spec and find the latest version of the installed
|
|
50
|
+
# gems, since we want to keep those.
|
|
51
|
+
installed_specs = {}
|
|
52
|
+
|
|
53
|
+
@logger.debug("Collecting installed plugin gems...")
|
|
54
|
+
all_specs.each do |spec|
|
|
55
|
+
# If this isn't a spec that we claim is installed, skip it
|
|
56
|
+
next if !installed.include?(spec.name)
|
|
57
|
+
|
|
58
|
+
# If it is already in the specs, then we need to make sure we
|
|
59
|
+
# have the latest version.
|
|
60
|
+
if installed_specs.has_key?(spec.name)
|
|
61
|
+
if installed_specs[spec.name].version > spec.version
|
|
62
|
+
next
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
@logger.debug(" -- #{spec.name} (#{spec.version})")
|
|
67
|
+
installed_specs[spec.name] = spec
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Recursive dependency checker to keep all dependencies and remove
|
|
71
|
+
# all non-crucial gems from the prune list.
|
|
72
|
+
good_specs = Set.new
|
|
73
|
+
to_check = installed_specs.values
|
|
74
|
+
|
|
75
|
+
while true
|
|
76
|
+
# If we're out of gems to check then we break out
|
|
77
|
+
break if to_check.empty?
|
|
78
|
+
|
|
79
|
+
# Get a random (first) element to check
|
|
80
|
+
spec = to_check.shift
|
|
81
|
+
|
|
82
|
+
# If we already checked this, then do the next one
|
|
83
|
+
next if good_specs.include?(spec)
|
|
84
|
+
|
|
85
|
+
# Find all the dependencies and add the latest compliant gem
|
|
86
|
+
# to the `to_check` list.
|
|
87
|
+
if spec.dependencies.length > 0
|
|
88
|
+
@logger.debug("Finding dependencies for '#{spec.name}' to mark as good...")
|
|
89
|
+
spec.dependencies.each do |dep|
|
|
90
|
+
# Ignore non-runtime dependencies
|
|
91
|
+
next if dep.type != :runtime
|
|
92
|
+
@logger.debug("Searching for: '#{dep.name}'")
|
|
93
|
+
|
|
94
|
+
latest_matching = nil
|
|
95
|
+
|
|
96
|
+
all_specs.each do |prune_spec|
|
|
97
|
+
if dep =~ prune_spec
|
|
98
|
+
# If we have a matching one already and this one isn't newer
|
|
99
|
+
# then we ditch it.
|
|
100
|
+
next if latest_matching &&
|
|
101
|
+
prune_spec.version <= latest_matching.version
|
|
102
|
+
|
|
103
|
+
latest_matching = prune_spec
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
if latest_matching.nil?
|
|
108
|
+
@logger.error("Missing dependency for '#{spec.name}': #{dep.name}")
|
|
109
|
+
next
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
@logger.debug("Latest matching dep: '#{latest_matching.name}' (#{latest_matching.version})")
|
|
113
|
+
to_check << latest_matching
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Add ito the list of checked things so we don't accidentally
|
|
118
|
+
# re-check it
|
|
119
|
+
good_specs.add(spec)
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Figure out the gems we need to prune
|
|
123
|
+
prune_specs = all_specs - good_specs
|
|
124
|
+
@logger.debug("Gems to prune: #{prune_specs.inspect}")
|
|
125
|
+
@logger.info("Pruning #{prune_specs.length} gems.")
|
|
126
|
+
|
|
127
|
+
if prune_specs.length > 0
|
|
128
|
+
env[:gem_helper].with_environment do
|
|
129
|
+
prune_specs.each do |prune_spec|
|
|
130
|
+
uninstaller = Gem::Uninstaller.new(prune_spec.name, {
|
|
131
|
+
:all => true,
|
|
132
|
+
:executables => true,
|
|
133
|
+
:force => true,
|
|
134
|
+
:ignore => true,
|
|
135
|
+
:version => prune_spec.version.version
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
@logger.info("Uninstalling: #{prune_spec.name} (#{prune_spec.version})")
|
|
139
|
+
uninstaller.uninstall
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
@app.call(env)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module CommandPlugin
|
|
3
|
+
module Action
|
|
4
|
+
# This middleware uninstalls a plugin by simply removing it from
|
|
5
|
+
# the state file. Running a {PruneGems} after should properly remove
|
|
6
|
+
# it from the gem index.
|
|
7
|
+
class UninstallPlugin
|
|
8
|
+
def initialize(app, env)
|
|
9
|
+
@app = app
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def call(env)
|
|
13
|
+
# Remove it!
|
|
14
|
+
env[:ui].info(I18n.t("vagrant.commands.plugin.uninstalling",
|
|
15
|
+
:name => env[:plugin_name]))
|
|
16
|
+
env[:plugin_state_file].remove_plugin(env[:plugin_name])
|
|
17
|
+
|
|
18
|
+
@app.call(env)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require "pathname"
|
|
2
|
+
|
|
3
|
+
require "vagrant/action/builder"
|
|
4
|
+
|
|
5
|
+
module VagrantPlugins
|
|
6
|
+
module CommandPlugin
|
|
7
|
+
module Action
|
|
8
|
+
# This middleware sequence will install a plugin.
|
|
9
|
+
def self.action_install
|
|
10
|
+
Vagrant::Action::Builder.new.tap do |b|
|
|
11
|
+
b.use BundlerCheck
|
|
12
|
+
b.use InstallGem
|
|
13
|
+
b.use PruneGems
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# This middleware sequence licenses paid addons.
|
|
18
|
+
def self.action_license
|
|
19
|
+
Vagrant::Action::Builder.new.tap do |b|
|
|
20
|
+
b.use BundlerCheck
|
|
21
|
+
b.use LicensePlugin
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# This middleware sequence will list all installed plugins.
|
|
26
|
+
def self.action_list
|
|
27
|
+
Vagrant::Action::Builder.new.tap do |b|
|
|
28
|
+
b.use BundlerCheck
|
|
29
|
+
b.use ListPlugins
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# This middleware sequence will uninstall a plugin.
|
|
34
|
+
def self.action_uninstall
|
|
35
|
+
Vagrant::Action::Builder.new.tap do |b|
|
|
36
|
+
b.use BundlerCheck
|
|
37
|
+
b.use UninstallPlugin
|
|
38
|
+
b.use PruneGems
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# The autoload farm
|
|
43
|
+
action_root = Pathname.new(File.expand_path("../action", __FILE__))
|
|
44
|
+
autoload :BundlerCheck, action_root.join("bundler_check")
|
|
45
|
+
autoload :InstallGem, action_root.join("install_gem")
|
|
46
|
+
autoload :LicensePlugin, action_root.join("license_plugin")
|
|
47
|
+
autoload :ListPlugins, action_root.join("list_plugins")
|
|
48
|
+
autoload :PruneGems, action_root.join("prune_gems")
|
|
49
|
+
autoload :UninstallPlugin, action_root.join("uninstall_plugin")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module VagrantPlugins
|
|
2
|
+
module CommandPlugin
|
|
3
|
+
module Command
|
|
4
|
+
class Base < Vagrant.plugin("2", :command)
|
|
5
|
+
# This is a helper for executing an action sequence with the proper
|
|
6
|
+
# environment hash setup so that the plugin specific helpers are
|
|
7
|
+
# in.
|
|
8
|
+
#
|
|
9
|
+
# @param [Object] callable the Middleware callable
|
|
10
|
+
# @param [Hash] env Extra environment hash that is merged in.
|
|
11
|
+
def action(callable, env=nil)
|
|
12
|
+
env = {
|
|
13
|
+
:gem_helper => GemHelper.new(@env.gems_path),
|
|
14
|
+
:plugin_state_file => StateFile.new(@env.home_path.join("plugins.json"))
|
|
15
|
+
}.merge(env || {})
|
|
16
|
+
|
|
17
|
+
@env.action_runner.run(callable, env)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module VagrantPlugins
|
|
6
|
+
module CommandPlugin
|
|
7
|
+
module Command
|
|
8
|
+
class Install < Base
|
|
9
|
+
def execute
|
|
10
|
+
options = {}
|
|
11
|
+
|
|
12
|
+
opts = OptionParser.new do |o|
|
|
13
|
+
o.banner = "Usage: vagrant plugin install <name> [-h]"
|
|
14
|
+
o.separator ""
|
|
15
|
+
|
|
16
|
+
o.on("--entry-point NAME", String,
|
|
17
|
+
"The name of the entry point file for loading the plugin.") do |entry_point|
|
|
18
|
+
options[:entry_point] = entry_point
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
o.on("--plugin-prerelease",
|
|
22
|
+
"Allow prerelease versions of this plugin.") do |plugin_prerelease|
|
|
23
|
+
options[:plugin_prerelease] = plugin_prerelease
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
o.on("--plugin-source PLUGIN_SOURCE", String,
|
|
27
|
+
"Add a RubyGems repository source") do |plugin_source|
|
|
28
|
+
options[:plugin_sources] ||= []
|
|
29
|
+
options[:plugin_sources] << plugin_source
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
o.on("--plugin-version PLUGIN_VERSION", String,
|
|
33
|
+
"Install a specific version of the plugin") do |plugin_version|
|
|
34
|
+
options[:plugin_version] = plugin_version
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Parse the options
|
|
39
|
+
argv = parse_options(opts)
|
|
40
|
+
return if !argv
|
|
41
|
+
raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 1
|
|
42
|
+
|
|
43
|
+
# Install the gem
|
|
44
|
+
action(Action.action_install, {
|
|
45
|
+
:plugin_entry_point => options[:entry_point],
|
|
46
|
+
:plugin_prerelease => options[:plugin_prerelease],
|
|
47
|
+
:plugin_version => options[:plugin_version],
|
|
48
|
+
:plugin_sources => options[:plugin_sources],
|
|
49
|
+
:plugin_name => argv[0]
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
# Success, exit status 0
|
|
53
|
+
0
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
|
|
3
|
+
require_relative "base"
|
|
4
|
+
|
|
5
|
+
module VagrantPlugins
|
|
6
|
+
module CommandPlugin
|
|
7
|
+
module Command
|
|
8
|
+
class License < Base
|
|
9
|
+
def execute
|
|
10
|
+
opts = OptionParser.new do |o|
|
|
11
|
+
o.banner = "Usage: vagrant plugin license <name> <license-file> [-h]"
|
|
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
|
+
# License the plugin
|
|
20
|
+
action(Action.action_license, {
|
|
21
|
+
:plugin_license_path => argv[1],
|
|
22
|
+
:plugin_name => argv[0]
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
# Success, exit status 0
|
|
26
|
+
0
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|