Class: Fog::Compute::OpenStack::Real

Inherits:
Object
  • Object
show all
Defined in:
lib/rackspace-fog/openstack/compute.rb,
lib/rackspace-fog/openstack/requests/compute/get_quota.rb,
lib/rackspace-fog/openstack/requests/compute/get_usage.rb,
lib/rackspace-fog/openstack/requests/compute/list_hosts.rb,
lib/rackspace-fog/openstack/requests/compute/set_tenant.rb,
lib/rackspace-fog/openstack/requests/compute/get_address.rb,
lib/rackspace-fog/openstack/requests/compute/list_images.rb,
lib/rackspace-fog/openstack/requests/compute/list_usages.rb,
lib/rackspace-fog/openstack/requests/compute/add_fixed_ip.rb,
lib/rackspace-fog/openstack/requests/compute/create_image.rb,
lib/rackspace-fog/openstack/requests/compute/delete_image.rb,
lib/rackspace-fog/openstack/requests/compute/get_metadata.rb,
lib/rackspace-fog/openstack/requests/compute/list_flavors.rb,
lib/rackspace-fog/openstack/requests/compute/list_servers.rb,
lib/rackspace-fog/openstack/requests/compute/list_tenants.rb,
lib/rackspace-fog/openstack/requests/compute/list_volumes.rb,
lib/rackspace-fog/openstack/requests/compute/pause_server.rb,
lib/rackspace-fog/openstack/requests/compute/set_metadata.rb,
lib/rackspace-fog/openstack/requests/compute/update_quota.rb,
lib/rackspace-fog/openstack/requests/compute/attach_volume.rb,
lib/rackspace-fog/openstack/requests/compute/create_flavor.rb,
lib/rackspace-fog/openstack/requests/compute/create_server.rb,
lib/rackspace-fog/openstack/requests/compute/create_volume.rb,
lib/rackspace-fog/openstack/requests/compute/delete_flavor.rb,
lib/rackspace-fog/openstack/requests/compute/delete_server.rb,
lib/rackspace-fog/openstack/requests/compute/delete_volume.rb,
lib/rackspace-fog/openstack/requests/compute/detach_volume.rb,
lib/rackspace-fog/openstack/requests/compute/list_metadata.rb,
lib/rackspace-fog/openstack/requests/compute/reboot_server.rb,
lib/rackspace-fog/openstack/requests/compute/rescue_server.rb,
lib/rackspace-fog/openstack/requests/compute/resize_server.rb,
lib/rackspace-fog/openstack/requests/compute/resume_server.rb,
lib/rackspace-fog/openstack/requests/compute/server_action.rb,
lib/rackspace-fog/openstack/requests/compute/update_server.rb,
lib/rackspace-fog/openstack/requests/compute/list_addresses.rb,
lib/rackspace-fog/openstack/requests/compute/list_key_pairs.rb,
lib/rackspace-fog/openstack/requests/compute/list_snapshots.rb,
lib/rackspace-fog/openstack/requests/compute/migrate_server.rb,
lib/rackspace-fog/openstack/requests/compute/rebuild_server.rb,
lib/rackspace-fog/openstack/requests/compute/server_actions.rb,
lib/rackspace-fog/openstack/requests/compute/suspend_server.rb,
lib/rackspace-fog/openstack/requests/compute/unpause_server.rb,
lib/rackspace-fog/openstack/requests/compute/create_key_pair.rb,
lib/rackspace-fog/openstack/requests/compute/delete_key_pair.rb,
lib/rackspace-fog/openstack/requests/compute/delete_metadata.rb,
lib/rackspace-fog/openstack/requests/compute/delete_snapshot.rb,
lib/rackspace-fog/openstack/requests/compute/get_vnc_console.rb,
lib/rackspace-fog/openstack/requests/compute/release_address.rb,
lib/rackspace-fog/openstack/requests/compute/remove_fixed_ip.rb,
lib/rackspace-fog/openstack/requests/compute/update_metadata.rb,
lib/rackspace-fog/openstack/requests/compute/allocate_address.rb,
lib/rackspace-fog/openstack/requests/compute/get_host_details.rb,
lib/rackspace-fog/openstack/requests/compute/associate_address.rb,
lib/rackspace-fog/openstack/requests/compute/get_image_details.rb,
lib/rackspace-fog/openstack/requests/compute/boot_from_snapshot.rb,
lib/rackspace-fog/openstack/requests/compute/get_console_output.rb,
lib/rackspace-fog/openstack/requests/compute/get_flavor_details.rb,
lib/rackspace-fog/openstack/requests/compute/get_quota_defaults.rb,
lib/rackspace-fog/openstack/requests/compute/get_security_group.rb,
lib/rackspace-fog/openstack/requests/compute/get_server_details.rb,
lib/rackspace-fog/openstack/requests/compute/get_server_volumes.rb,
lib/rackspace-fog/openstack/requests/compute/get_volume_details.rb,
lib/rackspace-fog/openstack/requests/compute/list_address_pools.rb,
lib/rackspace-fog/openstack/requests/compute/list_all_addresses.rb,
lib/rackspace-fog/openstack/requests/compute/list_images_detail.rb,
lib/rackspace-fog/openstack/requests/compute/server_diagnostics.rb,
lib/rackspace-fog/openstack/requests/compute/list_flavors_detail.rb,
lib/rackspace-fog/openstack/requests/compute/list_servers_detail.rb,
lib/rackspace-fog/openstack/requests/compute/live_migrate_server.rb,
lib/rackspace-fog/openstack/requests/compute/disassociate_address.rb,
lib/rackspace-fog/openstack/requests/compute/get_snapshot_details.rb,
lib/rackspace-fog/openstack/requests/compute/list_security_groups.rb,
lib/rackspace-fog/openstack/requests/compute/revert_resize_server.rb,
lib/rackspace-fog/openstack/requests/compute/confirm_resize_server.rb,
lib/rackspace-fog/openstack/requests/compute/create_security_group.rb,
lib/rackspace-fog/openstack/requests/compute/delete_security_group.rb,
lib/rackspace-fog/openstack/requests/compute/list_public_addresses.rb,
lib/rackspace-fog/openstack/requests/compute/change_server_password.rb,
lib/rackspace-fog/openstack/requests/compute/create_volume_snapshot.rb,
lib/rackspace-fog/openstack/requests/compute/list_private_addresses.rb,
lib/rackspace-fog/openstack/requests/compute/create_security_group_rule.rb,
lib/rackspace-fog/openstack/requests/compute/delete_security_group_rule.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Real

Returns a new instance of Real.



221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
# File 'lib/rackspace-fog/openstack/compute.rb', line 221

def initialize(options={})
  @openstack_auth_token = options[:openstack_auth_token]
  @openstack_identity_public_endpoint = options[:openstack_identity_endpoint]

  unless @openstack_auth_token
    missing_credentials = Array.new
    @openstack_api_key  = options[:openstack_api_key]
    @openstack_username = options[:openstack_username]

    missing_credentials << :openstack_api_key  unless @openstack_api_key
    missing_credentials << :openstack_username unless @openstack_username
    raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty?
  end

  @openstack_tenant     = options[:openstack_tenant]
  @openstack_auth_uri   = URI.parse(options[:openstack_auth_url])
  @openstack_management_url       = options[:openstack_management_url]
  @openstack_must_reauthenticate  = false
  @openstack_service_name = options[:openstack_service_name] || ['nova', 'compute']
  @openstack_identity_service_name = options[:openstack_identity_service_name] || 'identity'

  @connection_options = options[:connection_options] || {}

  @current_user = options[:current_user]
  @current_tenant = options[:current_tenant]

  authenticate

  @persistent = options[:persistent] || false
  @connection = Fog::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
end

Instance Attribute Details

#auth_tokenObject (readonly)

Returns the value of attribute auth_token.



217
218
219
# File 'lib/rackspace-fog/openstack/compute.rb', line 217

def auth_token
  @auth_token
end

#current_tenantObject (readonly)

Returns the value of attribute current_tenant.



219
220
221
# File 'lib/rackspace-fog/openstack/compute.rb', line 219

def current_tenant
  @current_tenant
end

#current_userObject (readonly)

Returns the value of attribute current_user.



218
219
220
# File 'lib/rackspace-fog/openstack/compute.rb', line 218

def current_user
  @current_user
end

Instance Method Details

#add_fixed_ip(server_id, network_id) ⇒ Object

Add an IP address on a network.

Parameters

  • server_id <~String> - The ID of the server in which to add an IP to.

  • network_id <~String> - The ID of the network the IP should be on.

Returns

  • success <~Boolean>



12
13
14
15
16
17
18
19
# File 'lib/rackspace-fog/openstack/requests/compute/add_fixed_ip.rb', line 12

def add_fixed_ip(server_id, network_id)
  body = {
    'addFixedIp' => {
      'networkId' => network_id
    }
  }
  server_action(server_id, body).status == 202
end

#allocate_address(pool = nil) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/allocate_address.rb', line 6

def allocate_address(pool = nil)

  request(
    :body     => MultiJson.encode({'pool' => pool}),
    :expects  => [200, 202],
    :method   => 'POST',
    :path     => 'os-floating-ips.json'
  )
end

#associate_address(server_id, ip_address) ⇒ Object



6
7
8
9
# File 'lib/rackspace-fog/openstack/requests/compute/associate_address.rb', line 6

def associate_address(server_id, ip_address)
  body = { "addFloatingIp" => {"address" => ip_address}}
  server_action(server_id, body)
end

#attach_volume(volume_id, server_id, device) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/rackspace-fog/openstack/requests/compute/attach_volume.rb', line 6

def attach_volume(volume_id, server_id, device)
  data = {
    'volumeAttachment' => {
      'volumeId' => volume_id.to_s,
      'device'   => device
    }
  }
  request(
    :body     => MultiJson.encode(data),
    :expects  => [200, 202],
    :method   => 'POST',
    :path     => "servers/%s/os-volume_attachments" % [server_id]
  )
end

#boot_from_snapshot(name, image_ref, flavor_ref, options = {}) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/rackspace-fog/openstack/requests/compute/boot_from_snapshot.rb', line 5

def boot_from_snapshot(name, image_ref, flavor_ref, options={})
  data = {
    'server' => {
      'flavorRef'  => flavor_ref,
      'imageRef'   => image_ref,
      'name'       => name
    }
  }

  vanilla_options = ['metadata', 'accessIPv4', 'accessIPv6',
                     'availability_zone', 'user_data', 'block_device_mapping',
                     'key_name', 'security_groups']
  vanilla_options.select{|o| options[o]}.each do |key|
    data['server'][key] = options[key]
  end

  if options['personality']
    data['server']['personality'] = []
    for file in options['personality']
      data['server']['personality'] << {
        'contents'  => Base64.encode64(file['contents']),
        'path'      => file['path']
      }
    end
  end

  request(
    :body     => MultiJson.encode(data),
    :expects  => [200, 202],
    :method   => 'POST',
    :path     => '/os-volumes_boot.json'
  )
end

#change_server_password(server_id, admin_password) ⇒ Object



6
7
8
9
# File 'lib/rackspace-fog/openstack/requests/compute/change_server_password.rb', line 6

def change_server_password(server_id, admin_password)
  body = { 'changePassword' => { 'adminPass' => admin_password }}
  server_action(server_id, body)
end

#confirm_resize_server(server_id) ⇒ Object



6
7
8
9
# File 'lib/rackspace-fog/openstack/requests/compute/confirm_resize_server.rb', line 6

def confirm_resize_server(server_id)
  body = { 'confirmResize' => nil }
  server_action(server_id, body, 204)
end

#create_flavor(attributes) ⇒ Object

PARAMETERS # name = Name of flavor ram = Memory in MB vcpus = Number of VCPUs disk = Size of local disk in GB swap = Swap space in MB rxtx_factor = RX/TX factor



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/rackspace-fog/openstack/requests/compute/create_flavor.rb', line 12

def create_flavor(attributes)
  # Get last flavor id
  flavor_ids = Array.new
  flavors = list_flavors_detail.body['flavors']
  flavors.each do |flavor|
    flavor_ids << flavor['id'].to_i
  end

  # Set flavor id
  attributes[:flavor_id] = attributes[:flavor_id] || flavor_ids.sort.last + 1

  data = {
    'flavor' => {
      'name' => attributes[:name],
      'ram' => attributes[:ram],
      'vcpus' => attributes[:vcpus],
      'disk' => attributes[:disk],
      'id' => attributes[:flavor_id],
      'swap' => attributes[:swap],
      'OS-FLV-EXT-DATA:ephemeral' => attributes[:ephemeral],
      'rxtx_factor' => attributes[:rxtx_factor]
    }
  }

  request(
    :body => MultiJson.encode(data),
    :expects => 200,
    :method => 'POST',
    :path => 'flavors'
  )
end

#create_image(server_id, name, metadata = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/create_image.rb', line 6

def create_image(server_id, name, ={})
  body = { 'createImage' => {
    'name' => name,
    'metadata' => 
  }}
  data = server_action(server_id, body)
  image_id = data.headers["Location"].scan(/.*\/(.*)/).flatten[0]
  get_image_details(image_id)
end

#create_key_pair(key_name, public_key = nil) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/rackspace-fog/openstack/requests/compute/create_key_pair.rb', line 6

def create_key_pair(key_name, public_key = nil)

  data = {
    'keypair' => {
      'name' => key_name
    }
  }

  data['keypair']['public_key'] = public_key unless public_key.nil?

  request(
    :body     => MultiJson.encode(data),
    :expects  => 200,
    :method   => 'POST',
    :path     => 'os-keypairs.json'
  )
end

#create_security_group(name, description) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rackspace-fog/openstack/requests/compute/create_security_group.rb', line 6

def create_security_group(name, description)
  data = {
    'security_group' => {
      'name'       => name,
      'description' => description
    }
  }

  request(
    :body     => MultiJson.encode(data),
    :expects  => 200,
    :method   => 'POST',
    :path     => 'os-security-groups.json'
  )
end

#create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group_id = nil) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/rackspace-fog/openstack/requests/compute/create_security_group_rule.rb', line 6

def create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group_id=nil)
  data = {
    'security_group_rule' => {
      'parent_group_id' => parent_group_id,
      'ip_protocol'     => ip_protocol,
      'from_port'       => from_port,
      'to_port'         => to_port,
      'cidr'            => cidr,
      'group_id'        => group_id
    }
  }

  request(
    :expects  => 200,
    :method   => 'POST',
    :body     => MultiJson.encode(data),
    :path     => 'os-security-group-rules.json'
  )
end

#create_server(name, image_ref, flavor_ref, options = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rackspace-fog/openstack/requests/compute/create_server.rb', line 6

def create_server(name, image_ref, flavor_ref, options = {})
  data = {
    'server' => {
      'flavorRef'  => flavor_ref,
      'imageRef'   => image_ref,
      'name'       => name
    }
  }

  vanilla_options = ['metadata', 'accessIPv4', 'accessIPv6',
                     'availability_zone', 'user_data', 'key_name',
                     'security_groups']
  vanilla_options.select{|o| options[o]}.each do |key|
    data['server'][key] = options[key]
  end

  if options['personality']
    data['server']['personality'] = []
    for file in options['personality']
      data['server']['personality'] << {
        'contents'  => Base64.encode64(file['contents']),
        'path'      => file['path']
      }
    end
  end

  request(
    :body     => Fog::JSON.encode(data),
    :expects  => [200, 202],
    :method   => 'POST',
    :path     => 'servers.json'
  )
end

#create_volume(name, description, size, options = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/rackspace-fog/openstack/requests/compute/create_volume.rb', line 6

def create_volume(name, description, size, options={})
  data = {
    'volume' => {
      'display_name'        => name,
      'display_description' => description,
      'size'                => size
    }
  }

  vanilla_options = ['snapshot_id']
  vanilla_options.select{|o| options[o]}.each do |key|
    data['volume'][key] = options[key]
  end
  request(
    :body     => MultiJson.encode(data),
    :expects  => [200, 202],
    :method   => 'POST',
    :path     => "os-volumes"
  )
end

#create_volume_snapshot(volume_id, name, description, force = false) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/rackspace-fog/openstack/requests/compute/create_volume_snapshot.rb', line 6

def create_volume_snapshot(volume_id, name, description, force=false)
  data = {
    'snapshot' => {
      'volume_id'           => volume_id,
      'display_name'        => name,
      'display_description' => description,
      'force'               => force
    }
  }

  request(
    :body     => MultiJson.encode(data),
    :expects  => [200, 202],
    :method   => 'POST',
    :path     => "os-snapshots"
  )
end

#credentialsObject



253
254
255
256
257
258
259
260
261
# File 'lib/rackspace-fog/openstack/compute.rb', line 253

def credentials
  { :provider                 => 'openstack',
    :openstack_auth_url       => @openstack_auth_uri.to_s,
    :openstack_auth_token     => @auth_token,
    :openstack_management_url => @openstack_management_url,
    :openstack_identity_endpoint => @openstack_identity_public_endpoint,
    :current_user             => @current_user,
    :current_tenant           => @current_tenant }
end

#delete_flavor(flavor_id) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/rackspace-fog/openstack/requests/compute/delete_flavor.rb', line 5

def delete_flavor(flavor_id)
  request(
    :expects  => 202,
    :method   => 'DELETE',
    :path     => "flavors/#{flavor_id}"
  )
end

#delete_image(image_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/delete_image.rb', line 6

def delete_image(image_id)
  request(
    :expects  => 204,
    :method   => 'DELETE',
    :path     => "images/#{image_id}"
  )
end

#delete_key_pair(key_name) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/delete_key_pair.rb', line 6

def delete_key_pair(key_name)
  request(
    :expects  => 202,
    :method   => 'DELETE',
    :path     => "os-keypairs/#{key_name}"
  )
end

#delete_metadata(collection_name, parent_id, key) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/delete_metadata.rb', line 6

def (collection_name, parent_id, key)
  request(
    :expects  => 204,
    :method   => 'DELETE',
    :path     => "#{collection_name}/#{parent_id}/metadata/#{key}"
  )
end

#delete_security_group(security_group_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/delete_security_group.rb', line 6

def delete_security_group(security_group_id)
  request(
    :expects  => 202,
    :method   => 'DELETE',
    :path     => "os-security-groups/#{security_group_id}"
  )
end

#delete_security_group_rule(security_group_rule_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/delete_security_group_rule.rb', line 6

def delete_security_group_rule(security_group_rule_id)
  request(
    :expects  => 202,
    :method   => 'DELETE',
    :path     => "os-security-group-rules/#{security_group_rule_id}"
  )
end

#delete_server(server_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/delete_server.rb', line 6

def delete_server(server_id)
  request(
    :expects => 204,
    :method => 'DELETE',
    :path   => "servers/#{server_id}"
  )
end

#delete_snapshot(snapshot_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/delete_snapshot.rb', line 6

def delete_snapshot(snapshot_id)
  request(
    :expects  => 202,
    :method   => 'DELETE',
    :path     => "os-snapshots/#{snapshot_id}"
  )
end

#delete_volume(volume_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/delete_volume.rb', line 6

def delete_volume(volume_id)
  request(
    :expects  => 202,
    :method   => 'DELETE',
    :path     => "os-volumes/#{volume_id}"
  )
end

#detach_volume(server_id, attachment_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/detach_volume.rb', line 6

def detach_volume(server_id, attachment_id)
  request(
    :expects  => 202,
    :method   => 'DELETE',
    :path     => "servers/%s/os-volume_attachments/%s" % [server_id, attachment_id]
  )
end

#disassociate_address(server_id, ip_address) ⇒ Object



6
7
8
9
# File 'lib/rackspace-fog/openstack/requests/compute/disassociate_address.rb', line 6

def disassociate_address(server_id, ip_address)
  body = { "removeFloatingIp" => {"address" => ip_address}}
  server_action(server_id, body)
end

#get_address(address_id) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/get_address.rb', line 6

def get_address(address_id)

  request(
    :expects  => [200],
    :method   => 'GET',
    :path     => "os-floating-ips/#{address_id}"
  )
end

#get_console_output(server_id, log_length) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/get_console_output.rb', line 6

def get_console_output(server_id, log_length)
  body = {
    'os-getConsoleOutput' => {
      'length' => log_length
    }
  }
  server_action(server_id, body)
end

#get_flavor_details(flavor_ref) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/get_flavor_details.rb', line 6

def get_flavor_details(flavor_ref)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "flavors/#{flavor_ref}.json"
  )
end

#get_host_details(host) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/get_host_details.rb', line 6

def get_host_details(host)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "os-hosts/#{host}.json"
  )
end

#get_image_details(image_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/get_image_details.rb', line 6

def get_image_details(image_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "images/#{image_id}.json"
  )
end

#get_metadata(collection_name, parent_id, key) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/get_metadata.rb', line 6

def (collection_name, parent_id, key)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "#{collection_name}/#{parent_id}/metadata/#{key}"
  )
end

#get_quota(tenant_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/get_quota.rb', line 6

def get_quota(tenant_id)
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "/os-quota-sets/#{tenant_id}"
  )
end

#get_quota_defaults(tenant_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/get_quota_defaults.rb', line 6

def get_quota_defaults(tenant_id)
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "/os-quota-sets/#{tenant_id}/defaults"
  )
end

#get_security_group(security_group_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/get_security_group.rb', line 6

def get_security_group(security_group_id)
  request(
    :expects  => [200],
    :method   => 'GET',
    :path     => "os-security-groups/#{security_group_id}"
  )
end

#get_server_details(server_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/get_server_details.rb', line 6

def get_server_details(server_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "servers/#{server_id}.json"
  )
end

#get_server_volumes(server_id) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/get_server_volumes.rb', line 6

def get_server_volumes(server_id)

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "/servers/#{server_id}/os-volume_attachments"
  )
end

#get_snapshot_details(snapshot_id) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/get_snapshot_details.rb', line 6

def get_snapshot_details(snapshot_id)

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "os-snapshots/#{snapshot_id}"
  )
end

#get_usage(tenant_id, date_start, date_end) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/rackspace-fog/openstack/requests/compute/get_usage.rb', line 6

def get_usage(tenant_id, date_start, date_end)
  params = Hash.new
  params[:start] = date_start.utc.iso8601.chop!
  params[:end]   = date_end.utc.iso8601.chop!
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "os-simple-tenant-usage/#{tenant_id}",
    :query    => params
  )
end

#get_vnc_console(server_id, console_type) ⇒ Object

Get a vnc console for an instance.

Parameters

  • server_id <~String> - The ID of the server.

  • console_type <~String> - Type of vnc console to get (‘novnc’ or ‘xvpvnc’).

Returns

  • response <~Excon::Response>:

    • body <~Hash>:

      • url <~String>

      • type <~String>



15
16
17
18
19
20
21
22
# File 'lib/rackspace-fog/openstack/requests/compute/get_vnc_console.rb', line 15

def get_vnc_console(server_id, console_type)
  body = {
    'os-getVNCConsole' => {
      'type' => console_type
    }
  }
  server_action(server_id, body)
end

#get_volume_details(volume_id) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/get_volume_details.rb', line 6

def get_volume_details(volume_id)

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "os-volumes/#{volume_id}"
  )
end

#list_address_poolsObject



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/list_address_pools.rb', line 6

def list_address_pools
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "os-floating-ip-pools"
  )

end

#list_addresses(server_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_addresses.rb', line 6

def list_addresses(server_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "servers/#{server_id}/ips.json"
  )
end

#list_all_addressesObject



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/list_all_addresses.rb', line 6

def list_all_addresses
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "os-floating-ips.json"
  )

end

#list_flavorsObject



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_flavors.rb', line 6

def list_flavors
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'flavors.json'
  )
end

#list_flavors_detailObject



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_flavors_detail.rb', line 6

def list_flavors_detail
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'flavors/detail.json'
  )
end

#list_hostsObject



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_hosts.rb', line 6

def list_hosts
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'os-hosts.json'
  )
end

#list_imagesObject



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_images.rb', line 6

def list_images
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'images.json'
  )
end

#list_images_detailObject



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_images_detail.rb', line 6

def list_images_detail
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'images/detail.json'
  )
end

#list_key_pairsObject



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_key_pairs.rb', line 6

def list_key_pairs
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'os-keypairs.json'
  )
end

#list_metadata(collection_name, parent_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_metadata.rb', line 6

def (collection_name, parent_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "/#{collection_name}/#{parent_id}/metadata.json"
  )
end

#list_private_addresses(server_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_private_addresses.rb', line 6

def list_private_addresses(server_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "servers/#{server_id}/ips/private.json"
  )
end

#list_public_addresses(server_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/list_public_addresses.rb', line 6

def list_public_addresses(server_id)
  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => "servers/#{server_id}/ips/public.json"
  )
end

#list_security_groups(server_id = nil) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/rackspace-fog/openstack/requests/compute/list_security_groups.rb', line 6

def list_security_groups(server_id = nil)
  path = "os-security-groups.json"
  if server_id
    path = "servers/#{server_id}/#{path}"
  end
  request(
    :expects  => [200],
    :method   => 'GET',
    :path     => path
  )
end

#list_servers(options = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/rackspace-fog/openstack/requests/compute/list_servers.rb', line 6

def list_servers(options = {})
  params = Hash.new
  params['all_tenants'] = 'True' if options[:all_tenants]

  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'servers.json',
    :query   => params
  )
end

#list_servers_detail(options = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/rackspace-fog/openstack/requests/compute/list_servers_detail.rb', line 6

def list_servers_detail(options = {})
  params = Hash.new
  params['all_tenants'] = 'True' if options[:all_tenants]

  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'servers/detail.json',
    :query   => params
  )
end

#list_snapshots(detailed = true) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/list_snapshots.rb', line 6

def list_snapshots(detailed=true)

  path = detailed ? 'os-snapshots/detail' : 'os-snapshots'
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => path
  )
end

#list_tenantsObject



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/rackspace-fog/openstack/requests/compute/list_tenants.rb', line 5

def list_tenants
  response = @identity_connection.request({
    :expects => [200, 204],
    :headers => {'Content-Type' => 'application/json',
                 'X-Auth-Token' => @auth_token},
    :method  => 'GET',
    :path    => '/v2.0/tenants'
  })
  response.body = MultiJson.decode(response.body)
  response
end

#list_usages(date_start = nil, date_end = nil, detailed = false) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/rackspace-fog/openstack/requests/compute/list_usages.rb', line 6

def list_usages(date_start = nil, date_end = nil, detailed=false)
  params = Hash.new
  params[:start] = date_start.iso8601.gsub(/\+.*/, '') if date_start
  params[:end]   = date_end.iso8601.gsub(/\+.*/, '')   if date_end
  params[:detailed] = (detailed ? '1' : '0')           if detailed

  request(
    :expects  => [200, 203],
    :method   => 'GET',
    :path     => 'os-simple-tenant-usage',
    :query    => params
  )
end

#list_volumes(detailed = true) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/list_volumes.rb', line 6

def list_volumes(detailed=true)
  path = detailed ? 'os-volumes/detail' : 'os-volumes'
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => path
  )
end

#live_migrate_server(server_id, host, block_migration, disk_over_commit) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/rackspace-fog/openstack/requests/compute/live_migrate_server.rb', line 6

def live_migrate_server(server_id, host, block_migration, disk_over_commit)
  body = {
    'os-migrateLive' => {
      'host' => host,
      'block_migration' => block_migration,
      'disk_over_commit' => disk_over_commit,
    }
  }
  server_action(server_id, body)

end

#migrate_server(server_id) ⇒ Object



6
7
8
9
# File 'lib/rackspace-fog/openstack/requests/compute/migrate_server.rb', line 6

def migrate_server(server_id)
  body = { 'migrate' => nil }
  server_action(server_id, body)
end

#pause_server(server_id) ⇒ Object

Pause the server.

Parameters

  • server_id <~String> - The ID of the server to pause.

Returns

  • success <~Boolean>



11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/pause_server.rb', line 11

def pause_server(server_id)
  body = { 'pause' => nil }
  server_action(server_id, body).status == 202
end

#reboot_server(server_id, type = 'SOFT') ⇒ Object



6
7
8
9
# File 'lib/rackspace-fog/openstack/requests/compute/reboot_server.rb', line 6

def reboot_server(server_id, type = 'SOFT')
  body = { 'reboot' => { 'type' => type }}
  server_action(server_id, body)
end

#rebuild_server(server_id, image_ref, name, admin_pass = nil, metadata = nil, personality = nil) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
# File 'lib/rackspace-fog/openstack/requests/compute/rebuild_server.rb', line 6

def rebuild_server(server_id, image_ref, name, admin_pass=nil, =nil, personality=nil)

  body = { 'rebuild' => {
    'imageRef' => image_ref,
    'name' => name
  }}
  body['rebuild']['adminPass'] = admin_pass if admin_pass
  body['rebuild']['metadata'] =  if 
  body['rebuild']['personality'] = personality if personality
  server_action(server_id, body, 202)
end

#release_address(address_id) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rackspace-fog/openstack/requests/compute/release_address.rb', line 6

def release_address(address_id)
  request(
    :expects => [200, 202],
    :method => 'DELETE',
    :path   => "os-floating-ips/#{address_id}"
  )
end

#reloadObject



263
264
265
# File 'lib/rackspace-fog/openstack/compute.rb', line 263

def reload
  @connection.reset
end

#remove_fixed_ip(server_id, address) ⇒ Object

Remove an IP address.

Parameters

  • server_id <~String> - The ID of the server in which to remove an IP from.

  • address <~String> - The IP address to be removed.

Returns

  • success <~Boolean>



12
13
14
15
16
17
18
19
# File 'lib/rackspace-fog/openstack/requests/compute/remove_fixed_ip.rb', line 12

def remove_fixed_ip(server_id, address)
  body = {
    'removeFixedIp' => {
      'address' => address
    }
  }
  server_action(server_id, body).status == 202
end

#request(params) ⇒ Object



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
# File 'lib/rackspace-fog/openstack/compute.rb', line 267

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}/#{@tenant_id}/#{params[:path]}",
      :query    => params[:query] || ('ignore_awful_caching' << Time.now.to_i.to_s)
    }))
  rescue Excon::Errors::Unauthorized => error
    if error.response.body != 'Bad username or password' # token expiration
      @openstack_must_reauthenticate = true
      authenticate
      retry
    else # Bad Credentials
      raise error
    end
  rescue Excon::Errors::HTTPStatusError => error
    raise case error
      when Excon::Errors::NotFound
        Fog::Compute::OpenStack::NotFound.slurp(error)
      else
        error
      end
  end

  unless response.body.empty?
    response.body = Fog::JSON.decode(response.body)
  end

  response
end

#rescue_server(server_id) ⇒ Object

Rescue the server.

Parameters

  • server_id <~String> - The ID of the server to be rescued.

Returns

  • success <~Boolean>



11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/rescue_server.rb', line 11

def rescue_server(server_id)
  body = { 'rescue' => nil }
  server_action(server_id, body) == 202
end

#resize_server(server_id, flavor_ref) ⇒ Object



6
7
8
9
# File 'lib/rackspace-fog/openstack/requests/compute/resize_server.rb', line 6

def resize_server(server_id, flavor_ref)
  body = { 'resize' => { 'flavorRef' => flavor_ref }}
  server_action(server_id, body)
end

#resume_server(server_id) ⇒ Object

Resume the server.

Parameters

  • server_id <~String> - The ID of the server to be resumed.

Returns

  • success <~Boolean>



11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/resume_server.rb', line 11

def resume_server(server_id)
  body = { 'resume' => nil }
  server_action(server_id, body).status == 202
end

#revert_resized_server(server_id) ⇒ Object



6
7
8
9
# File 'lib/rackspace-fog/openstack/requests/compute/revert_resize_server.rb', line 6

def revert_resized_server(server_id)
  body = { 'revertResize' => nil }
  server_action(server_id, body)
end

#server_action(server_id, body, expects = [200,202]) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/server_action.rb', line 6

def server_action(server_id, body, expects=[200,202])
  request(
    :body     => Fog::JSON.encode(body),
    :expects  => expects,
    :method   => 'POST',
    :path     => "servers/#{server_id}/action.json"
  )
end

#server_actions(server_id) ⇒ Object

Retrieve server actions.

Parameters

  • server_id <~String> - The ID of the server to query for available actions.

Returns

  • actions <~Array>



11
12
13
14
15
16
17
# File 'lib/rackspace-fog/openstack/requests/compute/server_actions.rb', line 11

def server_actions(server_id)
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "servers/#{server_id}/actions"
  ).body['actions']
end

#server_diagnostics(server_id) ⇒ Object

Retrieve server diagnostics.

Parameters

  • server_id <~String> - The ID of the server to retrieve diagnostics.

Returns

  • actions <~Array>



11
12
13
14
15
16
# File 'lib/rackspace-fog/openstack/requests/compute/server_diagnostics.rb', line 11

def server_diagnostics(server_id)
  request(
    :method   => 'GET',
    :path     => "servers/#{server_id}/diagnostics"
  )
end

#set_metadata(collection_name, parent_id, metadata = {}) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/set_metadata.rb', line 7

def (collection_name, parent_id,  = {})
  request(
    :body     => Fog::JSON.encode({ 'metadata' =>  }),
    :expects  => 200,
    :method   => 'PUT',
    :path     => "#{collection_name}/#{parent_id}/metadata"
  )
end

#set_tenant(tenant) ⇒ Object



6
7
8
9
10
# File 'lib/rackspace-fog/openstack/requests/compute/set_tenant.rb', line 6

def set_tenant(tenant)
  @openstack_must_reauthenticate = true
  @openstack_tenant = tenant.to_s
  authenticate
end

#suspend_server(server_id) ⇒ Object

Suspend the server.

Parameters

  • server_id <~String> - The ID of the server to suspend.

Returns

  • success <~Boolean>



11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/suspend_server.rb', line 11

def suspend_server(server_id)
  body = { 'suspend' => nil }
  server_action(server_id, body).status == 202
end

#unpause_server(server_id) ⇒ Object

Unpause the server.

Parameters

  • server_id <~String> - The ID of the server to unpause.

Returns

  • success <~Boolean>



11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/unpause_server.rb', line 11

def unpause_server(server_id)
  body = { 'unpause' => nil }
  server_action(server_id, body).status == 202
end

#update_metadata(collection_name, parent_id, metadata = {}) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/update_metadata.rb', line 7

def (collection_name, parent_id,  = {})
  request(
    :body     => Fog::JSON.encode({ 'metadata' =>  }),
    :expects  => 200,
    :method   => 'POST',
    :path     => "#{collection_name}/#{parent_id}/metadata.json"
  )
end

#update_quota(tenant_id, options = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/rackspace-fog/openstack/requests/compute/update_quota.rb', line 6

def update_quota(tenant_id, options = {})
  options['tenant_id'] = tenant_id
  request(
    :body => MultiJson.encode({ 'quota_set' => options }),
    :expects => 200,
    :method => 'PUT',
    :path => "/os-quota-sets/#{tenant_id}"
  )
end

#update_server(server_id, options = {}) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/rackspace-fog/openstack/requests/compute/update_server.rb', line 6

def update_server(server_id, options = {})
  request(
    :body     => Fog::JSON.encode({ 'server' => options }),
    :expects  => 200,
    :method   => 'PUT',
    :path     => "servers/#{server_id}.json"
  )
end