`vagrant status` updated to work with multi-VM. Global status not yet functional.
This commit is contained in:
parent
0314e6ef6c
commit
709c50e7b6
|
@ -12,7 +12,7 @@ module Vagrant
|
||||||
|
|
||||||
attr_reader :env
|
attr_reader :env
|
||||||
|
|
||||||
class <<self
|
class << self
|
||||||
# Contains the list of registered subcommands. The registered commands are
|
# Contains the list of registered subcommands. The registered commands are
|
||||||
# stored in a hash table and are therefore unordered.
|
# stored in a hash table and are therefore unordered.
|
||||||
#
|
#
|
||||||
|
@ -126,7 +126,6 @@ module Vagrant
|
||||||
# to parse command line options.
|
# to parse command line options.
|
||||||
def parse_options(args)
|
def parse_options(args)
|
||||||
option_parser.parse!(args)
|
option_parser.parse!(args)
|
||||||
options
|
|
||||||
rescue OptionParser::InvalidOption
|
rescue OptionParser::InvalidOption
|
||||||
show_help
|
show_help
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,43 +8,84 @@ module Vagrant
|
||||||
description "Shows the status of the Vagrant environment."
|
description "Shows the status of the Vagrant environment."
|
||||||
|
|
||||||
def execute(args=[])
|
def execute(args=[])
|
||||||
parse_options(args)
|
args = parse_options(args)
|
||||||
|
if args.length > 1
|
||||||
|
# There should never be more than 1 arg
|
||||||
|
show_help
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if !options[:global]
|
if !options[:global]
|
||||||
show_local_status
|
show_local_status(*args)
|
||||||
else
|
else
|
||||||
show_global_status
|
show_global_status
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Shows the status of the CURRENT environment (the current working
|
# Shows the status of the CURRENT environment (the current working
|
||||||
# directory). This prints out a human friendly sentence or paragraph
|
# directory). If a specific VM was given, it will print out
|
||||||
# describing the state of the Vagrant environment represented by the
|
# detailed information regarding that VM. If no single VM was
|
||||||
# current working directory.
|
# specified and it is a multi-VM environment, it will simply
|
||||||
def show_local_status
|
# show a listing of all the VMs and their short one word
|
||||||
|
# statuses.
|
||||||
|
def show_local_status(vm=nil)
|
||||||
|
if !env.root_path
|
||||||
|
wrap_output { puts Translator.t(:status_no_environment) }
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if vm.nil?
|
||||||
|
if env.multivm?
|
||||||
|
# No specific VM was specified in a multi-vm environment,
|
||||||
|
# so show short info for each VM
|
||||||
|
show_list
|
||||||
|
else
|
||||||
|
# Set the VM to just be the root VM
|
||||||
|
vm = env.vms.values.first
|
||||||
|
end
|
||||||
|
else
|
||||||
|
# Try to get the vm based on the name. If the specified VM
|
||||||
|
# doesn't exist, then error saying so
|
||||||
|
vm = env.vms[vm.to_sym]
|
||||||
|
end
|
||||||
|
|
||||||
|
show_single(vm)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Lists the available VMs and brief statuses about each.
|
||||||
|
def show_list
|
||||||
|
wrap_output do
|
||||||
|
puts Translator.t(:status_listing)
|
||||||
|
|
||||||
|
env.vms.each do |name, vm|
|
||||||
|
puts "#{name.ljust(20)}#{vm.state}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Shows a paragraph of information based on the current state of
|
||||||
|
# a single, specified VM.
|
||||||
|
def show_single(vm)
|
||||||
string_key = nil
|
string_key = nil
|
||||||
|
|
||||||
if !env.root_path
|
if !vm.created?
|
||||||
string_key = :status_no_environment
|
|
||||||
elsif !env.vm
|
|
||||||
string_key = :status_not_created
|
string_key = :status_not_created
|
||||||
else
|
else
|
||||||
additional_key = nil
|
additional_key = nil
|
||||||
if env.vm.vm.running?
|
if vm.vm.running?
|
||||||
additional_key = :status_created_running
|
additional_key = :status_created_running
|
||||||
elsif env.vm.vm.saved?
|
elsif vm.vm.saved?
|
||||||
additional_key = :status_created_saved
|
additional_key = :status_created_saved
|
||||||
elsif env.vm.vm.powered_off?
|
elsif vm.vm.powered_off?
|
||||||
additional_key = :status_created_powered_off
|
additional_key = :status_created_powered_off
|
||||||
end
|
end
|
||||||
|
|
||||||
string_key = [:status_created, {
|
string_key = [:status_created, {
|
||||||
:vm_state => env.vm.vm.state,
|
:vm_state => vm.vm.state,
|
||||||
:additional_message => additional_key ? Translator.t(additional_key) : ""
|
:additional_message => additional_key ? Translator.t(additional_key) : ""
|
||||||
}]
|
}]
|
||||||
end
|
end
|
||||||
|
|
||||||
string_key = [string_key, {}] unless string_key.is_a?(Array)
|
|
||||||
wrap_output { puts Translator.t(*string_key) }
|
wrap_output { puts Translator.t(*string_key) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -70,6 +111,7 @@ module Vagrant
|
||||||
|
|
||||||
# Defaults
|
# Defaults
|
||||||
options[:global] = false
|
options[:global] = false
|
||||||
|
options[:vm] = nil
|
||||||
|
|
||||||
opts.on("-g", "--global", "Show global status of Vagrant (running VMs managed by Vagrant)") do |v|
|
opts.on("-g", "--global", "Show global status of Vagrant (running VMs managed by Vagrant)") do |v|
|
||||||
options[:global] = true
|
options[:global] = true
|
||||||
|
|
|
@ -100,6 +100,17 @@ module Vagrant
|
||||||
@vms ||= {}
|
@vms ||= {}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns a boolean whether this environment represents a multi-VM
|
||||||
|
# environment or not. This will work even when called on child
|
||||||
|
# environments.
|
||||||
|
def multivm?
|
||||||
|
if parent
|
||||||
|
parent.multivm?
|
||||||
|
else
|
||||||
|
vms.length > 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
#---------------------------------------------------------------
|
#---------------------------------------------------------------
|
||||||
# Load Methods
|
# Load Methods
|
||||||
#---------------------------------------------------------------
|
#---------------------------------------------------------------
|
||||||
|
|
|
@ -4,6 +4,7 @@ module Vagrant
|
||||||
|
|
||||||
attr_reader :env
|
attr_reader :env
|
||||||
attr_reader :system
|
attr_reader :system
|
||||||
|
attr_reader :name
|
||||||
attr_accessor :vm
|
attr_accessor :vm
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
@ -25,6 +26,7 @@ module Vagrant
|
||||||
opts = defaults.merge(opts || {})
|
opts = defaults.merge(opts || {})
|
||||||
|
|
||||||
@vm = opts[:vm]
|
@vm = opts[:vm]
|
||||||
|
@name = opts[:vm_name]
|
||||||
|
|
||||||
if !opts[:env].nil?
|
if !opts[:env].nil?
|
||||||
# We have an environment, so we create a new child environment
|
# We have an environment, so we create a new child environment
|
||||||
|
|
|
@ -6,6 +6,10 @@
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
# CATEGORY: Status Messages
|
# CATEGORY: Status Messages
|
||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
|
:status_listing: |-
|
||||||
|
This environment represents multiple VMs. The VMs will be listed
|
||||||
|
below with a short status. For more detailed information about a
|
||||||
|
VM, run `vagrant status NAME`.
|
||||||
:status_no_environment: |-
|
:status_no_environment: |-
|
||||||
No vagrant environment detected. Run `vagrant init` to setup a Vagrantfile
|
No vagrant environment detected. Run `vagrant init` to setup a Vagrantfile
|
||||||
in the current directory to get started with Vagrant.
|
in the current directory to get started with Vagrant.
|
||||||
|
|
|
@ -112,8 +112,9 @@ class CommandsBaseTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
should "parse the options with the args" do
|
should "parse the options with the args" do
|
||||||
@option_parser.expects(:parse!).with(@args).once
|
result = mock("result")
|
||||||
assert_equal @options, @instance.parse_options(@args)
|
@option_parser.expects(:parse!).with(@args).once.returns(result)
|
||||||
|
assert_equal result, @instance.parse_options(@args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,5 +26,15 @@ class CommandsStatusTest < Test::Unit::TestCase
|
||||||
@instance.expects(:show_global_status).once
|
@instance.expects(:show_global_status).once
|
||||||
@instance.execute(["--global"])
|
@instance.execute(["--global"])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "show help if too many args are given" do
|
||||||
|
@instance.expects(:show_help).once
|
||||||
|
@instance.execute(["1","2","3"])
|
||||||
|
end
|
||||||
|
|
||||||
|
should "pass the VM name to local status if given" do
|
||||||
|
@instance.expects(:show_local_status).with("foo").once
|
||||||
|
@instance.execute(["foo"])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -124,6 +124,41 @@ class EnvironmentTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "multivm? helper" do
|
||||||
|
setup do
|
||||||
|
@env = mock_environment
|
||||||
|
end
|
||||||
|
|
||||||
|
context "with a parent" do
|
||||||
|
setup do
|
||||||
|
@parent = mock('parent')
|
||||||
|
@env.stubs(:parent).returns(@parent)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "return the value of multivm? from the parent" do
|
||||||
|
result = mock("result")
|
||||||
|
@parent.stubs(:multivm?).returns(result)
|
||||||
|
assert_equal result, @env.multivm?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "without a parent" do
|
||||||
|
setup do
|
||||||
|
@env.stubs(:parent).returns(nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "return true if VM length greater than 1" do
|
||||||
|
@env.stubs(:vms).returns([1,2,3])
|
||||||
|
assert @env.multivm?
|
||||||
|
end
|
||||||
|
|
||||||
|
should "return false if VM length is 1" do
|
||||||
|
@env.stubs(:vms).returns([1])
|
||||||
|
assert !@env.multivm?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "loading" do
|
context "loading" do
|
||||||
setup do
|
setup do
|
||||||
@env = mock_environment
|
@env = mock_environment
|
||||||
|
|
|
@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
||||||
|
|
||||||
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
||||||
s.authors = ["Mitchell Hashimoto", "John Bender"]
|
s.authors = ["Mitchell Hashimoto", "John Bender"]
|
||||||
s.date = %q{2010-05-15}
|
s.date = %q{2010-05-16}
|
||||||
s.default_executable = %q{vagrant}
|
s.default_executable = %q{vagrant}
|
||||||
s.description = %q{Vagrant is a tool for building and distributing virtualized development environments.}
|
s.description = %q{Vagrant is a tool for building and distributing virtualized development environments.}
|
||||||
s.email = ["mitchell.hashimoto@gmail.com", "john.m.bender@gmail.com"]
|
s.email = ["mitchell.hashimoto@gmail.com", "john.m.bender@gmail.com"]
|
||||||
|
|
Loading…
Reference in New Issue