Class: Fog::HP::BlockStorage::Real
- Inherits:
-
Object
- Object
- Fog::HP::BlockStorage::Real
- Includes:
- Utils
- Defined in:
- lib/fog/hp/block_storage.rb,
lib/fog/hp/requests/block_storage/list_volumes.rb,
lib/fog/hp/requests/block_storage/create_volume.rb,
lib/fog/hp/requests/block_storage/delete_volume.rb,
lib/fog/hp/requests/block_storage/list_snapshots.rb,
lib/fog/hp/requests/block_storage/create_snapshot.rb,
lib/fog/hp/requests/block_storage/delete_snapshot.rb,
lib/fog/hp/requests/block_storage/get_volume_details.rb,
lib/fog/hp/requests/block_storage/get_snapshot_details.rb,
lib/fog/hp/requests/block_storage/list_bootable_volumes.rb,
lib/fog/hp/requests/block_storage/get_bootable_volume_details.rb
Instance Attribute Summary collapse
-
#credentials ⇒ Object
readonly
Returns the value of attribute credentials.
Instance Method Summary collapse
-
#create_snapshot(name, description, volume_id, options = {}) ⇒ Object
Create a new block storage snapshot.
-
#create_volume(name, description, size, options = {}) ⇒ Object
Create a new block storage volume.
-
#delete_snapshot(snapshot_id) ⇒ Object
Delete an existing block storage snapshot.
-
#delete_volume(volume_id) ⇒ Object
Delete an existing block storage volume.
-
#get_bootable_volume_details(volume_id) ⇒ Object
Get details for existing block storage bootable volume.
-
#get_snapshot_details(snapshot_id) ⇒ Object
Get details for existing block storage snapshot.
-
#get_volume_details(volume_id) ⇒ Object
Get details for existing block storage volume.
-
#initialize(options = {}) ⇒ Real
constructor
A new instance of Real.
-
#list_bootable_volumes ⇒ Object
List existing block storage bootbale volumes.
-
#list_snapshots ⇒ Object
List existing block storage snapshots.
-
#list_volumes ⇒ Object
List existing block storage volumes.
- #reload ⇒ Object
- #request(params, parse_json = true, &block) ⇒ Object
Methods included from Utils
Constructor Details
#initialize(options = {}) ⇒ Real
Returns a new instance of Real.
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/fog/hp/block_storage.rb', line 91 def initialize(={}) # deprecate hp_account_id if [:hp_account_id] Fog::Logger.deprecation(":hp_account_id is deprecated, please use :hp_access_key instead.") [:hp_access_key] = .delete(:hp_account_id) end @hp_access_key = [:hp_access_key] unless @hp_access_key raise ArgumentError.new("Missing required arguments: hp_access_key. :hp_account_id is deprecated, please use :hp_access_key instead.") end @hp_secret_key = [:hp_secret_key] @hp_auth_uri = [:hp_auth_uri] @connection_options = [:connection_options] || {} ### Set an option to use the style of authentication desired; :v1 or :v2 (default) ### A symbol is required, we should ensure that the value is loaded as a symbol auth_version = [:hp_auth_version] || :v2 auth_version = auth_version.to_s.downcase.to_sym ### Pass the service name for object storage to the authentication call [:hp_service_type] ||= "Block Storage" @hp_tenant_id = [:hp_tenant_id] @hp_avl_zone = [:hp_avl_zone] ### Make the authentication call if (auth_version == :v2) # Call the control services authentication credentials = Fog::HP.authenticate_v2(, @connection_options) # the CS service catalog returns the block storage endpoint @hp_block_uri = credentials[:endpoint_url] @credentials = credentials else # Call the legacy v1.0/v1.1 authentication credentials = Fog::HP.authenticate_v1(, @connection_options) # the user sends in the block storage endpoint @hp_block_uri = [:hp_auth_uri] end @auth_token = credentials[:auth_token] @persistent = [:persistent] || false uri = URI.parse(@hp_block_uri) @host = uri.host @path = uri.path @port = uri.port @scheme = uri.scheme @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options) end |
Instance Attribute Details
#credentials ⇒ Object (readonly)
Returns the value of attribute credentials.
89 90 91 |
# File 'lib/fog/hp/block_storage.rb', line 89 def credentials @credentials end |
Instance Method Details
#create_snapshot(name, description, volume_id, options = {}) ⇒ Object
Create a new block storage snapshot
Parameters
-
name<~String> - Name of the snapshot
-
description<~String> - Description of the snapshot
-
volume_id<~Integer> - Id of the volume to create snapshot of
-
options<~Hash>:
-
‘force’<~Boolean> - Not implemented yet. True or False, to allow online snapshots (i.e. when volume is attached)
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
snapshot<~Hash>:
-
‘id’<~Integer>: - Id for the snapshot
-
‘displayName’<~String>: - Name of the snapshot
-
‘displayDescription’<~String>: - Description of the snapshot
-
‘size’<~Integer>: - Size in GB for the snapshot
-
‘status’<~String>: - Status of the snapshot i.e. “creating”
-
‘volumeId’<~Integer>: - Id of the volume from which the snapshot was created
-
‘createdAt’<~String>: - Timestamp in UTC when snapshot was created
-
-
-
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/fog/hp/requests/block_storage/create_snapshot.rb', line 25 def create_snapshot(name, description, volume_id, ={}) data = { 'snapshot' => { 'display_name' => name, 'display_description' => description, 'volume_id' => volume_id } } = ['force'] .select{|o| [o]}.each do |key| data['snapshot'][key] = [key] end request( :body => Fog::JSON.encode(data), :expects => 200, :method => 'POST', :path => "os-snapshots" ) end |
#create_volume(name, description, size, options = {}) ⇒ Object
Create a new block storage volume
Parameters
-
name<~String> - Name of the volume
-
description<~String> - Description of the volume
-
size<~Integer> - Size of the volume (in GBs)
-
options<~Hash>:
-
‘snapshot_id’<~String> - Id of the volume snapshot to create the volume from. The request is invalid if both the snapshot_id and the imageRef parameters are specified and are not null.
-
‘imageRef’<~String> - Id of the image to create the volume from. This creates a bootable volume. The request is invalid if both the snapshot_id and the imageRef parameters are specified and are not null.
-
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
volume<~Hash>:
-
‘id’<~Integer> - Id for the volume
-
‘displayName’<~String> - Name of the volume
-
‘displayDescription’<~String> - Description of the volume
-
‘size’<~Integer> - Size in GB for the volume
-
‘status’<~String> - Status of the volume i.e. “creating”
-
‘volumeType’<~String> - Type of the volume
-
‘snapshotId’<~String> - Id of the snapshot, the volume was created from.
-
‘imageRef’<~String> - Id of the image, the volume was created from. A not null value means it is a bootable volume.
-
‘createdAt’<~String> - Timestamp in UTC when volume was created
-
‘availabilityZone’<~String> - Availability zone i.e. “nova”
-
attachments<~Array>: Array of hashes of attachments
-
metadata<~Hash>: Hash of metadata for the volume
-
-
-
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/fog/hp/requests/block_storage/create_volume.rb', line 31 def create_volume(name, description, size, ={}) data = { 'volume' => { 'display_name' => name, 'display_description' => description, 'size' => size } } = ['snapshot_id', 'imageRef', 'metadata'] .select{|o| [o]}.each do |key| data['volume'][key] = [key] end request( :body => Fog::JSON.encode(data), :expects => 200, :method => 'POST', :path => "os-volumes" ) end |
#delete_snapshot(snapshot_id) ⇒ Object
Delete an existing block storage snapshot
Parameters
-
snapshot_id<~Integer> - Id of the snapshot to delete
10 11 12 13 14 15 16 17 |
# File 'lib/fog/hp/requests/block_storage/delete_snapshot.rb', line 10 def delete_snapshot(snapshot_id) response = request( :expects => 202, :method => 'DELETE', :path => "os-snapshots/#{snapshot_id}" ) response end |
#delete_volume(volume_id) ⇒ Object
Delete an existing block storage volume
Parameters
-
volume_id<~Integer> - Id of the volume to delete
10 11 12 13 14 15 16 17 |
# File 'lib/fog/hp/requests/block_storage/delete_volume.rb', line 10 def delete_volume(volume_id) response = request( :expects => 202, :method => 'DELETE', :path => "os-volumes/#{volume_id}" ) response end |
#get_bootable_volume_details(volume_id) ⇒ Object
Get details for existing block storage bootable volume
Parameters
-
volume_id<~Integer> - Id of the volume to get
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
volume<~Hash>:
-
‘id’<~Integer> - Id for the volume
-
‘displayName’<~String> - Name of the volume
-
‘displayDescription’<~String> - Description of the volume
-
‘size’<~Integer> - Size in GB for the volume
-
‘status’<~String> - Status of the volume i.e. “available”
-
‘volumeType’<~String> - Type of the volume
-
‘snapshotId’<~String> - Id of the volume snapshot
-
‘sourceImageRef’<~String> - Id of the volume snapshot
-
‘createdAt’<~String> - Timestamp in UTC when volume was created
-
‘availabilityZone’<~String> - Availability zone i.e. “nova”
-
attachments<~Array> Array of hashes of attachments
-
metadata<~Hash> Hash of metadata for the volume
-
-
-
27 28 29 30 31 32 33 34 |
# File 'lib/fog/hp/requests/block_storage/get_bootable_volume_details.rb', line 27 def get_bootable_volume_details(volume_id) response = request( :expects => 200, :method => 'GET', :path => "hp-bootable-volumes/#{volume_id}" ) response end |
#get_snapshot_details(snapshot_id) ⇒ Object
Get details for existing block storage snapshot
Parameters
-
snapshot_id<~Integer> - Id of the snapshot to get
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
snapshot<~Hash>:
-
‘id’<~Integer>: - Id for the snapshot
-
‘displayName’<~String>: - Name of the snapshot
-
‘displayDescription’<~String>: - Description of the snapshot
-
‘size’<~Integer>: - Size in GB for the snapshot
-
‘status’<~String>: - Status of the snapshot i.e. “available”
-
‘volumeId’<~Integer>: - Id of the volume from which the snapshot was created
-
‘createdAt’<~String>: - Timestamp in UTC when volume was created
-
-
-
22 23 24 25 26 27 28 29 |
# File 'lib/fog/hp/requests/block_storage/get_snapshot_details.rb', line 22 def get_snapshot_details(snapshot_id) response = request( :expects => 200, :method => 'GET', :path => "os-snapshots/#{snapshot_id}" ) response end |
#get_volume_details(volume_id) ⇒ Object
Get details for existing block storage volume
Parameters
-
volume_id<~Integer> - Id of the volume to get
Returns
-
response<~Excon::Response>:
-
body<~Hash>:
-
volume<~Hash>:
-
‘id’<~Integer>: - Id for the volume
-
‘displayName’<~String>: - Name of the volume
-
‘displayDescription’<~String>: - Description of the volume
-
‘size’<~Integer>: - Size in GB for the volume
-
‘status’<~String>: - Status of the volume i.e. “available”
-
‘volumeType’<~String>: - Type of the volume
-
‘snapshotId’<~String>: - Id of the volume snapshot
-
‘createdAt’<~String>: - Timestamp in UTC when volume was created
-
‘availabilityZone’<~String>: - Availability zone i.e. “nova”
-
attachments<~Array>: Array of hashes of attachments
-
metadata<~Hash>: Hash of metadata for the volume
-
-
-
26 27 28 29 30 31 32 33 |
# File 'lib/fog/hp/requests/block_storage/get_volume_details.rb', line 26 def get_volume_details(volume_id) response = request( :expects => 200, :method => 'GET', :path => "os-volumes/#{volume_id}" ) response end |
#list_bootable_volumes ⇒ Object
List existing block storage bootbale volumes
Parameters
None
Returns
-
response<~Excon::Response>:
-
body<~Array>:
-
volumes<~Hash>:
-
‘id’<~Integer>: - Id for the volume
-
‘displayName’<~String>: - Name of the volume
-
‘displayDescription’<~String>: - Description of the volume
-
‘size’<~Integer>: - Size in GB for the volume
-
‘status’<~String>: - Status of the volume i.e. “available”
-
‘volumeType’<~String>: - Type of the volume
-
‘snapshotId’<~String>: - Id of the source snapshot used to create volume
-
‘sourceImageRef’<~String>: - Id of the source image used to create volume
-
‘createdAt’<~String>: - Timestamp in UTC when volume was created
-
‘availabilityZone’<~String>: - Availability zone i.e. “nova”
-
attachments<~Array>: Array of hashes of attachments
-
metadata<~Hash>: Hash of metadata for the volume
-
-
-
26 27 28 29 30 31 32 33 |
# File 'lib/fog/hp/requests/block_storage/list_bootable_volumes.rb', line 26 def list_bootable_volumes response = request( :expects => 200, :method => 'GET', :path => "hp-bootable-volumes" ) response end |
#list_snapshots ⇒ Object
List existing block storage snapshots
Parameters
None
Returns
-
response<~Excon::Response>:
-
body<~Array>:
-
snapshots<~Hash>:
-
‘id’<~Integer>: - Id for the snapshot
-
‘displayName’<~String>: - Name of the snapshot
-
‘displayDescription’<~String>: - Description of the snapshot
-
‘size’<~Integer>: - Size in GB for the snapshot
-
‘status’<~String>: - Status of the snapshot i.e. “available”
-
‘volumeId’<~Integer>: - Id of the volume from which the snapshot was created
-
‘createdAt’<~String>: - Timestamp in UTC when volume was created
-
-
-
21 22 23 24 25 26 27 28 |
# File 'lib/fog/hp/requests/block_storage/list_snapshots.rb', line 21 def list_snapshots response = request( :expects => 200, :method => 'GET', :path => 'os-snapshots' ) response end |
#list_volumes ⇒ Object
List existing block storage volumes
Parameters
None
Returns
-
response<~Excon::Response>:
-
body<~Array>:
-
volumes<~Hash>:
-
‘id’<~Integer>: - Id for the volume
-
‘displayName’<~String>: - Name of the volume
-
‘displayDescription’<~String>: - Description of the volume
-
‘size’<~Integer>: - Size in GB for the volume
-
‘status’<~String>: - Status of the volume i.e. “available”
-
‘volumeType’<~String>: - Type of the volume
-
‘snapshotId’<~String>: - Id of the volume snapshot
-
‘createdAt’<~String>: - Timestamp in UTC when volume was created
-
‘availabilityZone’<~String>: - Availability zone i.e. “nova”
-
attachments<~Array>: Array of hashes of attachments
-
metadata<~Hash>: Hash of metadata for the volume
-
-
-
25 26 27 28 29 30 31 32 |
# File 'lib/fog/hp/requests/block_storage/list_volumes.rb', line 25 def list_volumes response = request( :expects => 200, :method => 'GET', :path => 'os-volumes' ) response end |
#reload ⇒ Object
140 141 142 |
# File 'lib/fog/hp/block_storage.rb', line 140 def reload @connection.reset end |
#request(params, parse_json = true, &block) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/fog/hp/block_storage.rb', line 144 def request(params, parse_json = true, &block) 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]}" }), &block) rescue Excon::Errors::HTTPStatusError => error raise case error when Excon::Errors::NotFound Fog::HP::BlockStorage::NotFound.slurp(error) else error end end if !response.body.empty? && parse_json && response.headers['Content-Type'] =~ %r{application/json} response.body = Fog::JSON.decode(response.body) end response end |