class Fog::Compute::UKCloud::Real

Constants

UKCLOUD_DEFAULT_ENDPOINT

Attributes

cookies[R]
ukcloud_endpoint[R]
ukcloud_username[R]

Public Class Methods

new(options={}) click to toggle source
# File lib/fog/ukcloud/compute.rb, line 29
def initialize(options={})
  @ukcloud_username = options[:ukcloud_username]
  @ukcloud_password = options[:ukcloud_password]
  @ukcloud_endpoint = options[:ukcloud_endpoint] || UKCLOUD_DEFAULT_ENDPOINT
  @path = 'api'
  @connection_options = options[:connection_options] || {}
  @connection_options[:omit_default_port] = true unless @connection_options[:omit_default_port]
  @cookies = ''

  scheme = 'https'
  port = '443'
  url = sprintf('%s://%s:%s', scheme, @ukcloud_endpoint, port)

  @connection = Fog::XML::Connection.new(url, false, @connection_options)
end

Public Instance Methods

get_cookies() click to toggle source
# File lib/fog/ukcloud/compute.rb, line 46
def get_cookies
  login if @cookies.empty?
  @cookies
end
get_my_vm() click to toggle source
# File lib/fog/ukcloud/requests/compute/get_my_vm.rb, line 5
def get_my_vm

  request(
    :expects => 200,
    :method  => 'GET',
    :parser  => Fog::ToHashDocument.new,
    :path    => "#{@path}/my_vm"
  )

end
get_ping() click to toggle source
# File lib/fog/ukcloud/requests/compute/get_ping.rb, line 5
def get_ping

  request(
    :expects => 200,
    :method  => 'GET',
    #:parser  => Fog::ToHashDocument.new,
    :path    => "#{@path}/ping"
  )

end
login() click to toggle source
# File lib/fog/ukcloud/compute.rb, line 87
def login
  response = post_login_session
  @cookies = response.headers['Set-Cookie']
  if response[:cookies].empty? && response.status == 201 then
    err =  RuntimeError.new("No Cookie In Response")
    raise Fog::UKCloud::Errors::ServiceError.slurp(err)
  end

end
post_login_session() click to toggle source
# File lib/fog/ukcloud/requests/compute/post_login_session.rb, line 7
def post_login_session

  body = {
    :email => @ukcloud_username,
    :password => @ukcloud_password
  }

  begin

    @connection.request(
      :headers => {'Accept' => 'application/json'},
      :expects => 201,
      :method  => 'POST',
      :body => Fog::JSON.encode(body),
      :path    => "#{@path}/authenticate"
    )
  rescue Excon::Errors::HTTPStatusError => error
    raise case error
      when Excon::Errors::BadRequest   then Fog::UKCloud::Errors::BadRequest.slurp(error);
      when Excon::Errors::Unauthorized then Fog::UKCloud::Errors::Unauthorised.slurp(error);
      when Excon::Errors::Forbidden    then Fog::UKCloud::Errors::Forbidden.slurp(error);
      when Excon::Errors::Conflict     then Fog::UKCloud::Errors::Conflict.slurp(error);
    else
      Fog::UKCloud::Errors::ServiceError.slurp(error)
    end
  end


end
request(params) click to toggle source
# File lib/fog/ukcloud/compute.rb, line 52
def request(params)
  path = params[:path]
  params[:body] = Fog::JSON.encode(params[:body]) if params[:body]
  begin


    headers = {
      'Accept' => 'application/json',
      'Content-Type' => 'application/json',
      'Cookie' => get_cookies
    }

    @connection.request({
      :body       => params[:body],
      :expects    => params[:expects],
      :headers    => headers.merge!(params[:headers] || {}),
      :idempotent => params[:idempotent],
      :method     => params[:method],
      :parser     => params[:parser],
      :path       => path,
      :query      => params[:query]
    })
  rescue Excon::Errors::HTTPStatusError => error
    raise case error
      when Excon::Errors::BadRequest   then Fog::UKCloud::Errors::BadRequest.slurp(error);
      when Excon::Errors::Unauthorized then Fog::UKCloud::Errors::Unauthorised.slurp(error);
      when Excon::Errors::Forbidden    then Fog::UKCloud::Errors::Forbidden.slurp(error);
      when Excon::Errors::Conflict     then Fog::UKCloud::Errors::Conflict.slurp(error);
    else
      Fog::UKCloud::Errors::ServiceError.slurp(error)
    end
  end
end