mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
72 lines
2 KiB
Ruby
72 lines
2 KiB
Ruby
module Fog
|
|
module Storage
|
|
class IBM
|
|
class Real
|
|
|
|
# Used to retrieve the specified storage volume for specified volume_id
|
|
#
|
|
# ==== Parameters
|
|
# * volume_id<~String> - Id of storage volume
|
|
#
|
|
# ==== Returns
|
|
# * response<~Excon::Response>:
|
|
# * body<~Hash>:
|
|
def get_volume(volume_id)
|
|
request(
|
|
:method => 'GET',
|
|
:expects => 200,
|
|
:path => "/storage/#{volume_id}"
|
|
)
|
|
end
|
|
|
|
end
|
|
|
|
class Mock
|
|
|
|
# For whatever reason, get_volume returns different data than an entry in list_volumes
|
|
def get_volume(volume_id)
|
|
response = Excon::Response.new
|
|
if volume_exists? volume_id
|
|
response.status = 200
|
|
response.body = format_get_volume_response_for(volume_id)
|
|
else
|
|
response.status = 404
|
|
end
|
|
response
|
|
end
|
|
|
|
# get_volume response doesn't contain instanceId
|
|
def format_get_volume_response_for(volume_id)
|
|
# If we aren't attached/ready, make us ready
|
|
ready_volume(volume_id) unless volume_attached? volume_id
|
|
self.data[:volumes][volume_id].reject { |k,v| k == 'instanceId' }
|
|
end
|
|
|
|
# The list_volumes response doesn't contain ioPrice
|
|
def format_list_volumes_response
|
|
self.data[:volumes].values.dup.map { |volume| volume.reject { |k,v| k == 'ioPrice'} }
|
|
end
|
|
|
|
def volume_exists?(volume_id)
|
|
self.data[:volumes].key? volume_id
|
|
end
|
|
|
|
# Checks if an volume is Active
|
|
def volume_ready?(volume_id)
|
|
self.data[:volumes][volume_id]['state'] == 4
|
|
end
|
|
|
|
def volume_attached?(volume_id)
|
|
self.data[:volumes][volume_id]['instanceId'] != "0"
|
|
end
|
|
|
|
# Sets volume status to Detached if it's not already set, and or attached
|
|
def ready_volume(volume_id)
|
|
# If not ready, make ready
|
|
self.data[:volumes][volume_id]['state'] = 4
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|
|
end
|