fog-aws 3.13.0 → 3.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +123 -2
  3. data/README.md +57 -0
  4. data/lib/fog/aws/auto_scaling.rb +1 -1
  5. data/lib/fog/aws/beanstalk.rb +1 -1
  6. data/lib/fog/aws/cdn.rb +1 -1
  7. data/lib/fog/aws/cloud_formation.rb +1 -1
  8. data/lib/fog/aws/cloud_watch.rb +1 -1
  9. data/lib/fog/aws/compute.rb +1 -1
  10. data/lib/fog/aws/credential_fetcher.rb +9 -1
  11. data/lib/fog/aws/data_pipeline.rb +1 -1
  12. data/lib/fog/aws/dns.rb +1 -1
  13. data/lib/fog/aws/dynamodb.rb +1 -1
  14. data/lib/fog/aws/ecs.rb +1 -1
  15. data/lib/fog/aws/elasticache.rb +1 -1
  16. data/lib/fog/aws/elb.rb +1 -1
  17. data/lib/fog/aws/elbv2.rb +1 -1
  18. data/lib/fog/aws/emr.rb +1 -1
  19. data/lib/fog/aws/glacier.rb +1 -1
  20. data/lib/fog/aws/iam.rb +1 -1
  21. data/lib/fog/aws/kinesis.rb +1 -1
  22. data/lib/fog/aws/kms.rb +1 -1
  23. data/lib/fog/aws/lambda.rb +1 -1
  24. data/lib/fog/aws/models/compute/flavors.rb +2144 -754
  25. data/lib/fog/aws/models/storage/directories.rb +1 -0
  26. data/lib/fog/aws/models/storage/file.rb +24 -8
  27. data/lib/fog/aws/parsers/iam/get_group_policy.rb +1 -1
  28. data/lib/fog/aws/parsers/iam/get_role_policy.rb +1 -1
  29. data/lib/fog/aws/parsers/iam/get_user_policy.rb +1 -1
  30. data/lib/fog/aws/parsers/iam/policy_version.rb +1 -1
  31. data/lib/fog/aws/rds.rb +1 -1
  32. data/lib/fog/aws/redshift.rb +1 -1
  33. data/lib/fog/aws/requests/rds/add_tags_to_resource.rb +12 -10
  34. data/lib/fog/aws/requests/rds/list_tags_for_resource.rb +10 -7
  35. data/lib/fog/aws/requests/rds/remove_tags_from_resource.rb +9 -8
  36. data/lib/fog/aws/requests/storage/get_service.rb +1 -1
  37. data/lib/fog/aws/requests/storage/sync_clock.rb +9 -1
  38. data/lib/fog/aws/ses.rb +1 -1
  39. data/lib/fog/aws/simpledb.rb +1 -1
  40. data/lib/fog/aws/sns.rb +1 -1
  41. data/lib/fog/aws/sqs.rb +1 -1
  42. data/lib/fog/aws/storage.rb +20 -2
  43. data/lib/fog/aws/support.rb +1 -1
  44. data/lib/fog/aws/version.rb +1 -1
  45. data/lib/fog/aws.rb +3 -3
  46. metadata +3 -3
@@ -11,6 +11,7 @@ module Fog
11
11
  load(data)
12
12
  end
13
13
 
14
+ # Warning! This retrieves and caches meta data for the first 10,000 objects in the bucket, which can be very expensive. When possible use directories.new
14
15
  def get(key, options = {})
15
16
  remap_attributes(options, {
16
17
  :delimiter => 'delimiter',
@@ -180,7 +180,8 @@ module Fog
180
180
 
181
181
  remove_method :metadata
182
182
  def metadata
183
- attributes.reject {|key, value| !(key.to_s =~ /^x-amz-/)}
183
+ attributes.reject {|key, value| !(key.to_s =~ /^x-amz-/) }
184
+ .reject {|key, value| ['x-amz-id-2', 'x-amz-request-id'].include?(key) }
184
185
  end
185
186
 
186
187
  remove_method :metadata=
@@ -335,12 +336,12 @@ module Fog
335
336
  body.rewind rescue nil
336
337
  end
337
338
  while (chunk = body.read(multipart_chunk_size)) do
338
- part_upload = service.upload_part(directory.key, key, upload_id, part_tags.size + 1, chunk, part_headers(chunk, options))
339
+ part_upload = service.upload_part(directory.key, key, upload_id, part_tags.size + 1, chunk, part_headers(chunk))
339
340
  part_tags << part_upload.headers["ETag"]
340
341
  end
341
342
 
342
343
  if part_tags.empty? #it is an error to have a multipart upload with no parts
343
- part_upload = service.upload_part(directory.key, key, upload_id, 1, '', part_headers('', options))
344
+ part_upload = service.upload_part(directory.key, key, upload_id, 1, '', part_headers(''))
344
345
  part_tags << part_upload.headers["ETag"]
345
346
  end
346
347
 
@@ -387,11 +388,18 @@ module Fog
387
388
  end
388
389
  end
389
390
 
390
- def part_headers(chunk, options)
391
- md5 = Base64.encode64(OpenSSL::Digest::MD5.digest(chunk)).strip
392
- encryption_keys = encryption_customer_key_headers.keys
393
- encryption_headers = options.select { |key| encryption_keys.include?(key) }
394
- { 'Content-MD5' => md5 }.merge(encryption_headers)
391
+ def part_headers(chunk)
392
+ base_headers = part_checksum_headers(chunk)
393
+
394
+ # Only SSE-C headers needed in the UploadPart request. [1]
395
+ # x-amz-server-side-encryption and
396
+ # x-amz-server-side-encryption-aws-kms-key-id are only needed
397
+ # in the CreateMultipartUpload request. [2]
398
+ # [1] https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html
399
+ # [2] https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html
400
+ base_headers.merge!(encryption_customer_key_headers) if encryption && encryption_key
401
+
402
+ base_headers
395
403
  end
396
404
 
397
405
  def encryption_customer_key_headers
@@ -402,6 +410,14 @@ module Fog
402
410
  }
403
411
  end
404
412
 
413
+ def part_checksum_headers(chunk)
414
+ if service.disable_content_md5_validation
415
+ {}
416
+ else
417
+ { 'Content-MD5' => Base64.encode64(OpenSSL::Digest::MD5.digest(chunk)).strip }
418
+ end
419
+ end
420
+
405
421
  def create_part_list(upload_part_options)
406
422
  current_pos = 0
407
423
  count = 0
@@ -14,7 +14,7 @@ module Fog
14
14
  when 'GroupName', 'PolicyName'
15
15
  @response[name] = value
16
16
  when 'PolicyDocument'
17
- @response['Policy'][name] = if decoded_string = URI.decode(value)
17
+ @response['Policy'][name] = if decoded_string = URI.decode_www_form_component(value)
18
18
  Fog::JSON.decode(decoded_string) rescue value
19
19
  else
20
20
  value
@@ -12,7 +12,7 @@ module Fog
12
12
  when 'RoleName', 'PolicyName'
13
13
  @response['Policy'][name] = value
14
14
  when 'PolicyDocument'
15
- @response['Policy'][name] = if decoded_string = URI.decode(value)
15
+ @response['Policy'][name] = if decoded_string = URI.decode_www_form_component(value)
16
16
  Fog::JSON.decode(decoded_string) rescue value
17
17
  else
18
18
  value
@@ -14,7 +14,7 @@ module Fog
14
14
  when 'UserName', 'PolicyName'
15
15
  @response['Policy'][name] = value
16
16
  when 'PolicyDocument'
17
- @response['Policy'][name] = if decoded_string = URI.decode(value)
17
+ @response['Policy'][name] = if decoded_string = URI.decode_www_form_component(value)
18
18
  Fog::JSON.decode(decoded_string) rescue value
19
19
  else
20
20
  value
@@ -18,7 +18,7 @@ module Fog
18
18
  when 'IsDefaultVersion'
19
19
  @version[name] = (value == 'true')
20
20
  when 'Document'
21
- @version[name] = if decoded_string = URI.decode(value)
21
+ @version[name] = if decoded_string = URI.decode_www_form_component(value)
22
22
  Fog::JSON.decode(decoded_string) rescue value
23
23
  else
24
24
  value
data/lib/fog/aws/rds.rb CHANGED
@@ -9,7 +9,7 @@ module Fog
9
9
  class AuthorizationAlreadyExists < Fog::Errors::Error; end
10
10
 
11
11
  requires :aws_access_key_id, :aws_secret_access_key
12
- recognizes :region, :host, :path, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :version, :instrumentor, :instrumentor_name
12
+ recognizes :region, :host, :path, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :version, :instrumentor, :instrumentor_name, :sts_endpoint
13
13
 
14
14
  request_path 'fog/aws/requests/rds'
15
15
  request :describe_events
@@ -4,7 +4,7 @@ module Fog
4
4
  extend Fog::AWS::CredentialFetcher::ServiceMethods
5
5
 
6
6
  requires :aws_access_key_id, :aws_secret_access_key
7
- recognizes :region, :host, :path, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :instrumentor, :instrumentor_name
7
+ recognizes :region, :host, :path, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :instrumentor, :instrumentor_name, :sts_endpoint
8
8
 
9
9
  request_path 'fog/aws/requests/redshift'
10
10
 
@@ -12,28 +12,30 @@ module Fog
12
12
  # * body<~Hash>:
13
13
  def add_tags_to_resource(rds_id, tags)
14
14
  keys = tags.keys.sort
15
- values = keys.map {|key| tags[key]}
15
+ values = keys.map { |key| tags[key] }
16
+ resource_name = "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}"
17
+ %w[us-gov-west-1 us-gov-east-1].include?(@region) ? resource_name.insert(7, '-us-gov') : resource_name
16
18
  request({
17
- 'Action' => 'AddTagsToResource',
18
- 'ResourceName' => "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}",
19
- :parser => Fog::Parsers::AWS::RDS::Base.new,
20
- }.merge(Fog::AWS.indexed_param('Tags.member.%d.Key', keys)).
21
- merge(Fog::AWS.indexed_param('Tags.member.%d.Value', values)))
19
+ 'Action' => 'AddTagsToResource',
20
+ 'ResourceName' => resource_name,
21
+ :parser => Fog::Parsers::AWS::RDS::Base.new
22
+ }.merge(Fog::AWS.indexed_param('Tags.member.%d.Key', keys))
23
+ .merge(Fog::AWS.indexed_param('Tags.member.%d.Value', values)))
22
24
  end
23
25
  end
24
26
 
25
27
  class Mock
26
28
  def add_tags_to_resource(rds_id, tags)
27
29
  response = Excon::Response.new
28
- if server = self.data[:servers][rds_id]
29
- self.data[:tags][rds_id].merge! tags
30
+ if server = data[:servers][rds_id]
31
+ data[:tags][rds_id].merge! tags
30
32
  response.status = 200
31
33
  response.body = {
32
- "ResponseMetadata"=>{ "RequestId"=> Fog::AWS::Mock.request_id }
34
+ 'ResponseMetadata' => { 'RequestId' => Fog::AWS::Mock.request_id }
33
35
  }
34
36
  response
35
37
  else
36
- raise Fog::AWS::RDS::NotFound.new("DBInstance #{rds_id} not found")
38
+ raise Fog::AWS::RDS::NotFound, "DBInstance #{rds_id} not found"
37
39
  end
38
40
  end
39
41
  end
@@ -11,11 +11,14 @@ module Fog
11
11
  # ==== Returns
12
12
  # * response<~Excon::Response>:
13
13
  # * body<~Hash>:
14
+
14
15
  def list_tags_for_resource(rds_id)
16
+ resource_name = "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}"
17
+ %w[us-gov-west-1 us-gov-east-1].include?(@region) ? resource_name.insert(7, '-us-gov') : resource_name
15
18
  request(
16
- 'Action' => 'ListTagsForResource',
17
- 'ResourceName' => "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}",
18
- :parser => Fog::Parsers::AWS::RDS::TagListParser.new
19
+ 'Action' => 'ListTagsForResource',
20
+ 'ResourceName' => resource_name,
21
+ :parser => Fog::Parsers::AWS::RDS::TagListParser.new
19
22
  )
20
23
  end
21
24
  end
@@ -23,15 +26,15 @@ module Fog
23
26
  class Mock
24
27
  def list_tags_for_resource(rds_id)
25
28
  response = Excon::Response.new
26
- if server = self.data[:servers][rds_id]
29
+ if server = data[:servers][rds_id]
27
30
  response.status = 200
28
31
  response.body = {
29
- "ListTagsForResourceResult" =>
30
- {"TagList" => self.data[:tags][rds_id]}
32
+ 'ListTagsForResourceResult' =>
33
+ { 'TagList' => data[:tags][rds_id] }
31
34
  }
32
35
  response
33
36
  else
34
- raise Fog::AWS::RDS::NotFound.new("DBInstance #{rds_id} not found")
37
+ raise Fog::AWS::RDS::NotFound, "DBInstance #{rds_id} not found"
35
38
  end
36
39
  end
37
40
  end
@@ -11,11 +11,12 @@ module Fog
11
11
  # * response<~Excon::Response>:
12
12
  # * body<~Hash>:
13
13
  def remove_tags_from_resource(rds_id, keys)
14
+ resource_name = "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}"
15
+ %w[us-gov-west-1 us-gov-east-1].include?(@region) ? resource_name.insert(7, '-us-gov') : resource_name
14
16
  request(
15
- { 'Action' => 'RemoveTagsFromResource',
16
- 'ResourceName' => "arn:aws:rds:#{@region}:#{owner_id}:db:#{rds_id}",
17
- :parser => Fog::Parsers::AWS::RDS::Base.new,
18
- }.merge(Fog::AWS.indexed_param('TagKeys.member.%d', keys))
17
+ { 'Action' => 'RemoveTagsFromResource',
18
+ 'ResourceName' => resource_name,
19
+ :parser => Fog::Parsers::AWS::RDS::Base.new }.merge(Fog::AWS.indexed_param('TagKeys.member.%d', keys))
19
20
  )
20
21
  end
21
22
  end
@@ -23,15 +24,15 @@ module Fog
23
24
  class Mock
24
25
  def remove_tags_from_resource(rds_id, keys)
25
26
  response = Excon::Response.new
26
- if server = self.data[:servers][rds_id]
27
- keys.each {|key| self.data[:tags][rds_id].delete key}
27
+ if server = data[:servers][rds_id]
28
+ keys.each { |key| data[:tags][rds_id].delete key }
28
29
  response.status = 200
29
30
  response.body = {
30
- "ResponseMetadata"=>{ "RequestId"=> Fog::AWS::Mock.request_id }
31
+ 'ResponseMetadata' => { 'RequestId' => Fog::AWS::Mock.request_id }
31
32
  }
32
33
  response
33
34
  else
34
- raise Fog::AWS::RDS::NotFound.new("DBInstance #{rds_id} not found")
35
+ raise Fog::AWS::RDS::NotFound, "DBInstance #{rds_id} not found"
35
36
  end
36
37
  end
37
38
  end
@@ -21,7 +21,7 @@ module Fog
21
21
  request({
22
22
  :expects => 200,
23
23
  :headers => {},
24
- :host => 's3.amazonaws.com',
24
+ :host => @host || region_to_host(DEFAULT_REGION),
25
25
  :idempotent => true,
26
26
  :method => 'GET',
27
27
  :parser => Fog::Parsers::AWS::Storage::GetService.new
@@ -6,12 +6,20 @@ module Fog
6
6
  #
7
7
  def sync_clock
8
8
  response = begin
9
- get_service
9
+ Excon.get(sync_clock_url)
10
10
  rescue Excon::Errors::HTTPStatusError => error
11
11
  error.response
12
12
  end
13
13
  Fog::Time.now = Time.parse(response.headers['Date'])
14
14
  end
15
+
16
+ private
17
+
18
+ def sync_clock_url
19
+ host = @acceleration ? region_to_host(@region) : @host
20
+
21
+ "#{@scheme}://#{host}:#{@port}"
22
+ end
15
23
  end # Real
16
24
 
17
25
  class Mock # :nodoc:all
data/lib/fog/aws/ses.rb CHANGED
@@ -7,7 +7,7 @@ module Fog
7
7
  class MessageRejected < Fog::Errors::Error; end
8
8
 
9
9
  requires :aws_access_key_id, :aws_secret_access_key
10
- recognizes :region, :host, :path, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :instrumentor, :instrumentor_name
10
+ recognizes :region, :host, :path, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :instrumentor, :instrumentor_name, :sts_endpoint
11
11
 
12
12
  request_path 'fog/aws/requests/ses'
13
13
  request :delete_verified_email_address
@@ -4,7 +4,7 @@ module Fog
4
4
  extend Fog::AWS::CredentialFetcher::ServiceMethods
5
5
 
6
6
  requires :aws_access_key_id, :aws_secret_access_key
7
- recognizes :host, :nil_string, :path, :port, :scheme, :persistent, :region, :aws_session_token, :use_iam_profile, :aws_credentials_expire_at, :instrumentor, :instrumentor_name
7
+ recognizes :host, :nil_string, :path, :port, :scheme, :persistent, :region, :aws_session_token, :use_iam_profile, :aws_credentials_expire_at, :instrumentor, :instrumentor_name, :sts_endpoint
8
8
 
9
9
  request_path 'fog/aws/requests/simpledb'
10
10
  request :batch_put_attributes
data/lib/fog/aws/sns.rb CHANGED
@@ -4,7 +4,7 @@ module Fog
4
4
  extend Fog::AWS::CredentialFetcher::ServiceMethods
5
5
 
6
6
  requires :aws_access_key_id, :aws_secret_access_key
7
- recognizes :host, :path, :port, :scheme, :persistent, :region, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :instrumentor, :instrumentor_name
7
+ recognizes :host, :path, :port, :scheme, :persistent, :region, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :instrumentor, :instrumentor_name, :sts_endpoint
8
8
 
9
9
  request_path 'fog/aws/requests/sns'
10
10
  request :add_permission
data/lib/fog/aws/sqs.rb CHANGED
@@ -4,7 +4,7 @@ module Fog
4
4
  extend Fog::AWS::CredentialFetcher::ServiceMethods
5
5
 
6
6
  requires :aws_access_key_id, :aws_secret_access_key
7
- recognizes :region, :host, :path, :port, :scheme, :persistent, :aws_session_token, :use_iam_profile, :aws_credentials_expire_at, :instrumentor, :instrumentor_name
7
+ recognizes :region, :host, :path, :port, :scheme, :persistent, :aws_session_token, :use_iam_profile, :aws_credentials_expire_at, :instrumentor, :instrumentor_name, :sts_endpoint
8
8
 
9
9
  request_path 'fog/aws/requests/sqs'
10
10
  request :change_message_visibility
@@ -14,6 +14,14 @@ module Fog
14
14
  'https' => 443
15
15
  }
16
16
 
17
+ DEFAULT_CONNECTION_OPTIONS = {
18
+ retry_limit: 5,
19
+ retry_interval: 1,
20
+ retry_errors: [
21
+ Excon::Error::Timeout, Excon::Error::Socket, Excon::Error::Server
22
+ ]
23
+ }
24
+
17
25
  MIN_MULTIPART_CHUNK_SIZE = 5242880
18
26
  MAX_SINGLE_PUT_SIZE = 5368709120
19
27
 
@@ -46,7 +54,7 @@ module Fog
46
54
  ]
47
55
 
48
56
  requires :aws_access_key_id, :aws_secret_access_key
49
- recognizes :endpoint, :region, :host, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :path_style, :acceleration, :instrumentor, :instrumentor_name, :aws_signature_version, :enable_signature_v4_streaming, :virtual_host, :cname, :max_put_chunk_size, :max_copy_chunk_size
57
+ recognizes :endpoint, :region, :host, :port, :scheme, :persistent, :use_iam_profile, :aws_session_token, :aws_credentials_expire_at, :path_style, :acceleration, :instrumentor, :instrumentor_name, :aws_signature_version, :enable_signature_v4_streaming, :virtual_host, :cname, :max_put_chunk_size, :max_copy_chunk_size, :aws_credentials_refresh_threshold_seconds, :disable_content_md5_validation, :sts_endpoint
50
58
 
51
59
  secrets :aws_secret_access_key, :hmac
52
60
 
@@ -119,6 +127,7 @@ module Fog
119
127
 
120
128
  module Utils
121
129
  attr_accessor :region
130
+ attr_accessor :disable_content_md5_validation
122
131
 
123
132
  # Amazon S3 limits max chunk size that can be uploaded/copied in a single request to 5GB.
124
133
  # Other S3-compatible storages (like, Ceph) do not have such limit.
@@ -486,6 +495,8 @@ module Fog
486
495
  init_max_put_chunk_size!(options)
487
496
  init_max_copy_chunk_size!(options)
488
497
 
498
+ @disable_content_md5_validation = options[:disable_content_md5_validation] || false
499
+
489
500
  @signature_version = options.fetch(:aws_signature_version, 4)
490
501
  validate_signature_version!
491
502
  setup_credentials(options)
@@ -500,6 +511,8 @@ module Fog
500
511
  end
501
512
 
502
513
  def setup_credentials(options)
514
+ @aws_credentials_refresh_threshold_seconds = options[:aws_credentials_refresh_threshold_seconds]
515
+
503
516
  @aws_access_key_id = options[:aws_access_key_id]
504
517
  @aws_secret_access_key = options[:aws_secret_access_key]
505
518
  @aws_session_token = options[:aws_session_token]
@@ -541,7 +554,8 @@ module Fog
541
554
  @use_iam_profile = options[:use_iam_profile]
542
555
  @instrumentor = options[:instrumentor]
543
556
  @instrumentor_name = options[:instrumentor_name] || 'fog.aws.storage'
544
- @connection_options = options[:connection_options] || {}
557
+ @connection_options =
558
+ DEFAULT_CONNECTION_OPTIONS.merge(options[:connection_options] || {})
545
559
  @persistent = options.fetch(:persistent, false)
546
560
  @acceleration = options.fetch(:acceleration, false)
547
561
  @signature_version = options.fetch(:aws_signature_version, 4)
@@ -552,6 +566,8 @@ module Fog
552
566
  init_max_put_chunk_size!(options)
553
567
  init_max_copy_chunk_size!(options)
554
568
 
569
+ @disable_content_md5_validation = options[:disable_content_md5_validation] || false
570
+
555
571
  @region = options[:region] || DEFAULT_REGION
556
572
 
557
573
  if @endpoint = options[:endpoint]
@@ -577,6 +593,8 @@ module Fog
577
593
 
578
594
 
579
595
  def setup_credentials(options)
596
+ @aws_credentials_refresh_threshold_seconds = options[:aws_credentials_refresh_threshold_seconds]
597
+
580
598
  @aws_access_key_id = options[:aws_access_key_id]
581
599
  @aws_secret_access_key = options[:aws_secret_access_key]
582
600
  @aws_session_token = options[:aws_session_token]
@@ -4,7 +4,7 @@ module Fog
4
4
  extend Fog::AWS::CredentialFetcher::ServiceMethods
5
5
 
6
6
  requires :aws_access_key_id, :aws_secret_access_key
7
- recognizes :host, :path, :port, :scheme, :instrumentor, :instrumentor_name, :region, :persistent, :aws_session_token
7
+ recognizes :host, :path, :port, :scheme, :instrumentor, :instrumentor_name, :region, :persistent, :aws_session_token, :aws_credentials_expire_at, :sts_endpoint
8
8
 
9
9
  model_path 'fog/aws/models/support'
10
10
  request_path 'fog/aws/requests/support'
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module AWS
3
- VERSION = "3.13.0"
3
+ VERSION = "3.21.0"
4
4
  end
5
5
  end
data/lib/fog/aws.rb CHANGED
@@ -224,14 +224,14 @@ module Fog
224
224
  'ap-east-1',
225
225
  'ap-northeast-1', 'ap-northeast-2', 'ap-northeast-3',
226
226
  'ap-south-1',
227
- 'ap-southeast-1', 'ap-southeast-2',
227
+ 'ap-southeast-1', 'ap-southeast-2', 'ap-southeast-3', 'ap-southeast-4',
228
228
  'ca-central-1',
229
229
  'cn-north-1',
230
230
  'cn-northwest-1',
231
231
  'eu-central-1',
232
232
  'eu-north-1',
233
- 'eu-west-1', 'eu-west-2', 'eu-west-3', 'eu-south-1',
234
- 'me-south-1',
233
+ 'eu-west-1', 'eu-west-2', 'eu-west-3', 'eu-south-1', 'eu-south-2',
234
+ 'me-south-1','me-central-1',
235
235
  'us-east-1', 'us-east-2',
236
236
  'us-west-1', 'us-west-2',
237
237
  'sa-east-1',
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: 3.13.0
4
+ version: 3.21.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: 2022-02-13 00:00:00.000000000 Z
12
+ date: 2023-09-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -1458,7 +1458,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1458
1458
  - !ruby/object:Gem::Version
1459
1459
  version: '0'
1460
1460
  requirements: []
1461
- rubygems_version: 3.3.5
1461
+ rubygems_version: 3.3.26
1462
1462
  signing_key:
1463
1463
  specification_version: 4
1464
1464
  summary: Module for the 'fog' gem to support Amazon Web Services.