module CloudClient
The CloudClient module contains general functionality to implement a Cloud Client
Constants
- DEFAULT_AUTH_FILE
- VERSION
OpenNebula version
Public Class Methods
######################################################################### Gets authorization credentials from ONE_AUTH or default auth file.
Raises an error if authorization is not found #########################################################################
# File lib/cloud/CloudClient.rb, line 73 def self.get_one_auth if ENV["ONE_AUTH"] and !ENV["ONE_AUTH"].empty? and File.file?(ENV["ONE_AUTH"]) one_auth=File.read(ENV["ONE_AUTH"]).strip.split(':') elsif File.file?(DEFAULT_AUTH_FILE) one_auth=File.read(DEFAULT_AUTH_FILE).strip.split(':') else raise "No authorization data present" end raise "Authorization data malformed" if one_auth.length < 2 one_auth end
######################################################################### Starts an http connection and calls the block provided. SSL flag is set if needed. #########################################################################
# File lib/cloud/CloudClient.rb, line 92 def self.http_start(url, timeout, &block) host = nil port = nil if ENV['http_proxy'] uri_proxy = URI.parse(ENV['http_proxy']) flag = false # Check if we need to bypass the proxy if ENV['no_proxy'] ENV['no_proxy'].split(',').each do |item| item = item.rstrip.lstrip unless (IPAddress(url.host) rescue nil).nil? unless (IPAddress(item) rescue nil).nil? flag |= IPAddress(item).include? IPAddress(url.host) end else if (IPAddress(item) rescue nil).nil? flag |= (item == url.host) end end end end unless flag host = uri_proxy.host port = uri_proxy.port end end http = Net::HTTP::Proxy(host, port).new(url.host, url.port) if timeout http.read_timeout = timeout.to_i end if url.scheme=='https' http.use_ssl = true http.verify_mode=OpenSSL::SSL::VERIFY_NONE end begin res = http.start do |connection| block.call(connection) end rescue Errno::ECONNREFUSED => e str = "Error connecting to server (#{e.to_s}).\n" str << "Server: #{url.host}:#{url.port}" return CloudClient::Error.new(str,"503") rescue Errno::ETIMEDOUT => e str = "Error timeout connecting to server (#{e.to_s}).\n" str << "Server: #{url.host}:#{url.port}" return CloudClient::Error.new(str,"504") rescue Timeout::Error => e str = "Error timeout while connected to server (#{e.to_s}).\n" str << "Server: #{url.host}:#{url.port}" return CloudClient::Error.new(str,"504") rescue SocketError => e str = "Error timeout while connected to server (#{e.to_s}).\n" return CloudClient::Error.new(str,"503") rescue return CloudClient::Error.new($!.to_s,"503") end if res.is_a?(Net::HTTPSuccess) res else CloudClient::Error.new(res.body, res.code) end end
######################################################################### Returns true if the object returned by a method of the OpenNebula library is an Error #########################################################################
# File lib/cloud/CloudClient.rb, line 191 def self.is_error?(value) value.class==CloudClient::Error end