vagrant 0.5.4 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +56 -0
- data/Gemfile +14 -3
- data/Gemfile.lock +38 -11
- data/README.md +1 -1
- data/bin/vagrant +20 -5
- data/config/default.rb +6 -8
- data/lib/vagrant.rb +40 -13
- data/lib/vagrant/action.rb +56 -16
- data/lib/vagrant/action/box/destroy.rb +3 -1
- data/lib/vagrant/action/box/download.rb +8 -13
- data/lib/vagrant/action/box/unpackage.rb +8 -11
- data/lib/vagrant/action/box/verify.rb +3 -3
- data/lib/vagrant/action/builder.rb +3 -30
- data/lib/vagrant/action/builtin.rb +6 -1
- data/lib/vagrant/action/environment.rb +14 -62
- data/lib/vagrant/action/general/package.rb +29 -22
- data/lib/vagrant/action/vm/boot.rb +5 -12
- data/lib/vagrant/action/vm/check_box.rb +4 -4
- data/lib/vagrant/action/vm/check_guest_additions.rb +4 -6
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +2 -2
- data/lib/vagrant/action/vm/clear_nfs_exports.rb +1 -1
- data/lib/vagrant/action/vm/clear_shared_folders.rb +1 -1
- data/lib/vagrant/action/vm/customize.rb +1 -1
- data/lib/vagrant/action/vm/destroy.rb +1 -2
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +1 -1
- data/lib/vagrant/action/vm/disable_networks.rb +11 -9
- data/lib/vagrant/action/vm/discard_state.rb +2 -2
- data/lib/vagrant/action/vm/export.rb +10 -11
- data/lib/vagrant/action/vm/forward_ports.rb +21 -9
- data/lib/vagrant/action/vm/halt.rb +3 -8
- data/lib/vagrant/action/vm/import.rb +16 -14
- data/lib/vagrant/action/vm/match_mac_address.rb +1 -1
- data/lib/vagrant/action/vm/network.rb +9 -16
- data/lib/vagrant/action/vm/nfs.rb +14 -18
- data/lib/vagrant/action/vm/provision.rb +5 -5
- data/lib/vagrant/action/vm/resume.rb +1 -1
- data/lib/vagrant/action/vm/share_folders.rb +6 -44
- data/lib/vagrant/action/vm/suspend.rb +1 -1
- data/lib/vagrant/action/warden.rb +74 -0
- data/lib/vagrant/box.rb +18 -82
- data/lib/vagrant/box_collection.rb +47 -0
- data/lib/vagrant/cli.rb +55 -0
- data/lib/vagrant/command/base.rb +106 -0
- data/lib/vagrant/command/box.rb +33 -0
- data/lib/vagrant/command/destroy.rb +17 -0
- data/lib/vagrant/command/group_base.rb +99 -0
- data/lib/vagrant/command/halt.rb +18 -0
- data/lib/vagrant/command/helpers.rb +33 -0
- data/lib/vagrant/command/init.rb +14 -0
- data/lib/vagrant/command/named_base.rb +14 -0
- data/lib/vagrant/command/package.rb +41 -0
- data/lib/vagrant/command/provision.rb +17 -0
- data/lib/vagrant/command/reload.rb +17 -0
- data/lib/vagrant/command/resume.rb +17 -0
- data/lib/vagrant/command/ssh.rb +41 -0
- data/lib/vagrant/command/ssh_config.rb +21 -0
- data/lib/vagrant/command/status.rb +23 -0
- data/lib/vagrant/command/suspend.rb +17 -0
- data/lib/vagrant/command/up.rb +20 -0
- data/lib/vagrant/command/upgrade_to_060.rb +45 -0
- data/lib/vagrant/command/version.rb +13 -0
- data/lib/vagrant/config.rb +107 -189
- data/lib/vagrant/config/base.rb +67 -0
- data/lib/vagrant/config/error_recorder.rb +19 -0
- data/lib/vagrant/config/nfs.rb +10 -0
- data/lib/vagrant/config/package.rb +9 -0
- data/lib/vagrant/config/ssh.rb +28 -0
- data/lib/vagrant/config/vagrant.rb +21 -0
- data/lib/vagrant/config/vm.rb +111 -0
- data/lib/vagrant/data_store.rb +68 -0
- data/lib/vagrant/downloaders/file.rb +3 -3
- data/lib/vagrant/downloaders/http.rb +5 -5
- data/lib/vagrant/environment.rb +246 -243
- data/lib/vagrant/errors.rb +306 -0
- data/lib/vagrant/hosts/base.rb +1 -1
- data/lib/vagrant/hosts/bsd.rb +3 -9
- data/lib/vagrant/hosts/linux.rb +3 -9
- data/lib/vagrant/plugin.rb +50 -0
- data/lib/vagrant/provisioners/base.rb +0 -6
- data/lib/vagrant/provisioners/chef.rb +63 -58
- data/lib/vagrant/provisioners/chef_server.rb +9 -11
- data/lib/vagrant/provisioners/chef_solo.rb +2 -2
- data/lib/vagrant/ssh.rb +34 -37
- data/lib/vagrant/systems/base.rb +0 -13
- data/lib/vagrant/systems/linux.rb +10 -33
- data/lib/vagrant/systems/solaris.rb +59 -0
- data/lib/vagrant/test_helpers.rb +109 -0
- data/lib/vagrant/ui.rb +65 -0
- data/lib/vagrant/util.rb +9 -19
- data/lib/vagrant/util/glob_loader.rb +19 -17
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/plain_logger.rb +2 -0
- data/lib/vagrant/util/platform.rb +2 -0
- data/lib/vagrant/util/resource_logger.rb +5 -70
- data/lib/vagrant/util/retryable.rb +25 -0
- data/lib/vagrant/util/template_renderer.rb +1 -1
- data/lib/vagrant/version.rb +1 -1
- data/lib/vagrant/vm.rb +27 -13
- data/templates/commands/init/Vagrantfile.erb +13 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/locales/en.yml +402 -0
- data/templates/package_Vagrantfile.erb +1 -1
- data/test/locales/en.yml +8 -0
- data/test/test_helper.rb +19 -103
- data/test/vagrant/action/box/destroy_test.rb +7 -19
- data/test/vagrant/action/box/download_test.rb +9 -25
- data/test/vagrant/action/box/package_test.rb +2 -2
- data/test/vagrant/action/box/unpackage_test.rb +8 -34
- data/test/vagrant/action/box/verify_test.rb +10 -19
- data/test/vagrant/action/builder_test.rb +0 -15
- data/test/vagrant/action/env/set_test.rb +1 -1
- data/test/vagrant/action/environment_test.rb +8 -26
- data/test/vagrant/action/general/package_test.rb +53 -53
- data/test/vagrant/action/vm/boot_test.rb +5 -22
- data/test/vagrant/action/vm/check_box_test.rb +35 -25
- data/test/vagrant/action/vm/clean_machine_folder_test.rb +1 -1
- data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +1 -1
- data/test/vagrant/action/vm/clear_nfs_exports_test.rb +1 -1
- data/test/vagrant/action/vm/clear_shared_folders_test.rb +1 -1
- data/test/vagrant/action/vm/customize_test.rb +2 -1
- data/test/vagrant/action/vm/destroy_test.rb +1 -2
- data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +1 -1
- data/test/vagrant/action/vm/disable_networks_test.rb +10 -1
- data/test/vagrant/action/vm/discard_state_test.rb +10 -1
- data/test/vagrant/action/vm/export_test.rb +9 -37
- data/test/vagrant/action/vm/forward_ports_helpers_test.rb +2 -2
- data/test/vagrant/action/vm/forward_ports_test.rb +19 -16
- data/test/vagrant/action/vm/halt_test.rb +11 -1
- data/test/vagrant/action/vm/import_test.rb +37 -21
- data/test/vagrant/action/vm/match_mac_address_test.rb +1 -1
- data/test/vagrant/action/vm/network_test.rb +8 -7
- data/test/vagrant/action/vm/nfs_helpers_test.rb +6 -3
- data/test/vagrant/action/vm/nfs_test.rb +20 -45
- data/test/vagrant/action/vm/package_test.rb +1 -1
- data/test/vagrant/action/vm/package_vagrantfile_test.rb +1 -1
- data/test/vagrant/action/vm/provision_test.rb +10 -17
- data/test/vagrant/action/vm/resume_test.rb +1 -1
- data/test/vagrant/action/vm/share_folders_test.rb +25 -106
- data/test/vagrant/action/vm/suspend_test.rb +1 -1
- data/test/vagrant/action/warden_test.rb +105 -0
- data/test/vagrant/action_test.rb +5 -27
- data/test/vagrant/box_collection_test.rb +44 -0
- data/test/vagrant/box_test.rb +5 -105
- data/test/vagrant/cli_test.rb +35 -0
- data/test/vagrant/command/base_test.rb +23 -0
- data/test/vagrant/command/group_base_test.rb +15 -0
- data/test/vagrant/command/helpers_test.rb +88 -0
- data/test/vagrant/config/base_test.rb +52 -0
- data/test/vagrant/config/error_recorder_test.rb +18 -0
- data/test/vagrant/config/ssh_test.rb +12 -0
- data/test/vagrant/config/vagrant_test.rb +11 -0
- data/test/vagrant/config/vm_test.rb +70 -0
- data/test/vagrant/config_test.rb +113 -206
- data/test/vagrant/data_store_test.rb +68 -0
- data/test/vagrant/downloaders/base_test.rb +1 -1
- data/test/vagrant/downloaders/file_test.rb +4 -3
- data/test/vagrant/downloaders/http_test.rb +14 -4
- data/test/vagrant/environment_test.rb +290 -590
- data/test/vagrant/errors_test.rb +42 -0
- data/test/vagrant/hosts/base_test.rb +1 -1
- data/test/vagrant/hosts/bsd_test.rb +3 -6
- data/test/vagrant/hosts/linux_test.rb +3 -5
- data/test/vagrant/plugin_test.rb +9 -0
- data/test/vagrant/provisioners/base_test.rb +1 -1
- data/test/vagrant/provisioners/chef_server_test.rb +31 -35
- data/test/vagrant/provisioners/chef_solo_test.rb +1 -1
- data/test/vagrant/provisioners/chef_test.rb +7 -7
- data/test/vagrant/ssh_session_test.rb +3 -10
- data/test/vagrant/ssh_test.rb +25 -33
- data/test/vagrant/systems/linux_test.rb +6 -71
- data/test/vagrant/ui_test.rb +29 -0
- data/test/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
- data/test/vagrant/util/resource_logger_test.rb +14 -81
- data/test/vagrant/util/retryable_test.rb +38 -0
- data/test/vagrant/util/template_renderer_test.rb +4 -4
- data/test/vagrant/vm_test.rb +47 -26
- data/vagrant.gemspec +14 -12
- metadata +142 -108
- data/bin/.gitignore +0 -0
- data/lib/vagrant/action/action_exception.rb +0 -16
- data/lib/vagrant/action/env/error_halt.rb +0 -16
- data/lib/vagrant/action/exception_catcher.rb +0 -14
- data/lib/vagrant/action/vm/persist.rb +0 -22
- data/lib/vagrant/active_list.rb +0 -83
- data/lib/vagrant/command.rb +0 -27
- data/lib/vagrant/commands/base.rb +0 -181
- data/lib/vagrant/commands/box.rb +0 -16
- data/lib/vagrant/commands/box/add.rb +0 -30
- data/lib/vagrant/commands/box/list.rb +0 -30
- data/lib/vagrant/commands/box/remove.rb +0 -30
- data/lib/vagrant/commands/box/repackage.rb +0 -35
- data/lib/vagrant/commands/destroy.rb +0 -37
- data/lib/vagrant/commands/halt.rb +0 -43
- data/lib/vagrant/commands/init.rb +0 -36
- data/lib/vagrant/commands/package.rb +0 -81
- data/lib/vagrant/commands/provision.rb +0 -31
- data/lib/vagrant/commands/reload.rb +0 -36
- data/lib/vagrant/commands/resume.rb +0 -35
- data/lib/vagrant/commands/ssh.rb +0 -78
- data/lib/vagrant/commands/ssh_config.rb +0 -45
- data/lib/vagrant/commands/status.rb +0 -125
- data/lib/vagrant/commands/suspend.rb +0 -36
- data/lib/vagrant/commands/up.rb +0 -44
- data/lib/vagrant/exceptions/uncallable_action.rb +0 -17
- data/lib/vagrant/util/translator.rb +0 -35
- data/templates/strings.yml +0 -341
- data/templates/unison/crontab_entry.erb +0 -1
- data/templates/unison/script.erb +0 -71
- data/test/vagrant/action/env/error_halt_test.rb +0 -21
- data/test/vagrant/action/exception_catcher_test.rb +0 -30
- data/test/vagrant/action/vm/persist_test.rb +0 -50
- data/test/vagrant/active_list_test.rb +0 -173
- data/test/vagrant/command_test.rb +0 -53
- data/test/vagrant/commands/base_test.rb +0 -139
- data/test/vagrant/commands/box/add_test.rb +0 -34
- data/test/vagrant/commands/box/list_test.rb +0 -32
- data/test/vagrant/commands/box/remove_test.rb +0 -41
- data/test/vagrant/commands/box/repackage_test.rb +0 -52
- data/test/vagrant/commands/destroy_test.rb +0 -44
- data/test/vagrant/commands/halt_test.rb +0 -50
- data/test/vagrant/commands/init_test.rb +0 -71
- data/test/vagrant/commands/package_test.rb +0 -97
- data/test/vagrant/commands/provision_test.rb +0 -60
- data/test/vagrant/commands/reload_test.rb +0 -47
- data/test/vagrant/commands/resume_test.rb +0 -44
- data/test/vagrant/commands/ssh_config_test.rb +0 -77
- data/test/vagrant/commands/ssh_test.rb +0 -129
- data/test/vagrant/commands/status_test.rb +0 -40
- data/test/vagrant/commands/suspend_test.rb +0 -44
- data/test/vagrant/commands/up_test.rb +0 -49
- data/test/vagrant/util/translator_test.rb +0 -61
- data/test/vagrant/util_test.rb +0 -27
data/bin/.gitignore
DELETED
|
File without changes
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
module Vagrant
|
|
2
|
-
class Action
|
|
3
|
-
class ActionException < Exception
|
|
4
|
-
attr_reader :key
|
|
5
|
-
attr_reader :data
|
|
6
|
-
|
|
7
|
-
def initialize(key, data = {})
|
|
8
|
-
@key = key
|
|
9
|
-
@data = data
|
|
10
|
-
|
|
11
|
-
message = Vagrant::Util::Translator.t(key, data)
|
|
12
|
-
super(message)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
module Vagrant
|
|
2
|
-
class Action
|
|
3
|
-
module Env
|
|
4
|
-
# A middleware which simply halts if the environment is erroneous.
|
|
5
|
-
class ErrorHalt
|
|
6
|
-
def initialize(app,env)
|
|
7
|
-
@app = app
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def call(env)
|
|
11
|
-
@app.call(env) if !env.error?
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
module Vagrant
|
|
2
|
-
class Action
|
|
3
|
-
# A helper to catch any ActionExceptions raised and to
|
|
4
|
-
# apply the error to the environment.
|
|
5
|
-
module ExceptionCatcher
|
|
6
|
-
def catch_action_exception(env)
|
|
7
|
-
yield env
|
|
8
|
-
rescue ActionException => e
|
|
9
|
-
env.error!(e.key, e.data)
|
|
10
|
-
false
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Vagrant
|
|
2
|
-
class Action
|
|
3
|
-
module VM
|
|
4
|
-
class Persist
|
|
5
|
-
def initialize(app, env)
|
|
6
|
-
@app = app
|
|
7
|
-
|
|
8
|
-
# Error the environment if the dotfile is not valid
|
|
9
|
-
env.error!(:dotfile_error, :env => env.env) if File.exist?(env.env.dotfile_path) &&
|
|
10
|
-
!File.file?(env.env.dotfile_path)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def call(env)
|
|
14
|
-
env.logger.info "Persisting the VM UUID (#{env["vm"].uuid})"
|
|
15
|
-
env.env.update_dotfile
|
|
16
|
-
|
|
17
|
-
@app.call(env)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
data/lib/vagrant/active_list.rb
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
module Vagrant
|
|
2
|
-
# This class represents the active list of vagrant virtual
|
|
3
|
-
# machines.
|
|
4
|
-
class ActiveList
|
|
5
|
-
FILENAME = "active.json"
|
|
6
|
-
|
|
7
|
-
@@list = nil
|
|
8
|
-
|
|
9
|
-
# The environment this active list belongs to
|
|
10
|
-
attr_accessor :env
|
|
11
|
-
|
|
12
|
-
# Creates the instance of the ActiveList, with the given environment
|
|
13
|
-
# if specified
|
|
14
|
-
def initialize(env=nil)
|
|
15
|
-
@env = env
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Parses and returns the list of UUIDs from the active VM
|
|
19
|
-
# JSON file. This will cache the result, which can be reloaded
|
|
20
|
-
# by setting the `reload` parameter to true.
|
|
21
|
-
#
|
|
22
|
-
# @return [Array<String>]
|
|
23
|
-
def list(reload=false)
|
|
24
|
-
return @list unless @list.nil? || reload
|
|
25
|
-
|
|
26
|
-
@list ||= {}
|
|
27
|
-
return @list unless File.file?(path)
|
|
28
|
-
File.open(path, "r") do |f|
|
|
29
|
-
begin
|
|
30
|
-
@list = JSON.parse(f.read)
|
|
31
|
-
rescue Exception
|
|
32
|
-
@list = {}
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
# This forces earlier versions of Vagrant to use the new hash
|
|
36
|
-
# format. Clearing out the old data isn't a big deal since it
|
|
37
|
-
# was never used.
|
|
38
|
-
@list = {} unless @list.is_a?(Hash)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
@list
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Returns an array of UUIDs filtered so each is verified to exist.
|
|
45
|
-
def filter_list
|
|
46
|
-
list.each do |uuid, data|
|
|
47
|
-
list.delete(uuid) unless Vagrant::VM.find(uuid, env)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
list
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Adds a virtual environment to the list of active virtual machines
|
|
54
|
-
def add(vm)
|
|
55
|
-
list[vm.uuid] = {
|
|
56
|
-
:path => env.root_path,
|
|
57
|
-
:created_at => Time.now.to_i
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
save
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Remove a virtual environment from the list of active virtual machines
|
|
64
|
-
def remove(vm)
|
|
65
|
-
vm = vm.uuid if vm.is_a?(Vagrant::VM)
|
|
66
|
-
list.delete(vm)
|
|
67
|
-
save
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# Persists the list down to the JSON file.
|
|
71
|
-
def save
|
|
72
|
-
File.open(path, "w+") do |f|
|
|
73
|
-
f.write(filter_list.to_json)
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Returns the path to the JSON file which holds the UUIDs of the
|
|
78
|
-
# active virtual machines managed by Vagrant.
|
|
79
|
-
def path
|
|
80
|
-
File.join(env.home_path, FILENAME)
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
data/lib/vagrant/command.rb
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
module Vagrant
|
|
2
|
-
# This class handles commands from the command line program `vagrant`
|
|
3
|
-
# and redirects them to the proper sub-command, setting up the environment
|
|
4
|
-
# and executing.
|
|
5
|
-
class Command
|
|
6
|
-
attr_reader :env
|
|
7
|
-
|
|
8
|
-
class << self
|
|
9
|
-
# Executes a given subcommand within the current environment (from the
|
|
10
|
-
# current working directory).
|
|
11
|
-
def execute(*args)
|
|
12
|
-
env = Environment.load!
|
|
13
|
-
env.commands.subcommand(*args)
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def initialize(env)
|
|
18
|
-
@env = env
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# Execute a subcommand with the given name and args. This method properly
|
|
22
|
-
# finds the subcommand, instantiates it, and executes.
|
|
23
|
-
def subcommand(*args)
|
|
24
|
-
Commands::Base.dispatch(env, *args)
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
require 'optparse'
|
|
2
|
-
|
|
3
|
-
module Vagrant
|
|
4
|
-
class Commands
|
|
5
|
-
# This is the base command class which all sub-commands must
|
|
6
|
-
# inherit from. Subclasses of bases are expected to implement two
|
|
7
|
-
# methods: {#execute} and {#options_spec} (optional). The former
|
|
8
|
-
# defines the actual behavior of the command while the latter is a spec
|
|
9
|
-
# outlining the options that the command may take.
|
|
10
|
-
class Base
|
|
11
|
-
include Util
|
|
12
|
-
|
|
13
|
-
attr_reader :env
|
|
14
|
-
|
|
15
|
-
class << self
|
|
16
|
-
# Contains the list of registered subcommands. The registered commands are
|
|
17
|
-
# stored in a hash table and are therefore unordered.
|
|
18
|
-
#
|
|
19
|
-
# @return [Hash]
|
|
20
|
-
def subcommands
|
|
21
|
-
@subcommands ||= {}
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Registers a command with `vagrant`. This method allows 3rd parties to
|
|
25
|
-
# dynamically add new commands to the `vagrant` command, allowing plugins
|
|
26
|
-
# to act as 1st class citizens within vagrant.
|
|
27
|
-
#
|
|
28
|
-
# @param [String] key The subcommand which will invoke the registered command.
|
|
29
|
-
# @param [Class] klass. The subcommand class (a subclass of {Base})
|
|
30
|
-
def subcommand(key, klass)
|
|
31
|
-
subcommands[key] = klass
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Dispatches a subcommand to the proper registered command. Otherwise, it
|
|
35
|
-
# prints a help message.
|
|
36
|
-
def dispatch(env, *args)
|
|
37
|
-
klass = subcommands[args[0]] unless args.empty?
|
|
38
|
-
if klass.nil?
|
|
39
|
-
# Run _this_ command!
|
|
40
|
-
command = self.new(env)
|
|
41
|
-
command.execute(args)
|
|
42
|
-
return
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Shift off the front arg, since we just consumed it in finding the
|
|
46
|
-
# subcommand.
|
|
47
|
-
args.shift
|
|
48
|
-
|
|
49
|
-
# Dispatch to the next class
|
|
50
|
-
klass.dispatch(env, *args)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Sets or reads the description, depending on if the value is set in the
|
|
54
|
-
# parameter.
|
|
55
|
-
def description(value=nil)
|
|
56
|
-
@description ||= ''
|
|
57
|
-
|
|
58
|
-
return @description if value.nil?
|
|
59
|
-
@description = value
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def initialize(env)
|
|
64
|
-
@env = env
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# This method should be overriden by subclasses. This is the method
|
|
68
|
-
# which is called by {Vagrant::Command} when a command is being
|
|
69
|
-
# executed. The `args` parameter is an array of parameters to the
|
|
70
|
-
# command (similar to ARGV)
|
|
71
|
-
def execute(args)
|
|
72
|
-
parse_options(args)
|
|
73
|
-
|
|
74
|
-
if options[:version]
|
|
75
|
-
puts_version
|
|
76
|
-
else
|
|
77
|
-
# Just print out the help, since this top-level command does nothing
|
|
78
|
-
# on its own
|
|
79
|
-
show_help
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# This method is called by the base class to get the `optparse` configuration
|
|
84
|
-
# for the command.
|
|
85
|
-
def options_spec(opts)
|
|
86
|
-
opts.banner = "Usage: vagrant SUBCOMMAND"
|
|
87
|
-
|
|
88
|
-
opts.on("--version", "Output running Vagrant version.") do |v|
|
|
89
|
-
options[:version] = v
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
#-------------------------------------------------------------------
|
|
94
|
-
# Methods below are not meant to be overriden/implemented by subclasses
|
|
95
|
-
#-------------------------------------------------------------------
|
|
96
|
-
|
|
97
|
-
# Parses the options for a given command and if a name was
|
|
98
|
-
# given, it calls the single method, otherwise it calls the all
|
|
99
|
-
# method. This helper is an abstraction which allows commands to
|
|
100
|
-
# easily be used in both regular and multi-VM environments.
|
|
101
|
-
def all_or_single(args, method_prefix)
|
|
102
|
-
args = parse_options(args)
|
|
103
|
-
|
|
104
|
-
single_method = "#{method_prefix}_single".to_sym
|
|
105
|
-
if args[0]
|
|
106
|
-
send(single_method, args[0])
|
|
107
|
-
else
|
|
108
|
-
env.vms.keys.each do |name|
|
|
109
|
-
send(single_method, name)
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
# Shows the version
|
|
115
|
-
def puts_version
|
|
116
|
-
puts VERSION
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
# Returns the `OptionParser` instance to be used with this subcommand,
|
|
120
|
-
# based on the specs defined in {#options_spec}.
|
|
121
|
-
def option_parser(reload=false)
|
|
122
|
-
@option_parser = nil if reload
|
|
123
|
-
@option_parser ||= OptionParser.new do |opts|
|
|
124
|
-
# The --help flag is available on all children commands, and will
|
|
125
|
-
# immediately show help.
|
|
126
|
-
opts.on("--help", "Show help for the current subcommand.") do
|
|
127
|
-
show_help
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
options_spec(opts)
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
# The options for the given command. This will just be an empty hash
|
|
135
|
-
# until {#parse_options} is called.
|
|
136
|
-
def options
|
|
137
|
-
@options ||= {}
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
# Parse options out of the command-line. This method uses `optparse`
|
|
141
|
-
# to parse command line options.
|
|
142
|
-
def parse_options(args)
|
|
143
|
-
option_parser.parse!(args)
|
|
144
|
-
rescue OptionParser::InvalidOption
|
|
145
|
-
show_help
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
# Gets the description of the command. This is similar grabbed from the
|
|
149
|
-
# class level.
|
|
150
|
-
def description
|
|
151
|
-
self.class.description
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
# Prints the help for the given command. Prior to calling this method,
|
|
155
|
-
# {#parse_options} must be called or a nilerror will be raised. This
|
|
156
|
-
# is by design.
|
|
157
|
-
def show_help
|
|
158
|
-
if !description.empty?
|
|
159
|
-
puts "Description: #{description}"
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
puts option_parser.help
|
|
163
|
-
|
|
164
|
-
my_klass = self.class
|
|
165
|
-
if !my_klass.subcommands.empty?
|
|
166
|
-
puts "\nSupported subcommands:"
|
|
167
|
-
my_klass.subcommands.keys.sort.each do |key|
|
|
168
|
-
klass = my_klass.subcommands[key]
|
|
169
|
-
next if klass.description.empty?
|
|
170
|
-
|
|
171
|
-
puts "#{' ' * 8}#{key.ljust(20)}#{klass.description}"
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
puts "\nFor help on a specific subcommand, run `vagrant SUBCOMMAND --help`"
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
exit
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
end
|
|
181
|
-
end
|
data/lib/vagrant/commands/box.rb
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
module Vagrant
|
|
2
|
-
class Commands
|
|
3
|
-
# Manages the `vagrant box` command, allowing the user to add
|
|
4
|
-
# and remove boxes. This single command, given an array, determines
|
|
5
|
-
# which action to take and calls the respective action method
|
|
6
|
-
# (see {box_add} and {box_remove})
|
|
7
|
-
class BoxCommand < Base
|
|
8
|
-
Base.subcommand "box", self
|
|
9
|
-
description "Box commands"
|
|
10
|
-
|
|
11
|
-
def options_spec(opts)
|
|
12
|
-
opts.banner = "Usage: vagrant box SUBCOMMAND"
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
module Vagrant
|
|
2
|
-
class Commands
|
|
3
|
-
# Adds a box to the local filesystem, given a URI.
|
|
4
|
-
module Box
|
|
5
|
-
class Add < BoxCommand
|
|
6
|
-
BoxCommand.subcommand "add", self
|
|
7
|
-
description "Add a box"
|
|
8
|
-
|
|
9
|
-
def execute(args)
|
|
10
|
-
if args.length != 2
|
|
11
|
-
show_help
|
|
12
|
-
return
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
box = Vagrant::Box.find(env, args[0])
|
|
16
|
-
if !box.nil?
|
|
17
|
-
error_and_exit(:box_already_exists)
|
|
18
|
-
return # for tests
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
Vagrant::Box.add(env, args[0], args[1])
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def options_spec(opts)
|
|
25
|
-
opts.banner = "Usage: vagrant box add NAME URI"
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
module Vagrant
|
|
2
|
-
class Commands
|
|
3
|
-
# Lists all added boxes
|
|
4
|
-
module Box
|
|
5
|
-
class List < BoxCommand
|
|
6
|
-
BoxCommand.subcommand "list", self
|
|
7
|
-
description "List all installed boxes"
|
|
8
|
-
|
|
9
|
-
def execute(args=[])
|
|
10
|
-
boxes = Vagrant::Box.all(env).sort
|
|
11
|
-
|
|
12
|
-
wrap_output do
|
|
13
|
-
if !boxes.empty?
|
|
14
|
-
puts "Installed Vagrant Boxes:\n\n"
|
|
15
|
-
boxes.each do |box|
|
|
16
|
-
puts box
|
|
17
|
-
end
|
|
18
|
-
else
|
|
19
|
-
puts "No Vagrant Boxes Added!"
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def options_spec(opts)
|
|
25
|
-
opts.banner = "Usage: vagrant box list"
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|