aws-sdk 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/lib/aws.rb +10 -9
  2. data/lib/aws/api_config/IAM-2010-07-15.yml +632 -0
  3. data/lib/aws/base_client.rb +1 -1
  4. data/lib/aws/cacheable.rb +34 -46
  5. data/lib/aws/client_logging.rb +19 -14
  6. data/lib/aws/collections.rb +230 -0
  7. data/lib/aws/common.rb +4 -0
  8. data/lib/aws/configuration.rb +7 -0
  9. data/lib/aws/ec2.rb +2 -2
  10. data/lib/aws/ec2/attachment.rb +64 -71
  11. data/lib/aws/ec2/attachment_collection.rb +11 -9
  12. data/lib/aws/ec2/availability_zone.rb +40 -31
  13. data/lib/aws/ec2/availability_zone_collection.rb +2 -3
  14. data/lib/aws/ec2/elastic_ip.rb +25 -22
  15. data/lib/aws/ec2/elastic_ip_collection.rb +5 -2
  16. data/lib/aws/ec2/image.rb +113 -129
  17. data/lib/aws/ec2/image_collection.rb +5 -6
  18. data/lib/aws/ec2/instance.rb +290 -233
  19. data/lib/aws/ec2/instance_collection.rb +72 -67
  20. data/lib/aws/ec2/key_pair.rb +16 -18
  21. data/lib/aws/ec2/region.rb +25 -17
  22. data/lib/aws/ec2/reserved_instances.rb +7 -1
  23. data/lib/aws/ec2/reserved_instances_collection.rb +3 -3
  24. data/lib/aws/ec2/reserved_instances_offering.rb +7 -1
  25. data/lib/aws/ec2/reserved_instances_offering_collection.rb +3 -3
  26. data/lib/aws/ec2/resource.rb +41 -222
  27. data/lib/aws/ec2/security_group.rb +22 -18
  28. data/lib/aws/ec2/security_group_collection.rb +2 -5
  29. data/lib/aws/ec2/snapshot.rb +44 -35
  30. data/lib/aws/ec2/snapshot_collection.rb +43 -1
  31. data/lib/aws/ec2/tag.rb +14 -18
  32. data/lib/aws/ec2/volume.rb +59 -72
  33. data/lib/aws/ec2/volume_collection.rb +16 -12
  34. data/lib/aws/errors.rb +14 -5
  35. data/lib/aws/http/httparty_handler.rb +2 -2
  36. data/lib/aws/iam.rb +306 -0
  37. data/lib/aws/iam/access_key.rb +183 -0
  38. data/lib/aws/iam/access_key_collection.rb +131 -0
  39. data/lib/aws/iam/account_alias_collection.rb +81 -0
  40. data/lib/aws/iam/client.rb +44 -0
  41. data/lib/aws/iam/client/xml.rb +38 -0
  42. data/lib/aws/iam/collection.rb +87 -0
  43. data/lib/aws/iam/errors.rb +29 -0
  44. data/lib/aws/iam/group.rb +117 -0
  45. data/lib/aws/iam/group_collection.rb +135 -0
  46. data/lib/aws/iam/group_policy_collection.rb +49 -0
  47. data/lib/aws/iam/group_user_collection.rb +94 -0
  48. data/lib/aws/iam/login_profile.rb +97 -0
  49. data/lib/aws/iam/mfa_device.rb +52 -0
  50. data/lib/aws/iam/mfa_device_collection.rb +119 -0
  51. data/lib/aws/iam/policy.rb +48 -0
  52. data/lib/aws/iam/policy_collection.rb +191 -0
  53. data/lib/aws/iam/request.rb +27 -0
  54. data/lib/aws/iam/resource.rb +74 -0
  55. data/lib/aws/iam/server_certificate.rb +143 -0
  56. data/lib/aws/iam/server_certificate_collection.rb +174 -0
  57. data/lib/aws/iam/signing_certificate.rb +171 -0
  58. data/lib/aws/iam/signing_certificate_collection.rb +134 -0
  59. data/lib/aws/iam/user.rb +196 -0
  60. data/lib/aws/iam/user_collection.rb +136 -0
  61. data/lib/aws/iam/user_group_collection.rb +101 -0
  62. data/lib/aws/iam/user_policy.rb +90 -0
  63. data/lib/aws/iam/user_policy_collection.rb +48 -0
  64. data/lib/aws/resource.rb +381 -0
  65. data/lib/aws/resource_cache.rb +1 -2
  66. data/lib/aws/response.rb +5 -1
  67. data/lib/aws/response_cache.rb +1 -1
  68. data/lib/aws/s3/client.rb +3 -1
  69. data/lib/aws/s3/presigned_post.rb +1 -1
  70. data/lib/aws/simple_db.rb +1 -1
  71. metadata +113 -50
@@ -0,0 +1,131 @@
1
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'aws/iam/collection'
15
+ require 'aws/iam/access_key'
16
+
17
+ module AWS
18
+ class IAM
19
+
20
+ # Both AWS accounts and IAM users can have access keys (maximum of 2).
21
+ # You can create new keys so that you can rotate out your old keys.
22
+ # You can create, delete, activate and deactivate access keys.
23
+ #
24
+ # == Create New Access Keys
25
+ #
26
+ # # for the aws account
27
+ # access_keys = iam.access_keys.create
28
+ #
29
+ # # for an iam user
30
+ # user_access_keys = iam.users['johndoe'].access_keys.create
31
+ #
32
+ # == Secret
33
+ #
34
+ # Make sure after creating an access to retrieve the secret access key
35
+ # and save it somewhere safe.
36
+ #
37
+ # access_keys = iam.access_keys.create
38
+ # secret = access_keys.secret
39
+ #
40
+ # If you try to access the secret on an access key that was not newly
41
+ # created an error will be raised. AWS will only give the secret for
42
+ # a newly created access key:
43
+ #
44
+ # access_keys = iam.access_keys.first
45
+ # access_keys.secret
46
+ # #=> oops, raises a runtime error
47
+ #
48
+ class AccessKeyCollection
49
+
50
+ include Collection
51
+
52
+ # @param [Hash] options
53
+ # @option options [User] :user If present, this collection will only
54
+ # represent the access keys for the given user.
55
+ def initialize options = {}
56
+ @user = options[:user]
57
+ @user ? super(@user, options) : super(options)
58
+ end
59
+
60
+ # @return [User,nil] Returns the user these accesss keys belong to.
61
+ # If this returns +nil+ then these access keys belong to the
62
+ # AWS account.
63
+ attr_reader :user
64
+
65
+ def create
66
+
67
+ options = {}
68
+ options[:user_name] = user.name if user
69
+
70
+ resp = client.create_access_key(options)
71
+
72
+ AccessKey.new_from(:create_access_key, resp.access_key,
73
+ resp.access_key.access_key_id, new_options)
74
+
75
+ end
76
+
77
+ # @param [String] access_key_id The ID of the access key.
78
+ # @return [AccessKey] Returns a reference to the access key with
79
+ # the given +access_key_id+.
80
+ def [] access_key_id
81
+ AccessKey.new(access_key_id, new_options)
82
+ end
83
+
84
+ # Deletes all of the access keys from this collection.
85
+ #
86
+ # iam.users['someuser'].access_keys.clear
87
+ #
88
+ # @return [nil]
89
+ def clear
90
+ each{|access_key| access_key.delete }
91
+ nil
92
+ end
93
+
94
+ # Yields once for each access key. You can limit the number of
95
+ # access keys yielded using +:limit+.
96
+ #
97
+ # @param [Hash] options
98
+ # @option options [Integer] :limit The maximum number of access keys
99
+ # to yield.
100
+ # @option options [Integer] :batch_size The maximum number of
101
+ # access keys received each service reqeust.
102
+ # @yieldparam [AccessKey] access_key
103
+ # @return [nil]
104
+ def each options = {}, &block
105
+ each_options = options.dup
106
+ each_options[:user_name] = user.name if user
107
+ super(each_options, &block)
108
+ end
109
+
110
+ # @private
111
+ protected
112
+ def each_item response, &block
113
+ response.access_key_metadata.each do |item|
114
+
115
+ access_key = AccessKey.new_from(:list_access_keys, item,
116
+ item.access_key_id, new_options)
117
+
118
+ yield(access_key)
119
+
120
+ end
121
+ end
122
+
123
+ # @private
124
+ protected
125
+ def new_options
126
+ user ? { :user => user } : { :config => config }
127
+ end
128
+
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,81 @@
1
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'aws/iam/collection'
15
+
16
+ module AWS
17
+ class IAM
18
+
19
+ # @private
20
+ #
21
+ # Currently IAM exposes the account alias in a collection, as if you
22
+ # could create/manage multiple aliases for a single account. However,
23
+ # creating a 2nd alias replaces the first, it does not add an additional
24
+ # alias.
25
+ #
26
+ # Because the API is modeled as a collection this class could be used
27
+ # to work with it, but instead we consume this by the IAM class for
28
+ # the following methods:
29
+ #
30
+ # * create_account_alias
31
+ # * account_alias
32
+ # * remove_account_alias
33
+ #
34
+ # If IAM allows accounts to have multiple aliases, then those previous
35
+ # 3 methods will be deprecated and this interface will be exposed.
36
+ class AccountAliasCollection
37
+
38
+ include Collection
39
+
40
+ # Creates an AWS account alias.
41
+ #
42
+ # iam.account_aliases.create('myaccountalias')
43
+ #
44
+ # For information about account alias restrictions and usage,
45
+ # see http://docs.amazonwebservices.com/IAM/latest/UserGuide/index.html?AccountAlias.html.
46
+ #
47
+ # @param [String] account_alias
48
+ # @return [String] Returns the account_alias string that was passed.
49
+ def create account_alias
50
+ client.create_account_alias(:account_alias => account_alias)
51
+ account_alias
52
+ end
53
+
54
+ # Delete an AWS account alias.
55
+ #
56
+ # iam.account_aliases.delete('myaccountalias')
57
+ #
58
+ # @param [String] account_alias The account alias to delete.
59
+ # @return [nil]
60
+ def delete account_alias
61
+ client.delete_account_alias(:account_alias => account_alias)
62
+ nil
63
+ end
64
+
65
+ # @private
66
+ protected
67
+ def request_method
68
+ :list_account_aliases
69
+ end
70
+
71
+ # @private
72
+ protected
73
+ def each_item response, &block
74
+ response.account_aliases.each do |account_alias|
75
+ yield(account_alias)
76
+ end
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,44 @@
1
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'aws/base_client'
15
+ require 'aws/configured_client_methods'
16
+ require 'aws/iam/request'
17
+ require 'aws/iam/client/xml'
18
+ require 'aws/iam/errors'
19
+
20
+ module AWS
21
+ class IAM
22
+
23
+ # @private
24
+ class Client < BaseClient
25
+
26
+ include ConfiguredClientMethods
27
+
28
+ API_VERSION = '2010-05-08'
29
+
30
+ REQUEST_CLASS = IAM::Request
31
+
32
+ # @private
33
+ CACHEABLE_REQUESTS = Set[:list_groups,
34
+ :list_group_policies,
35
+ :list_groups_for_user,
36
+ :list_server_certificates,
37
+ :get_group,
38
+ :get_group_policy]
39
+
40
+ configure_client
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,38 @@
1
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'aws/configured_xml_grammars'
15
+ require 'aws/ignore_result_element'
16
+ require 'aws/xml_grammar'
17
+
18
+ module AWS
19
+ class IAM
20
+ class Client < BaseClient
21
+
22
+ # @private
23
+ module XML
24
+
25
+ include ConfiguredXmlGrammars
26
+
27
+ extend IgnoreResultElement
28
+
29
+ BaseError = XmlGrammar.customize do
30
+ element("Error") { ignore }
31
+ end
32
+
33
+ define_configured_grammars
34
+
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,87 @@
1
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
3
+ # may not use this file except in compliance with the License. A copy of
4
+ # the License is located at
5
+ #
6
+ # http://aws.amazon.com/apache2.0/
7
+ #
8
+ # or in the "license" file accompanying this file. This file is
9
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
10
+ # ANY KIND, either express or implied. See the License for the specific
11
+ # language governing permissions and limitations under the License.
12
+
13
+ require 'aws/collections'
14
+ require 'aws/inflection'
15
+
16
+ module AWS
17
+ class IAM
18
+ module Collection
19
+
20
+ include Collections::PagedWithLimits
21
+
22
+ # Common methods for collection classes that can be filtered by
23
+ # a path prefix.
24
+ module WithPrefix
25
+
26
+ include Collection
27
+
28
+ # @return [String] The path prefix by which the collection is
29
+ # filtered.
30
+ attr_reader :prefix
31
+
32
+ # @private
33
+ def initialize(options = {})
34
+ @prefix = options[:prefix]
35
+ super
36
+ end
37
+
38
+ def each options = {}, &block
39
+ options = {
40
+ :path_prefix => prefix
41
+ }.merge(options) if prefix
42
+ options[:path_prefix] = options.delete(:prefix) if
43
+ options.key?(:prefix)
44
+ if prefix = options[:path_prefix]
45
+ options[:path_prefix] = "/#{prefix}".sub(%r{^//}, "/")
46
+ end
47
+ super(options, &block)
48
+ end
49
+
50
+ # Returns a collection object including only those groups whose
51
+ # paths begin with the supplied prefix.
52
+ #
53
+ # @param [String] prefix The path prefix for filtering the
54
+ # results.
55
+ #
56
+ # @return [GroupCollection]
57
+ def with_prefix(prefix)
58
+ prefix = "/#{prefix}".sub(%r{^//}, "/")
59
+ self.class.new(:prefix => prefix,
60
+ :config => config)
61
+ end
62
+
63
+ end
64
+
65
+ # @private
66
+ protected
67
+ def request_method
68
+ name = Inflection.ruby_name(self.class.name).sub(/_collection$/, '')
69
+ "list_#{name}s"
70
+ end
71
+
72
+ # @private
73
+ protected
74
+ def next_token_key
75
+ :marker
76
+ end
77
+
78
+ # @private
79
+ protected
80
+ def limit_key
81
+ :max_items
82
+ end
83
+
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,29 @@
1
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'aws/lazy_error_classes'
15
+ require 'aws/iam/client/xml'
16
+
17
+ module AWS
18
+ class IAM
19
+
20
+ # @private
21
+ module Errors
22
+
23
+ BASE_ERROR_GRAMMAR = Client::XML::BaseError
24
+
25
+ include LazyErrorClasses
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,117 @@
1
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'aws/iam/resource'
15
+ require 'aws/iam/errors'
16
+ require 'aws/iam/group_user_collection'
17
+ require 'aws/iam/group_policy_collection'
18
+
19
+ module AWS
20
+ class IAM
21
+
22
+ # Represents a group of users. Groups don't directly interact
23
+ # with AWS; only users do. The main reason to create groups is to
24
+ # collectively assign permissions to the users so they can do
25
+ # their jobs. For example, you could have a group called Admins
26
+ # and give that group the types of permissions admins typically
27
+ # need.
28
+ class Group < Resource
29
+
30
+ prefix_update_attributes
31
+
32
+ # @private
33
+ def initialize(name, options = {})
34
+ options[:name] = name
35
+ super
36
+ end
37
+
38
+ # @attr [String] The group's name.
39
+ mutable_attribute :name, :static => true, :as => :group_name
40
+
41
+ # @attr_reader [String] The group's unique ID.
42
+ attribute :id, :static => true, :as => :group_id
43
+
44
+ # @attr_reader [Time] When the group was created.
45
+ attribute :create_date, :static => true
46
+
47
+ # @attr_reader [String] The group's ARN (Amazon Resource Name).
48
+ attribute :arn
49
+
50
+ # @attr [String] The group's path. Paths are used to identify
51
+ # which division or part of an organization the group belongs
52
+ # to.
53
+ mutable_attribute :path do
54
+ translates_input do |path|
55
+ path = "/#{path}" unless path[0] == ?/
56
+ path = "#{path}/" unless path[-1] == ?/
57
+ path
58
+ end
59
+ end
60
+
61
+ populates_from(:get_group, :create_group) do |resp|
62
+ resp.group if resp.group.group_name == name
63
+ end
64
+
65
+ populates_from(:list_groups, :list_groups_for_user) do |resp|
66
+ resp.groups.find { |g| g.group_name == name }
67
+ end
68
+
69
+ # (see Resource#exists?)
70
+ def exists?; super; end
71
+
72
+ # Deletes the group. The group must not contain any users or
73
+ # have any attached policies.
74
+ def delete
75
+ client.delete_group(:group_name => name)
76
+ nil
77
+ end
78
+
79
+ # Provides access to the users in the group. For example:
80
+ #
81
+ # # get the names of all the users in the group
82
+ # group.users.map(&:name)
83
+ #
84
+ # # remove all users from the group
85
+ # group.users.clear
86
+ #
87
+ # @return [GroupUserCollection] An object representing all the
88
+ # users in the group.
89
+ def users
90
+ GroupUserCollection.new(self)
91
+ end
92
+
93
+ # Provides access to the policies associated with the group.
94
+ # For example:
95
+ #
96
+ # # get the policy named "ReadOnly"
97
+ # group.policies["ReadOnly"]
98
+ #
99
+ # # remove all policies associated with the group
100
+ # group.policies.clear
101
+ #
102
+ # @return [GroupPolicyCollection] An object representing all the
103
+ # policies associated with the group.
104
+ def policies
105
+ GroupPolicyCollection.new(self)
106
+ end
107
+
108
+ # @private
109
+ protected
110
+ def resource_identifiers
111
+ [[:group_name, name]]
112
+ end
113
+
114
+ end
115
+
116
+ end
117
+ end