fog-aws 0.7.6 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/Gemfile +1 -0
- data/lib/fog/aws/compute.rb +1 -1
- data/lib/fog/aws/iam/paged_collection.rb +4 -2
- data/lib/fog/aws/models/compute/server.rb +0 -1
- data/lib/fog/aws/models/elasticache/cluster.rb +2 -1
- data/lib/fog/aws/models/iam/roles.rb +11 -14
- data/lib/fog/aws/models/rds/server.rb +2 -1
- data/lib/fog/aws/models/storage/directory.rb +1 -1
- data/lib/fog/aws/parsers/elasticache/cache_cluster_parser.rb +29 -4
- data/lib/fog/aws/parsers/storage/get_bucket_lifecycle.rb +30 -0
- data/lib/fog/aws/requests/compute/describe_instances.rb +1 -1
- data/lib/fog/aws/requests/compute/start_instances.rb +1 -0
- data/lib/fog/aws/requests/compute/stop_instances.rb +1 -0
- data/lib/fog/aws/requests/dynamodb/batch_get_item.rb +8 -11
- data/lib/fog/aws/requests/dynamodb/batch_write_item.rb +11 -9
- data/lib/fog/aws/requests/dynamodb/create_table.rb +9 -14
- data/lib/fog/aws/requests/dynamodb/delete_item.rb +5 -15
- data/lib/fog/aws/requests/dynamodb/delete_table.rb +4 -8
- data/lib/fog/aws/requests/dynamodb/describe_table.rb +7 -8
- data/lib/fog/aws/requests/dynamodb/get_item.rb +9 -7
- data/lib/fog/aws/requests/dynamodb/list_tables.rb +4 -1
- data/lib/fog/aws/requests/dynamodb/put_item.rb +6 -10
- data/lib/fog/aws/requests/dynamodb/query.rb +14 -6
- data/lib/fog/aws/requests/dynamodb/scan.rb +6 -6
- data/lib/fog/aws/requests/dynamodb/update_item.rb +22 -20
- data/lib/fog/aws/requests/dynamodb/update_table.rb +6 -7
- data/lib/fog/aws/requests/elasticache/create_cache_cluster.rb +1 -0
- data/lib/fog/aws/requests/iam/create_role.rb +1 -1
- data/lib/fog/aws/requests/iam/get_role.rb +5 -2
- data/lib/fog/aws/requests/iam/list_roles.rb +50 -16
- data/lib/fog/aws/requests/rds/modify_db_instance.rb +53 -54
- data/lib/fog/aws/requests/storage/get_object.rb +5 -3
- data/lib/fog/aws/requests/storage/put_bucket_lifecycle.rb +28 -5
- data/lib/fog/aws/requests/storage/put_object.rb +4 -0
- data/lib/fog/aws/storage.rb +3 -0
- data/lib/fog/aws/sts.rb +4 -3
- data/lib/fog/aws/version.rb +1 -1
- data/tests/models/compute/server_tests.rb +11 -0
- data/tests/models/iam/roles_tests.rb +12 -4
- data/tests/models/storage/directory_tests.rb +4 -0
- data/tests/requests/compute/instance_tests.rb +44 -2
- data/tests/requests/dynamodb/item_tests.rb +2 -2
- data/tests/requests/storage/bucket_tests.rb +5 -0
- metadata +4 -3
@@ -48,15 +48,17 @@ module Fog
|
|
48
48
|
params[:headers]['If-Unmodified-Since'] = Fog::Time.at(options['If-Unmodified-Since'].to_i).to_date_header
|
49
49
|
end
|
50
50
|
|
51
|
+
idempotent = true
|
51
52
|
if block_given?
|
52
53
|
params[:response_block] = Proc.new
|
54
|
+
idempotent = false
|
53
55
|
end
|
54
56
|
|
55
57
|
request(params.merge!({
|
56
58
|
:expects => [ 200, 206 ],
|
57
59
|
:bucket_name => bucket_name,
|
58
60
|
:object_name => object_name,
|
59
|
-
:idempotent =>
|
61
|
+
:idempotent => idempotent,
|
60
62
|
:method => 'GET',
|
61
63
|
}))
|
62
64
|
end
|
@@ -115,10 +117,10 @@ module Fog
|
|
115
117
|
response.body = body
|
116
118
|
else
|
117
119
|
data = StringIO.new(body)
|
118
|
-
remaining = data.length
|
120
|
+
remaining = total_bytes = data.length
|
119
121
|
while remaining > 0
|
120
122
|
chunk = data.read([remaining, Excon::CHUNK_SIZE].min)
|
121
|
-
block.call(chunk)
|
123
|
+
block.call(chunk, remaining, total_bytes)
|
122
124
|
remaining -= Excon::CHUNK_SIZE
|
123
125
|
end
|
124
126
|
end
|
@@ -10,13 +10,13 @@ module Fog
|
|
10
10
|
# * ID [String] Unique identifier for the rule
|
11
11
|
# * Prefix [String] Prefix identifying one or more objects to which the rule applies
|
12
12
|
# * Enabled [Boolean] if rule is currently being applied
|
13
|
-
# * Expiration [Hash] Container for the object expiration rule.
|
14
|
-
# * Days [Integer] lifetime, in days, of the objects that are subject to the rule
|
13
|
+
# * [NoncurrentVersion]Expiration [Hash] Container for the object expiration rule.
|
14
|
+
# * [Noncurrent]Days [Integer] lifetime, in days, of the objects that are subject to the rule
|
15
15
|
# * Date [Date] Indicates when the specific rule take effect.
|
16
16
|
# The date value must conform to the ISO 8601 format. The time is always midnight UTC.
|
17
|
-
# * Transition [Hash] Container for the transition rule that describes when objects transition
|
17
|
+
# * [NoncurrentVersion]Transition [Hash] Container for the transition rule that describes when objects transition
|
18
18
|
# to the Glacier storage class
|
19
|
-
# * Days [Integer] lifetime, in days, of the objects that are subject to the rule
|
19
|
+
# * [Noncurrent]Days [Integer] lifetime, in days, of the objects that are subject to the rule
|
20
20
|
# * Date [Date] Indicates when the specific rule take effect.
|
21
21
|
# The date value must conform to the ISO 8601 format. The time is always midnight UTC.
|
22
22
|
# * StorageClass [String] Indicates the Amazon S3 storage class to which you want the object
|
@@ -33,7 +33,7 @@ module Fog
|
|
33
33
|
ID rule['ID']
|
34
34
|
Prefix rule['Prefix']
|
35
35
|
Status rule['Enabled'] ? 'Enabled' : 'Disabled'
|
36
|
-
unless (rule['Expiration'] or rule['Transition'])
|
36
|
+
unless (rule['Expiration'] or rule['Transition'] or rule['NoncurrentVersionExpiration'] or rule['NoncurrentVersionTransition'])
|
37
37
|
Expiration { Days rule['Days'] }
|
38
38
|
else
|
39
39
|
if rule['Expiration']
|
@@ -43,6 +43,19 @@ module Fog
|
|
43
43
|
Expiration { Date rule['Expiration']['Date'].is_a?(Time) ? rule['Expiration']['Date'].utc.iso8601 : Time.parse(rule['Expiration']['Date']).utc.iso8601 }
|
44
44
|
end
|
45
45
|
end
|
46
|
+
if rule['NoncurrentVersionExpiration']
|
47
|
+
if rule['NoncurrentVersionExpiration']['NoncurrentDays']
|
48
|
+
NoncurrentVersionExpiration { NoncurrentDays rule['NoncurrentVersionExpiration']['NoncurrentDays'] }
|
49
|
+
elsif rule['NoncurrentVersionExpiration']['Date']
|
50
|
+
NoncurrentVersoinExpiration {
|
51
|
+
if Date rule['NoncurrentVersionExpiration']['Date'].is_a?(Time)
|
52
|
+
rule['NoncurrentVersionExpiration']['Date'].utc.iso8601
|
53
|
+
else
|
54
|
+
Time.parse(rule['NoncurrentVersionExpiration']['Date']).utc.iso8601
|
55
|
+
end
|
56
|
+
}
|
57
|
+
end
|
58
|
+
end
|
46
59
|
if rule['Transition']
|
47
60
|
Transition {
|
48
61
|
if rule['Transition']['Days']
|
@@ -53,6 +66,16 @@ module Fog
|
|
53
66
|
StorageClass rule['Transition']['StorageClass'].nil? ? 'GLACIER' : rule['Transition']['StorageClass']
|
54
67
|
}
|
55
68
|
end
|
69
|
+
if rule['NoncurrentVersionTransition']
|
70
|
+
NoncurrentVersionTransition {
|
71
|
+
if rule['NoncurrentVersionTransition']['NoncurrentDays']
|
72
|
+
NoncurrentDays rule['NoncurrentVersionTransition']['NoncurrentDays']
|
73
|
+
elsif rule['NoncurrentVersionTransition']['Date']
|
74
|
+
Date rule['NoncurrentVersionTransition']['Date'].is_a?(Time) ? time.utc.iso8601 : Time.parse(time).utc.iso8601
|
75
|
+
end
|
76
|
+
StorageClass rule['NoncurrentVersionTransition']['StorageClass'].nil? ? 'GLACIER' : rule['NoncurrentVersionTransition']['StorageClass']
|
77
|
+
}
|
78
|
+
end
|
56
79
|
end
|
57
80
|
}
|
58
81
|
end
|
@@ -18,6 +18,10 @@ module Fog
|
|
18
18
|
# @option options x-amz-acl [String] Permissions, must be in ['private', 'public-read', 'public-read-write', 'authenticated-read']
|
19
19
|
# @option options x-amz-storage-class [String] Default is 'STANDARD', set to 'REDUCED_REDUNDANCY' for non-critical, reproducable data
|
20
20
|
# @option options x-amz-meta-#{name} Headers to be returned with object, note total size of request without body must be less than 8 KB. Each name, value pair must conform to US-ASCII.
|
21
|
+
# @option options encryption [String] Sets HTTP header for server-side encryption. Set to 'AES256' for SSE-S3 and SSE-C. Set to 'aws:kms' for SSE-KMS
|
22
|
+
# @option options encryption_key [String] Encryption customer key for SSE-C
|
23
|
+
# @option options x-amz-server-side-encryption-aws-kms-key-id [String] KMS key ID of the encryption key for SSE-KMS
|
24
|
+
# @option options x-amz-server-side-encryption-context [String] Encryption context for SSE-KMS
|
21
25
|
#
|
22
26
|
# @return [Excon::Response] response:
|
23
27
|
# * headers [Hash]:
|
data/lib/fog/aws/storage.rb
CHANGED
@@ -205,6 +205,8 @@ module Fog
|
|
205
205
|
case region.to_s
|
206
206
|
when DEFAULT_REGION, ''
|
207
207
|
's3.amazonaws.com'
|
208
|
+
when 'cn-north-1'
|
209
|
+
's3.cn-north-1.amazonaws.com.cn'
|
208
210
|
else
|
209
211
|
"s3-#{region}.amazonaws.com"
|
210
212
|
end
|
@@ -644,6 +646,7 @@ module Fog
|
|
644
646
|
#we must also reset the signature
|
645
647
|
def rewind
|
646
648
|
self.signature = initial_signature
|
649
|
+
self.finished = false
|
647
650
|
body.rewind
|
648
651
|
end
|
649
652
|
|
data/lib/fog/aws/sts.rb
CHANGED
@@ -7,7 +7,7 @@ module Fog
|
|
7
7
|
class ValidationError < Fog::AWS::STS::Error; end
|
8
8
|
class AwsAccessKeysMissing < Fog::AWS::STS::Error; end
|
9
9
|
|
10
|
-
recognizes :aws_access_key_id, :aws_secret_access_key, :host, :path, :port, :scheme, :persistent, :aws_session_token, :use_iam_profile, :aws_credentials_expire_at, :instrumentor, :instrumentor_name
|
10
|
+
recognizes :region, :aws_access_key_id, :aws_secret_access_key, :host, :path, :port, :scheme, :persistent, :aws_session_token, :use_iam_profile, :aws_credentials_expire_at, :instrumentor, :instrumentor_name
|
11
11
|
|
12
12
|
request_path 'fog/aws/requests/sts'
|
13
13
|
request :get_federation_token
|
@@ -74,12 +74,13 @@ module Fog
|
|
74
74
|
def initialize(options={})
|
75
75
|
|
76
76
|
@use_iam_profile = options[:use_iam_profile]
|
77
|
+
@region = options[:region] || 'us-east-1'
|
77
78
|
setup_credentials(options)
|
78
79
|
@instrumentor = options[:instrumentor]
|
79
80
|
@instrumentor_name = options[:instrumentor_name] || 'fog.aws.sts'
|
80
81
|
@connection_options = options[:connection_options] || {}
|
81
82
|
|
82
|
-
@host = options[:host] ||
|
83
|
+
@host = options[:host] || "sts.#{@region}.amazonaws.com"
|
83
84
|
@path = options[:path] || '/'
|
84
85
|
@persistent = options[:persistent] || false
|
85
86
|
@port = options[:port] || 443
|
@@ -100,7 +101,7 @@ module Fog
|
|
100
101
|
@aws_credentials_expire_at = options[:aws_credentials_expire_at]
|
101
102
|
|
102
103
|
if (@aws_access_key_id && @aws_secret_access_key)
|
103
|
-
@signer = Fog::AWS::SignatureV4.new(@aws_access_key_id, @aws_secret_access_key,
|
104
|
+
@signer = Fog::AWS::SignatureV4.new(@aws_access_key_id, @aws_secret_access_key, @region, 'sts')
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
data/lib/fog/aws/version.rb
CHANGED
@@ -60,6 +60,17 @@ Shindo.tests("Fog::Compute[:aws] | monitor", ['aws']) do
|
|
60
60
|
@instance.associate_public_ip == false
|
61
61
|
end
|
62
62
|
|
63
|
+
test('#stop') do
|
64
|
+
@instance.stop
|
65
|
+
@instance.wait_for { state == "stopped" }
|
66
|
+
@instance.state == "stopped"
|
67
|
+
end
|
68
|
+
|
69
|
+
test("#start") do
|
70
|
+
@instance.start
|
71
|
+
@instance.wait_for { ready? }
|
72
|
+
@instance.state == "running"
|
73
|
+
end
|
63
74
|
end
|
64
75
|
|
65
76
|
@instance.destroy
|
@@ -1,14 +1,12 @@
|
|
1
1
|
Shindo.tests("Fog::Compute[:iam] | roles", ['aws','iam']) do
|
2
2
|
|
3
|
-
pending if Fog.mocking?
|
4
|
-
|
5
3
|
@iam = Fog::AWS[:iam]
|
6
4
|
@role_one_name = 'fake_role_one'
|
7
5
|
@role_two_name = 'fake_role_two'
|
8
6
|
|
9
7
|
@role_three_name = 'fake_role_three'
|
10
8
|
@role_three_path = '/path/to/fake_role_three/'
|
11
|
-
@role_four_name
|
9
|
+
@role_four_name = 'fake_role_four'
|
12
10
|
|
13
11
|
tests('#create').succeeds do
|
14
12
|
@role_one = @iam.roles.create(:rolename => @role_one_name)
|
@@ -37,7 +35,7 @@ Shindo.tests("Fog::Compute[:iam] | roles", ['aws','iam']) do
|
|
37
35
|
end
|
38
36
|
|
39
37
|
tests('#get',"returns nil if the role doesn't exists").succeeds do
|
40
|
-
@iam.roles.get('
|
38
|
+
@iam.roles.get('blah').nil?
|
41
39
|
end
|
42
40
|
|
43
41
|
tests('#create', 'assigns path').succeeds do
|
@@ -54,6 +52,16 @@ Shindo.tests("Fog::Compute[:iam] | roles", ['aws','iam']) do
|
|
54
52
|
@iam.roles.get(@role_one_name).destroy
|
55
53
|
end
|
56
54
|
|
55
|
+
tests('#all', 'limit 1').succeeds do
|
56
|
+
1 == @iam.roles.all(:limit => 1).size
|
57
|
+
end
|
58
|
+
|
59
|
+
tests('#all', 'each_entry').succeeds do
|
60
|
+
roles = []; @iam.roles.each(:limit => 1) { |r| roles << r }
|
61
|
+
|
62
|
+
3 == roles.size
|
63
|
+
end
|
64
|
+
|
57
65
|
tests('#destroy','clean up remaining roles').succeeds do
|
58
66
|
@iam.roles.get(@role_two_name).destroy
|
59
67
|
@iam.roles.get(@role_three_name).destroy
|
@@ -81,7 +81,7 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
|
|
81
81
|
'timestamp' => Time
|
82
82
|
}
|
83
83
|
|
84
|
-
@
|
84
|
+
@instance_state_change_format = {
|
85
85
|
'instancesSet' => [{
|
86
86
|
'currentState' => {'code' => Integer, 'name' => String},
|
87
87
|
'instanceId' => String,
|
@@ -161,6 +161,7 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
|
|
161
161
|
'eventsSet' => [Fog::Nullable::Hash],
|
162
162
|
}]
|
163
163
|
}
|
164
|
+
|
164
165
|
tests('success') do
|
165
166
|
|
166
167
|
@instance_id = nil
|
@@ -217,6 +218,39 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
|
|
217
218
|
|
218
219
|
another_server.destroy
|
219
220
|
|
221
|
+
tests("#run_instances_with_tags").formats(@describe_instances_format) do
|
222
|
+
|
223
|
+
svr1 = Fog::Compute[:aws].servers.create(
|
224
|
+
:availability_zone => 'eu-west-1a',
|
225
|
+
:tags => {
|
226
|
+
"Name" => "test::test::test",
|
227
|
+
"Stack" => "test",
|
228
|
+
"Stage" => "test",
|
229
|
+
"App" => "test1",
|
230
|
+
},
|
231
|
+
:image_id => 'ami-3d7e2e54',
|
232
|
+
:flavor_id => 't1.micro',
|
233
|
+
)
|
234
|
+
svr2 = Fog::Compute[:aws].servers.create(
|
235
|
+
:availability_zone => 'eu-west-1b',
|
236
|
+
:tags => {
|
237
|
+
"Name" => "test::test::dev",
|
238
|
+
"Stack" => "test",
|
239
|
+
"Stage" => "test",
|
240
|
+
"App" => "test2",
|
241
|
+
},
|
242
|
+
:image_id => 'ami-3d7e2e54',
|
243
|
+
:flavor_id => 't1.micro',
|
244
|
+
)
|
245
|
+
|
246
|
+
filters = {'tag:App' => ['test1', 'test2']}
|
247
|
+
body = Fog::Compute[:aws].describe_instances('tag:App' => ['test1', 'test2']).body
|
248
|
+
tests("returns 2 hosts").returns(2) { body['reservationSet'].size }
|
249
|
+
svr1.destroy
|
250
|
+
svr2.destroy
|
251
|
+
body
|
252
|
+
end
|
253
|
+
|
220
254
|
tests("#get_console_output('#{@instance_id}')").formats(@get_console_output_format) do
|
221
255
|
Fog::Compute[:aws].get_console_output(@instance_id).body
|
222
256
|
end
|
@@ -246,7 +280,15 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
|
|
246
280
|
Fog::Compute[:aws].reboot_instances(@instance_id).body
|
247
281
|
end
|
248
282
|
|
249
|
-
tests("#
|
283
|
+
tests("#stop_instances('#{@instance_id}')").formats(@instance_state_change_format) do
|
284
|
+
Fog::Compute[:aws].stop_instances(@instance_id).body
|
285
|
+
end
|
286
|
+
|
287
|
+
tests("#start_instances('#{@instance_id}')").formats(@instance_state_change_format) do
|
288
|
+
Fog::Compute[:aws].start_instances(@instance_id).body
|
289
|
+
end
|
290
|
+
|
291
|
+
tests("#terminate_instances('#{@instance_id}')").formats(@instance_state_change_format) do
|
250
292
|
Fog::Compute[:aws].terminate_instances(@instance_id).body
|
251
293
|
end
|
252
294
|
|
@@ -91,10 +91,10 @@ Shindo.tests('Fog::AWS[:dynamodb] | item requests', ['aws']) do
|
|
91
91
|
'LastEvaluatedKey' => NilClass
|
92
92
|
}
|
93
93
|
|
94
|
-
tests("#query('#{@table_name}'
|
94
|
+
tests("#query('#{@table_name}')").formats(@query_format) do
|
95
95
|
pending if Fog.mocking?
|
96
96
|
pending # requires a table with range key
|
97
|
-
Fog::AWS[:dynamodb].query(@table_name
|
97
|
+
Fog::AWS[:dynamodb].query(@table_name).body
|
98
98
|
end
|
99
99
|
|
100
100
|
@scan_format = @query_format.merge('ScannedCount' => Integer)
|
@@ -277,6 +277,11 @@ Shindo.tests('Fog::Storage[:aws] | bucket requests', ["aws"]) do
|
|
277
277
|
Fog::Storage[:aws].put_bucket_lifecycle(@aws_bucket_name, lifecycle)
|
278
278
|
Fog::Storage[:aws].get_bucket_lifecycle(@aws_bucket_name).body
|
279
279
|
end
|
280
|
+
lifecycle = {'Rules' => [{'ID' => 'test rule', 'Prefix' => '/prefix', 'Enabled' => true, 'NoncurrentVersionExpiration' => {'NoncurrentDays' => 42}, 'NoncurrentVersionTransition' => {'NoncurrentDays' => 6, 'StorageClass'=>'GLACIER'}}]}
|
281
|
+
tests('versioned transition').returns(lifecycle) do
|
282
|
+
Fog::Storage[:aws].put_bucket_lifecycle(@aws_bucket_name, lifecycle)
|
283
|
+
Fog::Storage[:aws].get_bucket_lifecycle(@aws_bucket_name).body
|
284
|
+
end
|
280
285
|
lifecycle = {'Rules' => [{'ID' => 'test rule', 'Prefix' => '/prefix', 'Enabled' => true, 'Expiration' => {'Date' => '2012-12-31T00:00:00.000Z'}}]}
|
281
286
|
tests('date').returns(lifecycle) do
|
282
287
|
Fog::Storage[:aws].put_bucket_lifecycle(@aws_bucket_name, lifecycle)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Lane
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-01-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -1584,8 +1584,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1584
1584
|
version: '0'
|
1585
1585
|
requirements: []
|
1586
1586
|
rubyforge_project:
|
1587
|
-
rubygems_version: 2.4.5
|
1587
|
+
rubygems_version: 2.4.5.1
|
1588
1588
|
signing_key:
|
1589
1589
|
specification_version: 4
|
1590
1590
|
summary: Module for the 'fog' gem to support Amazon Web Services.
|
1591
1591
|
test_files: []
|
1592
|
+
has_rdoc:
|