blob: 3d709e17bc98d03bce6882fe85c241369fba4302 [file] [log] [blame]
#
# read client.yml and provide access
#
require 'yaml'
require File.join(File.dirname(__FILE__),'auth-callback')
def show_fault result
fault = Openwsman::Fault.new result
STDERR.puts "Fault code #{fault.code}, subcode #{fault.subcode}"
STDERR.puts "\treason #{fault.reason}"
STDERR.puts "\tdetail #{fault.detail}"
end
def show_error client
STDERR.puts "Client failed"
STDERR.puts "\tResult code #{client.response_code}, Fault: #{client.fault_string.inspect}"
end
def fault? client, result
if result
if result.fault?
show_fault result
true
end
else
show_error client
true
end
end
class Client
@wsmcs = YAML.load( File.open( File.join(File.dirname(__FILE__),"clients.yml") ) )
def Client.open( name=nil )
name = ENV["WSMANCLIENT"] if name.nil?
name = "localhost" unless name
client = @wsmcs[name]
if client.nil?
STDERR.puts "Client.open unknown name '#{name}'"
raise "Check WSMANCLIENT environment variable against clients.yml"
end
wsmc = Openwsman::Client.new( client["host"], client["port"], client["path"], client["scheme"], client["username"], client["password"] )
wsmc.transport.timeout = 120
#
# Allow to enforce auth scheme
# e.g. required for Windows which offers BASIC|GSS and Openwsman chooses the strongest (GSS) but non-working
#
case client["auth"]
when nil
wsmc.transport.auth_method = nil
when /none/i
wsmc.transport.auth_method = Openwsman::NO_AUTH_STR
when /basic/i
wsmc.transport.auth_method = Openwsman::BASIC_AUTH_STR
when /digest/i
wsmc.transport.auth_method = Openwsman::DIGEST_AUTH_STR
when /pass/i
wsmc.transport.auth_method = Openwsman::PASS_AUTH_STR
when /ntlm/i
wsmc.transport.auth_method = Openwsman::NTLM_AUTH_STR
when /gss/i
wsmc.transport.auth_method = Openwsman::GSSNEGOTIATE_AUTH_STR
else
raise "Unknown auth_scheme #{@auth_scheme.inspect}"
end
if client["scheme"] == "https"
wsmc.transport.verify_peer = 0
wsmc.transport.verify_host = 0
end
wsmc
end
end