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

Inherits:
Object
  • Object
show all
Includes:
OpenStack::Core
Defined in:
lib/fog/openstack/requests/compute/get_limits.rb,
lib/fog/openstack/compute.rb,
lib/fog/openstack/requests/compute/get_quota.rb,
lib/fog/openstack/requests/compute/get_usage.rb,
lib/fog/openstack/requests/compute/list_hosts.rb,
lib/fog/openstack/requests/compute/list_zones.rb,
lib/fog/openstack/requests/compute/set_tenant.rb,
lib/fog/openstack/requests/compute/delete_meta.rb,
lib/fog/openstack/requests/compute/get_address.rb,
lib/fog/openstack/requests/compute/list_images.rb,
lib/fog/openstack/requests/compute/list_usages.rb,
lib/fog/openstack/requests/compute/stop_server.rb,
lib/fog/openstack/requests/compute/update_meta.rb,
lib/fog/openstack/requests/compute/add_fixed_ip.rb,
lib/fog/openstack/requests/compute/create_image.rb,
lib/fog/openstack/requests/compute/delete_image.rb,
lib/fog/openstack/requests/compute/get_metadata.rb,
lib/fog/openstack/requests/compute/list_flavors.rb,
lib/fog/openstack/requests/compute/list_servers.rb,
lib/fog/openstack/requests/compute/list_tenants.rb,
lib/fog/openstack/requests/compute/list_volumes.rb,
lib/fog/openstack/requests/compute/pause_server.rb,
lib/fog/openstack/requests/compute/set_metadata.rb,
lib/fog/openstack/requests/compute/start_server.rb,
lib/fog/openstack/requests/compute/update_quota.rb,
lib/fog/openstack/requests/compute/attach_volume.rb,
lib/fog/openstack/requests/compute/create_flavor.rb,
lib/fog/openstack/requests/compute/create_server.rb,
lib/fog/openstack/requests/compute/create_volume.rb,
lib/fog/openstack/requests/compute/delete_flavor.rb,
lib/fog/openstack/requests/compute/delete_server.rb,
lib/fog/openstack/requests/compute/delete_volume.rb,
lib/fog/openstack/requests/compute/detach_volume.rb,
lib/fog/openstack/requests/compute/get_aggregate.rb,
lib/fog/openstack/requests/compute/list_metadata.rb,
lib/fog/openstack/requests/compute/list_services.rb,
lib/fog/openstack/requests/compute/reboot_server.rb,
lib/fog/openstack/requests/compute/rescue_server.rb,
lib/fog/openstack/requests/compute/resize_server.rb,
lib/fog/openstack/requests/compute/resume_server.rb,
lib/fog/openstack/requests/compute/server_action.rb,
lib/fog/openstack/requests/compute/shelve_server.rb,
lib/fog/openstack/requests/compute/update_server.rb,
lib/fog/openstack/requests/compute/delete_service.rb,
lib/fog/openstack/requests/compute/enable_service.rb,
lib/fog/openstack/requests/compute/list_addresses.rb,
lib/fog/openstack/requests/compute/list_key_pairs.rb,
lib/fog/openstack/requests/compute/list_snapshots.rb,
lib/fog/openstack/requests/compute/migrate_server.rb,
lib/fog/openstack/requests/compute/rebuild_server.rb,
lib/fog/openstack/requests/compute/server_actions.rb,
lib/fog/openstack/requests/compute/suspend_server.rb,
lib/fog/openstack/requests/compute/unpause_server.rb,
lib/fog/openstack/requests/compute/create_key_pair.rb,
lib/fog/openstack/requests/compute/delete_key_pair.rb,
lib/fog/openstack/requests/compute/delete_metadata.rb,
lib/fog/openstack/requests/compute/delete_snapshot.rb,
lib/fog/openstack/requests/compute/disable_service.rb,
lib/fog/openstack/requests/compute/evacuate_server.rb,
lib/fog/openstack/requests/compute/get_vnc_console.rb,
lib/fog/openstack/requests/compute/list_aggregates.rb,
lib/fog/openstack/requests/compute/release_address.rb,
lib/fog/openstack/requests/compute/remove_fixed_ip.rb,
lib/fog/openstack/requests/compute/unshelve_server.rb,
lib/fog/openstack/requests/compute/update_metadata.rb,
lib/fog/openstack/requests/compute/allocate_address.rb,
lib/fog/openstack/requests/compute/create_aggregate.rb,
lib/fog/openstack/requests/compute/delete_aggregate.rb,
lib/fog/openstack/requests/compute/get_host_details.rb,
lib/fog/openstack/requests/compute/update_aggregate.rb,
lib/fog/openstack/requests/compute/add_flavor_access.rb,
lib/fog/openstack/requests/compute/associate_address.rb,
lib/fog/openstack/requests/compute/get_image_details.rb,
lib/fog/openstack/requests/compute/add_aggregate_host.rb,
lib/fog/openstack/requests/compute/add_security_group.rb,
lib/fog/openstack/requests/compute/boot_from_snapshot.rb,
lib/fog/openstack/requests/compute/get_console_output.rb,
lib/fog/openstack/requests/compute/get_flavor_details.rb,
lib/fog/openstack/requests/compute/get_quota_defaults.rb,
lib/fog/openstack/requests/compute/get_security_group.rb,
lib/fog/openstack/requests/compute/get_server_details.rb,
lib/fog/openstack/requests/compute/get_server_volumes.rb,
lib/fog/openstack/requests/compute/get_volume_details.rb,
lib/fog/openstack/requests/compute/list_address_pools.rb,
lib/fog/openstack/requests/compute/list_all_addresses.rb,
lib/fog/openstack/requests/compute/list_images_detail.rb,
lib/fog/openstack/requests/compute/reset_server_state.rb,
lib/fog/openstack/requests/compute/server_diagnostics.rb,
lib/fog/openstack/requests/compute/get_flavor_metadata.rb,
lib/fog/openstack/requests/compute/list_flavors_detail.rb,
lib/fog/openstack/requests/compute/list_servers_detail.rb,
lib/fog/openstack/requests/compute/list_volumes_detail.rb,
lib/fog/openstack/requests/compute/list_zones_detailed.rb,
lib/fog/openstack/requests/compute/live_migrate_server.rb,
lib/fog/openstack/requests/compute/disassociate_address.rb,
lib/fog/openstack/requests/compute/get_snapshot_details.rb,
lib/fog/openstack/requests/compute/list_security_groups.rb,
lib/fog/openstack/requests/compute/remove_flavor_access.rb,
lib/fog/openstack/requests/compute/revert_resize_server.rb,
lib/fog/openstack/requests/compute/confirm_resize_server.rb,
lib/fog/openstack/requests/compute/create_security_group.rb,
lib/fog/openstack/requests/compute/delete_security_group.rb,
lib/fog/openstack/requests/compute/list_public_addresses.rb,
lib/fog/openstack/requests/compute/list_snapshots_detail.rb,
lib/fog/openstack/requests/compute/remove_aggregate_host.rb,
lib/fog/openstack/requests/compute/remove_security_group.rb,
lib/fog/openstack/requests/compute/shelve_offload_server.rb,
lib/fog/openstack/requests/compute/change_server_password.rb,
lib/fog/openstack/requests/compute/create_flavor_metadata.rb,
lib/fog/openstack/requests/compute/create_volume_snapshot.rb,
lib/fog/openstack/requests/compute/list_private_addresses.rb,
lib/fog/openstack/requests/compute/get_security_group_rule.rb,
lib/fog/openstack/requests/compute/get_hypervisor_statistics.rb,
lib/fog/openstack/requests/compute/update_aggregate_metadata.rb,
lib/fog/openstack/requests/compute/create_security_group_rule.rb,
lib/fog/openstack/requests/compute/delete_security_group_rule.rb,
lib/fog/openstack/requests/compute/disable_service_log_reason.rb,
lib/fog/openstack/requests/compute/list_tenants_with_flavor_access.rb

Overview

Instance Attribute Summary

Attributes included from OpenStack::Core

#auth_token, #auth_token_expiration, #current_tenant, #current_user, #current_user_id, #openstack_domain_id, #openstack_domain_name, #openstack_identity_prefix, #openstack_project_domain, #openstack_project_domain_id, #openstack_user_domain, #openstack_user_domain_id

Instance Method Summary collapse

Methods included from OpenStack::Core

#credentials, #initialize_identity, #reload

Constructor Details

#initialize(options = {}) ⇒ Real

Returns a new instance of Real.



334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
# File 'lib/fog/openstack/compute.rb', line 334

def initialize(options={})
  initialize_identity options

  @openstack_identity_service_type = options[:openstack_identity_service_type] || 'identity'

  @openstack_service_type   = options[:openstack_service_type] || ['nova', 'compute']
  @openstack_service_name   = options[:openstack_service_name]

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

  authenticate

  unless @path.match(/1\.1|v2/)
    raise Fog::OpenStack::Errors::ServiceUnavailable.new(
            "OpenStack compute binding only supports version 2 (a.k.a. 1.1)")
  end

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

Instance Method Details

#add_aggregate_host(uuid, host_uuid) ⇒ Object



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

def add_aggregate_host(uuid, host_uuid)
  data = {'add_host' => {'host' => host_uuid}}
  request(
    :body    => Fog::JSON.encode(data),
    :expects => [200],
    :method  => 'POST',
    :path    => "os-aggregates/#{uuid}/action"
  )
end

#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/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

#add_flavor_access(flavor_ref, tenant_id) ⇒ Object



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

def add_flavor_access(flavor_ref, tenant_id)
  request(
    :body => Fog::JSON.encode({
      "addTenantAccess" => {
        "tenant" => tenant_id
      }
    }),
    :expects  => [200, 203],
    :method   => 'POST',
    :path     => "flavors/#{flavor_ref}/action.json"
  )
end

#add_security_group(server_id, group_name) ⇒ Object



5
6
7
8
# File 'lib/fog/openstack/requests/compute/add_security_group.rb', line 5

def add_security_group(server_id, group_name)
  body = {'addSecurityGroup' => { "name" => group_name } }
  server_action(server_id, body)
end

#allocate_address(pool = nil) ⇒ Object



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

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

#associate_address(server_id, ip_address) ⇒ Object



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

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



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

def attach_volume(volume_id, server_id, device)
  data = {
    'volumeAttachment' => {
      'volumeId' => volume_id.to_s,
      'device'   => device
    }
  }
  request(
    :body     => Fog::JSON.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/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     => Fog::JSON.encode(data),
    :expects  => [200, 202],
    :method   => 'POST',
    :path     => '/os-volumes_boot.json'
  )
end

#change_server_password(server_id, admin_password) ⇒ Object



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

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



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

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

#create_aggregate(name, options = {}) ⇒ Object



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

def create_aggregate(name, options = {})
  data = {
    'aggregate' => {
      'name'       => name
    }
  }

  vanilla_options = ["availability_zone"]

  vanilla_options.select{|o| options[o]}.each do |key|
    data['aggregate'][key] = options[key]
  end

  request(
    :body    => Fog::JSON.encode(data),
    :expects => [200],
    :method  => 'POST',
    :path    => "os-aggregates"
  )
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
43
# File 'lib/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'] + list_flavors_detail(:is_public => false).body['flavors']
  flavors.each do |flavor|
    flavor_ids << flavor['id'].to_i
  end

  # Set flavor id
  attributes[:flavor_id] = attributes[:flavor_id] || ((flavor_ids.length > 0) ? (flavor_ids.sort.last) + 1 : 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],
      'os-flavor-access:is_public' => attributes[:is_public],
      'rxtx_factor' => attributes[:rxtx_factor]
    }
  }

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

#create_flavor_metadata(flavor_ref, metadata) ⇒ Object



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

def (flavor_ref, )
  data = {
    'extra_specs' => 
  }

  request(
    :body => Fog::JSON.encode(data),
    :expects => 200,
    :method => 'POST',
    :path     => "flavors/#{flavor_ref}/os-extra_specs"
  )
end

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



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

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



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

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     => Fog::JSON.encode(data),
    :expects  => 200,
    :method   => 'POST',
    :path     => 'os-keypairs.json'
  )
end

#create_security_group(name, description) ⇒ Object



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

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

  request(
    :body     => Fog::JSON.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



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

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     => Fog::JSON.encode(data),
    :path     => 'os-security-group-rules.json'
  )
end

#create_server(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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/fog/openstack/requests/compute/create_server.rb', line 5

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',
                     'adminPass', 'config_drive', 'min_count', 'max_count',
                     'return_reservation_id'
                    ]
  vanilla_options.select{|o| options[o]}.each do |key|
    data['server'][key] = options[key]
  end

  if options['security_groups']
    # security names requires a hash with a name prefix
    data['server']['security_groups'] =
      Array(options['security_groups']).map do |sg|
      name = if sg.is_a?(Fog::Compute::OpenStack::SecurityGroup) then
               sg.name
             else
               sg
             end
      { :name => name }
    end
  end

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

  if options['nics']
    data['server']['networks'] =
    Array(options['nics']).map do |nic|
      neti = { 'uuid' => (nic['net_id'] || nic[:net_id]) }
      neti['fixed_ip'] = (nic['v4_fixed_ip'] || nic[:v4_fixed_ip]) unless (nic['v4_fixed_ip'] || nic[:v4_fixed_ip]).nil?
      neti['port'] = (nic['port_id'] || nic[:port_id]) unless (nic['port_id'] || nic[:port_id]).nil?
      neti
    end
  end

  if options['os:scheduler_hints']
    data['os:scheduler_hints'] = options['os:scheduler_hints']
  end

  if (block_device_mapping = options['block_device_mapping_v2'])
    data['server']['block_device_mapping_v2'] = [block_device_mapping].flatten.collect do |mapping|
      {
        'boot_index'            => mapping[:boot_index],
        'delete_on_termination' => mapping[:delete_on_termination],
        'destination_type'      => mapping[:destination_type],
        'device_name'           => mapping[:device_name],
        'source_type'           => mapping[:source_type],
        'uuid'                  => mapping[:uuid],
        'volume_size'           => mapping[:volume_size],
      }
    end
  elsif (block_device_mapping = options['block_device_mapping'])
    data['server']['block_device_mapping'] = [block_device_mapping].flatten.collect do |mapping|
      {
        'delete_on_termination' => mapping[:delete_on_termination],
        'device_name'           => mapping[:device_name],
        'volume_id'             => mapping[:volume_id],
        'volume_size'           => mapping[:volume_size],
      }
    end
  end

  path = block_device_mapping ? 'os-volumes_boot.json' : 'servers.json'

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

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



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

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

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

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



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

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     => Fog::JSON.encode(data),
    :expects  => [200, 202],
    :method   => 'POST',
    :path     => "os-snapshots"
  )
end

#delete_aggregate(uuid) ⇒ Object



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

def delete_aggregate(uuid)
  request(
    :expects => [200, 202, 204],
    :method  => 'DELETE',
    :path    => "os-aggregates/#{uuid}"
  )
end

#delete_flavor(flavor_id) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/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



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

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

#delete_key_pair(key_name) ⇒ Object



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

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

#delete_meta(collection_name, parent_id, key) ⇒ Object



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

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

#delete_metadata(collection_name, parent_id, key) ⇒ Object



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

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



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

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



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

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



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

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

#delete_service(uuid, optional_params = nil) ⇒ Object



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

def delete_service(uuid, optional_params = nil)
  # Encode all params
  optional_params = optional_params.each { |k, v| optional_params[k] = URI::encode(v) } if optional_params

  request(
    :expects => [202, 204],
    :method  => 'DELETE',
    :path    => "os-services/#{uuid}",
    :query   => optional_params
  )
end

#delete_snapshot(snapshot_id) ⇒ Object



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

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

#delete_volume(volume_id) ⇒ Object



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

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

#detach_volume(server_id, attachment_id) ⇒ Object



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

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

#disable_service(host, binary, optional_params = nil) ⇒ Object



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

def disable_service(host, binary, optional_params = nil)
  data = {"host" => host, "binary" => binary}

  # Encode all params
  optional_params = optional_params.each { |k, v| optional_params[k] = URI::encode(v) } if optional_params

  request(
    :body => Fog::JSON.encode(data),
    :expects => 200,
    :method  => 'PUT',
    :path    => "os-services/disable",
    :query   => optional_params
  )
end

#disable_service_log_reason(host, binary, disabled_reason, optional_params = nil) ⇒ Object



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

def disable_service_log_reason(host, binary, disabled_reason, optional_params = nil)
  data = {"host" => host, "binary" => binary, "disabled_reason" => disabled_reason}

  # Encode all params
  optional_params = optional_params.each { |k, v| optional_params[k] = URI::encode(v) } if optional_params

  request(
    :body => Fog::JSON.encode(data),
    :expects => 200,
    :method  => 'PUT',
    :path    => "os-services/disable-log-reason",
    :query   => optional_params
  )
end

#disassociate_address(server_id, ip_address) ⇒ Object



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

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

#enable_service(host, binary, optional_params = nil) ⇒ Object



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

def enable_service(host, binary, optional_params = nil)
  data = {"host" => host, "binary" => binary}

  # Encode all params
  optional_params = optional_params.each { |k, v| optional_params[k] = URI::encode(v) } if optional_params


  request(
    :body => Fog::JSON.encode(data),
    :expects => 200,
    :method  => 'PUT',
    :path    => "os-services/enable",
    :query   => optional_params
  )
end

#evacuate_server(server_id, host, on_shared_storage, admin_password = nil) ⇒ Object



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

def evacuate_server(server_id, host, on_shared_storage, admin_password = nil)
  body = {
    'evacuate' => {
      'host'            => host,
      'onSharedStorage' => on_shared_storage,
      'admin_password'  => admin_password,
    }
  }
  server_action(server_id, body)
end

#get_address(address_id) ⇒ Object



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

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

#get_aggregate(uuid) ⇒ Object



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

def get_aggregate(uuid)
  request(
    :expects => [200],
    :method  => 'GET',
    :path    => "os-aggregates/#{uuid}"
  )
end

#get_console_output(server_id, log_length) ⇒ Object



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

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



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

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

#get_flavor_metadata(flavor_ref) ⇒ Object



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

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

#get_host_details(host) ⇒ Object



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

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

#get_hypervisor_statistics(tenant_id) ⇒ Object



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

def get_hypervisor_statistics(tenant_id)
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "os-hypervisors/statistics"
  )
end

#get_image_details(image_id) ⇒ Object



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

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

#get_limitsObject



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

def get_limits
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => '/limits.json'
  )
end

#get_metadata(collection_name, parent_id, key) ⇒ Object



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

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



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

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

#get_quota_defaults(tenant_id) ⇒ Object



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

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



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

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

#get_security_group_rule(security_group_rule_id) ⇒ Object



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

def get_security_group_rule(security_group_rule_id)
  request(
    :expects  => [200],
    :method   => 'GET',
    :path     => "os-security-group-rules/#{security_group_rule_id}"
  )
end

#get_server_details(server_id) ⇒ Object



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

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

#get_server_volumes(server_id) ⇒ Object



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

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



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

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



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

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/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



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

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

#list_address_poolsObject



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

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

#list_addresses(server_id) ⇒ Object



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

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

#list_aggregates(options = {}) ⇒ Object



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

def list_aggregates(options = {})
  request(
    :expects => [200, 203],
    :method  => 'GET',
    :path    => 'os-aggregates',
    :query   => options
  )
end

#list_all_addresses(options = {}) ⇒ Object



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

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

#list_flavors(options = {}) ⇒ Object



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

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

#list_flavors_detail(options = {}) ⇒ Object



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

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

#list_hosts(options = {}) ⇒ Object



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

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

#list_imagesObject



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

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

#list_images_detail(filters = {}) ⇒ Object



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

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

#list_key_pairs(options = {}) ⇒ Object



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

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

#list_metadata(collection_name, parent_id) ⇒ Object



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

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



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

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



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

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

#list_security_groups(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
# File 'lib/fog/openstack/requests/compute/list_security_groups.rb', line 5

def list_security_groups(options = {})
  path = "os-security-groups.json"

  if options.is_a?(Hash)
    server_id = options.delete(:server_id)
    query = options
  else
    # Backwards compatibility layer, only server_id was passed as first parameter previously
    Fog::Logger.deprecation('Calling OpenStack[:compute].list_security_groups(server_id) is deprecated, use .list_security_groups(:server_id => value) instead')
    server_id = options
    query = {}
  end

  if server_id
    path = "servers/#{server_id}/#{path}"
  end

  request(
    :expects  => [200],
    :method   => 'GET',
    :path     => path,
    :query    => query
  )
end

#list_servers(options = {}) ⇒ Object



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

def list_servers(options = {})
  params = options.dup
  if params[:all_tenants]
    params['all_tenants'] = 'True'
    params.delete(:all_tenants)
  end

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

#list_servers_detail(options = {}) ⇒ Object

Available filters: name, status, image, flavor, changes_since, reservation_id



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

def list_servers_detail(options = {})
  params = options.dup
  if params[:all_tenants]
    params['all_tenants'] = 'True'
    params.delete(:all_tenants)
  end

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

#list_services(parameters = nil) ⇒ Object



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

def list_services(parameters=nil)
  if parameters
    query = parameters.each { |k, v| parameters[k] = URI::encode(v) }
  else
    query = {}
  end

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

#list_snapshots(options = true) ⇒ Object



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

def list_snapshots(options = true)
  if options.is_a?(Hash)
    path = 'os-snapshots'
    query = options
  else
    # Backwards compatibility layer, when 'detailed' boolean was sent as first param
    if options
      Fog::Logger.deprecation('Calling OpenStack[:compute].list_snapshots(true) is deprecated, use .list_snapshots_detail instead')
    else
      Fog::Logger.deprecation('Calling OpenStack[:compute].list_snapshots(false) is deprecated, use .list_snapshots({}) instead')
    end
    path = options ? 'os-snapshots/detail' : 'os-snapshots'
    query = {}
  end

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => path,
    :query    => query
  )
end

#list_snapshots_detail(options = {}) ⇒ Object



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

def list_snapshots_detail(options = {})
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => 'os-snapshots/detail',
    :query    => options
  )
end

#list_tenantsObject



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

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

#list_tenants_with_flavor_access(flavor_ref) ⇒ Object



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

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

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



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

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(options = true) ⇒ Object



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

def list_volumes(options = true)
  if options.is_a?(Hash)
    path = 'os-volumes'
    query = options
  else
    # Backwards compatibility layer, when 'detailed' boolean was sent as first param
    if options
      Fog::Logger.deprecation('Calling OpenStack[:compute].list_volumes(true) is deprecated, use .list_volumes_detail instead')
    else
      Fog::Logger.deprecation('Calling OpenStack[:compute].list_volumes(false) is deprecated, use .list_volumes({}) instead')
    end
    path = options ? 'os-volumes/detail' : 'os-volumes'
    query = {}
  end

  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => path,
    :query    => query
  )
end

#list_volumes_detail(options = {}) ⇒ Object



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

def list_volumes_detail(options = {})
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => 'os-volumes/detail',
    :query    => options
  )
end

#list_zones(options = {}) ⇒ Object



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

def list_zones(options = {})
  request(
    :expects => 200,
    :method  => 'GET',
    :path    => 'os-availability-zone.json',
    :query   => options
  )
end

#list_zones_detailed(options = {}) ⇒ Object



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

def list_zones_detailed(options = {})
  request(
    :expects => 200,
    :method  => 'GET',
    :path    => 'os-availability-zone/detail.json',
    :query   => options
  )
end

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



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

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



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

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/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



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

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



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

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 
  if personality
    body['rebuild']['personality'] = []
    for file in personality
      body['rebuild']['personality'] << {
        'contents'  => Base64.encode64(file['contents']),
        'path'      => file['path']
      }
    end
  end
  server_action(server_id, body, 202)
end

#release_address(address_id) ⇒ Object



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

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

#remove_aggregate_host(uuid, host_uuid) ⇒ Object



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

def remove_aggregate_host(uuid, host_uuid)
  data = {'remove_host' => {'host' => host_uuid}}
  request(
    :body    => Fog::JSON.encode(data),
    :expects => [200],
    :method  => 'POST',
    :path    => "os-aggregates/#{uuid}/action"
  )
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/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

#remove_flavor_access(flavor_ref, tenant_id) ⇒ Object



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

def remove_flavor_access(flavor_ref, tenant_id)
  request(
    :body => Fog::JSON.encode({
      "removeTenantAccess" => {
        "tenant" => tenant_id.to_s
      }
    }),
    :expects  => [200, 203],
    :method   => 'POST',
    :path     => "flavors/#{flavor_ref}/action.json"
  )
end

#remove_security_group(server_id, group_name) ⇒ Object



5
6
7
8
# File 'lib/fog/openstack/requests/compute/remove_security_group.rb', line 5

def remove_security_group(server_id, group_name)
  body = {'removeSecurityGroup' => { "name" => group_name } }
  server_action(server_id, body)
end

#request(params) ⇒ Object



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

def request(params)
  begin
    response = @connection.request(params.merge({
      :headers  => {
        'Content-Type' => 'application/json',
        'Accept' => 'application/json',
        'X-Auth-Token' => @auth_token
      }.merge!(params[:headers] || {}),
      :path     => "#{@path}/#{params[:path]}",
      :query    => params[:query]
    }))
  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

  if !response.body.empty? and response.get_header('Content-Type') == 'application/json'
    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/fog/openstack/requests/compute/rescue_server.rb', line 11

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

#reset_server_state(server_id, status) ⇒ Object



5
6
7
8
# File 'lib/fog/openstack/requests/compute/reset_server_state.rb', line 5

def reset_server_state(server_id, status)
  body = { 'os-resetState' => { 'state' => status } }
  server_action(server_id, body, 202)
end

#resize_server(server_id, flavor_ref) ⇒ Object



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

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/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_resize_server(server_id) ⇒ Object



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

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

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



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

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/fog/openstack/requests/compute/server_actions.rb', line 11

def server_actions(server_id)
  request(
    :expects  => 200,
    :method   => 'GET',
    :path     => "servers/#{server_id}/os-instance-actions"
  ).body['instanceActions']
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/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



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

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



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

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

#shelve_offload_server(server_id) ⇒ Object

Shelve Off load the server. Data and resource associations are deleted.

Parameters

  • server_id <~String> - The ID of the server to be shelve off loaded

Returns

  • success <~Boolean>



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

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

#shelve_server(server_id) ⇒ Object

Shelve the server.

Parameters

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

Returns

  • success <~Boolean>



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

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

#start_server(server_id) ⇒ Object

Start the server.

Parameters

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

Returns

  • success <~Boolean>



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

def start_server(server_id)
  body = { 'os-start' => nil }
  server_action(server_id, body).status == 202
end

#stop_server(server_id) ⇒ Object

Stop the server.

Parameters

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

Returns

  • success <~Boolean>



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

def stop_server(server_id)
  body = { 'os-stop' => nil }
  server_action(server_id, body).status == 202
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/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/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

#unshelve_server(server_id) ⇒ Object

Unshelve the server.

Parameters

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

Returns

  • success <~Boolean>



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

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

#update_aggregate(uuid, options = {}) ⇒ Object



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

def update_aggregate(uuid, options = {})
  vanilla_options = ['name', 'availability_zone']

  data = {'aggregate' => {}}
  vanilla_options.select{|o| options[o]}.each do |key|
    data['aggregate'][key] = options[key]
  end

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

#update_aggregate_metadata(uuid, metadata = {}) ⇒ Object



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

def (uuid,  = {})
  data = {'set_metadata' => {'metadata' => }}
  request(
    :body    => Fog::JSON.encode(data),
    :expects => [200],
    :method  => 'POST',
    :path    => "os-aggregates/#{uuid}/action"
  )
end

#update_meta(collection_name, parent_id, key, value) ⇒ Object



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

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

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



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

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



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

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

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



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

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