aws-sdk 1.0.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.
Files changed (205) hide show
  1. data/.yardopts +6 -0
  2. data/LICENSE.txt +171 -0
  3. data/NOTICE.txt +2 -0
  4. data/README.rdoc +189 -0
  5. data/lib/aws-sdk.rb +14 -0
  6. data/lib/aws.rb +63 -0
  7. data/lib/aws/api_config.rb +45 -0
  8. data/lib/aws/api_config/.document +0 -0
  9. data/lib/aws/api_config/EC2-2011-02-28.yml +2314 -0
  10. data/lib/aws/api_config/SNS-2010-03-31.yml +171 -0
  11. data/lib/aws/api_config/SQS-2009-02-01.yml +161 -0
  12. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +278 -0
  13. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +147 -0
  14. data/lib/aws/api_config_transform.rb +32 -0
  15. data/lib/aws/async_handle.rb +90 -0
  16. data/lib/aws/authorize_v2.rb +37 -0
  17. data/lib/aws/authorize_v3.rb +37 -0
  18. data/lib/aws/base_client.rb +524 -0
  19. data/lib/aws/cacheable.rb +92 -0
  20. data/lib/aws/common.rb +228 -0
  21. data/lib/aws/configurable.rb +36 -0
  22. data/lib/aws/configuration.rb +272 -0
  23. data/lib/aws/configured_client_methods.rb +81 -0
  24. data/lib/aws/configured_grammars.rb +65 -0
  25. data/lib/aws/configured_option_grammars.rb +46 -0
  26. data/lib/aws/configured_xml_grammars.rb +47 -0
  27. data/lib/aws/default_signer.rb +38 -0
  28. data/lib/aws/ec2.rb +321 -0
  29. data/lib/aws/ec2/attachment.rb +149 -0
  30. data/lib/aws/ec2/attachment_collection.rb +57 -0
  31. data/lib/aws/ec2/availability_zone.rb +80 -0
  32. data/lib/aws/ec2/availability_zone_collection.rb +47 -0
  33. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  34. data/lib/aws/ec2/client.rb +54 -0
  35. data/lib/aws/ec2/client/xml.rb +127 -0
  36. data/lib/aws/ec2/collection.rb +39 -0
  37. data/lib/aws/ec2/config_transform.rb +63 -0
  38. data/lib/aws/ec2/elastic_ip.rb +107 -0
  39. data/lib/aws/ec2/elastic_ip_collection.rb +85 -0
  40. data/lib/aws/ec2/errors.rb +29 -0
  41. data/lib/aws/ec2/filtered_collection.rb +65 -0
  42. data/lib/aws/ec2/has_permissions.rb +46 -0
  43. data/lib/aws/ec2/image.rb +245 -0
  44. data/lib/aws/ec2/image_collection.rb +235 -0
  45. data/lib/aws/ec2/instance.rb +515 -0
  46. data/lib/aws/ec2/instance_collection.rb +276 -0
  47. data/lib/aws/ec2/key_pair.rb +86 -0
  48. data/lib/aws/ec2/key_pair_collection.rb +102 -0
  49. data/lib/aws/ec2/permission_collection.rb +177 -0
  50. data/lib/aws/ec2/region.rb +81 -0
  51. data/lib/aws/ec2/region_collection.rb +55 -0
  52. data/lib/aws/ec2/request.rb +27 -0
  53. data/lib/aws/ec2/reserved_instances.rb +50 -0
  54. data/lib/aws/ec2/reserved_instances_collection.rb +44 -0
  55. data/lib/aws/ec2/reserved_instances_offering.rb +55 -0
  56. data/lib/aws/ec2/reserved_instances_offering_collection.rb +43 -0
  57. data/lib/aws/ec2/resource.rb +340 -0
  58. data/lib/aws/ec2/resource_tag_collection.rb +218 -0
  59. data/lib/aws/ec2/security_group.rb +246 -0
  60. data/lib/aws/ec2/security_group/ip_permission.rb +70 -0
  61. data/lib/aws/ec2/security_group/ip_permission_collection.rb +59 -0
  62. data/lib/aws/ec2/security_group_collection.rb +132 -0
  63. data/lib/aws/ec2/snapshot.rb +138 -0
  64. data/lib/aws/ec2/snapshot_collection.rb +90 -0
  65. data/lib/aws/ec2/tag.rb +88 -0
  66. data/lib/aws/ec2/tag_collection.rb +114 -0
  67. data/lib/aws/ec2/tagged_collection.rb +48 -0
  68. data/lib/aws/ec2/tagged_item.rb +87 -0
  69. data/lib/aws/ec2/volume.rb +190 -0
  70. data/lib/aws/ec2/volume_collection.rb +95 -0
  71. data/lib/aws/errors.rb +129 -0
  72. data/lib/aws/http/builtin_handler.rb +69 -0
  73. data/lib/aws/http/curb_handler.rb +123 -0
  74. data/lib/aws/http/handler.rb +77 -0
  75. data/lib/aws/http/httparty_handler.rb +61 -0
  76. data/lib/aws/http/request.rb +136 -0
  77. data/lib/aws/http/request_param.rb +63 -0
  78. data/lib/aws/http/response.rb +75 -0
  79. data/lib/aws/ignore_result_element.rb +38 -0
  80. data/lib/aws/indifferent_hash.rb +86 -0
  81. data/lib/aws/inflection.rb +46 -0
  82. data/lib/aws/lazy_error_classes.rb +64 -0
  83. data/lib/aws/meta_utils.rb +43 -0
  84. data/lib/aws/model.rb +57 -0
  85. data/lib/aws/naming.rb +32 -0
  86. data/lib/aws/option_grammar.rb +544 -0
  87. data/lib/aws/policy.rb +912 -0
  88. data/lib/aws/rails.rb +209 -0
  89. data/lib/aws/record.rb +79 -0
  90. data/lib/aws/record/attribute.rb +94 -0
  91. data/lib/aws/record/attribute_macros.rb +288 -0
  92. data/lib/aws/record/attributes/boolean.rb +49 -0
  93. data/lib/aws/record/attributes/datetime.rb +86 -0
  94. data/lib/aws/record/attributes/float.rb +48 -0
  95. data/lib/aws/record/attributes/integer.rb +68 -0
  96. data/lib/aws/record/attributes/sortable_float.rb +60 -0
  97. data/lib/aws/record/attributes/sortable_integer.rb +95 -0
  98. data/lib/aws/record/attributes/string.rb +69 -0
  99. data/lib/aws/record/base.rb +728 -0
  100. data/lib/aws/record/conversion.rb +38 -0
  101. data/lib/aws/record/dirty_tracking.rb +286 -0
  102. data/lib/aws/record/errors.rb +153 -0
  103. data/lib/aws/record/exceptions.rb +48 -0
  104. data/lib/aws/record/finder_methods.rb +262 -0
  105. data/lib/aws/record/naming.rb +31 -0
  106. data/lib/aws/record/scope.rb +157 -0
  107. data/lib/aws/record/validations.rb +653 -0
  108. data/lib/aws/record/validator.rb +237 -0
  109. data/lib/aws/record/validators/acceptance.rb +51 -0
  110. data/lib/aws/record/validators/block.rb +38 -0
  111. data/lib/aws/record/validators/confirmation.rb +43 -0
  112. data/lib/aws/record/validators/count.rb +108 -0
  113. data/lib/aws/record/validators/exclusion.rb +43 -0
  114. data/lib/aws/record/validators/format.rb +57 -0
  115. data/lib/aws/record/validators/inclusion.rb +56 -0
  116. data/lib/aws/record/validators/length.rb +107 -0
  117. data/lib/aws/record/validators/numericality.rb +138 -0
  118. data/lib/aws/record/validators/presence.rb +45 -0
  119. data/lib/aws/resource_cache.rb +39 -0
  120. data/lib/aws/response.rb +113 -0
  121. data/lib/aws/response_cache.rb +50 -0
  122. data/lib/aws/s3.rb +109 -0
  123. data/lib/aws/s3/access_control_list.rb +252 -0
  124. data/lib/aws/s3/acl_object.rb +266 -0
  125. data/lib/aws/s3/bucket.rb +320 -0
  126. data/lib/aws/s3/bucket_collection.rb +122 -0
  127. data/lib/aws/s3/bucket_version_collection.rb +85 -0
  128. data/lib/aws/s3/client.rb +999 -0
  129. data/lib/aws/s3/client/xml.rb +190 -0
  130. data/lib/aws/s3/data_options.rb +99 -0
  131. data/lib/aws/s3/errors.rb +43 -0
  132. data/lib/aws/s3/multipart_upload.rb +318 -0
  133. data/lib/aws/s3/multipart_upload_collection.rb +78 -0
  134. data/lib/aws/s3/object_collection.rb +159 -0
  135. data/lib/aws/s3/object_metadata.rb +67 -0
  136. data/lib/aws/s3/object_upload_collection.rb +83 -0
  137. data/lib/aws/s3/object_version.rb +141 -0
  138. data/lib/aws/s3/object_version_collection.rb +78 -0
  139. data/lib/aws/s3/paginated_collection.rb +94 -0
  140. data/lib/aws/s3/policy.rb +76 -0
  141. data/lib/aws/s3/prefix_and_delimiter_collection.rb +56 -0
  142. data/lib/aws/s3/prefixed_collection.rb +84 -0
  143. data/lib/aws/s3/presigned_post.rb +504 -0
  144. data/lib/aws/s3/request.rb +198 -0
  145. data/lib/aws/s3/s3_object.rb +794 -0
  146. data/lib/aws/s3/tree.rb +116 -0
  147. data/lib/aws/s3/tree/branch_node.rb +71 -0
  148. data/lib/aws/s3/tree/child_collection.rb +108 -0
  149. data/lib/aws/s3/tree/leaf_node.rb +99 -0
  150. data/lib/aws/s3/tree/node.rb +22 -0
  151. data/lib/aws/s3/tree/parent.rb +90 -0
  152. data/lib/aws/s3/uploaded_part.rb +82 -0
  153. data/lib/aws/s3/uploaded_part_collection.rb +86 -0
  154. data/lib/aws/service_interface.rb +60 -0
  155. data/lib/aws/simple_db.rb +202 -0
  156. data/lib/aws/simple_db/attribute.rb +159 -0
  157. data/lib/aws/simple_db/attribute_collection.rb +227 -0
  158. data/lib/aws/simple_db/client.rb +52 -0
  159. data/lib/aws/simple_db/client/options.rb +34 -0
  160. data/lib/aws/simple_db/client/xml.rb +68 -0
  161. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  162. data/lib/aws/simple_db/delete_attributes.rb +64 -0
  163. data/lib/aws/simple_db/domain.rb +118 -0
  164. data/lib/aws/simple_db/domain_collection.rb +116 -0
  165. data/lib/aws/simple_db/domain_metadata.rb +112 -0
  166. data/lib/aws/simple_db/errors.rb +46 -0
  167. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  168. data/lib/aws/simple_db/item.rb +84 -0
  169. data/lib/aws/simple_db/item_collection.rb +594 -0
  170. data/lib/aws/simple_db/item_data.rb +70 -0
  171. data/lib/aws/simple_db/put_attributes.rb +62 -0
  172. data/lib/aws/simple_db/request.rb +27 -0
  173. data/lib/aws/simple_email_service.rb +373 -0
  174. data/lib/aws/simple_email_service/client.rb +39 -0
  175. data/lib/aws/simple_email_service/client/options.rb +24 -0
  176. data/lib/aws/simple_email_service/client/xml.rb +38 -0
  177. data/lib/aws/simple_email_service/email_address_collection.rb +66 -0
  178. data/lib/aws/simple_email_service/errors.rb +29 -0
  179. data/lib/aws/simple_email_service/quotas.rb +64 -0
  180. data/lib/aws/simple_email_service/request.rb +27 -0
  181. data/lib/aws/sns.rb +69 -0
  182. data/lib/aws/sns/client.rb +37 -0
  183. data/lib/aws/sns/client/options.rb +24 -0
  184. data/lib/aws/sns/client/xml.rb +38 -0
  185. data/lib/aws/sns/errors.rb +29 -0
  186. data/lib/aws/sns/policy.rb +49 -0
  187. data/lib/aws/sns/request.rb +27 -0
  188. data/lib/aws/sns/subscription.rb +100 -0
  189. data/lib/aws/sns/subscription_collection.rb +84 -0
  190. data/lib/aws/sns/topic.rb +384 -0
  191. data/lib/aws/sns/topic_collection.rb +70 -0
  192. data/lib/aws/sns/topic_subscription_collection.rb +58 -0
  193. data/lib/aws/sqs.rb +70 -0
  194. data/lib/aws/sqs/client.rb +38 -0
  195. data/lib/aws/sqs/client/xml.rb +36 -0
  196. data/lib/aws/sqs/errors.rb +33 -0
  197. data/lib/aws/sqs/policy.rb +50 -0
  198. data/lib/aws/sqs/queue.rb +507 -0
  199. data/lib/aws/sqs/queue_collection.rb +105 -0
  200. data/lib/aws/sqs/received_message.rb +184 -0
  201. data/lib/aws/sqs/received_sns_message.rb +112 -0
  202. data/lib/aws/sqs/request.rb +44 -0
  203. data/lib/aws/xml_grammar.rb +923 -0
  204. data/rails/init.rb +15 -0
  205. metadata +298 -0
@@ -0,0 +1,138 @@
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/ec2/resource'
15
+ require 'aws/ec2/has_permissions'
16
+ require 'aws/ec2/tagged_item'
17
+
18
+ module AWS
19
+ class EC2
20
+
21
+ # Represents an Amazon EBS snapshot.
22
+ #
23
+ # @example Taking a snapshot from a volume
24
+ # snapshot = volume.create_snapshot("Database Backup 12/21/2010")
25
+ # sleep 1 until [:completed, :error].include?(snapshot.status)
26
+ #
27
+ # @example Managing snapshot permissions
28
+ # unless snapshot.public?
29
+ # snapshot.permissions.add("12345678901")
30
+ # end
31
+ #
32
+ # @attr_reader [String] volume_id The ID of the volume this
33
+ # snapshot was created from.
34
+ #
35
+ # @attr_reader [Symbol] status The status of the snapshot.
36
+ # Possible values:
37
+ #
38
+ # * +:pending+
39
+ # * +:completed+
40
+ # * +:error+
41
+ #
42
+ # @attr_reader [Time] start_time The time at which the snapshot
43
+ # was initiated.
44
+ #
45
+ # @attr_reader [Integer] progress The progress of the snapshot
46
+ # as a percentage.
47
+ #
48
+ # @attr_reader [String] owner_id The AWS account ID of the
49
+ # snapshot owner.
50
+ #
51
+ # @attr_reader [Integer] volume_size The size of the volume from
52
+ # which the snapshot was created.
53
+ #
54
+ # @attr_reader [String] description The description of the
55
+ # snapshot provided at snapshot initiation.
56
+ class Snapshot < Resource
57
+
58
+ include HasPermissions
59
+ include TaggedItem
60
+ alias_method :create_volume_permissions, :permissions
61
+
62
+ # The snapshot ID
63
+ attr_reader :id
64
+
65
+ # @private
66
+ def initialize(id, opts = {})
67
+ @id = id
68
+ super(opts)
69
+ end
70
+
71
+ # Deletes the snapshot.
72
+ def delete
73
+ client.delete_snapshot(:snapshot_id => id)
74
+ end
75
+
76
+ # Creates a volume from the snapshot.
77
+ #
78
+ # @param [AvailabilityZone or String] availability_zone The
79
+ # Availability Zone in which to create the new volume. See
80
+ # {EC2#availability_zones} for how to get a list of
81
+ # availability zones.
82
+ #
83
+ # @param [Hash] opts Additional options for creating the volume
84
+ #
85
+ # @option opts [Integer] size The desired size (in gigabytes)
86
+ # for the volume.
87
+ #
88
+ # @return [Volume] The newly created volume
89
+ def create_volume(availability_zone, opts = {})
90
+ VolumeCollection.new(:config => config).
91
+ create(opts.merge(:snapshot => self,
92
+ :availability_zone => availability_zone))
93
+ end
94
+
95
+ # @return [Boolean] True if the snapshot exists.
96
+ def exists?
97
+ resp =
98
+ client.describe_snapshots(:filters => [{ :name => 'snapshot-id',
99
+ :values => [id] }]) and
100
+ !resp.snapshot_set.empty?
101
+ end
102
+
103
+ describe_call_attribute :volume_id
104
+
105
+ # @return [Volume] The volume this snapshot was created from.
106
+ def volume
107
+ Volume.new(volume_id, :config => config) if volume_id
108
+ end
109
+
110
+ describe_call_attribute :status, :to_sym => true
111
+ describe_call_attribute :start_time
112
+ describe_call_attribute :progress do
113
+ translate_output { |value| value.to_i if value }
114
+ end
115
+ describe_call_attribute :owner_id
116
+ describe_call_attribute :volume_size
117
+ describe_call_attribute :owner_alias
118
+ describe_call_attribute :description
119
+
120
+ # @private
121
+ def __permissions_attribute__
122
+ "createVolumePermission"
123
+ end
124
+
125
+ populate_from :create_snapshot do |resp|
126
+ attributes_from_response_object(resp) if
127
+ resp.snapshot_id == id
128
+ end
129
+
130
+ protected
131
+ def find_in_response(resp)
132
+ resp.snapshot_index[id]
133
+ end
134
+
135
+ end
136
+
137
+ end
138
+ end
@@ -0,0 +1,90 @@
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/ec2/collection'
15
+ require 'aws/ec2/tagged_collection'
16
+ require 'aws/ec2/snapshot'
17
+
18
+ module AWS
19
+ class EC2
20
+
21
+ # Represents a collection of Amazon EBS snapshots. Typically
22
+ # you should get an instance of this class by calling
23
+ # {EC2#snapshots}.
24
+ #
25
+ # @example Create a snapshot from a volume
26
+ # ec2.snapshots.create(:volume => ec2.volumes["vol-123"],
27
+ # :description => "my snapshot")
28
+ # # or:
29
+ # ec2.volumes["vol-123"].create_snapshot("my snapshot")
30
+ #
31
+ # @example Get a snapshot by ID
32
+ # snapshot = ec2.snapshots["vol-123"]
33
+ # snapshot.exists?
34
+ #
35
+ # @example Get a map of snapshot IDs to snapshot status
36
+ # ec2.snapshots.inject({}) { |m, s| m[i.id] = s.status; m }
37
+ # # => { "snap-12345678" => :pending, "snap-87654321" => :completed }
38
+ class SnapshotCollection < Collection
39
+
40
+ include TaggedCollection
41
+
42
+ # @yield [Instance] Yields each volume in the collection.
43
+ # @return [nil]
44
+ def each(&block)
45
+ resp = filtered_request(:describe_snapshots)
46
+ resp.snapshot_set.each do |v|
47
+ snapshot = Snapshot.new(v.snapshot_id, :config => config)
48
+ yield(snapshot)
49
+ end
50
+ nil
51
+ end
52
+
53
+ # Creates a snapshot of an Amazon EBS volume and stores it in
54
+ # Amazon S3. You can use snapshots for backups, to make
55
+ # identical copies of instance devices, and to save data
56
+ # before shutting down an instance. For more information about
57
+ # Amazon EBS, go to the {Amazon Elastic Compute Cloud User
58
+ # Guide}[http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?using-ebs.html].
59
+ #
60
+ # @return [Snapshot] An object representing the new snapshot.
61
+ #
62
+ # @param [Hash] opts Options for creating the snapshot.
63
+ # Either +:volume+ or +:volume_id+ is required.
64
+ #
65
+ # @param opts [Volume] :volume The Amazon EBS volume of which
66
+ # to take a snapshot.
67
+ #
68
+ # @param opts [String] :volume_id The ID of the Amazon EBS
69
+ # volume of which to take a snapshot.
70
+ #
71
+ # @param opts [String] :description An optional description of
72
+ # the snapshot. May contain up to 255 characters.
73
+ def create opts = {}
74
+ if volume = opts.delete(:volume)
75
+ opts[:volume_id] = volume.id
76
+ end
77
+ resp = client.create_snapshot(opts)
78
+ Snapshot.new(resp.snapshot_id, :config => config)
79
+ end
80
+
81
+ # @private
82
+ protected
83
+ def member_class
84
+ Snapshot
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+ end
@@ -0,0 +1,88 @@
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/model'
15
+ require 'aws/cacheable'
16
+
17
+ module AWS
18
+ class EC2
19
+
20
+ # Represents an EC2 tag.
21
+ class Tag < Resource
22
+
23
+ # @param [String] key The name of the tag
24
+ # @param [Hash] options
25
+ # @option options [String] :value ('') The optional value of the tag.
26
+ def initialize resource, key, options = {}
27
+ @resource = resource
28
+ @key = key.to_s
29
+ super
30
+ end
31
+
32
+ # @return [Object] The EC2 resource this tag belongs to.
33
+ attr_reader :resource
34
+
35
+ # @return [String] The name of this tag.
36
+ attr_reader :key
37
+
38
+ alias_method :name, :key
39
+
40
+ # @return [String] The tag value.
41
+ def value; end
42
+ describe_call_attribute :value
43
+
44
+ # Deletes this tag.
45
+ # @return [nil]
46
+ def delete(value = nil)
47
+ tag_opts = { :key => key }
48
+ tag_opts[:value] = value if value
49
+ client.delete_tags(:resources => [resource.id], :tags => [tag_opts])
50
+ nil
51
+ end
52
+
53
+ # @private
54
+ def inspect
55
+ "<#{local_cache_key}>"
56
+ end
57
+
58
+ # @private
59
+ def local_cache_key
60
+ "#{self.class}:#{response_index_key}"
61
+ end
62
+
63
+ private
64
+ def response_index_key
65
+ type = resource.tagging_resource_type
66
+ id = resource.send(:__resource_id__)
67
+ "#{type}:#{id}:#{key}"
68
+ end
69
+
70
+ protected
71
+ def find_in_response(resp)
72
+ resp.tag_index[response_index_key]
73
+ end
74
+
75
+ protected
76
+ def describe_call
77
+ client.describe_tags(:filters =>
78
+ [{ :name => "key",
79
+ :values => [key] },
80
+ { :name => "resource-type",
81
+ :values => [resource.tagging_resource_type] },
82
+ { :name => "resource-id",
83
+ :values => [resource.send(:__resource_id__)] }])
84
+ end
85
+
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,114 @@
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/model'
15
+ require 'aws/inflection'
16
+ require 'aws/ec2/collection'
17
+ require 'aws/ec2/tag'
18
+ require 'aws/ec2/tagged_item'
19
+ require 'aws/ec2/resource'
20
+
21
+ module AWS
22
+ class EC2
23
+
24
+ # Temporary class that will be removed once the rest of the taggable
25
+ # EC2 resources have been modeled.
26
+ class ResourceObject < Resource
27
+
28
+ def initialize id, options = {}
29
+ @id = id
30
+ @resource_type = options[:resource_type]
31
+ super
32
+ end
33
+
34
+ attr_reader :id
35
+
36
+ include TaggedItem
37
+
38
+ # @private
39
+ def tagging_resource_type
40
+ @resource_type
41
+ end
42
+
43
+ # @private
44
+ # We don't know how to make a describe call for this object yet
45
+ def cached_tags; nil; end
46
+
47
+ end
48
+
49
+ # Represents all EC2 tags in an account.
50
+ class TagCollection < Collection
51
+
52
+ # Creates a new Tag and assigns it to an EC2 resource.
53
+ #
54
+ # @example tagging with names (keys) only
55
+ #
56
+ # ec2.tags.create(instance, 'webserver')
57
+ #
58
+ # @example tagging with names (keys) and values
59
+ #
60
+ # ec2.tags.create(instance, 'stage', 'production')
61
+ #
62
+ # @param [Object] resource The item to tag. This should be a taggable
63
+ # EC2 resource, like an instance, security group, etc.
64
+ # @param [String] key The tag key (or name).
65
+ # @param [Hash] options
66
+ # @option optins [String] :value ('') The optional tag value. When
67
+ # left blank its assigned the empty string.
68
+ # @return [Tag]
69
+ def create resource, key, options = {}
70
+ value = options[:value].to_s
71
+ client.create_tags(
72
+ :resources => [resource.id],
73
+ :tags => [{ :key => key, :value => value }])
74
+ Tag.new(resource, key, :value => value, :config => config)
75
+ end
76
+
77
+ # @return [Tag] Returns a reference to a tag with the given name.
78
+ def [] tag_name
79
+ super
80
+ end
81
+
82
+ # Yields once for each tag.
83
+ # @yield [tag]
84
+ # @yieldparam [Tag] tag
85
+ # @return [nil]
86
+ def each &block
87
+ response = filtered_request(:describe_tags)
88
+ response.tag_set.each do |tag|
89
+
90
+ resource_class_name = Inflection.class_name(tag.resource_type)
91
+ if EC2.const_defined?(resource_class_name)
92
+ resource_class = EC2.const_get(resource_class_name)
93
+ resource = resource_class.new(tag.resource_id, :config => config)
94
+ else
95
+ resource = ResourceObject.new(tag.resource_id,
96
+ :resource_type => tag.resource_type,
97
+ :config => config)
98
+ end
99
+
100
+ yield(Tag.new(resource, tag.key))
101
+
102
+ end
103
+ nil
104
+ end
105
+
106
+ # @private
107
+ protected
108
+ def member_class
109
+ Tag
110
+ end
111
+
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,48 @@
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
+ module AWS
15
+ class EC2
16
+
17
+ # @private
18
+ module TaggedCollection
19
+
20
+ # Filter the collection by one or more tag keys. If you pass multiple
21
+ # tag keys they will be be treated as OR conditions. If you want to
22
+ # AND them together call tagged multiple times (chained).
23
+ #
24
+ # Filter the collection to items items tagged 'live' OR 'test'
25
+ #
26
+ # collection.tagged('live', 'test')
27
+ #
28
+ # Filter the collection to items tagged 'live' AND 'webserver'
29
+ #
30
+ # collection.tagged('live').tagged('webserver')
31
+ #
32
+ def tagged *keys
33
+ filter('tag-key', *keys)
34
+ end
35
+
36
+ # Filter the collection by one or more tag values. If you pass multiple
37
+ # tag values they will be be treated as OR conditions. If you want to
38
+ # AND them together call tagged multiple times (chained).
39
+ #
40
+ # collection.tagged('stage').tagged_values('production')
41
+ #
42
+ def tagged_values *values
43
+ filter('tag-value', *values)
44
+ end
45
+
46
+ end
47
+ end
48
+ end