class OpenNebula::Client
The client class, represents the connection with the core and handles the xml-rpc calls.
Constants
- XMLPARSER
Attributes
one_auth[RW]
one_endpoint[R]
Public Class Methods
new(secret=nil, endpoint=nil, options={})
click to toggle source
Creates a new client object that will be used to call OpenNebula functions.
@param [String, nil] secret user credentials (“user:password”) or
nil to get the credentials from user auth file
@param [String, nil] endpoint OpenNebula server endpoint
(http://host:2633/RPC2) or nil to get it form the environment variable ONE_XMLRPC or use the default endpoint
@param [Hash] options @option params [Integer] :timeout connection timeout in seconds,
defaults to 30
@option params [String] :http_proxy HTTP proxy string used for
connecting to the endpoint; defaults to no proxy
@option params [Boolean] :sync Use only one http connection for
all calls. It should not be used for multithreaded programs. It's the only mode that can be used with :cert_dir and :disable_ssl_verify
@option params [String] :cert_dir Extra directory where to import
trusted issuer certificates. Use with :sync = true
@option params [String] :disable_ssl_verify Disable SSL certificate
verification. Use only for testing and with :sync = true
@return [OpenNebula::Client]
# File lib/opennebula/client.rb, line 119 def initialize(secret=nil, endpoint=nil, options={}) if secret @one_auth = secret elsif ENV["ONE_AUTH"] and !ENV["ONE_AUTH"].empty? and File.file?(ENV["ONE_AUTH"]) @one_auth = File.read(ENV["ONE_AUTH"]) elsif ENV["HOME"] and File.file?(ENV["HOME"]+"/.one/one_auth") @one_auth = File.read(ENV["HOME"]+"/.one/one_auth") elsif File.file?("/var/lib/one/.one/one_auth") @one_auth = File.read("/var/lib/one/.one/one_auth") else raise "ONE_AUTH file not present" end @one_auth.rstrip! if endpoint @one_endpoint = endpoint elsif ENV["ONE_XMLRPC"] @one_endpoint = ENV["ONE_XMLRPC"] elsif ENV['HOME'] and File.exists?(ENV['HOME']+"/.one/one_endpoint") @one_endpoint = File.read(ENV['HOME']+"/.one/one_endpoint") elsif File.exists?("/var/lib/one/.one/one_endpoint") @one_endpoint = File.read("/var/lib/one/.one/one_endpoint") else @one_endpoint = "http://localhost:2633/RPC2" end @async = !options[:sync] timeout=nil timeout=options[:timeout] if options[:timeout] http_proxy=nil http_proxy=options[:http_proxy] if options[:http_proxy] @server = XMLRPC::Client.new2(@one_endpoint, http_proxy, timeout) @server.http_header_extra = {'accept-encoding' => 'identity'} http = @server.instance_variable_get("@http") if options[:cert_dir] || ENV['ONE_CERT_DIR'] raise "SSL options don't work in async mode" if @async cert_dir = options[:cert_dir] || ENV['ONE_CERT_DIR'] cert_files = Dir["#{cert_dir}/*"] cert_store = OpenSSL::X509::Store.new cert_store.set_default_paths cert_files.each {|cert| cert_store.add_file(cert) } http.cert_store = cert_store end if options[:disable_ssl_verify] || ENV['ONE_DISABLE_SSL_VERIFY'] raise "SSL options don't work in async mode" if @async http.verify_mode = OpenSSL::SSL::VERIFY_NONE end if defined?(OxStreamParser) @server.set_parser(OxStreamParser.new) elsif OpenNebula::NOKOGIRI @server.set_parser(NokogiriStreamParser.new) elsif XMLPARSER @server.set_parser(XMLRPC::XMLParser::XMLStreamParser.new) end end
Public Instance Methods
call(action, *args)
click to toggle source
# File lib/opennebula/client.rb, line 188 def call(action, *args) begin if @async response = @server.call_async("one."+action, @one_auth, *args) else response = @server.call("one."+action, @one_auth, *args) end if response[0] == false Error.new(response[1], response[2]) else response[1] #response[1..-1] end rescue Exception => e Error.new(e.message) end end
get_version()
click to toggle source
# File lib/opennebula/client.rb, line 206 def get_version() call("system.version") end