communicators/winrm: use winrm_info cap if available [GH-3832]
This commit is contained in:
parent
f369c13e25
commit
d7fa60b5df
|
@ -46,6 +46,11 @@ BUG FIXES:
|
||||||
- synced\_folders/rsync: Don't append args infinitely, clear out
|
- synced\_folders/rsync: Don't append args infinitely, clear out
|
||||||
arg list on each run. [GH-3864]
|
arg list on each run. [GH-3864]
|
||||||
|
|
||||||
|
PLUGIN AUTHOR CHANGES:
|
||||||
|
|
||||||
|
- Providers can now implement the `winrm_info` provider capability
|
||||||
|
to get proper info for `vagrant rdp` to function.
|
||||||
|
|
||||||
## 1.6.2 (May 12, 2014)
|
## 1.6.2 (May 12, 2014)
|
||||||
|
|
||||||
IMPROVEMENTS:
|
IMPROVEMENTS:
|
||||||
|
|
|
@ -102,15 +102,13 @@ module VagrantPlugins
|
||||||
# This creates anew WinRMShell based on the information we know
|
# This creates anew WinRMShell based on the information we know
|
||||||
# about this machine.
|
# about this machine.
|
||||||
def create_shell
|
def create_shell
|
||||||
host_address = Helper.winrm_address(@machine)
|
winrm_info = Helper.winrm_info(@machine)
|
||||||
host_port = Helper.winrm_port(
|
|
||||||
@machine, host_address == "127.0.0.1")
|
|
||||||
|
|
||||||
WinRMShell.new(
|
WinRMShell.new(
|
||||||
host_address,
|
winrm_info[:host],
|
||||||
@machine.config.winrm.username,
|
@machine.config.winrm.username,
|
||||||
@machine.config.winrm.password,
|
@machine.config.winrm.password,
|
||||||
port: host_port,
|
port: winrm_info[:port],
|
||||||
timeout_in_seconds: @machine.config.winrm.timeout,
|
timeout_in_seconds: @machine.config.winrm.timeout,
|
||||||
max_tries: @machine.config.winrm.max_tries,
|
max_tries: @machine.config.winrm.max_tries,
|
||||||
)
|
)
|
||||||
|
|
|
@ -4,6 +4,25 @@ module VagrantPlugins
|
||||||
# communicator. This is extracted into a module so that we can
|
# communicator. This is extracted into a module so that we can
|
||||||
# easily unit test these methods.
|
# easily unit test these methods.
|
||||||
module Helper
|
module Helper
|
||||||
|
# Returns the host and port to access WinRM.
|
||||||
|
#
|
||||||
|
# This asks the provider via the `winrm_info` capability if it
|
||||||
|
# exists, otherwise defaulting to its own heuristics.
|
||||||
|
#
|
||||||
|
# @param [Vagrant::Machine] machine
|
||||||
|
# @return [Hash]
|
||||||
|
def self.winrm_info(machine)
|
||||||
|
info = {}
|
||||||
|
if machine.provider.capability?(:winrm_info)
|
||||||
|
info = machine.provider.capability(:winrm_info)
|
||||||
|
raise Errors::WinRMNotReady if !info
|
||||||
|
end
|
||||||
|
|
||||||
|
info[:host] ||= winrm_address(machine)
|
||||||
|
info[:port] ||= winrm_port(machine, info[:host] == "127.0.0.1")
|
||||||
|
return info
|
||||||
|
end
|
||||||
|
|
||||||
# Returns the address to access WinRM. This does not contain
|
# Returns the address to access WinRM. This does not contain
|
||||||
# the port.
|
# the port.
|
||||||
#
|
#
|
||||||
|
|
|
@ -38,6 +38,59 @@ describe VagrantPlugins::CommunicatorWinRM::Helper do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe ".winrm_info" do
|
||||||
|
before do
|
||||||
|
machine.provider.stub(:capability?).
|
||||||
|
with(:winrm_info).and_return(false)
|
||||||
|
subject.stub(winrm_address: nil)
|
||||||
|
subject.stub(winrm_port: nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns default info if no capability" do
|
||||||
|
subject.stub(winrm_address: "bar")
|
||||||
|
subject.stub(winrm_port: 45)
|
||||||
|
|
||||||
|
result = subject.winrm_info(machine)
|
||||||
|
expect(result[:host]).to eq("bar")
|
||||||
|
expect(result[:port]).to eq(45)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "raises an exception if capability returns nil" do
|
||||||
|
machine.provider.stub(:capability?).
|
||||||
|
with(:winrm_info).and_return(true)
|
||||||
|
machine.provider.stub(:capability).with(:winrm_info).and_return(nil)
|
||||||
|
|
||||||
|
expect { subject.winrm_info(machine) }.
|
||||||
|
to raise_error(VagrantPlugins::CommunicatorWinRM::Errors::WinRMNotReady)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns the proper information if set" do
|
||||||
|
machine.provider.stub(:capability?).
|
||||||
|
with(:winrm_info).and_return(true)
|
||||||
|
machine.provider.stub(:capability).with(:winrm_info).and_return({
|
||||||
|
host: "foo",
|
||||||
|
port: 12,
|
||||||
|
})
|
||||||
|
|
||||||
|
result = subject.winrm_info(machine)
|
||||||
|
expect(result[:host]).to eq("foo")
|
||||||
|
expect(result[:port]).to eq(12)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "defaults information if capability doesn't set it" do
|
||||||
|
machine.provider.stub(:capability?).
|
||||||
|
with(:winrm_info).and_return(true)
|
||||||
|
machine.provider.stub(:capability).with(:winrm_info).and_return({})
|
||||||
|
|
||||||
|
subject.stub(winrm_address: "bar")
|
||||||
|
subject.stub(winrm_port: 45)
|
||||||
|
|
||||||
|
result = subject.winrm_info(machine)
|
||||||
|
expect(result[:host]).to eq("bar")
|
||||||
|
expect(result[:port]).to eq(45)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe ".winrm_port" do
|
describe ".winrm_port" do
|
||||||
it "returns the configured port if no guest port set" do
|
it "returns the configured port if no guest port set" do
|
||||||
machine.config.winrm.port = 22
|
machine.config.winrm.port = 22
|
||||||
|
@ -46,6 +99,14 @@ describe VagrantPlugins::CommunicatorWinRM::Helper do
|
||||||
expect(subject.winrm_port(machine)).to eq(22)
|
expect(subject.winrm_port(machine)).to eq(22)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "returns the configured guest port if non local" do
|
||||||
|
machine.config.winrm.port = 22
|
||||||
|
machine.config.winrm.guest_port = 2222
|
||||||
|
machine.config.vm.network "forwarded_port", host: 1234, guest: 2222
|
||||||
|
|
||||||
|
expect(subject.winrm_port(machine, false)).to eq(2222)
|
||||||
|
end
|
||||||
|
|
||||||
it "returns a forwarded port that matches the guest port" do
|
it "returns a forwarded port that matches the guest port" do
|
||||||
machine.config.winrm.port = 22
|
machine.config.winrm.port = 22
|
||||||
machine.config.winrm.guest_port = 2222
|
machine.config.winrm.guest_port = 2222
|
||||||
|
|
Loading…
Reference in New Issue