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.
- data/.yardopts +6 -0
- data/LICENSE.txt +171 -0
- data/NOTICE.txt +2 -0
- data/README.rdoc +189 -0
- data/lib/aws-sdk.rb +14 -0
- data/lib/aws.rb +63 -0
- data/lib/aws/api_config.rb +45 -0
- data/lib/aws/api_config/.document +0 -0
- data/lib/aws/api_config/EC2-2011-02-28.yml +2314 -0
- data/lib/aws/api_config/SNS-2010-03-31.yml +171 -0
- data/lib/aws/api_config/SQS-2009-02-01.yml +161 -0
- data/lib/aws/api_config/SimpleDB-2009-04-15.yml +278 -0
- data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +147 -0
- data/lib/aws/api_config_transform.rb +32 -0
- data/lib/aws/async_handle.rb +90 -0
- data/lib/aws/authorize_v2.rb +37 -0
- data/lib/aws/authorize_v3.rb +37 -0
- data/lib/aws/base_client.rb +524 -0
- data/lib/aws/cacheable.rb +92 -0
- data/lib/aws/common.rb +228 -0
- data/lib/aws/configurable.rb +36 -0
- data/lib/aws/configuration.rb +272 -0
- data/lib/aws/configured_client_methods.rb +81 -0
- data/lib/aws/configured_grammars.rb +65 -0
- data/lib/aws/configured_option_grammars.rb +46 -0
- data/lib/aws/configured_xml_grammars.rb +47 -0
- data/lib/aws/default_signer.rb +38 -0
- data/lib/aws/ec2.rb +321 -0
- data/lib/aws/ec2/attachment.rb +149 -0
- data/lib/aws/ec2/attachment_collection.rb +57 -0
- data/lib/aws/ec2/availability_zone.rb +80 -0
- data/lib/aws/ec2/availability_zone_collection.rb +47 -0
- data/lib/aws/ec2/block_device_mappings.rb +53 -0
- data/lib/aws/ec2/client.rb +54 -0
- data/lib/aws/ec2/client/xml.rb +127 -0
- data/lib/aws/ec2/collection.rb +39 -0
- data/lib/aws/ec2/config_transform.rb +63 -0
- data/lib/aws/ec2/elastic_ip.rb +107 -0
- data/lib/aws/ec2/elastic_ip_collection.rb +85 -0
- data/lib/aws/ec2/errors.rb +29 -0
- data/lib/aws/ec2/filtered_collection.rb +65 -0
- data/lib/aws/ec2/has_permissions.rb +46 -0
- data/lib/aws/ec2/image.rb +245 -0
- data/lib/aws/ec2/image_collection.rb +235 -0
- data/lib/aws/ec2/instance.rb +515 -0
- data/lib/aws/ec2/instance_collection.rb +276 -0
- data/lib/aws/ec2/key_pair.rb +86 -0
- data/lib/aws/ec2/key_pair_collection.rb +102 -0
- data/lib/aws/ec2/permission_collection.rb +177 -0
- data/lib/aws/ec2/region.rb +81 -0
- data/lib/aws/ec2/region_collection.rb +55 -0
- data/lib/aws/ec2/request.rb +27 -0
- data/lib/aws/ec2/reserved_instances.rb +50 -0
- data/lib/aws/ec2/reserved_instances_collection.rb +44 -0
- data/lib/aws/ec2/reserved_instances_offering.rb +55 -0
- data/lib/aws/ec2/reserved_instances_offering_collection.rb +43 -0
- data/lib/aws/ec2/resource.rb +340 -0
- data/lib/aws/ec2/resource_tag_collection.rb +218 -0
- data/lib/aws/ec2/security_group.rb +246 -0
- data/lib/aws/ec2/security_group/ip_permission.rb +70 -0
- data/lib/aws/ec2/security_group/ip_permission_collection.rb +59 -0
- data/lib/aws/ec2/security_group_collection.rb +132 -0
- data/lib/aws/ec2/snapshot.rb +138 -0
- data/lib/aws/ec2/snapshot_collection.rb +90 -0
- data/lib/aws/ec2/tag.rb +88 -0
- data/lib/aws/ec2/tag_collection.rb +114 -0
- data/lib/aws/ec2/tagged_collection.rb +48 -0
- data/lib/aws/ec2/tagged_item.rb +87 -0
- data/lib/aws/ec2/volume.rb +190 -0
- data/lib/aws/ec2/volume_collection.rb +95 -0
- data/lib/aws/errors.rb +129 -0
- data/lib/aws/http/builtin_handler.rb +69 -0
- data/lib/aws/http/curb_handler.rb +123 -0
- data/lib/aws/http/handler.rb +77 -0
- data/lib/aws/http/httparty_handler.rb +61 -0
- data/lib/aws/http/request.rb +136 -0
- data/lib/aws/http/request_param.rb +63 -0
- data/lib/aws/http/response.rb +75 -0
- data/lib/aws/ignore_result_element.rb +38 -0
- data/lib/aws/indifferent_hash.rb +86 -0
- data/lib/aws/inflection.rb +46 -0
- data/lib/aws/lazy_error_classes.rb +64 -0
- data/lib/aws/meta_utils.rb +43 -0
- data/lib/aws/model.rb +57 -0
- data/lib/aws/naming.rb +32 -0
- data/lib/aws/option_grammar.rb +544 -0
- data/lib/aws/policy.rb +912 -0
- data/lib/aws/rails.rb +209 -0
- data/lib/aws/record.rb +79 -0
- data/lib/aws/record/attribute.rb +94 -0
- data/lib/aws/record/attribute_macros.rb +288 -0
- data/lib/aws/record/attributes/boolean.rb +49 -0
- data/lib/aws/record/attributes/datetime.rb +86 -0
- data/lib/aws/record/attributes/float.rb +48 -0
- data/lib/aws/record/attributes/integer.rb +68 -0
- data/lib/aws/record/attributes/sortable_float.rb +60 -0
- data/lib/aws/record/attributes/sortable_integer.rb +95 -0
- data/lib/aws/record/attributes/string.rb +69 -0
- data/lib/aws/record/base.rb +728 -0
- data/lib/aws/record/conversion.rb +38 -0
- data/lib/aws/record/dirty_tracking.rb +286 -0
- data/lib/aws/record/errors.rb +153 -0
- data/lib/aws/record/exceptions.rb +48 -0
- data/lib/aws/record/finder_methods.rb +262 -0
- data/lib/aws/record/naming.rb +31 -0
- data/lib/aws/record/scope.rb +157 -0
- data/lib/aws/record/validations.rb +653 -0
- data/lib/aws/record/validator.rb +237 -0
- data/lib/aws/record/validators/acceptance.rb +51 -0
- data/lib/aws/record/validators/block.rb +38 -0
- data/lib/aws/record/validators/confirmation.rb +43 -0
- data/lib/aws/record/validators/count.rb +108 -0
- data/lib/aws/record/validators/exclusion.rb +43 -0
- data/lib/aws/record/validators/format.rb +57 -0
- data/lib/aws/record/validators/inclusion.rb +56 -0
- data/lib/aws/record/validators/length.rb +107 -0
- data/lib/aws/record/validators/numericality.rb +138 -0
- data/lib/aws/record/validators/presence.rb +45 -0
- data/lib/aws/resource_cache.rb +39 -0
- data/lib/aws/response.rb +113 -0
- data/lib/aws/response_cache.rb +50 -0
- data/lib/aws/s3.rb +109 -0
- data/lib/aws/s3/access_control_list.rb +252 -0
- data/lib/aws/s3/acl_object.rb +266 -0
- data/lib/aws/s3/bucket.rb +320 -0
- data/lib/aws/s3/bucket_collection.rb +122 -0
- data/lib/aws/s3/bucket_version_collection.rb +85 -0
- data/lib/aws/s3/client.rb +999 -0
- data/lib/aws/s3/client/xml.rb +190 -0
- data/lib/aws/s3/data_options.rb +99 -0
- data/lib/aws/s3/errors.rb +43 -0
- data/lib/aws/s3/multipart_upload.rb +318 -0
- data/lib/aws/s3/multipart_upload_collection.rb +78 -0
- data/lib/aws/s3/object_collection.rb +159 -0
- data/lib/aws/s3/object_metadata.rb +67 -0
- data/lib/aws/s3/object_upload_collection.rb +83 -0
- data/lib/aws/s3/object_version.rb +141 -0
- data/lib/aws/s3/object_version_collection.rb +78 -0
- data/lib/aws/s3/paginated_collection.rb +94 -0
- data/lib/aws/s3/policy.rb +76 -0
- data/lib/aws/s3/prefix_and_delimiter_collection.rb +56 -0
- data/lib/aws/s3/prefixed_collection.rb +84 -0
- data/lib/aws/s3/presigned_post.rb +504 -0
- data/lib/aws/s3/request.rb +198 -0
- data/lib/aws/s3/s3_object.rb +794 -0
- data/lib/aws/s3/tree.rb +116 -0
- data/lib/aws/s3/tree/branch_node.rb +71 -0
- data/lib/aws/s3/tree/child_collection.rb +108 -0
- data/lib/aws/s3/tree/leaf_node.rb +99 -0
- data/lib/aws/s3/tree/node.rb +22 -0
- data/lib/aws/s3/tree/parent.rb +90 -0
- data/lib/aws/s3/uploaded_part.rb +82 -0
- data/lib/aws/s3/uploaded_part_collection.rb +86 -0
- data/lib/aws/service_interface.rb +60 -0
- data/lib/aws/simple_db.rb +202 -0
- data/lib/aws/simple_db/attribute.rb +159 -0
- data/lib/aws/simple_db/attribute_collection.rb +227 -0
- data/lib/aws/simple_db/client.rb +52 -0
- data/lib/aws/simple_db/client/options.rb +34 -0
- data/lib/aws/simple_db/client/xml.rb +68 -0
- data/lib/aws/simple_db/consistent_read_option.rb +42 -0
- data/lib/aws/simple_db/delete_attributes.rb +64 -0
- data/lib/aws/simple_db/domain.rb +118 -0
- data/lib/aws/simple_db/domain_collection.rb +116 -0
- data/lib/aws/simple_db/domain_metadata.rb +112 -0
- data/lib/aws/simple_db/errors.rb +46 -0
- data/lib/aws/simple_db/expect_condition_option.rb +45 -0
- data/lib/aws/simple_db/item.rb +84 -0
- data/lib/aws/simple_db/item_collection.rb +594 -0
- data/lib/aws/simple_db/item_data.rb +70 -0
- data/lib/aws/simple_db/put_attributes.rb +62 -0
- data/lib/aws/simple_db/request.rb +27 -0
- data/lib/aws/simple_email_service.rb +373 -0
- data/lib/aws/simple_email_service/client.rb +39 -0
- data/lib/aws/simple_email_service/client/options.rb +24 -0
- data/lib/aws/simple_email_service/client/xml.rb +38 -0
- data/lib/aws/simple_email_service/email_address_collection.rb +66 -0
- data/lib/aws/simple_email_service/errors.rb +29 -0
- data/lib/aws/simple_email_service/quotas.rb +64 -0
- data/lib/aws/simple_email_service/request.rb +27 -0
- data/lib/aws/sns.rb +69 -0
- data/lib/aws/sns/client.rb +37 -0
- data/lib/aws/sns/client/options.rb +24 -0
- data/lib/aws/sns/client/xml.rb +38 -0
- data/lib/aws/sns/errors.rb +29 -0
- data/lib/aws/sns/policy.rb +49 -0
- data/lib/aws/sns/request.rb +27 -0
- data/lib/aws/sns/subscription.rb +100 -0
- data/lib/aws/sns/subscription_collection.rb +84 -0
- data/lib/aws/sns/topic.rb +384 -0
- data/lib/aws/sns/topic_collection.rb +70 -0
- data/lib/aws/sns/topic_subscription_collection.rb +58 -0
- data/lib/aws/sqs.rb +70 -0
- data/lib/aws/sqs/client.rb +38 -0
- data/lib/aws/sqs/client/xml.rb +36 -0
- data/lib/aws/sqs/errors.rb +33 -0
- data/lib/aws/sqs/policy.rb +50 -0
- data/lib/aws/sqs/queue.rb +507 -0
- data/lib/aws/sqs/queue_collection.rb +105 -0
- data/lib/aws/sqs/received_message.rb +184 -0
- data/lib/aws/sqs/received_sns_message.rb +112 -0
- data/lib/aws/sqs/request.rb +44 -0
- data/lib/aws/xml_grammar.rb +923 -0
- data/rails/init.rb +15 -0
- metadata +298 -0
|
@@ -0,0 +1,276 @@
|
|
|
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/ec2/tagged_collection'
|
|
16
|
+
require 'aws/ec2/collection'
|
|
17
|
+
require 'aws/ec2/instance'
|
|
18
|
+
require 'aws/ec2/block_device_mappings'
|
|
19
|
+
require 'base64'
|
|
20
|
+
require 'uuidtools'
|
|
21
|
+
|
|
22
|
+
module AWS
|
|
23
|
+
class EC2
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# Represents a collection of EC2 instances. Typically you
|
|
27
|
+
# should get an instance of this class by calling
|
|
28
|
+
# {EC2#instances}.
|
|
29
|
+
#
|
|
30
|
+
# To run an instance:
|
|
31
|
+
#
|
|
32
|
+
# ec2.instances.create(:image_id => "ami-8c1fece5")
|
|
33
|
+
#
|
|
34
|
+
# To get an instance by ID:
|
|
35
|
+
#
|
|
36
|
+
# i = ec2.instances["i-12345678"]
|
|
37
|
+
# i.exists?
|
|
38
|
+
#
|
|
39
|
+
# To get a map of instance IDs to instance status:
|
|
40
|
+
#
|
|
41
|
+
# ec2.instances.inject({}) { |m, i| m[i.id] = i.status; m }
|
|
42
|
+
# # => { "i-12345678" => :running, "i-87654321" => :shutting_down }
|
|
43
|
+
#
|
|
44
|
+
class InstanceCollection < Collection
|
|
45
|
+
|
|
46
|
+
include TaggedCollection
|
|
47
|
+
include BlockDeviceMappings
|
|
48
|
+
|
|
49
|
+
##
|
|
50
|
+
# Runs one or more EC2 instances.
|
|
51
|
+
#
|
|
52
|
+
# @example Running a single instance
|
|
53
|
+
# i = ec2.instances.create(:image_id => "ami-8c1fece5")
|
|
54
|
+
# sleep 1 while i.status == :pending
|
|
55
|
+
#
|
|
56
|
+
# @example Running multiple instances with the same parameters
|
|
57
|
+
# instances =
|
|
58
|
+
# ec2.instances.create(:image_id => "ami-8c1fece5",
|
|
59
|
+
# :count => 10)
|
|
60
|
+
# sleep 1 while instances.any? { |i| i.status == :pending }
|
|
61
|
+
#
|
|
62
|
+
# @example Specifying block device mappings
|
|
63
|
+
# ec2.instances.create(:image_id => "ami-8c1fece5",
|
|
64
|
+
# :block_device_mappings => {
|
|
65
|
+
# "/dev/sda2" => {
|
|
66
|
+
# # 15 GiB
|
|
67
|
+
# :volume_size => 15,
|
|
68
|
+
# :delete_on_termination => true
|
|
69
|
+
# }
|
|
70
|
+
# })
|
|
71
|
+
#
|
|
72
|
+
# @return [Instance or Array] If a single instance is being created, this returns
|
|
73
|
+
# an instance of {EC2::Instance} to represent the newly
|
|
74
|
+
# created instance. Otherwise it returns an array of
|
|
75
|
+
# EC2::Instance objects.
|
|
76
|
+
#
|
|
77
|
+
# @param [Hash] opts Options for new instance. +:image_id+ is
|
|
78
|
+
# the only required option.
|
|
79
|
+
#
|
|
80
|
+
# @option opts :count How many instances to request. By
|
|
81
|
+
# default one instance is requested. You can specify this
|
|
82
|
+
# either as an integer or as a Range, to indicate the
|
|
83
|
+
# minimum and maximum number of instances to run. Note that
|
|
84
|
+
# for a new account you can request at most 20 instances at
|
|
85
|
+
# once.
|
|
86
|
+
#
|
|
87
|
+
# @option opts [Hash] :block_device_mappings This must be a
|
|
88
|
+
# hash; the keys are device names to map, and the value for
|
|
89
|
+
# each entry determines how that device is mapped. Valid
|
|
90
|
+
# values include:
|
|
91
|
+
#
|
|
92
|
+
# * A string, which is interpreted as a virtual device name.
|
|
93
|
+
#
|
|
94
|
+
# * The symbol :no_device, which overrides the default
|
|
95
|
+
# mapping for a device so that it is not mapped to anything.
|
|
96
|
+
#
|
|
97
|
+
# * A hash with any of the following options. One of
|
|
98
|
+
# +:snapshot+, +:snapshot_id+ or +:volume_size+ is
|
|
99
|
+
# required.
|
|
100
|
+
#
|
|
101
|
+
# [:snapshot] A snapshot to use when creating the block
|
|
102
|
+
# device.
|
|
103
|
+
#
|
|
104
|
+
# [:snapshot_id] The ID of a snapshot to use when creating
|
|
105
|
+
# the block device.
|
|
106
|
+
#
|
|
107
|
+
# [:volume_size] The size of volume to create, in gigabytes.
|
|
108
|
+
#
|
|
109
|
+
# [:delete_on_termination] Setting this to true causes EC2
|
|
110
|
+
# to delete the volume when the
|
|
111
|
+
# instance is terminated.
|
|
112
|
+
#
|
|
113
|
+
# @option opts [Boolean] :monitoring Setting this to true
|
|
114
|
+
# enables CloudWatch monitoring on the instances once they
|
|
115
|
+
# are started.
|
|
116
|
+
#
|
|
117
|
+
# @option opts [String] :availability_zone Specifies the
|
|
118
|
+
# availability zone where the instance should run. Without
|
|
119
|
+
# this option, EC2 will choose an availability zone for you.
|
|
120
|
+
#
|
|
121
|
+
# @option opts [String] :image_id ID of the AMI you want to
|
|
122
|
+
# launch.
|
|
123
|
+
#
|
|
124
|
+
# @option opts [String] :key_name The name of the key pair to
|
|
125
|
+
# use. Note: Launching public images without a key pair ID
|
|
126
|
+
# will leave them inaccessible.
|
|
127
|
+
#
|
|
128
|
+
# @option opts [Array] :security_groups The names of the
|
|
129
|
+
# security groups that will be used to determine network
|
|
130
|
+
# access rules for the instances. You may pass instances of
|
|
131
|
+
# {SecurityGroup} as well.
|
|
132
|
+
#
|
|
133
|
+
# @option opts [String] :user_data Arbitrary user data. You
|
|
134
|
+
# do not need to encode this value.
|
|
135
|
+
#
|
|
136
|
+
# @option opts [String] :instance_type The type of instance to
|
|
137
|
+
# launch, for example "m1.small".
|
|
138
|
+
#
|
|
139
|
+
# @option opts [String] :kernel_id The ID of the kernel with
|
|
140
|
+
# which to launch the instance.
|
|
141
|
+
#
|
|
142
|
+
# @option opts [String] :ramdisk_id The ID of the RAM disk to
|
|
143
|
+
# select. Some kernels require additional drivers at
|
|
144
|
+
# launch. Check the kernel requirements for information on
|
|
145
|
+
# whether you need to specify a RAM disk. To find kernel
|
|
146
|
+
# requirements, refer to the Resource Center and search for
|
|
147
|
+
# the kernel ID.
|
|
148
|
+
#
|
|
149
|
+
# @option opts [Boolean] :disable_api_termination Specifies
|
|
150
|
+
# whether you can terminate the instance using the EC2
|
|
151
|
+
# API. A value of true means you can't terminate the
|
|
152
|
+
# instance using the API (i.e., the instance is "locked"); a
|
|
153
|
+
# value of false means you can. If you set this to true, and
|
|
154
|
+
# you later want to terminate the instance, you must first
|
|
155
|
+
# enable API termination. For example:
|
|
156
|
+
#
|
|
157
|
+
# i = ec2.instances.create(:image_id => "ami-8c1fece5",
|
|
158
|
+
# :disable_api_termination => true)
|
|
159
|
+
# i.api_termination_disabled? # => true
|
|
160
|
+
# i.terminate # raises an exception
|
|
161
|
+
# i.api_termination_disabled = false
|
|
162
|
+
# i.terminate # terminates the instance
|
|
163
|
+
#
|
|
164
|
+
# @option opts [String] :instance_initiated_shutdown_behavior
|
|
165
|
+
# Determines whether the instance stops or terminates on
|
|
166
|
+
# instance-initiated shutdown.
|
|
167
|
+
def create(opts = {})
|
|
168
|
+
if image = opts.delete(:image)
|
|
169
|
+
opts[:image_id] = image.id
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
if kernel = opts.delete(:kernel)
|
|
173
|
+
opts[:kernel_id] = kernel.id
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
if ramdisk = opts.delete(:ramdisk)
|
|
177
|
+
opts[:ramdisk_id] = ramdisk.id
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
if key_pair = opts.delete(:key_pair)
|
|
181
|
+
opts[:key_name] = key_pair.name
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
opts = count_opts(opts).merge(opts)
|
|
185
|
+
opts.delete(:count)
|
|
186
|
+
|
|
187
|
+
opts[:user_data] = Base64.encode64(opts[:user_data]).strip if
|
|
188
|
+
opts[:user_data]
|
|
189
|
+
|
|
190
|
+
opts[:block_device_mappings] =
|
|
191
|
+
translate_block_device_mappings(opts[:block_device_mappings]) if
|
|
192
|
+
opts[:block_device_mappings]
|
|
193
|
+
|
|
194
|
+
opts[:monitoring] = { :enabled => true } if
|
|
195
|
+
opts[:monitoring_enabled]
|
|
196
|
+
opts.delete(:monitoring_enabled)
|
|
197
|
+
|
|
198
|
+
opts[:placement] = {
|
|
199
|
+
:availability_zone => opts[:availability_zone].to_s
|
|
200
|
+
} if opts[:availability_zone]
|
|
201
|
+
opts.delete(:availability_zone)
|
|
202
|
+
|
|
203
|
+
opts[:security_groups] = group_opts(opts[:security_groups]) if
|
|
204
|
+
opts[:security_groups]
|
|
205
|
+
|
|
206
|
+
opts[:client_token] = UUIDTools::UUID.timestamp_create.to_s
|
|
207
|
+
|
|
208
|
+
resp = client.run_instances(opts)
|
|
209
|
+
|
|
210
|
+
if opts[:min_count] == opts[:max_count] and
|
|
211
|
+
opts[:min_count] == 1
|
|
212
|
+
self[resp.instances_set.first.instance_id]
|
|
213
|
+
else
|
|
214
|
+
resp.instances_set.map do |i|
|
|
215
|
+
self[i.instance_id]
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
alias_method :run, :create
|
|
220
|
+
|
|
221
|
+
# @yield [Instance] Yields each instance in the collection.
|
|
222
|
+
def each(&block)
|
|
223
|
+
response = filtered_request(:describe_instances)
|
|
224
|
+
response.reservation_set.each do |r|
|
|
225
|
+
r.instances_set.each do |i|
|
|
226
|
+
yield(Instance.new(i.instance_id, :config => config))
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# @return [Instance] Returns an object representing the EC2 instance
|
|
232
|
+
# with the given ID.
|
|
233
|
+
def [] id
|
|
234
|
+
super
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
# @private
|
|
238
|
+
protected
|
|
239
|
+
def member_class
|
|
240
|
+
Instance
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# @private
|
|
244
|
+
private
|
|
245
|
+
def count_opts(opts)
|
|
246
|
+
min = max = 1
|
|
247
|
+
count = opts[:count]
|
|
248
|
+
case count
|
|
249
|
+
when Range
|
|
250
|
+
min = count.begin
|
|
251
|
+
max = (count.exclude_end? ? count.end-1 : count.end)
|
|
252
|
+
when Integer
|
|
253
|
+
min = max = count
|
|
254
|
+
end
|
|
255
|
+
{ :min_count => min,
|
|
256
|
+
:max_count => max }
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# @private
|
|
260
|
+
private
|
|
261
|
+
def group_opts(groups)
|
|
262
|
+
[groups].flatten.map do |g|
|
|
263
|
+
case g
|
|
264
|
+
when SecurityGroup then g.name
|
|
265
|
+
when String then g
|
|
266
|
+
else
|
|
267
|
+
raise ArgumentError.new("members of security_groups must be "+
|
|
268
|
+
"strings or SecurityGroup objects")
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
end
|
|
276
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
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
|
+
|
|
16
|
+
module AWS
|
|
17
|
+
class EC2
|
|
18
|
+
|
|
19
|
+
# Represents an EC2 key pair.
|
|
20
|
+
class KeyPair < Resource
|
|
21
|
+
|
|
22
|
+
def initialize name, options = {}
|
|
23
|
+
@name = name.to_s
|
|
24
|
+
@fingerprint = options[:fingerprint]
|
|
25
|
+
@private_key = options[:private_key]
|
|
26
|
+
super
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @return [String] The name of the key pair.
|
|
30
|
+
attr_reader :name
|
|
31
|
+
|
|
32
|
+
# @return [Boolean] True if the key pair exists.
|
|
33
|
+
def exists?
|
|
34
|
+
!client.describe_key_pairs(:filters => [{ :name => "key-name",
|
|
35
|
+
:values => [name] }]).
|
|
36
|
+
key_set.empty?
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @return [String] A SHA-1 digest of the DER encoded private key
|
|
40
|
+
def fingerprint; end
|
|
41
|
+
describe_call_attribute(:key_fingerprint,
|
|
42
|
+
:getter => :fingerprint,
|
|
43
|
+
:memoize => true)
|
|
44
|
+
|
|
45
|
+
# Returns the private key. Raises an exception if called
|
|
46
|
+
# against an existing key. You can only get the private key
|
|
47
|
+
# at the time of creation.
|
|
48
|
+
#
|
|
49
|
+
# @see KeyPairCollection#import
|
|
50
|
+
# @note Only call this method on newly created keys.
|
|
51
|
+
# @return [String] An unencrypted PEM encoded RSA private key.
|
|
52
|
+
def private_key
|
|
53
|
+
unless @private_key
|
|
54
|
+
raise 'you can only get the private key for just-created keypairs'
|
|
55
|
+
end
|
|
56
|
+
@private_key
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Deletes this key pair from EC2.
|
|
60
|
+
# @return [true]
|
|
61
|
+
def delete
|
|
62
|
+
client.delete_key_pair(:key_name => name)
|
|
63
|
+
true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
[:create_key_pair,
|
|
67
|
+
:import_key_pair].each do |op|
|
|
68
|
+
populate_from op do |resp|
|
|
69
|
+
attributes_from_response_object(resp) if
|
|
70
|
+
resp.key_name == name
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
protected
|
|
75
|
+
def response_id_method
|
|
76
|
+
:key_name
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
protected
|
|
80
|
+
def find_in_response(resp)
|
|
81
|
+
resp.key_index[name]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
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/ec2/collection'
|
|
16
|
+
require 'aws/ec2/key_pair'
|
|
17
|
+
require 'digest/md5'
|
|
18
|
+
require 'base64'
|
|
19
|
+
|
|
20
|
+
module AWS
|
|
21
|
+
class EC2
|
|
22
|
+
|
|
23
|
+
# Represents all key pairs in your account. You can use this collection
|
|
24
|
+
# to create, import and find key pairs.
|
|
25
|
+
class KeyPairCollection < Collection
|
|
26
|
+
|
|
27
|
+
# @param [String] key_name A name for the key pair.
|
|
28
|
+
# @return [KeyPair] Returns a new key pair.
|
|
29
|
+
def create key_name
|
|
30
|
+
create_or_import(:create_key_pair, :key_name => key_name)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Imports the public key from an RSA key pair that you created with
|
|
34
|
+
# a third-party tool. Compare this with {#create}, in which EC2
|
|
35
|
+
# creates the key pair and gives the keys to you (EC2 keeps a copy
|
|
36
|
+
# of the public key). With ImportKeyPair, you create the key pair
|
|
37
|
+
# and give EC2 just the public key. The private key is never
|
|
38
|
+
# transferred between you and EC2.
|
|
39
|
+
#
|
|
40
|
+
# === Supported formats:
|
|
41
|
+
#
|
|
42
|
+
# * OpenSSH public key format (e.g., the format in
|
|
43
|
+
# ~/.ssh/authorized_keys)
|
|
44
|
+
# * Base64 encoded DER format
|
|
45
|
+
# * SSH public key file format as specified in RFC4716
|
|
46
|
+
#
|
|
47
|
+
# DSA keys are *not* supported. Make sure your key generator is
|
|
48
|
+
# set up to create RSA keys. Supported lengths: 1024, 2048, and 4096.
|
|
49
|
+
#
|
|
50
|
+
# @param [String] key_name A name for this key pair.
|
|
51
|
+
# @param [String] public_key The RSA public key.
|
|
52
|
+
# @return [KeyPair] Returns a new key pair.
|
|
53
|
+
def import key_name, public_key
|
|
54
|
+
create_or_import(:import_key_pair,
|
|
55
|
+
:key_name => key_name,
|
|
56
|
+
:public_key_material => Base64.encode64(public_key.to_s))
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @return [KeyPair] key_name The name of the key pair.
|
|
60
|
+
def [] key_name
|
|
61
|
+
super
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Yields once for each key pair in your account.
|
|
65
|
+
# @return [nil]
|
|
66
|
+
def each &block
|
|
67
|
+
response = filtered_request(:describe_key_pairs)
|
|
68
|
+
response.key_set.each do |kp|
|
|
69
|
+
yield(KeyPair.new(kp.key_name,
|
|
70
|
+
:fingerprint => kp.key_fingerprint,
|
|
71
|
+
:config => config))
|
|
72
|
+
end
|
|
73
|
+
nil
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# @private
|
|
77
|
+
protected
|
|
78
|
+
def member_class
|
|
79
|
+
KeyPair
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# @private
|
|
83
|
+
private
|
|
84
|
+
def create_or_import client_method, options
|
|
85
|
+
|
|
86
|
+
# stringify option values
|
|
87
|
+
options = options.inject({}) {|h,v| h[v.first] = v.last.to_s; h }
|
|
88
|
+
response = client.send(client_method, options)
|
|
89
|
+
|
|
90
|
+
options = {}
|
|
91
|
+
options[:fingerprint] = response.key_fingerprint
|
|
92
|
+
if response.respond_to?(:key_material)
|
|
93
|
+
options[:private_key] = response.key_material
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
KeyPair.new(response.key_name, options)
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|