Class: Fog::Rackspace::BlockStorage::Real

Inherits:
Service
  • Object
show all
Defined in:
lib/fog/rackspace/block_storage.rb,
lib/fog/rackspace/requests/block_storage/get_volume.rb,
lib/fog/rackspace/requests/block_storage/get_snapshot.rb,
lib/fog/rackspace/requests/block_storage/list_volumes.rb,
lib/fog/rackspace/requests/block_storage/create_volume.rb,
lib/fog/rackspace/requests/block_storage/delete_volume.rb,
lib/fog/rackspace/requests/block_storage/list_snapshots.rb,
lib/fog/rackspace/requests/block_storage/create_snapshot.rb,
lib/fog/rackspace/requests/block_storage/delete_snapshot.rb,
lib/fog/rackspace/requests/block_storage/get_volume_type.rb,
lib/fog/rackspace/requests/block_storage/list_volume_types.rb

Instance Method Summary collapse

Methods inherited from Service

#request_without_retry, #service_net?

Constructor Details

#initialize(options = {}) ⇒ Real



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/fog/rackspace/block_storage.rb', line 72

def initialize(options = {})
  @rackspace_api_key = options[:rackspace_api_key]
  @rackspace_username = options[:rackspace_username]
  @rackspace_auth_url = options[:rackspace_auth_url]
  @rackspace_must_reauthenticate = false
  @connection_options = options[:connection_options] || {}
  setup_custom_endpoint(options)

  authenticate

  deprecation_warnings(options)

  @persistent = options[:persistent] || false
  @connection = Fog::Connection.new(endpoint_uri.to_s, @persistent, @connection_options)
end

Instance Method Details

#authenticate(options = {}) ⇒ Object



100
101
102
103
104
105
106
107
# File 'lib/fog/rackspace/block_storage.rb', line 100

def authenticate(options={})
  super({
    :rackspace_api_key => @rackspace_api_key,
    :rackspace_username => @rackspace_username,
    :rackspace_auth_url => @rackspace_auth_url,
    :connection_options => @connection_options
  })
end

#create_snapshot(volume_id, options = {}) ⇒ Excon::Response

Note:

All writes to the volume should be flushed before creating the snapshot, either by un-mounting any file systems on the volume or by detaching the volume.

Create a snapshot from a volume

Options Hash (options):

  • :display_name (String)

    display name for snapshot

  • :display_description (String)

    display description for snapshot

  • :force (Boolean)

    Set to true to force service to create snapshot

Raises:

See Also:



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/fog/rackspace/requests/block_storage/create_snapshot.rb', line 29

def create_snapshot(volume_id, options = {})
  data = {
    'snapshot' => {
      'volume_id' => volume_id
    }
  }

  data['snapshot']['display_name'] = options[:display_name] unless options[:display_name].nil?
  data['snapshot']['display_description'] = options[:display_description] unless options[:display_description].nil?
  data['snapshot']['force'] = options[:force] unless options[:force].nil?

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

#create_volume(size, options = {}) ⇒ Excon::Response

Create volume

Options Hash (options):

  • :display_name (String)

    display name for volume

  • :display_description (String)

    display description for volume

  • :volume_type (String)

    type of volume

  • :snapshot_id (String)

    The optional snapshot from which to create a volume.

Raises:

See Also:



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/fog/rackspace/requests/block_storage/create_volume.rb', line 33

def create_volume(size, options = {})
  data = {
    'volume' => {
      'size' => size
    }
  }

  data['volume']['display_name'] = options[:display_name] unless options[:display_name].nil?
  data['volume']['display_description'] = options[:display_description] unless options[:display_description].nil?
  data['volume']['volume_type'] = options[:volume_type] unless options[:volume_type].nil?
  data['volume']['availability_zone'] = options[:availability_zone] unless options[:availability_zone].nil?
  data['volume']['snapshot_id'] = options[:snapshot_id] unless options[:snapshot_id].nil?

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

#delete_snapshot(snapshot_id) ⇒ Excon::Response

Delete snapshot



15
16
17
18
19
20
21
# File 'lib/fog/rackspace/requests/block_storage/delete_snapshot.rb', line 15

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

#delete_volume(volume_id) ⇒ Excon::Response

Note:

You cannot delete a volume until all of its dependent snaphosts have been deleted.

Delete volume



16
17
18
19
20
21
22
# File 'lib/fog/rackspace/requests/block_storage/delete_volume.rb', line 16

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

#endpoint_uri(service_endpoint_url = nil) ⇒ Object



121
122
123
# File 'lib/fog/rackspace/block_storage.rb', line 121

def endpoint_uri(service_endpoint_url=nil)
  @uri = super(@rackspace_endpoint || service_endpoint_url, :rackspace_block_storage_url)
end

#get_snapshot(snapshot_id) ⇒ Excon::Response

Retrieves snapshot detail



25
26
27
28
29
30
31
# File 'lib/fog/rackspace/requests/block_storage/get_snapshot.rb', line 25

def get_snapshot(snapshot_id)
  request(
    :expects => [200],
    :method => 'GET',
    :path => "snapshots/#{snapshot_id}"
  )
end

#get_volume(volume_id) ⇒ Excon::Response

Retrieves volume detail



29
30
31
32
33
34
35
# File 'lib/fog/rackspace/requests/block_storage/get_volume.rb', line 29

def get_volume(volume_id)
  request(
    :expects => [200],
    :method => 'GET',
    :path => "volumes/#{volume_id}"
  )
end

#get_volume_type(volume_type_id) ⇒ Excon::Response

Retrieves volume type detail



19
20
21
22
23
24
25
# File 'lib/fog/rackspace/requests/block_storage/get_volume_type.rb', line 19

def get_volume_type(volume_type_id)
  request(
    :expects => [200],
    :method => 'GET',
    :path => "types/#{volume_type_id}"
  )
end

#list_snapshotsExcon::Response

Retrieves list of snapshots



22
23
24
25
26
27
28
# File 'lib/fog/rackspace/requests/block_storage/list_snapshots.rb', line 22

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

#list_volume_typesExcon::Response

Retrieves list of volume types



18
19
20
21
22
23
24
# File 'lib/fog/rackspace/requests/block_storage/list_volume_types.rb', line 18

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

#list_volumesExcon::Response

Retrieves list of volumes



26
27
28
29
30
31
32
# File 'lib/fog/rackspace/requests/block_storage/list_volumes.rb', line 26

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

#regionObject



113
114
115
# File 'lib/fog/rackspace/block_storage.rb', line 113

def region
  @rackspace_region
end

#request(params, parse_json = true) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
# File 'lib/fog/rackspace/block_storage.rb', line 88

def request(params, parse_json = true)
  super
rescue Excon::Errors::NotFound => error
  raise NotFound.slurp(error, self)
rescue Excon::Errors::BadRequest => error
  raise BadRequest.slurp(error, self)
rescue Excon::Errors::InternalServerError => error
  raise InternalServerError.slurp(error, self)
rescue Excon::Errors::HTTPStatusError => error
  raise ServiceError.slurp(error, self)
end

#request_id_headerObject



117
118
119
# File 'lib/fog/rackspace/block_storage.rb', line 117

def request_id_header
  "X-Compute-Request-Id"
end

#service_nameObject



109
110
111
# File 'lib/fog/rackspace/block_storage.rb', line 109

def service_name
  :cloudBlockStorage
end