fog-aws 0.9.4 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 77eaa59f1f6bf9034200ca58a0927a7da17cbf33
4
- data.tar.gz: 39ba1b65e37c525620fe03f5794113f17215a2e7
3
+ metadata.gz: 17dd3fd68228d3795c582e27cd773d680077cdac
4
+ data.tar.gz: dc58a9189e5914e48398e907b381fb71775b78d5
5
5
  SHA512:
6
- metadata.gz: 92b1b41b56eb738ccd414a8829897c37c4d5a0bcfaeec4b45f4df24cf2d2ae63cf8616ccd9af9afc43cb910a220360d68ac6e7cb3f9138a545a953a4b29864cf
7
- data.tar.gz: c8b7b3d026f41cfac0f3f7746465cc48d60cd7287e39c10c3dc61ca03fa58051a8c8ec5d84e0adf7ae96ae76a126a195f12d5f89e569a7e9a39c79b202be2d09
6
+ metadata.gz: 8a7ebbf3ff34dc65a749d701657278a0f488a27da0049e3afb37e3c6f2dbec5e00cddad2ea7fa8289889db91a9be5fc0b8a3d7d1f0c609d5137d0bb2b6c997f7
7
+ data.tar.gz: ee0ae5c80c7c3ae9910d2065cf533b918131594b7b429f9f42eb003662afb9800d4418ca9b2be42cf71446e2d7faf7345e2e2964135a681337639f17a40f4369
@@ -2,7 +2,24 @@
2
2
 
3
3
  ## [Unreleased](https://github.com/fog/fog-aws/tree/HEAD)
4
4
 
5
- [Full Changelog](https://github.com/fog/fog-aws/compare/v0.9.3...HEAD)
5
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v0.9.4...HEAD)
6
+
7
+ **Closed issues:**
8
+
9
+ - How to setup private files with CloudFront? [\#275](https://github.com/fog/fog-aws/issues/275)
10
+ - Feature: Custom Managed Policies [\#272](https://github.com/fog/fog-aws/issues/272)
11
+ - Question: which aws-sdk version is used [\#270](https://github.com/fog/fog-aws/issues/270)
12
+ - Support an IAM list\_attached\_role\_policies method [\#191](https://github.com/fog/fog-aws/issues/191)
13
+
14
+ **Merged pull requests:**
15
+
16
+ - RDS test fixes [\#276](https://github.com/fog/fog-aws/pull/276) ([MrPrimate](https://github.com/MrPrimate))
17
+ - Expanding IAM support [\#274](https://github.com/fog/fog-aws/pull/274) ([MrPrimate](https://github.com/MrPrimate))
18
+ - Rds snapshot improvements [\#269](https://github.com/fog/fog-aws/pull/269) ([tekken](https://github.com/tekken))
19
+ - add default region to use\_iam\_profile [\#268](https://github.com/fog/fog-aws/pull/268) ([shaiguitar](https://github.com/shaiguitar))
20
+
21
+ ## [v0.9.4](https://github.com/fog/fog-aws/tree/v0.9.4) (2016-06-28)
22
+ [Full Changelog](https://github.com/fog/fog-aws/compare/v0.9.3...v0.9.4)
6
23
 
7
24
  **Closed issues:**
8
25
 
@@ -1,8 +1,11 @@
1
1
  module Fog
2
2
  module AWS
3
3
  module CredentialFetcher
4
+
4
5
  INSTANCE_METADATA_HOST = "http://169.254.169.254"
5
6
  INSTANCE_METADATA_PATH = "/latest/meta-data/iam/security-credentials/"
7
+ INSTANCE_METADATA_AZ = "/latest/meta-data/placement/availability-zone/"
8
+
6
9
  module ServiceMethods
7
10
  def fetch_credentials(options)
8
11
  if options[:use_iam_profile] && Fog.mocking?
@@ -13,6 +16,8 @@ module Fog
13
16
  connection = options[:connection] || Excon.new(INSTANCE_METADATA_HOST)
14
17
  role_name = connection.get(:path => INSTANCE_METADATA_PATH, :expects => 200).body
15
18
  role_data = connection.get(:path => INSTANCE_METADATA_PATH+role_name, :expects => 200).body
19
+ az_data = connection.get(:path => INSTANCE_METADATA_AZ, :expects => 200).body
20
+ region = az_data[0..-2] # get region from az
16
21
 
17
22
  session = Fog::JSON.decode(role_data)
18
23
  credentials = {}
@@ -20,9 +25,12 @@ module Fog
20
25
  credentials[:aws_secret_access_key] = session['SecretAccessKey']
21
26
  credentials[:aws_session_token] = session['Token']
22
27
  credentials[:aws_credentials_expire_at] = Time.xmlschema session['Expiration']
28
+
29
+ # set region by default to the one the instance is in.
30
+ credentials[:region] = region
23
31
  #these indicate the metadata service is unavailable or has no profile setup
24
32
  credentials
25
- rescue Excon::Errors::Error => e
33
+ rescue Excon::Error => e
26
34
  Fog::Logger.warning("Unable to fetch credentials: #{e.message}")
27
35
  super
28
36
  end
@@ -24,6 +24,7 @@ module Fog
24
24
  request :create_instance_profile
25
25
  request :create_login_profile
26
26
  request :create_policy
27
+ request :create_policy_version
27
28
  request :create_role
28
29
  request :create_user
29
30
  request :delete_access_key
@@ -34,6 +35,7 @@ module Fog
34
35
  request :delete_instance_profile
35
36
  request :delete_login_profile
36
37
  request :delete_policy
38
+ request :delete_policy_version
37
39
  request :delete_role
38
40
  request :delete_role_policy
39
41
  request :delete_server_certificate
@@ -59,6 +61,7 @@ module Fog
59
61
  request :list_access_keys
60
62
  request :list_account_aliases
61
63
  request :list_attached_group_policies
64
+ request :list_attached_role_policies
62
65
  request :list_attached_user_policies
63
66
  request :list_group_policies
64
67
  request :list_groups
@@ -67,6 +70,7 @@ module Fog
67
70
  request :list_instance_profiles_for_role
68
71
  request :list_mfa_devices
69
72
  request :list_policies
73
+ request :list_policy_versions
70
74
  request :list_role_policies
71
75
  request :list_roles
72
76
  request :list_server_certificates
@@ -78,10 +82,12 @@ module Fog
78
82
  request :put_user_policy
79
83
  request :remove_role_from_instance_profile
80
84
  request :remove_user_from_group
85
+ request :set_default_policy_version
81
86
  request :update_access_key
82
87
  request :update_group
83
88
  request :update_login_profile
84
89
  request :update_account_password_policy
90
+ request :update_assume_role_policy
85
91
  request :update_server_certificate
86
92
  request :update_signing_certificate
87
93
  request :update_user
@@ -0,0 +1,64 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module IAM
5
+ class ListPolicyVersions < Fog::Parsers::Base
6
+ def reset
7
+ super
8
+ @stack = []
9
+ @response = { 'Versions' => [], 'Marker' => '', 'IsTruncated' => false }
10
+ end
11
+
12
+ def start_element(name,attrs = [])
13
+ case name
14
+ when 'Versions'
15
+ @stack << name
16
+ when 'member'
17
+ if @stack.last == 'Versions'
18
+ @version = {}
19
+ end
20
+ end
21
+ super
22
+ end
23
+
24
+ def end_element(name)
25
+ case name
26
+ when 'member'
27
+ @response['Versions'] << @version
28
+ @version = {}
29
+ when 'IsTruncated'
30
+ response[name] = (value == 'true')
31
+ when 'Marker', 'RequestId'
32
+ @response[name] = value
33
+ end
34
+ super
35
+ end
36
+
37
+ def end_element(name)
38
+ case name
39
+ when 'VersionId'
40
+ @version[name] = value
41
+ when 'CreateDate'
42
+ @version[name] = Time.parse(value)
43
+ when 'IsDefaultVersion'
44
+ @version[name] = (value == 'true')
45
+ when 'Versions'
46
+ if @stack.last == 'Versions'
47
+ @stack.pop
48
+ end
49
+ when 'member'
50
+ if @stack.last == 'Versions'
51
+ finished_version(@version)
52
+ @version = nil
53
+ end
54
+ end
55
+ end
56
+
57
+ def finished_version(version)
58
+ @response['Versions'] << version
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,32 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module RDS
5
+ require 'fog/aws/parsers/rds/snapshot_parser'
6
+
7
+ class CopyDBSnapshot < Fog::Parsers::AWS::RDS::SnapshotParser
8
+ def reset
9
+ @response = { 'CopyDBSnapshotResult' => {}, 'ResponseMetadata' => {} }
10
+ super
11
+ end
12
+
13
+ def start_element(name, attrs = [])
14
+ super
15
+ end
16
+
17
+ def end_element(name)
18
+ case name
19
+ when 'DBSnapshot' then
20
+ @response['CopyDBSnapshotResult']['DBSnapshot'] = @db_snapshot
21
+ @db_snapshot = fresh_snapshot
22
+ when 'RequestId'
23
+ @response['ResponseMetadata'][name] = value
24
+ else
25
+ super
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ module Fog
2
+ module Parsers
3
+ module AWS
4
+ module RDS
5
+ class ModifyDbSnapshotAttribute < Fog::Parsers::Base
6
+ def reset
7
+ @response = { 'ModifyDbSnapshotAttributeResult' => {}, 'ResponseMetadata' => {} }
8
+ end
9
+
10
+ def start_element(name, attrs = [])
11
+ super
12
+ end
13
+
14
+ def end_element(name)
15
+ case name
16
+ when 'RequestId'
17
+ @response['ResponseMetadata'][name] = value
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -29,6 +29,8 @@ module Fog
29
29
  request :describe_db_snapshots
30
30
  request :create_db_snapshot
31
31
  request :delete_db_snapshot
32
+ request :modify_db_snapshot_attribute
33
+ request :copy_db_snapshot
32
34
 
33
35
  request :create_db_parameter_group
34
36
  request :delete_db_parameter_group
@@ -0,0 +1,63 @@
1
+ module Fog
2
+ module AWS
3
+ class IAM
4
+ class Real
5
+ require 'fog/aws/parsers/iam/policy_version'
6
+
7
+ # Creates a managed policy
8
+ #
9
+ # ==== Parameters
10
+ # * policy_arn<~String>: arn of the policy
11
+ # * policy_document<~Hash>: policy document, see: http://docs.amazonwebservices.com/IAM/latest/UserGuide/PoliciesOverview.html
12
+ # * set_as_default<~Boolean>: sets policy to default version
13
+ #
14
+ # ==== Returns
15
+ # * response<~Excon::Response>:
16
+ # * body<~Hash>:
17
+ # * 'RequestId'<~String> - Id of the request
18
+ # * 'PolicyVersion'<~Array>:
19
+ # * CreateDate<~DateTime> The date and time, in ISO 8601 date-time format, when the policy version was created.
20
+ # * Document<~String> The policy document. Pattern: [\u0009\u000A\u000D\u0020-\u00FF]+
21
+ # * IsDefaultVersion<~String> Specifies whether the policy version is set as the policy's default version.
22
+ # * VersionId<~String> The identifier for the policy version.
23
+ # ==== See Also
24
+ # http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicyVersion.html
25
+ #
26
+ def create_policy_version(policy_arn, policy_document, set_as_default=true)
27
+ request({
28
+ 'Action' => 'CreatePolicyVersion',
29
+ 'PolicyArn' => policy_arn,
30
+ 'PolicyDocument' => Fog::JSON.encode(policy_document),
31
+ 'SetAsDefault' => set_as_default,
32
+ :parser => Fog::Parsers::AWS::IAM::PolicyVersion.new
33
+ }.reject {|_, value| value.nil?})
34
+ end
35
+ end
36
+
37
+ class Mock
38
+ def create_policy_version(policy_arn, policy_document, set_as_default=true)
39
+ managed_policy_versions = self.data[:managed_policy_versions][policy_arn]
40
+
41
+ unless managed_policy_versions
42
+ raise Fog::AWS::IAM::NotFound, "Policy #{policy_arn} version #{version_id} does not exist."
43
+ end
44
+
45
+ version = managed_policy_versions[version_id]
46
+
47
+ unless version
48
+ raise Fog::AWS::IAM::NotFound, "Policy #{policy_arn} version #{version_id} does not exist."
49
+ end
50
+
51
+ Excon::Response.new.tap do |response|
52
+ response.body = {
53
+ 'PolicyVersion' => version,
54
+ 'RequestId' => Fog::AWS::Mock.request_id
55
+ }
56
+ response.status = 200
57
+ end
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,41 @@
1
+ module Fog
2
+ module AWS
3
+ class IAM
4
+ class Real
5
+ require 'fog/aws/parsers/iam/basic'
6
+
7
+ # Deletes a manged policy
8
+ #
9
+ # ==== Parameters
10
+ # * policy_arn<~String>: arn of the policy
11
+ # * version_id<~String>: version of policy to delete
12
+ #
13
+ # ==== Returns
14
+ # * response<~Excon::Response>:
15
+ # * body<~Hash>:
16
+ # * 'RequestId'<~String> - Id of the request
17
+ #
18
+ # ==== See Also
19
+ # http://docs.aws.amazon.com/IAM/latest/APIReference/API_DeletePolicyVersion.html
20
+ #
21
+ def delete_policy_version(policy_arn, version_id)
22
+ request(
23
+ 'Action' => 'DeletePolicyVersion',
24
+ 'PolicyArn' => policy_arn,
25
+ 'VersionId' => version_id,
26
+ :parser => Fog::Parsers::AWS::IAM::Basic.new
27
+ )
28
+ end
29
+
30
+ class Mock
31
+ def delete_policy_version(policy_arn, version_id)
32
+ Excon::Response.new.tap do |response|
33
+ response.body = { 'RequestId' => Fog::AWS::Mock.request_id }
34
+ response.status = 200
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,89 @@
1
+ module Fog
2
+ module AWS
3
+ class IAM
4
+ class Real
5
+ require 'fog/aws/parsers/iam/list_managed_policies'
6
+
7
+ # Lists managed role policies
8
+ #
9
+ # ==== Parameters
10
+ # * role_name<~String>: name of the role
11
+ #
12
+ # ==== Returns
13
+ # * response<~Excon::Response>:
14
+ # * body<~Hash>:
15
+ # * 'RequestId'<~String> - Id of the request
16
+ # * AttachedPolicies
17
+ # * 'PolicyArn'<~String> - The Amazon Resource Name (ARN). ARNs are unique identifiers for AWS resources.
18
+ # * 'PolicName'<~String> - The friendly name of the attached policy.
19
+ #
20
+ # ==== See Also
21
+ # https://docs.aws.amazon.com/IAM/latest/APIReference/API_ListAttachedRolePolicies.html
22
+ #
23
+ def list_attached_role_policies(role_name, options={})
24
+ request({
25
+ 'Action' => 'ListAttachedRolePolicies',
26
+ 'RoleName' => role_name,
27
+ :parser => Fog::Parsers::AWS::IAM::ListManagedPolicies.new
28
+ }.merge(options))
29
+ end
30
+ end
31
+
32
+ class Mock
33
+ def list_attached_role_policies(role_name, options={})
34
+ unless self.data[:roles].key?(role_name)
35
+ raise Fog::AWS::IAM::NotFound.new("The role with name #{role_name} cannot be found.")
36
+ end
37
+
38
+ limit = options['MaxItems']
39
+ marker = options['Marker']
40
+ role = self.data[:roles][role_name]
41
+
42
+ if limit
43
+ if limit > 1_000
44
+ raise Fog::AWS::IAM::Error.new(
45
+ "ValidationError => 1 validation error detected: Value '#{limit}' at 'limit' failed to satisfy constraint: Member must have value less than or equal to 1000"
46
+ )
47
+ elsif limit < 1
48
+ raise Fog::AWS::IAM::Error.new(
49
+ "ValidationError => 1 validation error detected: Value '#{limit}' at 'limit' failed to satisfy constraint: Member must have value greater than or equal to 1"
50
+ )
51
+ end
52
+ end
53
+
54
+ data_set = if marker
55
+ self.data[:markers][marker] || []
56
+ else
57
+ role[:attached_policies].map { |arn|
58
+ self.data[:managed_policies].fetch(arn)
59
+ }.map { |mp|
60
+ { "PolicyName" => mp.fetch("PolicyName"), "PolicyArn" => mp.fetch("Arn") }
61
+ }
62
+ end
63
+
64
+ data = data_set.slice!(0, limit || 100)
65
+ truncated = data_set.size > 0
66
+ marker = truncated && Base64.encode64("metadata/l/#{account_id}/#{UUID.uuid}")
67
+
68
+ response = Excon::Response.new
69
+
70
+ body = {
71
+ 'Policies' => data,
72
+ 'IsTruncated' => truncated,
73
+ 'RequestId' => Fog::AWS::Mock.request_id
74
+ }
75
+
76
+ if marker
77
+ self.data[:markers][marker] = data_set
78
+ body.merge!('Marker' => marker)
79
+ end
80
+
81
+ response.body = body
82
+ response.status = 200
83
+
84
+ response
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,84 @@
1
+ module Fog
2
+ module AWS
3
+ class IAM
4
+ class Real
5
+ require 'fog/aws/parsers/iam/list_policy_versions'
6
+
7
+ # Lists policy versions
8
+ #
9
+ # ==== Parameters
10
+ # * options <~Hash>: options that filter the result set
11
+ # * Marker <~String>
12
+ # * MaxItems <~Integer>
13
+ # * PolicyArn <~String>
14
+ # ==== Returns
15
+ # * response<~Excon::Response>:
16
+ # * body<~Hash>:
17
+ # * 'RequestId'<~String> - Id of the request
18
+ # * 'IsTruncated'<~Boolean>
19
+ # * 'Marker'<~String>
20
+ # * 'Versions'<~Array>:
21
+ # * CreateDate
22
+ # * IsDefaultVersion
23
+ # * VersionId
24
+ # ==== See Also
25
+ # http://docs.aws.amazon.com/IAM/latest/APIReference/API_ListPolicyVersions.html
26
+ #
27
+ def list_policy_versions(policy_arn, options={})
28
+ request({
29
+ 'Action' => 'ListPolicyVersions',
30
+ 'PolicyArn' => policy_arn,
31
+ :parser => Fog::Parsers::AWS::IAM::ListPolicyVersions.new
32
+ }.merge(options))
33
+ end
34
+ end
35
+
36
+ class Mock
37
+ def list_policy_versions(policy_arn, options={})
38
+ limit = options['MaxItems']
39
+ marker = options['Marker']
40
+
41
+ if limit
42
+ if limit > 1_000
43
+ raise Fog::AWS::IAM::Error.new(
44
+ "ValidationError => 1 validation error detected: Value '#{limit}' at 'limit' failed to satisfy constraint: Member must have value less than or equal to 1000"
45
+ )
46
+ elsif limit < 1
47
+ raise Fog::AWS::IAM::Error.new(
48
+ "ValidationError => 1 validation error detected: Value '#{limit}' at 'limit' failed to satisfy constraint: Member must have value greater than or equal to 1"
49
+ )
50
+ end
51
+ end
52
+
53
+ data_set = if marker
54
+ self.data[:markers][marker] || []
55
+ else
56
+ self.data[:policy_versions].values
57
+ end
58
+
59
+ data = data_set.slice!(0, limit || 100)
60
+ truncated = data_set.size > 0
61
+ marker = truncated && Base64.encode64("metadata/l/#{account_id}/#{UUID.uuid}")
62
+
63
+ response = Excon::Response.new
64
+
65
+ body = {
66
+ 'Versions' => data,
67
+ 'IsTruncated' => truncated,
68
+ 'RequestId' => Fog::AWS::Mock.request_id
69
+ }
70
+
71
+ if marker
72
+ self.data[:markers][marker] = data_set
73
+ body.merge!('Marker' => marker)
74
+ end
75
+
76
+ response.body = body
77
+ response.status = 200
78
+
79
+ response
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,42 @@
1
+ module Fog
2
+ module AWS
3
+ class IAM
4
+ class Real
5
+ require 'fog/aws/parsers/iam/basic'
6
+
7
+ # Remove a user from a group
8
+ #
9
+ # ==== Parameters
10
+ # * policy_arn<~String>: arn of the policy
11
+ # * version_id<~String>: version of policy to delete
12
+ #
13
+ # ==== Returns
14
+ # * response<~Excon::Response>:
15
+ # * body<~Hash>:
16
+ # * 'RequestId'<~String> - Id of the request
17
+ #
18
+ # ==== See Also
19
+ # http://docs.amazonwebservices.com/IAM/latest/APIReference/API_SetDefaultPolicyVersion.html
20
+ #
21
+ def set_default_policy_version(policy_arn, version_id)
22
+ request(
23
+ 'Action' => 'SetDefaultPolicyVersion',
24
+ 'PolicyArn' => policy_arn,
25
+ 'VersionId' => version_id,
26
+ :parser => Fog::Parsers::AWS::IAM::Basic.new
27
+ )
28
+ end
29
+ end
30
+
31
+ class Mock
32
+ def set_default_policy_version(policy_arn, version_id)
33
+ Excon::Response.new.tap do |response|
34
+ response.body = { 'RequestId' => Fog::AWS::Mock.request_id }
35
+ response.status = 200
36
+ end
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,41 @@
1
+ module Fog
2
+ module AWS
3
+ class IAM
4
+ class Real
5
+ require 'fog/aws/parsers/iam/basic'
6
+
7
+ # Creates a managed policy
8
+ #
9
+ # ==== Parameters
10
+ # * policy_document<~Hash>: policy document, see: http://docs.amazonwebservices.com/IAM/latest/UserGuide/PoliciesOverview.html
11
+ # * role_name<~String>: name of role to update
12
+ #
13
+ # ==== Returns
14
+ # * response<~Excon::Response>:
15
+ # * body<~Hash>:
16
+ # * 'RequestId'<~String> - Id of the request
17
+ #
18
+ # ==== See Also
19
+ # http://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAssumeRolePolicy.html
20
+ #
21
+ def update_assume_role_policy(policy_document, role_name)
22
+ request({
23
+ 'Action' => 'UpdateAssumeRolePolicy',
24
+ 'PolicyDocument' => Fog::JSON.encode(policy_document),
25
+ 'RoleName' => role_name,
26
+ :parser => Fog::Parsers::AWS::IAM::Basic.new
27
+ }.reject {|_, value| value.nil?})
28
+ end
29
+
30
+ class Mock
31
+ def update_assume_role_policy(policy_document, role_name)
32
+ Excon::Response.new.tap do |response|
33
+ response.body = { 'RequestId' => Fog::AWS::Mock.request_id }
34
+ response.status = 200
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,53 @@
1
+ module Fog
2
+ module AWS
3
+ class RDS
4
+ class Real
5
+ require 'fog/aws/parsers/rds/copy_db_snapshot'
6
+
7
+ # Copy a db snapshot
8
+ #
9
+ # ==== Parameters
10
+ # * source_db_snapshot_identifier<~String> - Id of db snapshot
11
+ # * target_db_snapshot_identifier<~String> - Desired Id of the db snapshot copy
12
+ # * 'copy_tags'<~Boolean> - true to copy all tags from the source DB snapshot to the target DB snapshot; otherwise false.
13
+ #
14
+ # ==== Returns
15
+ # * response<~Excon::Response>:
16
+ # * body<~Hash>:
17
+ #
18
+ # {Amazon API Reference}[http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CopyDBSnapshot.html]
19
+ def copy_db_snapshot(source_db_snapshot_identifier, target_db_snapshot_identifier, copy_tags = false)
20
+ request(
21
+ 'Action' => 'CopyDBSnapshot',
22
+ 'SourceDBSnapshotIdentifier' => source_db_snapshot_identifier,
23
+ 'TargetDBSnapshotIdentifier' => target_db_snapshot_identifier,
24
+ 'CopyTags' => copy_tags,
25
+ :parser => Fog::Parsers::AWS::RDS::CopyDBSnapshot.new
26
+ )
27
+ end
28
+ end
29
+
30
+ class Mock
31
+ #
32
+ # Usage
33
+ #
34
+ # Fog::AWS[:rds].copy_db_snapshot("snap-original-id", "snap-backup-id", true)
35
+ #
36
+
37
+ def copy_db_snapshot(source_db_snapshot_identifier, target_db_snapshot_identifier, copy_tags = false)
38
+ response = Excon::Response.new
39
+ response.status = 200
40
+ snapshot_id = Fog::AWS::Mock.snapshot_id
41
+ data = self.data[:snapshots]["#{source_db_snapshot_identifier}"]
42
+ data['DBSnapshotIdentifier'] = snapshot_id
43
+ self.data[:snapshots][snapshot_id] = data
44
+ response.body = {
45
+ 'requestId' => Fog::AWS::Mock.request_id,
46
+ 'CopyDBSnapshotResult' => {'DBSnapshot' => data.dup}
47
+ }
48
+ response
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,48 @@
1
+ module Fog
2
+ module AWS
3
+ class RDS
4
+ class Real
5
+ require 'fog/aws/parsers/rds/modify_db_snapshot_attribute'
6
+
7
+ # Modify db snapshot attributes
8
+ #
9
+ # ==== Parameters
10
+ # * db_snapshot_identifier<~String> - Id of snapshot to modify
11
+ # * attributes<~Hash>:
12
+ # * 'Add.MemberId'<~Array> - One or more account ids to grant rds create permission to
13
+ # * 'Remove.MemberId'<~Array> - One or more account ids to revoke rds create permission from
14
+ #
15
+ # {Amazon API Reference}[http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBSnapshotAttribute.html]
16
+ #
17
+ def modify_db_snapshot_attribute(db_snapshot_identifier, attributes)
18
+ params = {}
19
+ params.merge!(Fog::AWS.indexed_param('ValuesToAdd.member.%d', attributes['Add.MemberId'] || []))
20
+ params.merge!(Fog::AWS.indexed_param('ValuesToRemove.member.%d', attributes['Remove.MemberId'] || []))
21
+ request({
22
+ 'Action' => 'ModifyDBSnapshotAttribute',
23
+ 'DBSnapshotIdentifier' => db_snapshot_identifier,
24
+ :idempotent => true,
25
+ 'AttributeName' => "restore",
26
+ :parser => Fog::Parsers::AWS::RDS::ModifyDbSnapshotAttribute.new
27
+ }.merge!(params))
28
+ end
29
+ end
30
+ class Mock
31
+ #
32
+ # Usage
33
+ #
34
+ # Fog::AWS[:rds].modify_db_snapshot_attribute("snap-identifier", {"Add.MemberId"=>"389480430104"})
35
+ #
36
+
37
+ def modify_db_snapshot_attribute(db_snapshot_identifier, attributes)
38
+ response = Excon::Response.new
39
+ response.status = 200
40
+ response.body = {
41
+ 'requestId' => Fog::AWS::Mock.request_id
42
+ }.merge!(data)
43
+ response
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module AWS
3
- VERSION = "0.9.4"
3
+ VERSION = "0.10.0"
4
4
  end
5
5
  end
@@ -7,6 +7,7 @@ Shindo.tests('AWS | credentials', ['aws']) do
7
7
  Excon.defaults[:mock] = true
8
8
  default_credentials = Fog::Compute::AWS.fetch_credentials({})
9
9
  Excon.stub({:method => :get, :path => "/latest/meta-data/iam/security-credentials/"}, {:status => 200, :body => 'arole'})
10
+ Excon.stub({:method => :get, :path => "/latest/meta-data/placement/availability-zone/"}, {:status => 200, :body => 'us-west-1a'})
10
11
 
11
12
  expires_at = Time.at(Time.now.to_i + 500)
12
13
  credentials = {
@@ -23,6 +24,7 @@ Shindo.tests('AWS | credentials', ['aws']) do
23
24
  returns({:aws_access_key_id => 'dummykey',
24
25
  :aws_secret_access_key => 'dummysecret',
25
26
  :aws_session_token => 'dummytoken',
27
+ :region => "us-west-1",
26
28
  :aws_credentials_expire_at => expires_at}) { Fog::Compute::AWS.fetch_credentials(:use_iam_profile => true) }
27
29
  end
28
30
 
@@ -47,6 +49,7 @@ Shindo.tests('AWS | credentials', ['aws']) do
47
49
 
48
50
  tests("#fetch_credentials when the url 404s") do
49
51
  Excon.stub({:method => :get, :path => "/latest/meta-data/iam/security-credentials/"}, {:status => 404, :body => 'not bound'})
52
+ Excon.stub({:method => :get, :path => "/latest/meta-data/placement/availability-zone/"}, {:status => 400, :body => 'not found'})
50
53
  returns(default_credentials) {Fog::Compute::AWS.fetch_credentials(:use_iam_profile => true)}
51
54
  end
52
55
 
@@ -32,6 +32,16 @@ Shindo.tests('AWS::IAM | managed policy requests', ['aws']) do
32
32
  'IsTruncated' => Fog::Boolean
33
33
  }
34
34
 
35
+ attached_policy_format = {
36
+ 'PolicyArn' => String,
37
+ 'PolicyName' => String
38
+ }
39
+
40
+ list_managed_policies_format = {
41
+ 'RequestId' => String,
42
+ 'AttachedPolicies' => [attached_policy_format]
43
+ }
44
+
35
45
  tests("#create_policy('fog_policy')").formats(create_policy_format) do
36
46
  body = Fog::AWS[:iam].create_policy('fog_policy', @policy, '/fog/').body
37
47
  puts body.inspect
@@ -52,15 +62,22 @@ Shindo.tests('AWS::IAM | managed policy requests', ['aws']) do
52
62
  Fog::AWS[:iam].attach_user_policy('fog_policy_test_user', @policy_arn).body
53
63
  end
54
64
 
65
+ tests("#list_attach_user_policies()").formats(list_managed_policies_format) do
66
+ Fog::AWS[:iam].list_attached_user_policies('fog_policy_test_user').body
67
+ end
68
+
55
69
  tests("#detach_user_policy()").formats(AWS::IAM::Formats::BASIC) do
56
70
  Fog::AWS[:iam].detach_user_policy('fog_policy_test_user', @policy_arn).body
57
71
  end
58
72
 
59
-
60
73
  tests("#attach_group_policy()").formats(AWS::IAM::Formats::BASIC) do
61
74
  Fog::AWS[:iam].attach_group_policy('fog_policy_test_group', @policy_arn).body
62
75
  end
63
76
 
77
+ tests("#list_attach_group_policies()").formats(fog_policy_test_group) do
78
+ Fog::AWS[:iam].list_attached_group_policies('fog_policy_test_group').body
79
+ end
80
+
64
81
  tests("#detach_group_policy()").formats(AWS::IAM::Formats::BASIC) do
65
82
  Fog::AWS[:iam].detach_group_policy('fog_policy_test_group', @policy_arn).body
66
83
  end
@@ -69,6 +86,10 @@ Shindo.tests('AWS::IAM | managed policy requests', ['aws']) do
69
86
  Fog::AWS[:iam].attach_role_policy('fog_policy_test_role', @policy_arn).body
70
87
  end
71
88
 
89
+ tests("#list_attach_role_policies()").formats(fog_policy_test_group) do
90
+ Fog::AWS[:iam].attach_role_policies('fog_policy_test_role').body
91
+ end
92
+
72
93
  tests("#detach_role_policy()").formats(AWS::IAM::Formats::BASIC) do
73
94
  Fog::AWS[:iam].detach_role_policy('fog_policy_test_role', @policy_arn).body
74
95
  end
@@ -0,0 +1,114 @@
1
+ Shindo.tests('AWS::IAM | versioned managed policy requests', ['aws']) do
2
+
3
+ pending if Fog.mocking?
4
+
5
+ tests('success') do
6
+ @policy = {'Version' => '2012-10-17', "Statement" => [{"Effect" => "Deny", "Action" => "*", "Resource" => "*"}]}
7
+ @policy_v2 = {'Version' => '2012-10-17', "Statement" => [{"Effect" => "Allow", "Action" => "*", "Resource" => "*"}]}
8
+
9
+ @policy_format = {
10
+ 'Arn' => String,
11
+ 'AttachmentCount' => Integer,
12
+ 'Description' => String,
13
+ 'DefaultVersionId' => String,
14
+ 'IsAttachable' => Fog::Boolean,
15
+ 'Path' => String,
16
+ 'PolicyId' => String,
17
+ 'PolicyName' => String,
18
+ 'CreateDate' => Time,
19
+ 'UpdateDate' => Time
20
+ }
21
+
22
+ create_policy_format = {
23
+ 'RequestId' => String,
24
+ 'Policy' => @policy_format
25
+ }
26
+
27
+ list_policies_format = {
28
+ 'RequestId' => String,
29
+ 'Policies' => [@policy_format],
30
+ 'Marker' => String,
31
+ 'IsTruncated' => Fog::Boolean
32
+ }
33
+
34
+ versioned_policy_format = {
35
+ 'CreateDate' => Time,
36
+ 'Document' => Hash,
37
+ 'IsDefaultVersion' => Fog::Boolean,
38
+ 'Description' => String
39
+ }
40
+
41
+ create_versioned_policy_format = {
42
+ 'RequestId' => String,
43
+ 'PolicyVersion' => [versioned_policy_format]
44
+ }
45
+
46
+ policy_verions_format = {
47
+ 'CreateDate' => Time,
48
+ 'IsDefaultVersion' => Fog::Boolean,
49
+ 'VersionId' => String
50
+ }
51
+
52
+ list_policy_versions_format = {
53
+ 'RequestId' => String,
54
+ 'Versions' => [policy_verions_format],
55
+ 'Marker' => String,
56
+ 'IsTruncated' => Fog::Boolean
57
+ }
58
+
59
+ tests("#create_policy('fog_policy')").formats(create_policy_format) do
60
+ body = Fog::AWS[:iam].create_policy('fog_policy', @policy, '/fog/').body
61
+ puts body.inspect
62
+ @policy_arn = body['Policy']['Arn']
63
+ body
64
+ end
65
+
66
+ tests("#list_policies('fog_policy')").formats(list_policies_format) do
67
+ body = Fog::AWS[:iam].list_policies('PathPrefix' => '/fog/').body
68
+ tests('length 1').returns(1) do
69
+ body['Policies'].length
70
+ end
71
+ body
72
+ end
73
+
74
+ tests("#create_versioned_policy('fog_policy')").formats(create_versioned_policy_format) do
75
+ body = Fog::AWS[:iam].create_versioned_policy(@policy_arn, @policy_v2, true).body
76
+ puts body.inspect
77
+ @policy_version_document = body['PolicyVersion']['Document']
78
+ body
79
+ end
80
+
81
+ tests("#list_policy_versions('fog_policy')").formats(list_policy_versions_format) do
82
+ body = Fog::AWS[:iam].list_policy_versions(@policy_arn).body
83
+ tests('length 2').returns(2) do
84
+ body['Versions'].length
85
+ end
86
+ body
87
+ end
88
+
89
+ tests("#set_default_policy_version('fog_policy')").formats(AWS::IAM::Formats::BASIC) do
90
+ body = Fog::AWS[:iam].set_default_policy_version(@policy_arn, 'v1').body
91
+ tests('length 2').returns(2) do
92
+ body['Versions'].length
93
+ end
94
+ body
95
+ end
96
+
97
+ tests("#delete_versioned_policy('fog_policy')").formats(AWS::IAM::Formats::BASIC) do
98
+ body = Fog::AWS[:iam].delete_policy(@policy_arn, 'v2').body
99
+ puts body.inspect
100
+ @policy_version_document = body['PolicyVersion']['Document']
101
+ body
102
+ end
103
+
104
+ tests("#delete_policy('fog_policy')").formats(AWS::IAM::Formats::BASIC) do
105
+ Fog::AWS[:iam].delete_policy(@policy_arn).body
106
+ end
107
+
108
+ end
109
+
110
+ tests('failure') do
111
+ test('failing conditions')
112
+ end
113
+
114
+ end
@@ -0,0 +1,62 @@
1
+ Shindo.tests('Fog::Rds[:aws] | db snapshot requests', ['aws']) do
2
+
3
+ @snapshot_format = {
4
+ 'AllocatedStorage' => Integer,
5
+ 'AvailabilityZone' => Fog::Nullable::String,
6
+ 'Engine' => String,
7
+ 'EngineVersion' => String,
8
+ 'InstanceCreateTime' => Time,
9
+ 'DBInstanceIdentifier' => String,
10
+ 'DBSnapshotIdentifier' => String,
11
+ 'Iops' => Fog::Nullable::Integer,
12
+ 'MasterUsername' => String,
13
+ 'Port' => Fog::Nullable::Integer,
14
+ 'Status' => String,
15
+ 'StorageType' => String,
16
+ 'SnapshotType' => String,
17
+ 'SnapshotCreateTime' => Fog::Nullable::Time,
18
+ }
19
+
20
+ @snapshots_format = {
21
+ 'requestId' => String
22
+ }
23
+
24
+ @rds_identity = "test_rds"
25
+
26
+ Fog::AWS[:rds].create_db_instance(@rds_identity,{
27
+ "DBInstanceClass"=>"db.m3.xlarge",
28
+ "Engine"=>"PostgreSQL",
29
+ "AllocatedStorage"=>100,
30
+ "MasterUserPassword"=>"password",
31
+ "MasterUsername"=>"username"
32
+ })
33
+
34
+ @rds = Fog::AWS[:rds].servers.get(@rds_identity)
35
+
36
+ tests('success') do
37
+ @snapshot_id = "testRdsSnapshot"
38
+ tests("#create_snapshot(#{@rds.identity})").formats(@snapshot_format) do
39
+ Fog::AWS[:rds].create_db_snapshot(@rds.identity,@snapshot_id).body["CreateDBSnapshotResult"]["DBSnapshot"]
40
+ end
41
+
42
+ Fog.wait_for { Fog::AWS[:rds].snapshots.get(@snapshot_id) }
43
+ Fog::AWS[:rds].snapshots.get(@snapshot_id).wait_for { ready? }
44
+
45
+ tests("#modify_db_snapshot_attribute").formats(@snapshots_format) do
46
+ Fog::AWS[:rds].modify_db_snapshot_attribute(@snapshot_id, {"Add.MemberId"=>["389480430104"]}).body
47
+ end
48
+
49
+ tests("#copy_db_snapshot (#{@snapshot_id}, target_snapshot_id)").formats(@snapshot_format) do
50
+ Fog::AWS[:rds].copy_db_snapshot(@snapshot_id, "target_snapshot_id").body["CopyDBSnapshotResult"]["DBSnapshot"]
51
+ end
52
+ end
53
+
54
+ tests('failure') do
55
+ tests("#delete_snapshot('snap-00000000')").raises(Fog::AWS::RDS::NotFound) do
56
+ Fog::AWS[:rds].delete_db_snapshot(@rds.identity)
57
+ end
58
+ end
59
+
60
+ @rds.destroy
61
+
62
+ end
@@ -138,7 +138,7 @@ class AWS
138
138
 
139
139
  SNAPSHOT = {
140
140
  'AllocatedStorage' => Integer,
141
- 'AvailabilityZone' => String,
141
+ 'AvailabilityZone' => Fog::Nullable::String,
142
142
  'DBInstanceIdentifier' => String,
143
143
  'DBSnapshotIdentifier' => String,
144
144
  'EngineVersion' => String,
@@ -146,10 +146,11 @@ class AWS
146
146
  'InstanceCreateTime' => Time,
147
147
  'Iops' => Fog::Nullable::Integer,
148
148
  'MasterUsername' => String,
149
- 'Port' => Integer,
149
+ 'Port' => Fog::Nullable::Integer,
150
150
  'SnapshotCreateTime' => Fog::Nullable::Time,
151
151
  'Status' => String,
152
- 'SnapshotType' => String
152
+ 'SnapshotType' => String,
153
+ 'StorageType' => String,
153
154
  }
154
155
 
155
156
  INSTANCE = {
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.9.4
4
+ version: 0.10.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: 2016-06-28 00:00:00.000000000 Z
12
+ date: 2016-07-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -558,6 +558,7 @@ files:
558
558
  - lib/fog/aws/parsers/iam/list_managed_policies.rb
559
559
  - lib/fog/aws/parsers/iam/list_mfa_devices.rb
560
560
  - lib/fog/aws/parsers/iam/list_policies.rb
561
+ - lib/fog/aws/parsers/iam/list_policy_versions.rb
561
562
  - lib/fog/aws/parsers/iam/list_roles.rb
562
563
  - lib/fog/aws/parsers/iam/list_server_certificates.rb
563
564
  - lib/fog/aws/parsers/iam/list_signing_certificates.rb
@@ -577,6 +578,7 @@ files:
577
578
  - lib/fog/aws/parsers/lambda/base.rb
578
579
  - lib/fog/aws/parsers/rds/authorize_db_security_group_ingress.rb
579
580
  - lib/fog/aws/parsers/rds/base.rb
581
+ - lib/fog/aws/parsers/rds/copy_db_snapshot.rb
580
582
  - lib/fog/aws/parsers/rds/create_db_cluster.rb
581
583
  - lib/fog/aws/parsers/rds/create_db_cluster_snapshot.rb
582
584
  - lib/fog/aws/parsers/rds/create_db_instance.rb
@@ -618,6 +620,7 @@ files:
618
620
  - lib/fog/aws/parsers/rds/event_subscription_parser.rb
619
621
  - lib/fog/aws/parsers/rds/modify_db_instance.rb
620
622
  - lib/fog/aws/parsers/rds/modify_db_parameter_group.rb
623
+ - lib/fog/aws/parsers/rds/modify_db_snapshot_attribute.rb
621
624
  - lib/fog/aws/parsers/rds/promote_read_replica.rb
622
625
  - lib/fog/aws/parsers/rds/reboot_db_instance.rb
623
626
  - lib/fog/aws/parsers/rds/restore_db_instance_from_db_snapshot.rb
@@ -1063,6 +1066,7 @@ files:
1063
1066
  - lib/fog/aws/requests/iam/create_instance_profile.rb
1064
1067
  - lib/fog/aws/requests/iam/create_login_profile.rb
1065
1068
  - lib/fog/aws/requests/iam/create_policy.rb
1069
+ - lib/fog/aws/requests/iam/create_policy_version.rb
1066
1070
  - lib/fog/aws/requests/iam/create_role.rb
1067
1071
  - lib/fog/aws/requests/iam/create_user.rb
1068
1072
  - lib/fog/aws/requests/iam/delete_access_key.rb
@@ -1073,6 +1077,7 @@ files:
1073
1077
  - lib/fog/aws/requests/iam/delete_instance_profile.rb
1074
1078
  - lib/fog/aws/requests/iam/delete_login_profile.rb
1075
1079
  - lib/fog/aws/requests/iam/delete_policy.rb
1080
+ - lib/fog/aws/requests/iam/delete_policy_version.rb
1076
1081
  - lib/fog/aws/requests/iam/delete_role.rb
1077
1082
  - lib/fog/aws/requests/iam/delete_role_policy.rb
1078
1083
  - lib/fog/aws/requests/iam/delete_server_certificate.rb
@@ -1098,6 +1103,7 @@ files:
1098
1103
  - lib/fog/aws/requests/iam/list_access_keys.rb
1099
1104
  - lib/fog/aws/requests/iam/list_account_aliases.rb
1100
1105
  - lib/fog/aws/requests/iam/list_attached_group_policies.rb
1106
+ - lib/fog/aws/requests/iam/list_attached_role_policies.rb
1101
1107
  - lib/fog/aws/requests/iam/list_attached_user_policies.rb
1102
1108
  - lib/fog/aws/requests/iam/list_group_policies.rb
1103
1109
  - lib/fog/aws/requests/iam/list_groups.rb
@@ -1106,6 +1112,7 @@ files:
1106
1112
  - lib/fog/aws/requests/iam/list_instance_profiles_for_role.rb
1107
1113
  - lib/fog/aws/requests/iam/list_mfa_devices.rb
1108
1114
  - lib/fog/aws/requests/iam/list_policies.rb
1115
+ - lib/fog/aws/requests/iam/list_policy_versions.rb
1109
1116
  - lib/fog/aws/requests/iam/list_role_policies.rb
1110
1117
  - lib/fog/aws/requests/iam/list_roles.rb
1111
1118
  - lib/fog/aws/requests/iam/list_server_certificates.rb
@@ -1117,8 +1124,10 @@ files:
1117
1124
  - lib/fog/aws/requests/iam/put_user_policy.rb
1118
1125
  - lib/fog/aws/requests/iam/remove_role_from_instance_profile.rb
1119
1126
  - lib/fog/aws/requests/iam/remove_user_from_group.rb
1127
+ - lib/fog/aws/requests/iam/set_default_policy_version.rb
1120
1128
  - lib/fog/aws/requests/iam/update_access_key.rb
1121
1129
  - lib/fog/aws/requests/iam/update_account_password_policy.rb
1130
+ - lib/fog/aws/requests/iam/update_assume_role_policy.rb
1122
1131
  - lib/fog/aws/requests/iam/update_group.rb
1123
1132
  - lib/fog/aws/requests/iam/update_login_profile.rb
1124
1133
  - lib/fog/aws/requests/iam/update_server_certificate.rb
@@ -1160,6 +1169,7 @@ files:
1160
1169
  - lib/fog/aws/requests/lambda/update_function_configuration.rb
1161
1170
  - lib/fog/aws/requests/rds/add_tags_to_resource.rb
1162
1171
  - lib/fog/aws/requests/rds/authorize_db_security_group_ingress.rb
1172
+ - lib/fog/aws/requests/rds/copy_db_snapshot.rb
1163
1173
  - lib/fog/aws/requests/rds/create_db_cluster.rb
1164
1174
  - lib/fog/aws/requests/rds/create_db_cluster_snapshot.rb
1165
1175
  - lib/fog/aws/requests/rds/create_db_instance.rb
@@ -1196,6 +1206,7 @@ files:
1196
1206
  - lib/fog/aws/requests/rds/list_tags_for_resource.rb
1197
1207
  - lib/fog/aws/requests/rds/modify_db_instance.rb
1198
1208
  - lib/fog/aws/requests/rds/modify_db_parameter_group.rb
1209
+ - lib/fog/aws/requests/rds/modify_db_snapshot_attribute.rb
1199
1210
  - lib/fog/aws/requests/rds/promote_read_replica.rb
1200
1211
  - lib/fog/aws/requests/rds/reboot_db_instance.rb
1201
1212
  - lib/fog/aws/requests/rds/remove_tags_from_resource.rb
@@ -1537,6 +1548,7 @@ files:
1537
1548
  - tests/requests/iam/server_certificate_tests.rb
1538
1549
  - tests/requests/iam/user_policy_tests.rb
1539
1550
  - tests/requests/iam/user_tests.rb
1551
+ - tests/requests/iam/versioned_managed_policy_tests.rb
1540
1552
  - tests/requests/kinesis/helper.rb
1541
1553
  - tests/requests/kinesis/stream_tests.rb
1542
1554
  - tests/requests/kms/helper.rb
@@ -1548,6 +1560,7 @@ files:
1548
1560
  - tests/requests/rds/cluster_snapshot_tests.rb
1549
1561
  - tests/requests/rds/cluster_tests.rb
1550
1562
  - tests/requests/rds/db_engine_versions.rb
1563
+ - tests/requests/rds/db_snapshot_tests.rb
1551
1564
  - tests/requests/rds/describe_events.rb
1552
1565
  - tests/requests/rds/event_subscription_tests.rb
1553
1566
  - tests/requests/rds/helper.rb
@@ -1615,3 +1628,4 @@ signing_key:
1615
1628
  specification_version: 4
1616
1629
  summary: Module for the 'fog' gem to support Amazon Web Services.
1617
1630
  test_files: []
1631
+ has_rdoc: