vagrant 0.2.0 → 0.3.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/Gemfile +4 -4
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/bin/vagrant +5 -13
- data/config/default.rb +1 -0
- data/keys/README.md +8 -1
- data/keys/vagrant.ppk +26 -0
- data/lib/vagrant.rb +3 -3
- data/lib/vagrant/actions/base.rb +15 -4
- data/lib/vagrant/actions/box/add.rb +1 -1
- data/lib/vagrant/actions/box/download.rb +72 -66
- data/lib/vagrant/actions/box/unpackage.rb +1 -4
- data/lib/vagrant/actions/runner.rb +1 -1
- data/lib/vagrant/actions/vm/boot.rb +5 -7
- data/lib/vagrant/actions/vm/customize.rb +2 -2
- data/lib/vagrant/actions/vm/destroy.rb +2 -2
- data/lib/vagrant/actions/vm/down.rb +7 -0
- data/lib/vagrant/actions/vm/export.rb +10 -4
- data/lib/vagrant/actions/vm/forward_ports.rb +5 -15
- data/lib/vagrant/actions/vm/halt.rb +5 -3
- data/lib/vagrant/actions/vm/import.rb +10 -3
- data/lib/vagrant/actions/vm/move_hard_drive.rb +1 -3
- data/lib/vagrant/actions/vm/package.rb +33 -10
- data/lib/vagrant/actions/vm/provision.rb +4 -4
- data/lib/vagrant/actions/vm/reload.rb +1 -1
- data/lib/vagrant/actions/vm/resume.rb +1 -1
- data/lib/vagrant/actions/vm/shared_folders.rb +7 -7
- data/lib/vagrant/actions/vm/start.rb +3 -2
- data/lib/vagrant/actions/vm/suspend.rb +2 -2
- data/lib/vagrant/actions/vm/up.rb +7 -17
- data/lib/vagrant/active_list.rb +52 -45
- data/lib/vagrant/box.rb +18 -11
- data/lib/vagrant/busy.rb +7 -0
- data/lib/vagrant/command.rb +27 -0
- data/lib/vagrant/commands/base.rb +163 -0
- data/lib/vagrant/commands/box.rb +16 -0
- data/lib/vagrant/commands/box/add.rb +24 -0
- data/lib/vagrant/commands/box/list.rb +30 -0
- data/lib/vagrant/commands/box/remove.rb +31 -0
- data/lib/vagrant/commands/destroy.rb +23 -0
- data/lib/vagrant/commands/down.rb +16 -0
- data/lib/vagrant/commands/halt.rb +23 -0
- data/lib/vagrant/commands/init.rb +32 -0
- data/lib/vagrant/commands/package.rb +46 -0
- data/lib/vagrant/commands/reload.rb +22 -0
- data/lib/vagrant/commands/resume.rb +22 -0
- data/lib/vagrant/commands/ssh.rb +22 -0
- data/lib/vagrant/commands/ssh_config.rb +30 -0
- data/lib/vagrant/commands/status.rb +58 -0
- data/lib/vagrant/commands/suspend.rb +23 -0
- data/lib/vagrant/commands/up.rb +26 -0
- data/lib/vagrant/config.rb +21 -11
- data/lib/vagrant/downloaders/file.rb +5 -5
- data/lib/vagrant/downloaders/http.rb +10 -15
- data/lib/vagrant/environment.rb +259 -0
- data/lib/vagrant/provisioners/base.rb +7 -0
- data/lib/vagrant/provisioners/chef.rb +24 -9
- data/lib/vagrant/provisioners/chef_server.rb +23 -48
- data/lib/vagrant/provisioners/chef_solo.rb +48 -22
- data/lib/vagrant/ssh.rb +95 -46
- data/lib/vagrant/util.rb +2 -2
- data/lib/vagrant/util/errors.rb +36 -0
- data/lib/vagrant/util/platform.rb +12 -0
- data/lib/vagrant/util/progress_meter.rb +33 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/vm.rb +1 -0
- data/templates/{Vagrantfile → Vagrantfile.erb} +2 -2
- data/templates/chef_server_client.erb +16 -0
- data/templates/chef_solo_solo.erb +4 -0
- data/templates/errors.yml +157 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/ssh_config.erb +7 -0
- data/test/test_helper.rb +12 -15
- data/test/vagrant/actions/box/add_test.rb +1 -2
- data/test/vagrant/actions/box/destroy_test.rb +0 -1
- data/test/vagrant/actions/box/download_test.rb +40 -15
- data/test/vagrant/actions/box/unpackage_test.rb +2 -3
- data/test/vagrant/actions/collection_test.rb +8 -5
- data/test/vagrant/actions/runner_test.rb +8 -6
- data/test/vagrant/actions/vm/boot_test.rb +12 -11
- data/test/vagrant/actions/vm/customize_test.rb +2 -3
- data/test/vagrant/actions/vm/destroy_test.rb +2 -3
- data/test/vagrant/actions/vm/down_test.rb +16 -3
- data/test/vagrant/actions/vm/export_test.rb +4 -5
- data/test/vagrant/actions/vm/forward_ports_test.rb +6 -5
- data/test/vagrant/actions/vm/halt_test.rb +8 -2
- data/test/vagrant/actions/vm/import_test.rb +5 -5
- data/test/vagrant/actions/vm/move_hard_drive_test.rb +4 -6
- data/test/vagrant/actions/vm/package_test.rb +60 -22
- data/test/vagrant/actions/vm/provision_test.rb +7 -16
- data/test/vagrant/actions/vm/reload_test.rb +3 -2
- data/test/vagrant/actions/vm/resume_test.rb +0 -1
- data/test/vagrant/actions/vm/shared_folders_test.rb +17 -12
- data/test/vagrant/actions/vm/start_test.rb +10 -3
- data/test/vagrant/actions/vm/suspend_test.rb +1 -2
- data/test/vagrant/actions/vm/up_test.rb +19 -11
- data/test/vagrant/active_list_test.rb +148 -129
- data/test/vagrant/box_test.rb +26 -14
- data/test/vagrant/busy_test.rb +15 -6
- data/test/vagrant/command_test.rb +53 -0
- data/test/vagrant/commands/base_test.rb +118 -0
- data/test/vagrant/commands/box/add_test.rb +34 -0
- data/test/vagrant/commands/box/list_test.rb +32 -0
- data/test/vagrant/commands/box/remove_test.rb +41 -0
- data/test/vagrant/commands/destroy_test.rb +32 -0
- data/test/vagrant/commands/down_test.rb +17 -0
- data/test/vagrant/commands/halt_test.rb +28 -0
- data/test/vagrant/commands/init_test.rb +55 -0
- data/test/vagrant/commands/package_test.rb +84 -0
- data/test/vagrant/commands/reload_test.rb +28 -0
- data/test/vagrant/commands/resume_test.rb +33 -0
- data/test/vagrant/commands/ssh_config_test.rb +54 -0
- data/test/vagrant/commands/ssh_test.rb +32 -0
- data/test/vagrant/commands/status_test.rb +20 -0
- data/test/vagrant/commands/suspend_test.rb +33 -0
- data/test/vagrant/commands/up_test.rb +41 -0
- data/test/vagrant/config_test.rb +42 -17
- data/test/vagrant/downloaders/file_test.rb +7 -0
- data/test/vagrant/downloaders/http_test.rb +12 -0
- data/test/vagrant/environment_test.rb +595 -0
- data/test/vagrant/provisioners/base_test.rb +7 -1
- data/test/vagrant/provisioners/chef_server_test.rb +41 -51
- data/test/vagrant/provisioners/chef_solo_test.rb +93 -62
- data/test/vagrant/provisioners/chef_test.rb +61 -15
- data/test/vagrant/ssh_test.rb +166 -38
- data/test/vagrant/util/errors_test.rb +57 -0
- data/test/vagrant/util/progress_meter_test.rb +33 -0
- data/test/vagrant/{stacked_proc_runner_test.rb → util/stacked_proc_runner_test.rb} +3 -3
- data/test/vagrant/util/template_renderer_test.rb +138 -0
- data/test/vagrant/vm_test.rb +3 -2
- data/vagrant.gemspec +88 -33
- metadata +94 -51
- data/bin/vagrant-box +0 -34
- data/bin/vagrant-down +0 -27
- data/bin/vagrant-halt +0 -28
- data/bin/vagrant-init +0 -27
- data/bin/vagrant-package +0 -29
- data/bin/vagrant-reload +0 -29
- data/bin/vagrant-resume +0 -27
- data/bin/vagrant-ssh +0 -27
- data/bin/vagrant-status +0 -29
- data/bin/vagrant-suspend +0 -27
- data/bin/vagrant-up +0 -29
- data/lib/vagrant/commands.rb +0 -234
- data/lib/vagrant/env.rb +0 -189
- data/lib/vagrant/stacked_proc_runner.rb +0 -33
- data/test/vagrant/commands_test.rb +0 -269
- data/test/vagrant/env_test.rb +0 -418
data/lib/vagrant/box.rb
CHANGED
@@ -51,16 +51,21 @@ module Vagrant
|
|
51
51
|
# only be used internally.
|
52
52
|
attr_accessor :temp_path
|
53
53
|
|
54
|
+
# The environment which this box belongs to. Although this could
|
55
|
+
# actually be many environments, this points to the environment
|
56
|
+
# of a specific instance.
|
57
|
+
attr_accessor :env
|
58
|
+
|
54
59
|
class <<self
|
55
60
|
# Returns an array of all created boxes, as strings.
|
56
61
|
#
|
57
62
|
# @return [Array<String>]
|
58
|
-
def all
|
63
|
+
def all(env)
|
59
64
|
results = []
|
60
65
|
|
61
|
-
Dir.open(
|
66
|
+
Dir.open(env.boxes_path) do |dir|
|
62
67
|
dir.each do |d|
|
63
|
-
next if d == "." || d == ".." || !File.directory?(File.join(
|
68
|
+
next if d == "." || d == ".." || !File.directory?(File.join(env.boxes_path, d))
|
64
69
|
results << d.to_s
|
65
70
|
end
|
66
71
|
end
|
@@ -74,9 +79,9 @@ module Vagrant
|
|
74
79
|
#
|
75
80
|
# @param [String] name The name of the box
|
76
81
|
# @return [Box] Instance of {Box} representing the box found
|
77
|
-
def find(name)
|
78
|
-
return nil unless File.directory?(directory(name))
|
79
|
-
new(name)
|
82
|
+
def find(env, name)
|
83
|
+
return nil unless File.directory?(directory(env, name))
|
84
|
+
new(env, name)
|
80
85
|
end
|
81
86
|
|
82
87
|
# Adds a new box with given name from the given URI. This method
|
@@ -85,10 +90,11 @@ module Vagrant
|
|
85
90
|
#
|
86
91
|
# @param [String] name The name of the box
|
87
92
|
# @param [String] uri URI to the box file
|
88
|
-
def add(name, uri)
|
93
|
+
def add(env, name, uri)
|
89
94
|
box = new
|
90
95
|
box.name = name
|
91
96
|
box.uri = uri
|
97
|
+
box.env = env
|
92
98
|
box.add
|
93
99
|
end
|
94
100
|
|
@@ -98,8 +104,8 @@ module Vagrant
|
|
98
104
|
#
|
99
105
|
# @param [String] name Name of the box whose directory you're interested in.
|
100
106
|
# @return [String] Full path to the box directory.
|
101
|
-
def directory(name)
|
102
|
-
File.join(
|
107
|
+
def directory(env, name)
|
108
|
+
File.join(env.boxes_path, name)
|
103
109
|
end
|
104
110
|
end
|
105
111
|
|
@@ -109,8 +115,9 @@ module Vagrant
|
|
109
115
|
#
|
110
116
|
# **Note:** This method does not actually _create_ the box, but merely
|
111
117
|
# returns a new, abstract representation of it. To add a box, see {#add}.
|
112
|
-
def initialize(name=nil)
|
118
|
+
def initialize(env=nil, name=nil)
|
113
119
|
@name = name
|
120
|
+
@env = env
|
114
121
|
end
|
115
122
|
|
116
123
|
# Returns path to the OVF file of the box. The OVF file is an open
|
@@ -139,7 +146,7 @@ module Vagrant
|
|
139
146
|
#
|
140
147
|
# @return [String]
|
141
148
|
def directory
|
142
|
-
self.class.directory(self.name)
|
149
|
+
self.class.directory(env, self.name)
|
143
150
|
end
|
144
151
|
end
|
145
152
|
end
|
data/lib/vagrant/busy.rb
CHANGED
@@ -45,6 +45,13 @@ module Vagrant
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def wait_for_not_busy(sleeptime=5)
|
48
|
+
if @@trap_thread
|
49
|
+
logger.info "Exiting vagrant immediately!"
|
50
|
+
Thread.kill(@@trap_thread)
|
51
|
+
abort
|
52
|
+
return # for tests
|
53
|
+
end
|
54
|
+
|
48
55
|
@@trap_thread ||= Thread.new do
|
49
56
|
# Wait while the app is busy
|
50
57
|
loop do
|
@@ -0,0 +1,27 @@
|
|
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
|
@@ -0,0 +1,163 @@
|
|
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
|
+
# Prints out the list of supported commands and their descriptions (if
|
54
|
+
# available) then exits.
|
55
|
+
def puts_help
|
56
|
+
puts "Usage: vagrant SUBCOMMAND ...\n\n"
|
57
|
+
|
58
|
+
puts "Supported commands:"
|
59
|
+
subcommands.keys.sort.each do |key|
|
60
|
+
klass = subcommands[key]
|
61
|
+
next if klass.description.empty?
|
62
|
+
|
63
|
+
puts "#{' ' * 4}#{key.ljust(20)}#{klass.description}"
|
64
|
+
end
|
65
|
+
|
66
|
+
exit
|
67
|
+
end
|
68
|
+
|
69
|
+
# Sets or reads the description, depending on if the value is set in the
|
70
|
+
# parameter.
|
71
|
+
def description(value=nil)
|
72
|
+
@description ||= ''
|
73
|
+
|
74
|
+
return @description if value.nil?
|
75
|
+
@description = value
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def initialize(env)
|
80
|
+
@env = env
|
81
|
+
end
|
82
|
+
|
83
|
+
# This method should be overriden by subclasses. This is the method
|
84
|
+
# which is called by {Vagrant::Command} when a command is being
|
85
|
+
# executed. The `args` parameter is an array of parameters to the
|
86
|
+
# command (similar to ARGV)
|
87
|
+
def execute(args)
|
88
|
+
parse_options(args)
|
89
|
+
|
90
|
+
if options[:version]
|
91
|
+
puts_version
|
92
|
+
else
|
93
|
+
# Just print out the help, since this top-level command does nothing
|
94
|
+
# on its own
|
95
|
+
self.class.puts_help
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# This method is called by the base class to get the `optparse` configuration
|
100
|
+
# for the command.
|
101
|
+
def options_spec(opts)
|
102
|
+
opts.banner = "Usage: vagrant SUBCOMMAND"
|
103
|
+
|
104
|
+
opts.on("--version", "Output running Vagrant version.") do |v|
|
105
|
+
options[:version] = v
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
#-------------------------------------------------------------------
|
110
|
+
# Methods below are not meant to be overriden/implemented by subclasses
|
111
|
+
#-------------------------------------------------------------------
|
112
|
+
|
113
|
+
# Shows the version
|
114
|
+
def puts_version
|
115
|
+
File.open(File.join(PROJECT_ROOT, "VERSION"), "r") do |f|
|
116
|
+
puts f.read
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# Returns the `OptionParser` instance to be used with this subcommand,
|
121
|
+
# based on the specs defined in {#options_spec}.
|
122
|
+
def option_parser(reload=false)
|
123
|
+
@option_parser = nil if reload
|
124
|
+
@option_parser ||= OptionParser.new do |opts|
|
125
|
+
options_spec(opts)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# The options for the given command. This will just be an empty hash
|
130
|
+
# until {#parse_options} is called.
|
131
|
+
def options
|
132
|
+
@options ||= {}
|
133
|
+
end
|
134
|
+
|
135
|
+
# Parse options out of the command-line. This method uses `optparse`
|
136
|
+
# to parse command line options.
|
137
|
+
def parse_options(args)
|
138
|
+
option_parser.parse!(args)
|
139
|
+
options
|
140
|
+
rescue OptionParser::InvalidOption
|
141
|
+
show_help
|
142
|
+
end
|
143
|
+
|
144
|
+
# Gets the description of the command. This is similar grabbed from the
|
145
|
+
# class level.
|
146
|
+
def description
|
147
|
+
self.class.description
|
148
|
+
end
|
149
|
+
|
150
|
+
# Prints the help for the given command. Prior to calling this method,
|
151
|
+
# {#parse_options} must be called or a nilerror will be raised. This
|
152
|
+
# is by design.
|
153
|
+
def show_help
|
154
|
+
if !description.empty?
|
155
|
+
puts "Description: #{description}"
|
156
|
+
end
|
157
|
+
|
158
|
+
puts option_parser.help
|
159
|
+
exit
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,16 @@
|
|
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
|
@@ -0,0 +1,24 @@
|
|
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
|
+
Vagrant::Box.add(env, args[0], args[1])
|
16
|
+
end
|
17
|
+
|
18
|
+
def options_spec(opts)
|
19
|
+
opts.banner = "Usage: vagrant box add NAME URI"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,30 @@
|
|
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
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Vagrant
|
2
|
+
class Commands
|
3
|
+
# Removes a box permanently from the hard drive.
|
4
|
+
module Box
|
5
|
+
class Remove < BoxCommand
|
6
|
+
BoxCommand.subcommand "remove", self
|
7
|
+
description "Remove an installed box permanently."
|
8
|
+
|
9
|
+
def execute(args=[])
|
10
|
+
if args.length != 1
|
11
|
+
show_help
|
12
|
+
return
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
box = Vagrant::Box.find(env, args[0])
|
17
|
+
if box.nil?
|
18
|
+
error_and_exit(:box_remove_doesnt_exist)
|
19
|
+
return # for tests
|
20
|
+
end
|
21
|
+
|
22
|
+
box.destroy
|
23
|
+
end
|
24
|
+
|
25
|
+
def options_spec(opts)
|
26
|
+
opts.banner = "Usage: vagrant box remove NAME"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Vagrant
|
2
|
+
class Commands
|
3
|
+
# Destroys a vagrant instance. This not only shuts down the instance
|
4
|
+
# (if its running), but also deletes it from the system, including the
|
5
|
+
# hard disks associated with it.
|
6
|
+
#
|
7
|
+
# This command requires that an instance already be brought up with
|
8
|
+
# `vagrant up`.
|
9
|
+
class Destroy < Base
|
10
|
+
Base.subcommand "destroy", self
|
11
|
+
description "Destroys the vagrant environment"
|
12
|
+
|
13
|
+
def execute(args=[])
|
14
|
+
env.require_persisted_vm
|
15
|
+
env.vm.destroy
|
16
|
+
end
|
17
|
+
|
18
|
+
def options_spec(opts)
|
19
|
+
opts.banner = "Usage: vagrant destroy"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Vagrant
|
2
|
+
class Commands
|
3
|
+
# `vagrant down` is now `vagrant destroy`
|
4
|
+
class Down < Base
|
5
|
+
Base.subcommand "down", self
|
6
|
+
|
7
|
+
def execute(args=[])
|
8
|
+
error_and_exit(:command_deprecation_down)
|
9
|
+
end
|
10
|
+
|
11
|
+
def options_spec(opts)
|
12
|
+
opts.banner = "Usage: vagrant down"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Vagrant
|
2
|
+
class Commands
|
3
|
+
# Halts a running vagrant instance. This forcibly halts the instance;
|
4
|
+
# it is the equivalent of pulling the power on a machine. The instance
|
5
|
+
# can be restarted again with {up}.
|
6
|
+
#
|
7
|
+
# This command requires than an instance already be brought up with
|
8
|
+
# `vagrant up`.
|
9
|
+
class Halt < Base
|
10
|
+
Base.subcommand "halt", self
|
11
|
+
description "Halts the currently running vagrant environment"
|
12
|
+
|
13
|
+
def execute(args=[])
|
14
|
+
env.require_persisted_vm
|
15
|
+
env.vm.execute!(Actions::VM::Halt)
|
16
|
+
end
|
17
|
+
|
18
|
+
def options_spec(opts)
|
19
|
+
opts.banner = "Usage: vagrant halt"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|