class Fog::Compute::RackspaceV2::Real

Public Class Methods

new(options = {}) click to toggle source
# File lib/fog/rackspace/compute_v2.rb, line 61
def initialize(options = {})
  @rackspace_api_key = options[:rackspace_api_key]
  @rackspace_username = options[:rackspace_username]
  @rackspace_auth_url = options[:rackspace_auth_url]
  @rackspace_must_reauthenticate = false
  @connection_options = options[:connection_options] || {}

  endpoint = options[:rackspace_endpoint] || DFW_ENDPOINT
  uri = URI.parse(endpoint)

  @host = uri.host
  @persistent = options[:persistent] || false
  @path = uri.path
  @port = uri.port
  @scheme = uri.scheme

  authenticate

  @connection = Fog::Connection.new(uri.to_s, @persistent, @connection_options)
end

Public Instance Methods

attach_volume(server_id, volume_id, device) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/attach_volume.rb, line 5
def attach_volume(server_id, volume_id, device)
  data = {
    'volumeAttachment' => {
      'volumeId' => volume_id,
      'device' => device
    }
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => [200],
    :method => 'POST',
    :path => "servers/#{server_id}/os-volume_attachments"
  )
end
change_server_password(server_id, password) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/change_server_password.rb, line 5
def change_server_password(server_id, password)
  data = {
    'changePassword' => {
      'adminPass' => password
    }
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => [202],
    :method => 'POST',
    :path => "servers/#{server_id}/action"
  )
end
confirm_resize_server(server_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/confirm_resize_server.rb, line 5
def confirm_resize_server(server_id)
  data = {
    'confirmResize' => nil
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => [204],
    :method => 'POST',
    :path => "servers/#{server_id}/action"
  )
end
create_server(name, image_id, flavor_id, min_count, max_count, options = {}) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/create_server.rb, line 5
def create_server(name, image_id, flavor_id, min_count, max_count, options = {})
  data = {
    'server' => {
      'name' => name,
      'imageRef' => image_id,
      'flavorRef' => flavor_id,
      'minCount' => min_count,
      'maxCount' => max_count
    }
  }

  data['server']['OS-DCF:diskConfig'] = options[:disk_config] unless options[:disk_config].nil?

  request(
    :body => Fog::JSON.encode(data),
    :expects => [202],
    :method => 'POST',
    :path => "servers"
  )
end
delete_attachment(server_id, volume_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/delete_attachment.rb, line 5
def delete_attachment(server_id, volume_id)
  request(
    :expects => [202],
    :method => 'DELETE',
    :path => "servers/#{server_id}/os-volume_attachments/#{volume_id}"
  )
end
delete_server(server_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/delete_server.rb, line 5
def delete_server(server_id)
  request(
    :expects => [204],
    :method => 'DELETE',
    :path => "servers/#{server_id}"
  )
end
get_attachment(server_id, volume_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/get_attachment.rb, line 5
def get_attachment(server_id, volume_id)
  request(
    :expects => [200, 203, 300],
    :method => 'GET',
    :path => "servers/#{server_id}/os-volume_attachments/#{volume_id}"
  )
end
get_flavor(flavor_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/get_flavor.rb, line 5
def get_flavor(flavor_id)
  request(
    :expects => [200, 203],
    :method => 'GET',
    :path => "flavors/#{flavor_id}"
  )
end
get_image(image_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/get_image.rb, line 5
def get_image(image_id)
  request(
    :expects => [200, 203],
    :method => 'GET',
    :path => "images/#{image_id}"
  )
end
get_server(server_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/get_server.rb, line 5
def get_server(server_id)
  request(
    :expects => [200, 203, 300],
    :method => 'GET',
    :path => "servers/#{server_id}"
  )
end
list_attachments(server_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/list_attachments.rb, line 5
def list_attachments(server_id)
  request(
    :expects => [200, 203, 300],
    :method => 'GET',
    :path => "servers/#{server_id}/os-volume_attachments"
  )
end
list_flavors() click to toggle source
# File lib/fog/rackspace/requests/compute_v2/list_flavors.rb, line 5
def list_flavors
  request(
    :expects => [200, 203],
    :method => 'GET',
    :path => 'flavors'
  )
end
list_images() click to toggle source
# File lib/fog/rackspace/requests/compute_v2/list_images.rb, line 5
def list_images
  request(
    :expects => [200, 203],
    :method => 'GET',
    :path => 'images'
  )
end
list_servers() click to toggle source
# File lib/fog/rackspace/requests/compute_v2/list_servers.rb, line 5
def list_servers
  request(
    :expects => [200, 203, 300],
    :method => 'GET',
    :path => 'servers/detail'
  )
end
reboot_server(server_id, type) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/reboot_server.rb, line 5
def reboot_server(server_id, type)
  data = {
    'reboot' => {
      'type' => type
    }
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => [202],
    :method => 'POST',
    :path => "servers/#{server_id}/action"
  )
end
rebuild_server(server_id, image_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/rebuild_server.rb, line 5
def rebuild_server(server_id, image_id)
  data = {
    'rebuild' => {
      'imageRef' => image_id
    }
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => [202],
    :method => 'POST',
    :path => "servers/#{server_id}/action"
  )
end
request(params) click to toggle source
# File lib/fog/rackspace/compute_v2.rb, line 82
def request(params)
  begin
    response = @connection.request(params.merge!({
      :headers  => {
        'Content-Type' => 'application/json',
        'X-Auth-Token' => @auth_token
      }.merge!(params[:headers] || {}),
      :host     => @host,
      :path     => "#{@path}/#{params[:path]}"
    }))
  rescue Excon::Errors::NotFound => error
    raise NotFound.slurp error
  rescue Excon::Errors::BadRequest => error
    raise BadRequest.slurp error
  rescue Excon::Errors::InternalServerError => error
    raise InternalServerError.slurp error
  rescue Excon::Errors::HTTPStatusError => error
    raise ServiceError.slurp error
  end
  unless response.body.empty?
    response.body = Fog::JSON.decode(response.body)
  end
  response
end
resize_server(server_id, flavor_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/resize_server.rb, line 5
def resize_server(server_id, flavor_id)
  data = {
    'resize' => {
      'flavorRef' => flavor_id
    }
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => [202],
    :method => 'POST',
    :path => "servers/#{server_id}/action"
  )
end
revert_resize_server(server_id) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/revert_resize_server.rb, line 5
def revert_resize_server(server_id)
  data = {
    'revertResize' => nil
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => [202],
    :method => 'POST',
    :path => "servers/#{server_id}/action"
  )
end
update_server(server_id, name) click to toggle source
# File lib/fog/rackspace/requests/compute_v2/update_server.rb, line 5
def update_server(server_id, name)
  data = {
    'server' => {
      'name' => name
    }
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => [200],
    :method => 'PUT',
    :path => "servers/#{server_id}"
  )
end

Private Instance Methods

authenticate() click to toggle source
# File lib/fog/rackspace/compute_v2.rb, line 109
def authenticate
  options = {
    :rackspace_api_key  => @rackspace_api_key,
    :rackspace_username => @rackspace_username,
    :rackspace_auth_url => @rackspace_auth_url
  }
  credentials = Fog::Rackspace.authenticate(options, @connection_options)
  @auth_token = credentials['X-Auth-Token']
  account_id = credentials['X-Server-Management-Url'].match(/.*\/([\d]+)$/)[1]
  @path = "#{@path}/#{account_id}"
end