Refactor the "all or single" behavior of many commands into the base.
This commit is contained in:
parent
dd7f471a3b
commit
12b8ab4516
|
@ -94,6 +94,23 @@ module Vagrant
|
||||||
# Methods below are not meant to be overriden/implemented by subclasses
|
# Methods below are not meant to be overriden/implemented by subclasses
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Parses the options for a given command and if a name was
|
||||||
|
# given, it calls the single method, otherwise it calls the all
|
||||||
|
# method. This helper is an abstraction which allows commands to
|
||||||
|
# easily be used in both regular and multi-VM environments.
|
||||||
|
def all_or_single(args, method_prefix)
|
||||||
|
args = parse_options(args)
|
||||||
|
|
||||||
|
single_method = "#{method_prefix}_single".to_sym
|
||||||
|
if args[0]
|
||||||
|
send(single_method, args[0])
|
||||||
|
else
|
||||||
|
env.vms.keys.each do |name|
|
||||||
|
send(single_method, name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Shows the version
|
# Shows the version
|
||||||
def puts_version
|
def puts_version
|
||||||
File.open(File.join(PROJECT_ROOT, "VERSION"), "r") do |f|
|
File.open(File.join(PROJECT_ROOT, "VERSION"), "r") do |f|
|
||||||
|
|
|
@ -11,13 +11,7 @@ module Vagrant
|
||||||
description "Destroys the vagrant environment"
|
description "Destroys the vagrant environment"
|
||||||
|
|
||||||
def execute(args=[])
|
def execute(args=[])
|
||||||
args = parse_options(args)
|
all_or_single(args, :destroy)
|
||||||
|
|
||||||
if args[0]
|
|
||||||
destroy_single(args[0])
|
|
||||||
else
|
|
||||||
destroy_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Destroys a single VM by name.
|
# Destroys a single VM by name.
|
||||||
|
@ -35,13 +29,6 @@ module Vagrant
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Destroys all VMs represented by the current environment.
|
|
||||||
def destroy_all
|
|
||||||
env.vms.each do |name, vm|
|
|
||||||
destroy_single(name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def options_spec(opts)
|
def options_spec(opts)
|
||||||
opts.banner = "Usage: vagrant destroy"
|
opts.banner = "Usage: vagrant destroy"
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,13 +11,7 @@ module Vagrant
|
||||||
description "Halts the currently running vagrant environment"
|
description "Halts the currently running vagrant environment"
|
||||||
|
|
||||||
def execute(args=[])
|
def execute(args=[])
|
||||||
args = parse_options(args)
|
all_or_single(args, :halt)
|
||||||
|
|
||||||
if args[0]
|
|
||||||
halt_single(args[0])
|
|
||||||
else
|
|
||||||
halt_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def halt_single(name)
|
def halt_single(name)
|
||||||
|
@ -34,12 +28,6 @@ module Vagrant
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def halt_all
|
|
||||||
env.vms.keys.each do |name|
|
|
||||||
halt_single(name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def options_spec(opts)
|
def options_spec(opts)
|
||||||
opts.banner = "Usage: vagrant halt"
|
opts.banner = "Usage: vagrant halt"
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,7 @@ module Vagrant
|
||||||
description "Reload the vagrant environment"
|
description "Reload the vagrant environment"
|
||||||
|
|
||||||
def execute(args=[])
|
def execute(args=[])
|
||||||
args = parse_options(args)
|
all_or_single(args, :reload)
|
||||||
|
|
||||||
if args[0]
|
|
||||||
reload_single(args[0])
|
|
||||||
else
|
|
||||||
reload_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def reload_single(name)
|
def reload_single(name)
|
||||||
|
@ -33,12 +27,6 @@ module Vagrant
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def reload_all
|
|
||||||
env.vms.keys.each do |name|
|
|
||||||
reload_single(name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def options_spec(opts)
|
def options_spec(opts)
|
||||||
opts.banner = "Usage: vagrant reload"
|
opts.banner = "Usage: vagrant reload"
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,13 +10,7 @@ module Vagrant
|
||||||
description "Resumes a suspend vagrant environment"
|
description "Resumes a suspend vagrant environment"
|
||||||
|
|
||||||
def execute(args=[])
|
def execute(args=[])
|
||||||
args = parse_options(args)
|
all_or_single(args, :resume)
|
||||||
|
|
||||||
if args[0]
|
|
||||||
resume_single(args[0])
|
|
||||||
else
|
|
||||||
resume_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def resume_single(name)
|
def resume_single(name)
|
||||||
|
@ -33,12 +27,6 @@ module Vagrant
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def resume_all
|
|
||||||
env.vms.keys.each do |name|
|
|
||||||
resume_single(name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def options_spec(opts)
|
def options_spec(opts)
|
||||||
opts.banner = "Usage: vagrant resume"
|
opts.banner = "Usage: vagrant resume"
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,13 +11,7 @@ module Vagrant
|
||||||
description "Suspends the currently running vagrant environment"
|
description "Suspends the currently running vagrant environment"
|
||||||
|
|
||||||
def execute(args=[])
|
def execute(args=[])
|
||||||
args = parse_options(args)
|
all_or_single(args, :suspend)
|
||||||
|
|
||||||
if args[0]
|
|
||||||
suspend_single(args[0])
|
|
||||||
else
|
|
||||||
suspend_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def suspend_single(name)
|
def suspend_single(name)
|
||||||
|
@ -34,12 +28,6 @@ module Vagrant
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def suspend_all
|
|
||||||
env.vms.keys.each do |name|
|
|
||||||
suspend_single(name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def options_spec(opts)
|
def options_spec(opts)
|
||||||
opts.banner = "Usage: vagrant suspend"
|
opts.banner = "Usage: vagrant suspend"
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,13 +9,7 @@ module Vagrant
|
||||||
description "Creates the vagrant environment"
|
description "Creates the vagrant environment"
|
||||||
|
|
||||||
def execute(args=[])
|
def execute(args=[])
|
||||||
args = parse_options(args)
|
all_or_single(args, :up)
|
||||||
|
|
||||||
if args[0]
|
|
||||||
up_single(args[0])
|
|
||||||
else
|
|
||||||
up_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def up_single(name)
|
def up_single(name)
|
||||||
|
@ -36,16 +30,6 @@ module Vagrant
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def up_all
|
|
||||||
# First verify that all VMs have valid boxes
|
|
||||||
env.vms.each { |name, vm| vm.env.require_box unless vm.created? }
|
|
||||||
|
|
||||||
# Next, handle each VM
|
|
||||||
env.vms.keys.each do |name|
|
|
||||||
up_single(name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def options_spec(opts)
|
def options_spec(opts)
|
||||||
opts.banner = "Usage: vagrant up"
|
opts.banner = "Usage: vagrant up"
|
||||||
end
|
end
|
||||||
|
|
|
@ -78,6 +78,24 @@ class CommandsBaseTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "all or single methods" do
|
||||||
|
should "call the single method if a name is given" do
|
||||||
|
name = "bar"
|
||||||
|
@instance.expects(:foo_single).with(name).once
|
||||||
|
@instance.all_or_single(["bar"], :foo)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "call the single method for each VM if no name is given" do
|
||||||
|
vms = { :foo => nil, :bar => nil }
|
||||||
|
vms.keys.each do |name|
|
||||||
|
@instance.expects(:foo_single).with(name).once
|
||||||
|
end
|
||||||
|
|
||||||
|
@env.stubs(:vms).returns(vms)
|
||||||
|
@instance.all_or_single([], :foo)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "getting the option parser" do
|
context "getting the option parser" do
|
||||||
should "create it with the options spec if it hasn't been created yet" do
|
should "create it with the options spec if it hasn't been created yet" do
|
||||||
opts = mock("opts")
|
opts = mock("opts")
|
||||||
|
|
|
@ -10,28 +10,10 @@ class CommandsDestroyTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
context "executing" do
|
context "executing" do
|
||||||
should "call destroy_all if no name is given" do
|
should "call all or single for the method" do
|
||||||
@instance.expects(:destroy_all).once
|
@instance.expects(:all_or_single).with([], :destroy)
|
||||||
@instance.execute
|
@instance.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
should "call destroy_single if a name is given" do
|
|
||||||
@instance.expects(:destroy_single).with("foo").once
|
|
||||||
@instance.execute(["foo"])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "destroying all" do
|
|
||||||
should "destroy each VM" do
|
|
||||||
vms = { :foo => nil, :bar => nil, :baz => nil }
|
|
||||||
@env.stubs(:vms).returns(vms)
|
|
||||||
|
|
||||||
vms.each do |name, value|
|
|
||||||
@instance.expects(:destroy_single).with(name).once
|
|
||||||
end
|
|
||||||
|
|
||||||
@instance.destroy_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "destroying a single VM" do
|
context "destroying a single VM" do
|
||||||
|
|
|
@ -9,28 +9,10 @@ class CommandsHaltTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
context "executing" do
|
context "executing" do
|
||||||
should "call halt_all if no name is given" do
|
should "call all or single for the method" do
|
||||||
@instance.expects(:halt_all).once
|
@instance.expects(:all_or_single).with([], :halt)
|
||||||
@instance.execute
|
@instance.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
should "call halt_single if a name is given" do
|
|
||||||
@instance.expects(:halt_single).with("foo").once
|
|
||||||
@instance.execute(["foo"])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "halting all" do
|
|
||||||
should "halt each VM" do
|
|
||||||
vms = { :foo => nil, :bar => nil, :baz => nil }
|
|
||||||
@env.stubs(:vms).returns(vms)
|
|
||||||
|
|
||||||
vms.each do |name, value|
|
|
||||||
@instance.expects(:halt_single).with(name).once
|
|
||||||
end
|
|
||||||
|
|
||||||
@instance.halt_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "halting a single VM" do
|
context "halting a single VM" do
|
||||||
|
|
|
@ -9,28 +9,10 @@ class CommandsReloadTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
context "executing" do
|
context "executing" do
|
||||||
should "call on all if no name is given" do
|
should "call all or single for the method" do
|
||||||
@instance.expects(:reload_all).once
|
@instance.expects(:all_or_single).with([], :reload)
|
||||||
@instance.execute
|
@instance.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
should "call on single if a name is given" do
|
|
||||||
@instance.expects(:reload_single).with("foo").once
|
|
||||||
@instance.execute(["foo"])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "reloading all" do
|
|
||||||
should "reload each VM" do
|
|
||||||
vms = { :foo => nil, :bar => nil, :baz => nil }
|
|
||||||
@env.stubs(:vms).returns(vms)
|
|
||||||
|
|
||||||
vms.each do |name, value|
|
|
||||||
@instance.expects(:reload_single).with(name).once
|
|
||||||
end
|
|
||||||
|
|
||||||
@instance.reload_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "reloading a single VM" do
|
context "reloading a single VM" do
|
||||||
|
|
|
@ -9,28 +9,10 @@ class CommandsResumeTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
context "executing" do
|
context "executing" do
|
||||||
should "call on all if no name is given" do
|
should "call all or single for the method" do
|
||||||
@instance.expects(:resume_all).once
|
@instance.expects(:all_or_single).with([], :resume)
|
||||||
@instance.execute
|
@instance.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
should "call on single if a name is given" do
|
|
||||||
@instance.expects(:resume_single).with("foo").once
|
|
||||||
@instance.execute(["foo"])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "resume all" do
|
|
||||||
should "resume each VM" do
|
|
||||||
vms = { :foo => nil, :bar => nil, :baz => nil }
|
|
||||||
@env.stubs(:vms).returns(vms)
|
|
||||||
|
|
||||||
vms.each do |name, value|
|
|
||||||
@instance.expects(:resume_single).with(name).once
|
|
||||||
end
|
|
||||||
|
|
||||||
@instance.resume_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "resuming a single VM" do
|
context "resuming a single VM" do
|
||||||
|
|
|
@ -9,28 +9,10 @@ class CommandsSuspendTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
context "executing" do
|
context "executing" do
|
||||||
should "call on all if no name is given" do
|
should "call all or single for the method" do
|
||||||
@instance.expects(:suspend_all).once
|
@instance.expects(:all_or_single).with([], :suspend)
|
||||||
@instance.execute
|
@instance.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
should "call on single if a name is given" do
|
|
||||||
@instance.expects(:suspend_single).with("foo").once
|
|
||||||
@instance.execute(["foo"])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "suspending all" do
|
|
||||||
should "suspend each VM" do
|
|
||||||
vms = { :foo => nil, :bar => nil, :baz => nil }
|
|
||||||
@env.stubs(:vms).returns(vms)
|
|
||||||
|
|
||||||
vms.each do |name, value|
|
|
||||||
@instance.expects(:suspend_single).with(name).once
|
|
||||||
end
|
|
||||||
|
|
||||||
@instance.suspend_all
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "suspending a single VM" do
|
context "suspending a single VM" do
|
||||||
|
|
|
@ -9,15 +9,10 @@ class CommandsUpTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
context "executing" do
|
context "executing" do
|
||||||
should "call up_all if no name is given" do
|
should "call all or single for the method" do
|
||||||
@instance.expects(:up_all).once
|
@instance.expects(:all_or_single).with([], :up)
|
||||||
@instance.execute
|
@instance.execute
|
||||||
end
|
end
|
||||||
|
|
||||||
should "call up_single if a name is given" do
|
|
||||||
@instance.expects(:up_single).with("foo").once
|
|
||||||
@instance.execute(["foo"])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "upping a single VM" do
|
context "upping a single VM" do
|
||||||
|
@ -49,30 +44,4 @@ class CommandsUpTest < Test::Unit::TestCase
|
||||||
@instance.up_single(:foo)
|
@instance.up_single(:foo)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "upping all VMs" do
|
|
||||||
setup do
|
|
||||||
@vms = {}
|
|
||||||
@env.stubs(:vms).returns(@vms)
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_vm
|
|
||||||
vm = mock("vm")
|
|
||||||
vm.stubs(:env).returns(mock_environment)
|
|
||||||
vm.stubs(:created?).returns(false)
|
|
||||||
vm
|
|
||||||
end
|
|
||||||
|
|
||||||
should "require a box for all VMs" do
|
|
||||||
@vms[:foo] = create_vm
|
|
||||||
@vms[:bar] = create_vm
|
|
||||||
|
|
||||||
@vms.each do |name, vm|
|
|
||||||
vm.env.expects(:require_box).once
|
|
||||||
@instance.expects(:up_single).with(name).once
|
|
||||||
end
|
|
||||||
|
|
||||||
@instance.up_all
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue