vagrant/plugins/kernel_v2/config/ssh.rb

74 lines
1.8 KiB
Ruby

require "vagrant"
require_relative "ssh_connect"
module VagrantPlugins
module Kernel_V2
class SSHConfig < SSHConnectConfig
attr_accessor :forward_agent
attr_accessor :forward_x11
attr_accessor :guest_port
attr_accessor :keep_alive
attr_accessor :shell
attr_accessor :timeout
attr_reader :default
def initialize
super
@forward_agent = UNSET_VALUE
@forward_x11 = UNSET_VALUE
@guest_port = UNSET_VALUE
@keep_alive = UNSET_VALUE
@shell = UNSET_VALUE
@timeout = UNSET_VALUE
@default = SSHConnectConfig.new
end
def merge(other)
super.tap do |result|
merged_defaults = @default.merge(other.default)
result.instance_variable_set(:@default, merged_defaults)
end
end
def finalize!
super
@forward_agent = false if @forward_agent == UNSET_VALUE
@forward_x11 = false if @forward_x11 == UNSET_VALUE
@guest_port = nil if @guest_port == UNSET_VALUE
@keep_alive = false if @keep_alive == UNSET_VALUE
@shell = nil if @shell == UNSET_VALUE
@timeout = nil if @timeout == UNSET_VALUE
@default.finalize!
end
def to_s
"SSH"
end
def validate(machine)
errors = super
[:timeout].each do |field|
value = instance_variable_get("@#{field}".to_sym)
errors << I18n.t("vagrant.config.common.error_empty", :field => field) if !value
end
# Return the 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