Machine#guest returns the proper guest detected
This commit is contained in:
parent
f48b0796a5
commit
c5c15fdaa6
|
@ -83,7 +83,10 @@ module Vagrant
|
||||||
@config = config
|
@config = config
|
||||||
@data_dir = data_dir
|
@data_dir = data_dir
|
||||||
@env = env
|
@env = env
|
||||||
@guest = Guest.new(self)
|
@guest = Guest.new(
|
||||||
|
self,
|
||||||
|
Vagrant.plugin("2").manager.guests,
|
||||||
|
Vagrant.plugin("2").manager.guest_capabilities)
|
||||||
@name = name
|
@name = name
|
||||||
@provider_config = provider_config
|
@provider_config = provider_config
|
||||||
@provider_name = provider_name
|
@provider_name = provider_name
|
||||||
|
@ -170,6 +173,7 @@ module Vagrant
|
||||||
# @return [Object]
|
# @return [Object]
|
||||||
def guest
|
def guest
|
||||||
raise Errors::MachineGuestNotReady if !communicate.ready?
|
raise Errors::MachineGuestNotReady if !communicate.ready?
|
||||||
|
@guest.detect! if !@guest.ready?
|
||||||
@guest
|
@guest
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,11 @@ module Vagrant
|
||||||
# @return [Registry<Symbol, Array<Class, Symbol>>]
|
# @return [Registry<Symbol, Array<Class, Symbol>>]
|
||||||
attr_reader :guests
|
attr_reader :guests
|
||||||
|
|
||||||
|
# This contains all the registered guest capabilities.
|
||||||
|
#
|
||||||
|
# @return [Hash<Symbol, Registry>]
|
||||||
|
attr_reader :guest_capabilities
|
||||||
|
|
||||||
# This contains all the provider plugins by name, and returns
|
# This contains all the provider plugins by name, and returns
|
||||||
# the provider class and options.
|
# the provider class and options.
|
||||||
#
|
#
|
||||||
|
@ -33,6 +38,7 @@ module Vagrant
|
||||||
|
|
||||||
@configs = Hash.new { |h, k| h[k] = Registry.new }
|
@configs = Hash.new { |h, k| h[k] = Registry.new }
|
||||||
@guests = Registry.new
|
@guests = Registry.new
|
||||||
|
@guest_capabilities = Hash.new { |h, k| h[k] = Registry.new }
|
||||||
@providers = Registry.new
|
@providers = Registry.new
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -72,6 +72,21 @@ module Vagrant
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# This returns all the registered guest capabilities.
|
||||||
|
#
|
||||||
|
# @return [Hash]
|
||||||
|
def guest_capabilities
|
||||||
|
results = Hash.new { |h, k| h[k] = Registry.new }
|
||||||
|
|
||||||
|
@registered.each do |plugin|
|
||||||
|
plugin.components.guest_capabilities.each do |guest, caps|
|
||||||
|
results[guest].merge!(caps)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
results
|
||||||
|
end
|
||||||
|
|
||||||
# This returns all registered host classes.
|
# This returns all registered host classes.
|
||||||
#
|
#
|
||||||
# @return [Hash]
|
# @return [Hash]
|
||||||
|
|
|
@ -144,6 +144,18 @@ module Vagrant
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Defines a capability for the given guest. The block should return
|
||||||
|
# a class/module that has a method with the capability name, ready
|
||||||
|
# to be executed. This means that if it is an instance method,
|
||||||
|
# the block should return an instance of the class.
|
||||||
|
#
|
||||||
|
# @param [String] guest The name of the guest
|
||||||
|
# @param [String] cap The name of the capability
|
||||||
|
def self.guest_capability(guest, cap, &block)
|
||||||
|
components.guest_capabilities[guest.to_sym].register(cap.to_sym, &block)
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
# Defines an additionally available host implementation with
|
# Defines an additionally available host implementation with
|
||||||
# the given key.
|
# the given key.
|
||||||
#
|
#
|
||||||
|
|
|
@ -202,6 +202,16 @@ describe Vagrant::Machine do
|
||||||
end
|
end
|
||||||
|
|
||||||
before(:each) do
|
before(:each) do
|
||||||
|
test_guest = Class.new(Vagrant.plugin("2", :guest)) do
|
||||||
|
def detect?(machine)
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
register_plugin do |p|
|
||||||
|
p.guest(:test) { test_guest }
|
||||||
|
end
|
||||||
|
|
||||||
instance.stub(:communicate).and_return(communicator)
|
instance.stub(:communicate).and_return(communicator)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -213,18 +223,10 @@ describe Vagrant::Machine do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return the configured guest" do
|
it "should return the configured guest" do
|
||||||
test_guest = Class.new(Vagrant.plugin("2", :guest)) do
|
|
||||||
def detect?(machine)
|
|
||||||
true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
register_plugin do |p|
|
|
||||||
p.guest(:test) { test_guest }
|
|
||||||
end
|
|
||||||
|
|
||||||
result = instance.guest
|
result = instance.guest
|
||||||
result.should be_kind_of(test_guest)
|
result.should be_kind_of(Vagrant::Guest)
|
||||||
|
result.ready?.should be
|
||||||
|
result.chain[0][0].should == :test
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -92,15 +92,15 @@ describe Vagrant::Plugin::V2::Manager do
|
||||||
end
|
end
|
||||||
|
|
||||||
pB = plugin do |p|
|
pB = plugin do |p|
|
||||||
p.guest("bar") { "baz" }
|
p.guest("bar", "foo") { "baz" }
|
||||||
end
|
end
|
||||||
|
|
||||||
instance.register(pA)
|
instance.register(pA)
|
||||||
instance.register(pB)
|
instance.register(pB)
|
||||||
|
|
||||||
instance.guests.to_hash.length.should == 2
|
instance.guests.to_hash.length.should == 2
|
||||||
instance.guests[:foo].should == "bar"
|
instance.guests[:foo].should == ["bar", nil]
|
||||||
instance.guests[:bar].should == "baz"
|
instance.guests[:bar].should == ["baz", :foo]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should enumerate registered host classes" do
|
it "should enumerate registered host classes" do
|
||||||
|
|
|
@ -154,7 +154,7 @@ describe Vagrant::Plugin::V2::Plugin do
|
||||||
guest("foo") { "bar" }
|
guest("foo") { "bar" }
|
||||||
end
|
end
|
||||||
|
|
||||||
plugin.guest[:foo].should == "bar"
|
plugin.components.guests[:foo].should == ["bar", nil]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should lazily register guest classes" do
|
it "should lazily register guest classes" do
|
||||||
|
|
Loading…
Reference in New Issue