1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

DescribeVolumeStatus

This commit is contained in:
Edward Muller 2012-03-14 23:16:31 -07:00
parent 5e8f5517fb
commit 388559b3dd
3 changed files with 122 additions and 1 deletions

View file

@ -78,6 +78,7 @@ module Fog
request :describe_subnets
request :describe_tags
request :describe_volumes
request :describe_volume_status
request :describe_vpcs
request :detach_volume
request :disassociate_address
@ -309,7 +310,7 @@ module Fog
:host => @host,
:path => @path,
:port => @port,
:version => '2011-12-15'
:version => '2012-03-01'
}
)

View file

@ -0,0 +1,70 @@
module Fog
module Parsers
module Compute
module AWS
class DescribeVolumeStatus < Fog::Parsers::Base
def new_volume
@volume = { 'volumeStatus' => { 'details' => [] }, 'eventSet' => {}, 'actionSet' => {} }
end
def reset
@volume_status = {}
@response = { 'volumeStatusSet' => [] }
@inside = nil
end
def start_element(name, attrs=[])
super
case name
when 'item'
new_volume if @inside.nil?
when 'volumeStatus'
@inside = :volume_status
when 'details'
@inside = :details
when 'eventSet'
@inside = :event
when 'actionSet'
@inside = :action
end
end
def end_element(name)
case name
#Simple closers
when 'details'
@inside = nil
when 'volumeStatus'
@inside = nil
when 'eventSet'
@inside = nil
when 'actionSet'
@inside = nil
when 'item'
@response['volumeStatusSet'] << @volume if @inside.nil?
#Top level
when 'nextToken', 'requestId'
@response[name] = value
# Volume Stuff
when 'volumeId', 'availabilityZone'
@volume[name] = value
#The mess...
when 'name', 'status'
case @inside
when :details
@volume['volumeStatus']['details'] << {name => value }
when :volume_status
@volume['volumeStatus'][name] = value
end
when 'code', 'eventId', 'eventType', 'description'
@volume["#{@inside}Set"][name] = value.strip
when 'notAfter', 'notBefore'
@volume["#{@inside}Set"][name] = Time.parse(value)
end
end
end
end
end
end
end

View file

@ -0,0 +1,50 @@
module Fog
module Compute
class AWS
class Real
require 'fog/aws/parsers/compute/describe_volume_status'
# http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVolumeStatus.html
def describe_volume_status(filters = {})
raise ArgumentError.new("Filters must be a hash, but is a #{filters.class}.") unless filters.is_a?(Hash)
next_token = filters.delete('nextToken') || filters.delete('NextToken')
max_results = filters.delete('maxResults') || filters.delete('MaxResults')
volume_ids = filters.delete('VolumeId')
params = Fog::AWS.indexed_filters(filters)
params['NextToken'] = next_token if next_token
params['MaxResults'] = max_results if max_results
Array(volume_ids).inject(1) do |idx, vid|
params["VolumeId.#{idx}"] = vid
idx += 1
end
pp params
request({
'Action' => 'DescribeVolumeStatus',
:idempotent => true,
:parser => Fog::Parsers::Compute::AWS::DescribeVolumeStatus.new
}.merge!(params))
end
end
class Mock
def describe_volume_status(filters = {})
response = Excon::Response.new
response.status = 200
response.body = {
'volumeStatusSet' => [],
'requestId' => Fog::AWS::Mock.request_id
}
response
end
end
end
end
end