def self.connect(user, pass, host, provider='any', opts={:driver => 'auto',
:timeout => 'default', :debug => false})
installed = false
if provider.is_a?(Hash)
opts = provider
provider = 'any'
end
opts[:driver] ||= 'auto'
opts[:timeout] ||= 'default'
opts[:debug] = false if opts[:debug] != true
if ! opts[:privilege].nil?
if ! supported_privilege_type?(opts[:privilege])
raise "Invalid privilege type :#{opts[:privilege]}, must be one of: #{PRIV_TYPES.join("\n")}"
end
end
if provider == 'any'
if is_provider_installed?("freeipmi")
provider = "freeipmi"
installed = true
elsif is_provider_installed?("ipmitool")
provider = "ipmitool"
installed = true
else
raise "No IPMI provider is installed, please install freeipmi or ipmitool"
end
end
unless valid_drivers.include?(opts[:driver])
raise "You must specify a valid driver: #{valid_drivers.join(',')}"
end
if installed or is_provider_installed?(provider)
if provider == "freeipmi"
@conn = Rubyipmi::Freeipmi::Connection.new(user, pass, host, opts)
elsif provider == "ipmitool"
@conn = Rubyipmi::Ipmitool::Connection.new(user,pass,host, opts)
else
raise "Incorrect provider given, must use freeipmi or ipmitool"
end
else
raise "The IPMI provider: #{provider} is not installed"
end
end