Class: OpenStack::AuthV20

Inherits:
Object
  • Object
show all
Defined in:
lib/openstack/connection.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ AuthV20

Returns a new instance of AuthV20.



251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
# File 'lib/openstack/connection.rb', line 251

def initialize(connection)
  begin
    server = Net::HTTP::Proxy(connection.proxy_host, connection.proxy_port).new(connection.auth_host, connection.auth_port)
    if connection.auth_scheme == "https"
      server.use_ssl = true
      server.verify_mode = OpenSSL::SSL::VERIFY_NONE
    end
    server.start
  rescue
    raise OpenStack::Exception::Connection, "Unable to connect to #{server}"
  end

  @uri = String.new

  case connection.auth_method
    when "password"
      auth_data = JSON.generate({ "auth" =>  { "passwordCredentials" => { "username" => connection.authuser, "password" => connection.authkey }, connection.authtenant[:type] => connection.authtenant[:value]}})
    when "rax-kskey"
      auth_data = JSON.generate({"auth" => {"RAX-KSKEY:apiKeyCredentials" => {"username" => connection.authuser, "apiKey" => connection.authkey}}})
    when "key"
      auth_data = JSON.generate({"auth" => { "apiAccessKeyCredentials" => {"accessKey" => connection.authuser, "secretKey" => connection.authkey}, connection.authtenant[:type] => connection.authtenant[:value]}})
    else
      raise Exception::InvalidArgument, "Unrecognized auth method #{connection.auth_method}"
  end

  response = server.post(connection.auth_path.chomp("/")+"/tokens", auth_data, {'Content-Type' => 'application/json'})
  if (response.code =~ /^20./)
    resp_data=JSON.parse(response.body)
    connection.authtoken = resp_data['access']['token']['id']
    resp_data['access']['serviceCatalog'].each do |service|
      if service['type'] == connection.service_type
        endpoints = service["endpoints"]
        if connection.region
          endpoints.each do |ep|
            if ep["region"] and ep["region"].upcase == connection.region.upcase
              @uri = URI.parse(ep["publicURL"])
            end
          end
        else
          @uri = URI.parse(endpoints[0]["publicURL"])
        end
        if @uri == ""
          raise OpenStack::Exception::Authentication, "No API endpoint for region #{connection.region}"
        else
          connection.service_host = @uri.host
          connection.service_path = @uri.path
          connection.service_port = @uri.port
          connection.service_scheme = @uri.scheme
          connection.authok = true
        end
      end
    end
  else
    connection.authtoken = false
    raise OpenStack::Exception::Authentication, "Authentication failed with response code #{response.code}"
  end
  server.finish
end

Instance Attribute Details

#uriObject (readonly)

Returns the value of attribute uri.



249
250
251
# File 'lib/openstack/connection.rb', line 249

def uri
  @uri
end