Module: CloudClient

Defined in:
lib/deltacloud/drivers/opennebula/cloud_client.rb

Overview

The CloudClient module contains general functionality to implement a Cloud Client

Defined Under Namespace

Classes: Error

Constant Summary collapse

DEFAULT_AUTH_FILE =

######################################################################### Default location for the authentication file #########################################################################

ENV["HOME"]+"/.one/one_auth"

Class Method Summary collapse

Class Method Details

.get_one_authObject

######################################################################### Gets authorization credentials from ONE_AUTH or default auth file.

Raises an error if authorization is not found #########################################################################



63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/deltacloud/drivers/opennebula/cloud_client.rb', line 63

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

.http_start(url, timeout, &block) ⇒ Object

######################################################################### Starts an http connection and calls the block provided. SSL flag is set if needed. #########################################################################



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/deltacloud/drivers/opennebula/cloud_client.rb', line 82

def self.http_start(url, timeout, &block)
  http = Net::HTTP.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")
  end

  if res.is_a?(Net::HTTPSuccess)
    res
  else
    CloudClient::Error.new(res.body, res.code)
  end
end

.is_error?(value) ⇒ Boolean

######################################################################### Returns true if the object returned by a method of the OpenNebula library is an Error #########################################################################



145
146
147
# File 'lib/deltacloud/drivers/opennebula/cloud_client.rb', line 145

def self.is_error?(value)
  value.class==CloudClient::Error
end