fog 0.3.17 → 0.3.18
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +5 -5
- data/README.rdoc +16 -7
- data/fog.gemspec +102 -27
- data/lib/fog.rb +3 -2
- data/lib/fog/aws/cdn.rb +2 -1
- data/lib/fog/aws/compute.rb +3 -2
- data/lib/fog/aws/iam.rb +8 -0
- data/lib/fog/aws/models/compute/flavors.rb +2 -1
- data/lib/fog/aws/models/compute/server.rb +3 -0
- data/lib/fog/aws/models/compute/volume.rb +9 -8
- data/lib/fog/aws/models/storage/file.rb +24 -14
- data/lib/fog/aws/models/storage/files.rb +4 -14
- data/lib/fog/aws/parsers/cdn/distribution.rb +16 -1
- data/lib/fog/aws/parsers/cdn/get_distribution_list.rb +13 -0
- data/lib/fog/aws/parsers/compute/describe_volumes.rb +2 -0
- data/lib/fog/aws/parsers/iam/create_group.rb +2 -2
- data/lib/fog/aws/parsers/iam/create_user.rb +26 -0
- data/lib/fog/aws/parsers/iam/list_group_policies.rb +28 -0
- data/lib/fog/aws/parsers/iam/list_groups.rb +1 -1
- data/lib/fog/aws/parsers/storage/complete_multipart_upload.rb +24 -0
- data/lib/fog/aws/parsers/storage/initiate_multipart_upload.rb +24 -0
- data/lib/fog/aws/parsers/storage/list_multipart_uploads.rb +56 -0
- data/lib/fog/aws/parsers/storage/list_parts.rb +40 -0
- data/lib/fog/aws/requests/cdn/get_distribution.rb +11 -1
- data/lib/fog/aws/requests/cdn/get_distribution_list.rb +9 -1
- data/lib/fog/aws/requests/cdn/post_distribution.rb +16 -5
- data/lib/fog/aws/requests/cdn/put_distribution_config.rb +102 -0
- data/lib/fog/aws/requests/compute/describe_volumes.rb +1 -0
- data/lib/fog/aws/requests/compute/run_instances.rb +1 -1
- data/lib/fog/aws/requests/iam/add_user_to_group.rb +42 -0
- data/lib/fog/aws/requests/iam/create_group.rb +7 -3
- data/lib/fog/aws/requests/iam/create_user.rb +47 -0
- data/lib/fog/aws/requests/iam/delete_group.rb +5 -1
- data/lib/fog/aws/requests/iam/delete_group_policy.rb +42 -0
- data/lib/fog/aws/requests/iam/delete_user.rb +40 -0
- data/lib/fog/aws/requests/iam/list_group_policies.rb +47 -0
- data/lib/fog/aws/requests/iam/list_groups.rb +9 -4
- data/lib/fog/aws/requests/iam/put_group_policy.rb +44 -0
- data/lib/fog/aws/requests/iam/remove_user_from_group.rb +42 -0
- data/lib/fog/aws/requests/simpledb/put_attributes.rb +2 -2
- data/lib/fog/aws/requests/storage/abort_multipart_upload.rb +38 -0
- data/lib/fog/aws/requests/storage/complete_multipart_upload.rb +60 -0
- data/lib/fog/aws/requests/storage/get_service.rb +1 -1
- data/lib/fog/aws/requests/storage/initiate_multipart_upload.rb +55 -0
- data/lib/fog/aws/requests/storage/list_multipart_uploads.rb +68 -0
- data/lib/fog/aws/requests/storage/list_parts.rb +67 -0
- data/lib/fog/aws/requests/storage/put_object.rb +12 -5
- data/lib/fog/aws/requests/storage/upload_part.rb +51 -0
- data/lib/fog/aws/storage.rb +12 -6
- data/lib/fog/brightbox.rb +7 -0
- data/lib/fog/brightbox/bin.rb +23 -0
- data/lib/fog/brightbox/compute.rb +134 -0
- data/lib/fog/brightbox/models/compute/account.rb +51 -0
- data/lib/fog/brightbox/models/compute/cloud_ip.rb +43 -0
- data/lib/fog/brightbox/models/compute/cloud_ips.rb +34 -0
- data/lib/fog/brightbox/models/compute/flavor.rb +33 -0
- data/lib/fog/brightbox/models/compute/flavors.rb +28 -0
- data/lib/fog/brightbox/models/compute/image.rb +52 -0
- data/lib/fog/brightbox/models/compute/images.rb +28 -0
- data/lib/fog/brightbox/models/compute/server.rb +94 -0
- data/lib/fog/brightbox/models/compute/servers.rb +29 -0
- data/lib/fog/brightbox/models/compute/user.rb +39 -0
- data/lib/fog/brightbox/models/compute/users.rb +29 -0
- data/lib/fog/brightbox/models/compute/zone.rb +21 -0
- data/lib/fog/brightbox/models/compute/zones.rb +29 -0
- data/lib/fog/brightbox/requests/compute/create_api_client.rb +27 -0
- data/lib/fog/brightbox/requests/compute/create_cloud_ip.rb +27 -0
- data/lib/fog/brightbox/requests/compute/create_image.rb +27 -0
- data/lib/fog/brightbox/requests/compute/create_server.rb +27 -0
- data/lib/fog/brightbox/requests/compute/destroy_api_client.rb +28 -0
- data/lib/fog/brightbox/requests/compute/destroy_cloud_ip.rb +28 -0
- data/lib/fog/brightbox/requests/compute/destroy_image.rb +28 -0
- data/lib/fog/brightbox/requests/compute/destroy_server.rb +28 -0
- data/lib/fog/brightbox/requests/compute/get_account.rb +27 -0
- data/lib/fog/brightbox/requests/compute/get_api_client.rb +28 -0
- data/lib/fog/brightbox/requests/compute/get_cloud_ip.rb +28 -0
- data/lib/fog/brightbox/requests/compute/get_image.rb +28 -0
- data/lib/fog/brightbox/requests/compute/get_interface.rb +28 -0
- data/lib/fog/brightbox/requests/compute/get_server.rb +28 -0
- data/lib/fog/brightbox/requests/compute/get_server_type.rb +28 -0
- data/lib/fog/brightbox/requests/compute/get_user.rb +28 -0
- data/lib/fog/brightbox/requests/compute/get_zone.rb +28 -0
- data/lib/fog/brightbox/requests/compute/list_api_clients.rb +27 -0
- data/lib/fog/brightbox/requests/compute/list_cloud_ips.rb +27 -0
- data/lib/fog/brightbox/requests/compute/list_images.rb +27 -0
- data/lib/fog/brightbox/requests/compute/list_server_types.rb +27 -0
- data/lib/fog/brightbox/requests/compute/list_servers.rb +27 -0
- data/lib/fog/brightbox/requests/compute/list_users.rb +27 -0
- data/lib/fog/brightbox/requests/compute/list_zones.rb +27 -0
- data/lib/fog/brightbox/requests/compute/map_cloud_ip.rb +28 -0
- data/lib/fog/brightbox/requests/compute/reset_ftp_password_account.rb +27 -0
- data/lib/fog/brightbox/requests/compute/resize_server.rb +27 -0
- data/lib/fog/brightbox/requests/compute/shutdown_server.rb +28 -0
- data/lib/fog/brightbox/requests/compute/snapshot_server.rb +28 -0
- data/lib/fog/brightbox/requests/compute/start_server.rb +28 -0
- data/lib/fog/brightbox/requests/compute/stop_server.rb +28 -0
- data/lib/fog/brightbox/requests/compute/unmap_cloud_ip.rb +28 -0
- data/lib/fog/brightbox/requests/compute/update_account.rb +28 -0
- data/lib/fog/brightbox/requests/compute/update_api_client.rb +29 -0
- data/lib/fog/brightbox/requests/compute/update_image.rb +29 -0
- data/lib/fog/brightbox/requests/compute/update_server.rb +29 -0
- data/lib/fog/brightbox/requests/compute/update_user.rb +29 -0
- data/lib/fog/core/attributes.rb +3 -3
- data/lib/fog/core/bin.rb +2 -0
- data/lib/fog/core/compute.rb +5 -2
- data/lib/fog/core/credentials.rb +2 -0
- data/lib/fog/core/service.rb +24 -12
- data/lib/fog/google/models/storage/file.rb +23 -14
- data/lib/fog/google/models/storage/files.rb +4 -14
- data/lib/fog/google/requests/storage/get_bucket.rb +0 -1
- data/lib/fog/google/requests/storage/put_object.rb +9 -2
- data/lib/fog/rackspace/models/storage/file.rb +3 -3
- data/lib/fog/rackspace/models/storage/files.rb +5 -13
- data/spec/aws/models/compute/server_spec.rb +0 -3
- data/spec/aws/requests/simpledb/get_attributes_spec.rb +11 -0
- data/spec/core/attributes_spec.rb +52 -0
- data/spec/vcloud/bin_spec.rb +1 -1
- data/spec/vcloud/vcloud_spec.rb +1 -1
- data/tests/aws/models/compute/flavors_tests.rb +5 -0
- data/tests/aws/models/compute/server_tests.rb +6 -0
- data/tests/aws/models/compute/servers_tests.rb +6 -0
- data/tests/aws/requests/storage/bucket_tests.rb +1 -1
- data/tests/aws/requests/storage/multipart_upload_tests.rb +135 -0
- data/tests/bluebox/models/compute/flavors_tests.rb +5 -0
- data/tests/bluebox/models/compute/server_tests.rb +5 -0
- data/tests/bluebox/models/compute/servers_tests.rb +6 -0
- data/tests/brightbox/helper.rb +0 -0
- data/tests/brightbox/models/compute/flavors_tests.rb +5 -0
- data/tests/brightbox/models/compute/server_tests.rb +6 -0
- data/tests/brightbox/models/compute/servers_tests.rb +6 -0
- data/tests/google/requests/storage/bucket_tests.rb +78 -0
- data/tests/google/requests/storage/object_tests.rb +81 -0
- data/tests/helper.rb +19 -4
- data/tests/helpers/collection_tests.rb +51 -0
- data/tests/helpers/compute/flavors_tests.rb +34 -0
- data/tests/helpers/compute/server_tests.rb +19 -0
- data/tests/helpers/compute/servers_tests.rb +11 -0
- data/tests/helpers/model_tests.rb +28 -0
- data/tests/helpers/storage/directories_tests.rb +4 -36
- data/tests/helpers/storage/directory_tests.rb +8 -22
- data/tests/helpers/storage/file_tests.rb +8 -25
- data/tests/helpers/storage/files_tests.rb +5 -39
- data/tests/local/models/storage/directories_tests.rb +1 -1
- data/tests/local/models/storage/directory_tests.rb +1 -1
- data/tests/local/models/storage/file_tests.rb +1 -1
- data/tests/local/models/storage/files_tests.rb +1 -1
- data/tests/rackspace/models/compute/flavors_tests.rb +5 -0
- data/tests/rackspace/models/compute/server_tests.rb +6 -0
- data/tests/rackspace/models/compute/servers_tests.rb +6 -0
- data/tests/rackspace/models/storage/directories_tests.rb +1 -1
- data/tests/rackspace/models/storage/directory_tests.rb +1 -1
- data/tests/rackspace/models/storage/file_tests.rb +1 -1
- data/tests/rackspace/models/storage/files_tests.rb +1 -1
- data/tests/slicehost/models/compute/flavors_tests.rb +5 -0
- data/tests/slicehost/models/compute/server_tests.rb +6 -0
- data/tests/slicehost/models/compute/servers_tests.rb +6 -0
- metadata +108 -31
- data/spec/aws/models/compute/flavors_spec.rb +0 -14
- data/spec/aws/models/compute/servers_spec.rb +0 -21
- data/spec/bluebox/models/compute/flavors_spec.rb +0 -17
- data/spec/bluebox/models/compute/server_spec.rb +0 -29
- data/spec/bluebox/models/compute/servers_spec.rb +0 -31
- data/spec/google/requests/storage/copy_object_spec.rb +0 -61
- data/spec/google/requests/storage/delete_bucket_spec.rb +0 -35
- data/spec/google/requests/storage/delete_object_spec.rb +0 -38
- data/spec/google/requests/storage/get_bucket_spec.rb +0 -110
- data/spec/google/requests/storage/get_object_spec.rb +0 -58
- data/spec/google/requests/storage/get_service_spec.rb +0 -32
- data/spec/google/requests/storage/head_object_spec.rb +0 -26
- data/spec/google/requests/storage/put_bucket_spec.rb +0 -21
- data/spec/google/requests/storage/put_object_spec.rb +0 -43
- data/spec/rackspace/models/compute/flavors_spec.rb +0 -18
- data/spec/rackspace/models/compute/server_spec.rb +0 -55
- data/spec/rackspace/models/compute/servers_spec.rb +0 -22
- data/spec/shared_examples/flavors_examples.rb +0 -16
- data/spec/shared_examples/server_examples.rb +0 -43
- data/spec/shared_examples/servers_examples.rb +0 -37
- data/spec/slicehost/models/compute/flavors_spec.rb +0 -18
- data/spec/slicehost/models/compute/server_spec.rb +0 -55
- data/spec/slicehost/models/compute/servers_spec.rb +0 -26
@@ -23,19 +23,24 @@ module Fog
|
|
23
23
|
# * GroupName<~String> -
|
24
24
|
# * Path<~String> -
|
25
25
|
# * 'IsTruncated<~Boolean> - Whether or not results were truncated
|
26
|
+
# * 'Marker'<~String> - appears when IsTruncated is true as the next marker to use
|
26
27
|
# * 'RequestId'<~String> - Id of the request
|
27
|
-
|
28
|
-
|
28
|
+
#
|
29
|
+
# ==== See Also
|
30
|
+
# http://docs.amazonwebservices.com/IAM/latest/APIReference/API_ListGroups.html
|
31
|
+
#
|
32
|
+
def list_groups(options = {})
|
33
|
+
request({
|
29
34
|
'Action' => 'ListGroups',
|
30
35
|
:parser => Fog::Parsers::AWS::IAM::ListGroups.new
|
31
|
-
)
|
36
|
+
}.merge!(options))
|
32
37
|
end
|
33
38
|
|
34
39
|
end
|
35
40
|
|
36
41
|
class Mock
|
37
42
|
|
38
|
-
def list_groups
|
43
|
+
def list_groups(options = {})
|
39
44
|
Fog::Mock.not_implemented
|
40
45
|
end
|
41
46
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class IAM
|
4
|
+
class Real
|
5
|
+
|
6
|
+
require 'fog/aws/parsers/iam/basic'
|
7
|
+
|
8
|
+
# Add or update a policy for a group
|
9
|
+
#
|
10
|
+
# ==== Parameters
|
11
|
+
# * group_name<~String>: name of the group
|
12
|
+
# * policy_name<~String>: name of policy document
|
13
|
+
# * policy_document<~Hash>: policy document, see: http://docs.amazonwebservices.com/IAM/latest/UserGuide/PoliciesOverview.html
|
14
|
+
#
|
15
|
+
# ==== Returns
|
16
|
+
# * response<~Excon::Response>:
|
17
|
+
# * body<~Hash>:
|
18
|
+
# * 'RequestId'<~String> - Id of the request def put_group_policy(group_name, path = '/')
|
19
|
+
#
|
20
|
+
# ==== See Also
|
21
|
+
# http://docs.amazonwebservices.com/IAM/latest/APIReference/API_PutGroupPolicy.html
|
22
|
+
#
|
23
|
+
def put_group_policy(group_name, policy_name, policy_document)
|
24
|
+
request(
|
25
|
+
'Action' => 'PutGroupPolicy',
|
26
|
+
'GroupName' => group_name,
|
27
|
+
'PolicyName' => policy_name,
|
28
|
+
'PolicyDocument' => policy_document.to_json,
|
29
|
+
:parser => Fog::Parsers::AWS::IAM::Basic.new
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
class Mock
|
36
|
+
|
37
|
+
def put_group_policy(group_name, policy_name, policy_document)
|
38
|
+
Fog::Mock.not_implemented
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class IAM
|
4
|
+
class Real
|
5
|
+
|
6
|
+
require 'fog/aws/parsers/iam/basic'
|
7
|
+
|
8
|
+
# Remove a user from a group
|
9
|
+
#
|
10
|
+
# ==== Parameters
|
11
|
+
# * group_name<~String>: name of the group
|
12
|
+
# * user_name<~String>: name of user to remove
|
13
|
+
#
|
14
|
+
# ==== Returns
|
15
|
+
# * response<~Excon::Response>:
|
16
|
+
# * body<~Hash>:
|
17
|
+
# * 'RequestId'<~String> - Id of the request
|
18
|
+
#
|
19
|
+
# ==== See Also
|
20
|
+
# http://docs.amazonwebservices.com/IAM/latest/APIReference/API_RemoveUserFromGroup.html
|
21
|
+
#
|
22
|
+
def remove_user_from_group(group_name, user_name)
|
23
|
+
request(
|
24
|
+
'Action' => 'RemoveUserFromGroup',
|
25
|
+
'GroupName' => group_name,
|
26
|
+
'UserName' => user_name,
|
27
|
+
:parser => Fog::Parsers::AWS::IAM::Basic.new
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
class Mock
|
34
|
+
|
35
|
+
def remove_user_from_group(group_name, user_name)
|
36
|
+
Fog::Mock.not_implemented
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -54,9 +54,9 @@ module Fog
|
|
54
54
|
@data[:domains][domain_name][item_name] ||= {}
|
55
55
|
@data[:domains][domain_name][item_name][key.to_s] = [] unless @data[:domains][domain_name][item_name][key.to_s]
|
56
56
|
if options[:replace].include?(key.to_s)
|
57
|
-
@data[:domains][domain_name][item_name][key.to_s] = [value.to_s
|
57
|
+
@data[:domains][domain_name][item_name][key.to_s] = [*value].map {|x| x.to_s}
|
58
58
|
else
|
59
|
-
@data[:domains][domain_name][item_name][key.to_s] += [value.to_s
|
59
|
+
@data[:domains][domain_name][item_name][key.to_s] += [*value].map {|x| x.to_s}
|
60
60
|
end
|
61
61
|
end
|
62
62
|
response.status = 200
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Storage
|
4
|
+
class Real
|
5
|
+
|
6
|
+
# Abort a multipart upload
|
7
|
+
#
|
8
|
+
# ==== Parameters
|
9
|
+
# * bucket_name<~String> - Name of bucket to abort multipart upload on
|
10
|
+
# * object_name<~String> - Name of object to abort multipart upload on
|
11
|
+
# * upload_id<~String> - Id of upload to add part to
|
12
|
+
#
|
13
|
+
# ==== See Also
|
14
|
+
# http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadAbort.html
|
15
|
+
#
|
16
|
+
def abort_multipart_upload(bucket_name, object_name, upload_id)
|
17
|
+
request({
|
18
|
+
:expects => 204,
|
19
|
+
:headers => {},
|
20
|
+
:host => "#{bucket_name}.#{@host}",
|
21
|
+
:method => 'DELETE',
|
22
|
+
:path => CGI.escape(object_name),
|
23
|
+
:query => {'uploadId' => upload_id}
|
24
|
+
})
|
25
|
+
end
|
26
|
+
|
27
|
+
end # Real
|
28
|
+
|
29
|
+
class Mock # :nodoc:all
|
30
|
+
|
31
|
+
def abort_multipart_upload(bucket_name, object_name, upload_id)
|
32
|
+
Fog::Mock.not_implemented
|
33
|
+
end
|
34
|
+
|
35
|
+
end # Mock
|
36
|
+
end # Storage
|
37
|
+
end # AWS
|
38
|
+
end # Fog
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Storage
|
4
|
+
class Real
|
5
|
+
|
6
|
+
require 'fog/aws/parsers/storage/complete_multipart_upload'
|
7
|
+
|
8
|
+
# Complete a multipart upload
|
9
|
+
#
|
10
|
+
# ==== Parameters
|
11
|
+
# * bucket_name<~String> - Name of bucket to complete multipart upload for
|
12
|
+
# * object_name<~String> - Name of object to complete multipart upload for
|
13
|
+
# * upload_id<~String> - Id of upload to add part to
|
14
|
+
# * parts<~Array>: Array of etags for parts
|
15
|
+
# * :etag<~String> - Etag for this part
|
16
|
+
#
|
17
|
+
# ==== Returns
|
18
|
+
# * response<~Excon::Response>:
|
19
|
+
# * headers<~Hash>:
|
20
|
+
# * 'Bucket'<~String> - bucket of new object
|
21
|
+
# * 'ETag'<~String> - etag of new object (will be needed to complete upload)
|
22
|
+
# * 'Key'<~String> - key of new object
|
23
|
+
# * 'Location'<~String> - location of new object
|
24
|
+
#
|
25
|
+
# ==== See Also
|
26
|
+
# http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadComplete.html
|
27
|
+
#
|
28
|
+
def complete_multipart_upload(bucket_name, object_name, upload_id, parts)
|
29
|
+
data = "<CompleteMultipartUpload>"
|
30
|
+
parts.each_with_index do |part, index|
|
31
|
+
data << "<Part>"
|
32
|
+
data << "<PartNumber>#{index + 1}</PartNumber>"
|
33
|
+
data << "<ETag>#{part}</ETag>"
|
34
|
+
data << "</Part>"
|
35
|
+
end
|
36
|
+
data << "</CompleteMultipartUpload>"
|
37
|
+
request({
|
38
|
+
:body => data,
|
39
|
+
:expects => 200,
|
40
|
+
:headers => { 'Content-Length' => data.length },
|
41
|
+
:host => "#{bucket_name}.#{@host}",
|
42
|
+
:method => 'POST',
|
43
|
+
:parser => Fog::Parsers::AWS::Storage::CompleteMultipartUpload.new,
|
44
|
+
:path => CGI.escape(object_name),
|
45
|
+
:query => {'uploadId' => upload_id}
|
46
|
+
})
|
47
|
+
end
|
48
|
+
|
49
|
+
end # Real
|
50
|
+
|
51
|
+
class Mock # :nodoc:all
|
52
|
+
|
53
|
+
def complete_multipart_upload(bucket_name, object_name, upload_id, parts)
|
54
|
+
Fog::Mock.not_implemented
|
55
|
+
end
|
56
|
+
|
57
|
+
end # Mock
|
58
|
+
end # Storage
|
59
|
+
end # AWS
|
60
|
+
end # Fog
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Storage
|
4
|
+
class Real
|
5
|
+
|
6
|
+
require 'fog/aws/parsers/storage/initiate_multipart_upload'
|
7
|
+
|
8
|
+
# Initiate a multipart upload to an S3 bucket
|
9
|
+
#
|
10
|
+
# ==== Parameters
|
11
|
+
# * bucket_name<~String> - Name of bucket to create object in
|
12
|
+
# * object_name<~String> - Name of object to create
|
13
|
+
# * options<~Hash>:
|
14
|
+
# * 'Cache-Control'<~String> - Caching behaviour
|
15
|
+
# * 'Content-Disposition'<~String> - Presentational information for the object
|
16
|
+
# * 'Content-Encoding'<~String> - Encoding of object data
|
17
|
+
# * 'Content-MD5'<~String> - Base64 encoded 128-bit MD5 digest of message (defaults to Base64 encoded MD5 of object.read)
|
18
|
+
# * 'Content-Type'<~String> - Standard MIME type describing contents (defaults to MIME::Types.of.first)
|
19
|
+
# * 'x-amz-acl'<~String> - Permissions, must be in ['private', 'public-read', 'public-read-write', 'authenticated-read']
|
20
|
+
# * "x-amz-meta-#{name}" - Headers to be returned with object, note total size of request without body must be less than 8 KB.
|
21
|
+
#
|
22
|
+
# ==== Returns
|
23
|
+
# * response<~Excon::Response>:
|
24
|
+
# * body<~Hash>:
|
25
|
+
# * 'Bucket'<~String> - Bucket where upload was initiated
|
26
|
+
# * 'Key'<~String> - Object key where the upload was initiated
|
27
|
+
# * 'UploadId'<~String> - Id for initiated multipart upload
|
28
|
+
#
|
29
|
+
# ==== See Also
|
30
|
+
# http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadInitiate.html
|
31
|
+
#
|
32
|
+
def initiate_multipart_upload(bucket_name, object_name, options = {})
|
33
|
+
request({
|
34
|
+
:expects => 200,
|
35
|
+
:headers => options,
|
36
|
+
:host => "#{bucket_name}.#{@host}",
|
37
|
+
:method => 'POST',
|
38
|
+
:parser => Fog::Parsers::AWS::Storage::InitiateMultipartUpload.new,
|
39
|
+
:path => CGI.escape(object_name),
|
40
|
+
:query => {'uploads' => nil}
|
41
|
+
})
|
42
|
+
end
|
43
|
+
|
44
|
+
end # Real
|
45
|
+
|
46
|
+
class Mock # :nodoc:all
|
47
|
+
|
48
|
+
def initiate_multipart_upload(bucket_name, object_name, options = {})
|
49
|
+
Fog::Mock.not_implemented
|
50
|
+
end
|
51
|
+
|
52
|
+
end # Mock
|
53
|
+
end # Storage
|
54
|
+
end # AWS
|
55
|
+
end # Fog
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Storage
|
4
|
+
class Real
|
5
|
+
|
6
|
+
require 'fog/aws/parsers/storage/list_multipart_uploads'
|
7
|
+
|
8
|
+
# List multipart uploads for a bucket
|
9
|
+
#
|
10
|
+
# ==== Parameters
|
11
|
+
# * bucket_name<~String> - Name of bucket to list multipart uploads for
|
12
|
+
# * upload_id<~String> - upload id to list objects for
|
13
|
+
# * options<~Hash> - config arguments for list. Defaults to {}.
|
14
|
+
# * 'key-marker'<~String> - limits parts to only those that appear
|
15
|
+
# lexicographically after this key.
|
16
|
+
# * 'max-uploads'<~Integer> - limits number of uploads returned
|
17
|
+
# * 'upload-id-marker'<~String> - limits uploads to only those that appear
|
18
|
+
# lexicographically after this upload id.
|
19
|
+
#
|
20
|
+
# ==== Returns
|
21
|
+
# * response<~Excon::Response>:
|
22
|
+
# * body<~Hash>:
|
23
|
+
# * 'Bucket'<~string> - Bucket where the multipart upload was initiated
|
24
|
+
# * 'IsTruncated'<~Boolean> - Whether or not the listing is truncated
|
25
|
+
# * 'KeyMarker'<~String> - first key in list, only upload ids after this lexographically will appear
|
26
|
+
# * 'MaxUploads'<~Integer> - Maximum results to return
|
27
|
+
# * 'NextKeyMarker'<~String> - last key in list, for further pagination
|
28
|
+
# * 'NextUploadIdMarker'<~String> - last key in list, for further pagination
|
29
|
+
# * 'Upload'<~Hash>:
|
30
|
+
# * 'Initiated'<~Time> - Time when upload was initiated
|
31
|
+
# * 'Initiator'<~Hash>:
|
32
|
+
# * 'DisplayName'<~String> - Display name of upload initiator
|
33
|
+
# * 'ID'<~String> - Id of upload initiator
|
34
|
+
# * 'Key'<~String> - Key where multipart upload was initiated
|
35
|
+
# * 'Owner'<~Hash>:
|
36
|
+
# * 'DisplayName'<~String> - Display name of upload owner
|
37
|
+
# * 'ID'<~String> - Id of upload owner
|
38
|
+
# * 'StorageClass'<~String> - Storage class of object
|
39
|
+
# * 'UploadId'<~String> - upload id of upload containing part
|
40
|
+
# * 'UploadIdMarker'<String> - first key in list, only upload ids after this lexographically will appear
|
41
|
+
#
|
42
|
+
# ==== See Also
|
43
|
+
# http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadListMPUpload.html
|
44
|
+
#
|
45
|
+
def list_multipart_uploads(bucket_name, options = {})
|
46
|
+
request({
|
47
|
+
:expects => 200,
|
48
|
+
:headers => {},
|
49
|
+
:host => "#{bucket_name}.#{@host}",
|
50
|
+
:idempotent => true,
|
51
|
+
:method => 'GET',
|
52
|
+
:parser => Fog::Parsers::AWS::Storage::ListMultipartUploads.new,
|
53
|
+
:query => options.merge!({'uploads' => nil})
|
54
|
+
})
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
class Mock # :nodoc:all
|
60
|
+
|
61
|
+
def list_multipart_uploads(bucket_name, options = {})
|
62
|
+
Fog::Mock.not_implemented
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Fog
|
2
|
+
module AWS
|
3
|
+
class Storage
|
4
|
+
class Real
|
5
|
+
|
6
|
+
require 'fog/aws/parsers/storage/list_parts'
|
7
|
+
|
8
|
+
# List parts for a multipart upload
|
9
|
+
#
|
10
|
+
# ==== Parameters
|
11
|
+
# * bucket_name<~String> - Name of bucket to list parts for
|
12
|
+
# * object_name<~String> - Name of object to list parts for
|
13
|
+
# * upload_id<~String> - upload id to list objects for
|
14
|
+
# * options<~Hash> - config arguments for list. Defaults to {}.
|
15
|
+
# * 'max-parts'<~Integer> - limits number of parts returned
|
16
|
+
# * 'part-number-marker'<~String> - limits parts to only those that appear
|
17
|
+
# lexicographically after this part number.
|
18
|
+
#
|
19
|
+
# ==== Returns
|
20
|
+
# * response<~Excon::Response>:
|
21
|
+
# * body<~Hash>:
|
22
|
+
# * 'Bucket'<~string> - Bucket where the multipart upload was initiated
|
23
|
+
# * 'Initiator'<~Hash>:
|
24
|
+
# * 'DisplayName'<~String> - Display name of upload initiator
|
25
|
+
# * 'ID'<~String> - Id of upload initiator
|
26
|
+
# * 'IsTruncated'<~Boolean> - Whether or not the listing is truncated
|
27
|
+
# * 'Key'<~String> - Key where multipart upload was initiated
|
28
|
+
# * 'MaxParts'<~String> - maximum number of replies alllowed in response
|
29
|
+
# * 'NextPartNumberMarker'<~String> - last item in list, for further pagination
|
30
|
+
# * 'Part'<~Array>:
|
31
|
+
# * 'ETag'<~String> - ETag of part
|
32
|
+
# * 'LastModified'<~Timestamp> - Last modified for part
|
33
|
+
# * 'PartNumber'<~String> - Part number for part
|
34
|
+
# * 'Size'<~Integer> - Size of part
|
35
|
+
# * 'PartNumberMarker'<~String> - Part number after which listing begins
|
36
|
+
# * 'StorageClass'<~String> - Storage class of object
|
37
|
+
# * 'UploadId'<~String> - upload id of upload containing part
|
38
|
+
#
|
39
|
+
# ==== See Also
|
40
|
+
# http://docs.amazonwebservices.com/AmazonS3/latest/API/mpUploadListParts.html
|
41
|
+
#
|
42
|
+
def list_parts(bucket_name, object_name, upload_id, options = {})
|
43
|
+
options['uploadId'] = upload_id
|
44
|
+
request({
|
45
|
+
:expects => 200,
|
46
|
+
:headers => {},
|
47
|
+
:host => "#{bucket_name}.#{@host}",
|
48
|
+
:idempotent => true,
|
49
|
+
:method => 'GET',
|
50
|
+
:parser => Fog::Parsers::AWS::Storage::ListParts.new,
|
51
|
+
:path => CGI.escape(object_name),
|
52
|
+
:query => options.merge!({'uploadId' => upload_id})
|
53
|
+
})
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
class Mock # :nodoc:all
|
59
|
+
|
60
|
+
def list_parts(bucket_name, object_name, upload_id, options = {})
|
61
|
+
Fog::Mock.not_implemented
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -8,13 +8,13 @@ module Fog
|
|
8
8
|
# ==== Parameters
|
9
9
|
# * bucket_name<~String> - Name of bucket to create object in
|
10
10
|
# * object_name<~String> - Name of object to create
|
11
|
-
# * data<~File> - File or String to create object from
|
11
|
+
# * data<~File||String> - File or String to create object from
|
12
12
|
# * options<~Hash>:
|
13
13
|
# * 'Cache-Control'<~String> - Caching behaviour
|
14
14
|
# * 'Content-Disposition'<~String> - Presentational information for the object
|
15
15
|
# * 'Content-Encoding'<~String> - Encoding of object data
|
16
16
|
# * 'Content-Length'<~String> - Size of object in bytes (defaults to object.read.length)
|
17
|
-
# * 'Content-MD5'<~String> - Base64 encoded 128-bit MD5 digest of message
|
17
|
+
# * 'Content-MD5'<~String> - Base64 encoded 128-bit MD5 digest of message
|
18
18
|
# * 'Content-Type'<~String> - Standard MIME type describing contents (defaults to MIME::Types.of.first)
|
19
19
|
# * 'x-amz-acl'<~String> - Permissions, must be in ['private', 'public-read', 'public-read-write', 'authenticated-read']
|
20
20
|
# * "x-amz-meta-#{name}" - Headers to be returned with object, note total size of request without body must be less than 8 KB.
|
@@ -26,7 +26,7 @@ module Fog
|
|
26
26
|
#
|
27
27
|
# ==== See Also
|
28
28
|
# http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectPUT.html
|
29
|
-
|
29
|
+
#
|
30
30
|
def put_object(bucket_name, object_name, data, options = {})
|
31
31
|
data = parse_data(data)
|
32
32
|
headers = data[:headers].merge!(options)
|
@@ -53,15 +53,22 @@ module Fog
|
|
53
53
|
response = Excon::Response.new
|
54
54
|
if (bucket = @data[:buckets][bucket_name])
|
55
55
|
response.status = 200
|
56
|
-
|
56
|
+
object = {
|
57
57
|
:body => data[:body],
|
58
|
+
'Content-Type' => data[:headers]['Content-Type'],
|
58
59
|
'ETag' => Fog::AWS::Mock.etag,
|
59
60
|
'Key' => object_name,
|
60
61
|
'LastModified' => Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S +0000"),
|
61
62
|
'Size' => data[:headers]['Content-Length'],
|
62
63
|
'StorageClass' => 'STANDARD'
|
63
64
|
}
|
64
|
-
bucket[:objects][object_name]
|
65
|
+
bucket[:objects][object_name] = object
|
66
|
+
response.headers = {
|
67
|
+
'Content-Length' => object['Size'],
|
68
|
+
'Content-Type' => object['Content-Type'],
|
69
|
+
'ETag' => object['ETag'],
|
70
|
+
'Last-Modified' => object['LastModified']
|
71
|
+
}
|
65
72
|
else
|
66
73
|
response.status = 404
|
67
74
|
raise(Excon::Errors.status_error({:expects => 200}, response))
|