Skip to content

Commit c9eb37c

Browse files
committed
Add ability to specify s3 restore object tier in post_object_restore #740
1 parent c84f6aa commit c9eb37c

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

lib/fog/aws/requests/storage/post_object_restore.rb

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class Real
77
# @param bucket_name [String] Name of bucket containing object
88
# @param object_name [String] Name of object to restore
99
# @option days [Integer] Number of days to restore object for. Defaults to 100000 (a very long time)
10+
# @option tier [String] Glacier retrieval tier. Can be 'Standard', 'Bulk', or 'Expedited'
1011
#
1112
# @return [Excon::Response] response:
1213
# * status [Integer] 200 (OK) Object is previously restored
@@ -15,11 +16,16 @@ class Real
1516
#
1617
# @see http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPOSTrestore.html
1718
#
18-
def post_object_restore(bucket_name, object_name, days = 100000)
19+
def post_object_restore(bucket_name, object_name, days = 100000, tier = nil)
1920
raise ArgumentError.new('bucket_name is required') unless bucket_name
2021
raise ArgumentError.new('object_name is required') unless object_name
2122

22-
data = '<RestoreRequest xmlns="http://s3.amazonaws.com/doc/2006-3-01"><Days>' + days.to_s + '</Days></RestoreRequest>'
23+
data = '<RestoreRequest xmlns="http://s3.amazonaws.com/doc/2006-03-01/">'
24+
data += '<Days>' + days.to_s + '</Days>'
25+
if tier
26+
data += '<GlacierJobParameters><Tier>' + tier + '</Tier></GlacierJobParameters>'
27+
end
28+
data += '</RestoreRequest>'
2329

2430
headers = {}
2531
headers['Content-MD5'] = Base64.encode64(OpenSSL::Digest::MD5.digest(data)).strip
@@ -39,7 +45,7 @@ def post_object_restore(bucket_name, object_name, days = 100000)
3945
end
4046

4147
class Mock # :nodoc:all
42-
def post_object_restore(bucket_name, object_name, days = 100000)
48+
def post_object_restore(bucket_name, object_name, days = 100000, tier = nil)
4349
response = get_object(bucket_name, object_name)
4450
response.body = nil
4551
response

tests/requests/storage/object_tests.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@
9696
Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object')
9797
end
9898

99+
tests("#post_object_restore('#{@directory.identity}', 'fog_object', 5, 'Bulk')").succeeds do
100+
pending unless Fog.mocking?
101+
Fog::Storage[:aws].post_object_restore(@directory.identity, 'fog_object', 5, 'Bulk')
102+
end
103+
99104
tests("#put_object_acl('#{@directory.identity}', 'fog_object', 'private')").succeeds do
100105
Fog::Storage[:aws].put_object_acl(@directory.identity, 'fog_object', 'private')
101106
end

0 commit comments

Comments
 (0)