config.ssh properly overrides provder-detected [GH-1479]
This commit is contained in:
parent
66ff86fda5
commit
d03938e3c1
|
@ -33,6 +33,8 @@ FEATURES:
|
||||||
- Providers can now support multiple box formats by specifying the
|
- Providers can now support multiple box formats by specifying the
|
||||||
`box_format:` option.
|
`box_format:` option.
|
||||||
- CFEngine provisioner support.
|
- CFEngine provisioner support.
|
||||||
|
- `config.ssh.default` settings introduced to set SSH defaults that
|
||||||
|
providers can still override. [GH-1479]
|
||||||
|
|
||||||
IMPROVEMENTS:
|
IMPROVEMENTS:
|
||||||
|
|
||||||
|
@ -72,6 +74,7 @@ BUG FIXES:
|
||||||
- Fix issue parsing extra SSH args in `vagrant ssh` in multi-machine
|
- Fix issue parsing extra SSH args in `vagrant ssh` in multi-machine
|
||||||
environments. [GH-1545]
|
environments. [GH-1545]
|
||||||
- Networks come back up properly on RedHat systems after reboot. [GH-921]
|
- Networks come back up properly on RedHat systems after reboot. [GH-921]
|
||||||
|
- `config.ssh` settings override all detected SSH settings (regression). [GH-1479]
|
||||||
|
|
||||||
## 1.1.6 (April 3, 2013)
|
## 1.1.6 (April 3, 2013)
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
Vagrant.configure("2") do |config|
|
Vagrant.configure("2") do |config|
|
||||||
config.vagrant.host = :detect
|
config.vagrant.host = :detect
|
||||||
|
|
||||||
config.ssh.username = "vagrant"
|
|
||||||
config.ssh.guest_port = 22
|
config.ssh.guest_port = 22
|
||||||
config.ssh.keep_alive = true
|
config.ssh.keep_alive = true
|
||||||
config.ssh.max_tries = 100
|
config.ssh.max_tries = 100
|
||||||
config.ssh.timeout = 30
|
config.ssh.timeout = 30
|
||||||
config.ssh.forward_agent = false
|
|
||||||
config.ssh.forward_x11 = false
|
|
||||||
config.ssh.shell = "bash -l"
|
config.ssh.shell = "bash -l"
|
||||||
|
|
||||||
|
config.ssh.default.username = "vagrant"
|
||||||
|
config.ssh.default.forward_agent = false
|
||||||
|
config.ssh.default.forward_x11 = false
|
||||||
|
|
||||||
config.vm.usable_port_range = (2200..2250)
|
config.vm.usable_port_range = (2200..2250)
|
||||||
config.vm.box_url = nil
|
config.vm.box_url = nil
|
||||||
config.vm.base_mac = nil
|
config.vm.base_mac = nil
|
||||||
|
|
|
@ -257,11 +257,19 @@ module Vagrant
|
||||||
info.delete(key) if value.nil?
|
info.delete(key) if value.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Next, we default some fields if they weren't given to us by
|
# We set the defaults
|
||||||
# the provider.
|
info[:forward_agent] ||= @config.ssh.default.forward_agent
|
||||||
info[:host] ||= @config.ssh.host if @config.ssh.host
|
info[:forward_x11] ||= @config.ssh.default.forward_x11
|
||||||
info[:port] ||= @config.ssh.port if @config.ssh.port
|
info[:host] ||= @config.ssh.default.host
|
||||||
info[:username] ||= @config.ssh.username if @config.ssh.username
|
info[:port] ||= @config.ssh.default.port
|
||||||
|
info[:private_key_path] ||= @config.ssh.default.private_key_path
|
||||||
|
info[:username] ||= @config.ssh.default.username
|
||||||
|
|
||||||
|
# We set overrides if they are set. These take precedence over
|
||||||
|
# provider-returned data.
|
||||||
|
info[:host] = @config.ssh.host if @config.ssh.host
|
||||||
|
info[:port] = @config.ssh.port if @config.ssh.port
|
||||||
|
info[:username] = @config.ssh.username if @config.ssh.username
|
||||||
|
|
||||||
# We also set some fields that are purely controlled by Varant
|
# We also set some fields that are purely controlled by Varant
|
||||||
info[:forward_agent] = @config.ssh.forward_agent
|
info[:forward_agent] = @config.ssh.forward_agent
|
||||||
|
|
|
@ -1,46 +1,47 @@
|
||||||
require "vagrant"
|
require "vagrant"
|
||||||
|
|
||||||
|
require_relative "ssh_connect"
|
||||||
|
|
||||||
module VagrantPlugins
|
module VagrantPlugins
|
||||||
module Kernel_V2
|
module Kernel_V2
|
||||||
class SSHConfig < Vagrant.plugin("2", :config)
|
class SSHConfig < SSHConnectConfig
|
||||||
attr_accessor :forward_agent
|
|
||||||
attr_accessor :forward_x11
|
|
||||||
attr_accessor :guest_port
|
attr_accessor :guest_port
|
||||||
attr_accessor :host
|
|
||||||
attr_accessor :keep_alive
|
attr_accessor :keep_alive
|
||||||
attr_accessor :max_tries
|
attr_accessor :max_tries
|
||||||
attr_accessor :port
|
|
||||||
attr_accessor :private_key_path
|
|
||||||
attr_accessor :shell
|
attr_accessor :shell
|
||||||
attr_accessor :timeout
|
attr_accessor :timeout
|
||||||
attr_accessor :username
|
|
||||||
|
attr_reader :default
|
||||||
|
|
||||||
def initialize
|
def initialize
|
||||||
@forward_agent = UNSET_VALUE
|
super
|
||||||
@forward_x11 = UNSET_VALUE
|
|
||||||
@guest_port = UNSET_VALUE
|
@guest_port = UNSET_VALUE
|
||||||
@host = UNSET_VALUE
|
@keep_alive = UNSET_VALUE
|
||||||
@keep_alive = UNSET_VALUE
|
@max_tries = UNSET_VALUE
|
||||||
@max_tries = UNSET_VALUE
|
@shell = UNSET_VALUE
|
||||||
@port = UNSET_VALUE
|
@timeout = UNSET_VALUE
|
||||||
@private_key_path = UNSET_VALUE
|
|
||||||
@shell = UNSET_VALUE
|
@default = SSHConnectConfig.new
|
||||||
@timeout = UNSET_VALUE
|
end
|
||||||
@username = UNSET_VALUE
|
|
||||||
|
def merge(other)
|
||||||
|
super.tap do |result|
|
||||||
|
merged_defaults = @default.merge(other.default)
|
||||||
|
result.instance_variable_set(:@default, merged_defaults)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def finalize!
|
def finalize!
|
||||||
@forward_agent = false if @forward_agent == UNSET_VALUE
|
super
|
||||||
@forward_x11 = false if @forward_x11 == UNSET_VALUE
|
|
||||||
@guest_port = nil if @guest_port == UNSET_VALUE
|
@guest_port = nil if @guest_port == UNSET_VALUE
|
||||||
@host = nil if @host == UNSET_VALUE
|
@keep_alive = false if @keep_alive == UNSET_VALUE
|
||||||
@keep_alive = false if @keep_alive == UNSET_VALUE
|
@max_tries = nil if @max_tries == UNSET_VALUE
|
||||||
@max_tries = nil if @max_tries == UNSET_VALUE
|
@shell = nil if @shell == UNSET_VALUE
|
||||||
@port = nil if @port == UNSET_VALUE
|
@timeout = nil if @timeout == UNSET_VALUE
|
||||||
@private_key_path = nil if @private_key_path == UNSET_VALUE
|
|
||||||
@shell = nil if @shell == UNSET_VALUE
|
@default.finalize!
|
||||||
@timeout = nil if @timeout == UNSET_VALUE
|
|
||||||
@username = nil if @username == UNSET_VALUE
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
|
@ -48,20 +49,21 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate(machine)
|
def validate(machine)
|
||||||
errors = _detected_errors
|
errors = super
|
||||||
|
|
||||||
[:max_tries, :timeout].each do |field|
|
[:max_tries, :timeout].each do |field|
|
||||||
value = instance_variable_get("@#{field}".to_sym)
|
value = instance_variable_get("@#{field}".to_sym)
|
||||||
errors << I18n.t("vagrant.config.common.error_empty", :field => field) if !value
|
errors << I18n.t("vagrant.config.common.error_empty", :field => field) if !value
|
||||||
end
|
end
|
||||||
|
|
||||||
if private_key_path && \
|
|
||||||
!File.file?(File.expand_path(private_key_path, machine.env.root_path))
|
|
||||||
errors << I18n.t("vagrant.config.ssh.private_key_missing", :path => private_key_path)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Return the errors
|
# Return the errors
|
||||||
{ to_s => errors }
|
result = { to_s => errors }
|
||||||
|
|
||||||
|
# Figure out the errors for the defaults
|
||||||
|
default_errors = @default.validate(machine)
|
||||||
|
result["SSH Defaults"] = default_errors if !default_errors.empty?
|
||||||
|
|
||||||
|
result
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
module VagrantPlugins
|
||||||
|
module Kernel_V2
|
||||||
|
class SSHConnectConfig < Vagrant.plugin("2", :config)
|
||||||
|
attr_accessor :forward_agent
|
||||||
|
attr_accessor :forward_x11
|
||||||
|
attr_accessor :host
|
||||||
|
attr_accessor :port
|
||||||
|
attr_accessor :private_key_path
|
||||||
|
attr_accessor :username
|
||||||
|
|
||||||
|
def initialize
|
||||||
|
@forward_agent = UNSET_VALUE
|
||||||
|
@forward_x11 = UNSET_VALUE
|
||||||
|
@host = UNSET_VALUE
|
||||||
|
@port = UNSET_VALUE
|
||||||
|
@private_key_path = UNSET_VALUE
|
||||||
|
@username = UNSET_VALUE
|
||||||
|
end
|
||||||
|
|
||||||
|
def finalize!
|
||||||
|
@forward_agent = false if @forward_agent == UNSET_VALUE
|
||||||
|
@forward_x11 = false if @forward_x11 == UNSET_VALUE
|
||||||
|
@host = nil if @host == UNSET_VALUE
|
||||||
|
@port = nil if @port == UNSET_VALUE
|
||||||
|
@private_key_path = nil if @private_key_path == UNSET_VALUE
|
||||||
|
@username = nil if @username == UNSET_VALUE
|
||||||
|
end
|
||||||
|
|
||||||
|
# NOTE: This is _not_ a valid config validation method, since it
|
||||||
|
# returns an _array_ of strings rather than a Hash. This is meant to
|
||||||
|
# be used with a subclass that handles this.
|
||||||
|
#
|
||||||
|
# @return [Array<String>]
|
||||||
|
def validate(machine)
|
||||||
|
errors = _detected_errors
|
||||||
|
|
||||||
|
if @private_key_path && \
|
||||||
|
!File.file?(File.expand_path(@private_key_path, machine.env.root_path))
|
||||||
|
errors << I18n.t("vagrant.config.ssh.private_key_missing", :path => @private_key_path)
|
||||||
|
end
|
||||||
|
|
||||||
|
errors
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -296,6 +296,22 @@ describe Vagrant::Machine do
|
||||||
|
|
||||||
instance.ssh_info[type].should == "bar"
|
instance.ssh_info[type].should == "bar"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should use the default if no override and no provider" do
|
||||||
|
provider_ssh_info[type] = nil
|
||||||
|
instance.config.ssh.send("#{type}=", nil)
|
||||||
|
instance.config.ssh.default.send("#{type}=", "foo")
|
||||||
|
|
||||||
|
instance.ssh_info[type].should == "foo"
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should use the override if set even with a provider" do
|
||||||
|
provider_ssh_info[type] = "baz"
|
||||||
|
instance.config.ssh.send("#{type}=", "bar")
|
||||||
|
instance.config.ssh.default.send("#{type}=", "foo")
|
||||||
|
|
||||||
|
instance.ssh_info[type].should == "bar"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should set the configured forward agent settings" do
|
it "should set the configured forward agent settings" do
|
||||||
|
|
Loading…
Reference in New Issue