Class: OpenStack::AuthV10

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

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ AuthV10

Returns a new instance of AuthV10.



343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
# File 'lib/openstack/connection.rb', line 343

def initialize(connection)
  tries = connection.retries
  time = 3

  hdrhash = { "X-Auth-User" => connection.authuser, "X-Auth-Key" => connection.authkey }
  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

      # use the ca_cert if were given one, and make sure to verify!
      if !connection.ca_cert.nil?
        server.ca_file = connection.ca_cert
        server.verify_mode = OpenSSL::SSL::VERIFY_PEER
      end

      # explicitly set the SSL version to use
      server.ssl_version = connection.ssl_version if !connection.ssl_version.nil?
    end
    server.start
  rescue
    puts "Can't connect to the server: #{tries} tries  to reconnect" if connection.is_debug
    sleep time += 1
    retry unless (tries -= 1) <= 0
    raise OpenStack::Exception::Connection, "Unable to connect to #{server}"
  end

  response = server.get(connection.auth_path, hdrhash)

  if (response.code =~ /^20./)
    connection.authtoken = response["x-auth-token"]
    case connection.service_type
    when "compute"
      uri = URI.parse(response["x-server-management-url"])
    when "object-store"
      uri = URI.parse(response["x-storage-url"])
    end
    raise OpenStack::Exception::Authentication, "Unexpected Response from  #{connection.auth_host} - couldn't get service URLs: \"x-server-management-url\" is: #{response["x-server-management-url"]} and \"x-storage-url\" is: #{response["x-storage-url"]}"  if (uri.host.nil? || uri.host=="")
    connection.service_host = uri.host
    connection.service_path = uri.path
    connection.service_port = uri.port
    connection.service_scheme = uri.scheme
    connection.authok = true
  else
    connection.authok = false
    raise OpenStack::Exception::Authentication, "Authentication failed with response code #{response.code}"
  end
  server.finish
end