icehouse-right_aws 1.11.0 → 2.2.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/History.txt +93 -15
- data/Manifest.txt +15 -1
- data/README.txt +0 -4
- data/Rakefile +34 -17
- data/lib/acf/right_acf_interface.rb +260 -124
- data/lib/acf/right_acf_invalidations.rb +144 -0
- data/lib/acf/right_acf_origin_access_identities.rb +230 -0
- data/lib/acf/right_acf_streaming_interface.rb +229 -0
- data/lib/acw/right_acw_interface.rb +4 -5
- data/lib/as/right_as_interface.rb +59 -51
- data/lib/awsbase/benchmark_fix.rb +0 -0
- data/lib/awsbase/right_awsbase.rb +351 -104
- data/lib/awsbase/support.rb +2 -82
- data/lib/awsbase/version.rb +9 -0
- data/lib/ec2/right_ec2.rb +97 -246
- data/lib/ec2/right_ec2_ebs.rb +88 -68
- data/lib/ec2/right_ec2_images.rb +90 -50
- data/lib/ec2/right_ec2_instances.rb +118 -89
- data/lib/ec2/right_ec2_placement_groups.rb +108 -0
- data/lib/ec2/right_ec2_reserved_instances.rb +51 -44
- data/lib/ec2/right_ec2_security_groups.rb +396 -0
- data/lib/ec2/right_ec2_spot_instances.rb +425 -0
- data/lib/ec2/right_ec2_tags.rb +139 -0
- data/lib/ec2/right_ec2_vpc.rb +152 -140
- data/lib/ec2/right_ec2_windows_mobility.rb +84 -0
- data/lib/elb/right_elb_interface.rb +205 -39
- data/lib/iam/right_iam_access_keys.rb +71 -0
- data/lib/iam/right_iam_groups.rb +195 -0
- data/lib/iam/right_iam_interface.rb +341 -0
- data/lib/iam/right_iam_mfa_devices.rb +67 -0
- data/lib/iam/right_iam_users.rb +251 -0
- data/lib/rds/right_rds_interface.rb +591 -205
- data/lib/right_aws.rb +16 -12
- data/lib/route_53/right_route_53_interface.rb +640 -0
- data/lib/s3/right_s3.rb +34 -13
- data/lib/s3/right_s3_interface.rb +17 -14
- data/lib/sdb/active_sdb.rb +215 -38
- data/lib/sdb/right_sdb_interface.rb +93 -12
- data/lib/sqs/right_sqs.rb +1 -2
- data/lib/sqs/right_sqs_gen2.rb +0 -1
- data/lib/sqs/right_sqs_gen2_interface.rb +9 -9
- data/lib/sqs/right_sqs_interface.rb +6 -7
- data/right_aws.gemspec +91 -0
- data/test/README.mdown +39 -0
- data/test/acf/test_helper.rb +0 -0
- data/test/acf/test_right_acf.rb +10 -18
- data/test/awsbase/test_helper.rb +0 -0
- data/test/awsbase/test_right_awsbase.rb +0 -1
- data/test/ec2/test_helper.rb +0 -0
- data/test/ec2/test_right_ec2.rb +0 -1
- data/test/elb/test_helper.rb +2 -0
- data/test/elb/test_right_elb.rb +43 -0
- data/test/http_connection.rb +0 -0
- data/test/route_53/fixtures/a_record.xml +18 -0
- data/test/route_53/fixtures/alias_record.xml +18 -0
- data/test/route_53/test_helper.rb +2 -0
- data/test/route_53/test_right_route_53.rb +141 -0
- data/test/s3/test_helper.rb +0 -0
- data/test/s3/test_right_s3.rb +11 -9
- data/test/s3/test_right_s3_stubbed.rb +6 -4
- data/test/sdb/test_active_sdb.rb +71 -13
- data/test/sdb/test_batch_put_attributes.rb +54 -0
- data/test/sdb/test_helper.rb +0 -0
- data/test/sdb/test_right_sdb.rb +13 -7
- data/test/sqs/test_helper.rb +0 -0
- data/test/sqs/test_right_sqs.rb +0 -6
- data/test/sqs/test_right_sqs_gen2.rb +22 -34
- data/test/test_credentials.rb +0 -0
- data/test/ts_right_aws.rb +0 -0
- metadata +146 -16
- data/VERSION +0 -1
data/lib/awsbase/support.rb
CHANGED
@@ -1,7 +1,3 @@
|
|
1
|
-
# If ActiveSupport is loaded, then great - use it. But we don't
|
2
|
-
# want a dependency on it, so if it's not present, define the few
|
3
|
-
# extensions that we want to use...
|
4
|
-
unless defined? ActiveSupport::CoreExtensions
|
5
1
|
# These are ActiveSupport-;like extensions to do a few handy things in the gems
|
6
2
|
# Derived from ActiveSupport, so the AS copyright notice applies:
|
7
3
|
#
|
@@ -32,84 +28,8 @@ unless defined? ActiveSupport::CoreExtensions
|
|
32
28
|
#
|
33
29
|
class String #:nodoc:
|
34
30
|
|
35
|
-
|
36
|
-
|
37
|
-
# or is not initialized.
|
38
|
-
#
|
39
|
-
# Examples
|
40
|
-
# "Module".constantize #=> Module
|
41
|
-
# "Class".constantize #=> Class
|
42
|
-
def constantize()
|
43
|
-
unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ self
|
44
|
-
raise NameError, "#{self.inspect} is not a valid constant name!"
|
45
|
-
end
|
46
|
-
|
47
|
-
Object.module_eval("::#{$1}", __FILE__, __LINE__)
|
48
|
-
end
|
49
|
-
|
50
|
-
def camelize()
|
51
|
-
self.dup.split(/_/).map{ |word| word.capitalize }.join('')
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
|
57
|
-
class Object #:nodoc:
|
58
|
-
# "", " ", nil, [], and {} are blank
|
59
|
-
def blank?
|
60
|
-
if respond_to?(:empty?) && respond_to?(:strip)
|
61
|
-
empty? or strip.empty?
|
62
|
-
elsif respond_to?(:empty?)
|
63
|
-
empty?
|
64
|
-
else
|
65
|
-
!self
|
66
|
-
end
|
31
|
+
def right_underscore
|
32
|
+
self.gsub(/[A-Z]/){|match| "#{$`=='' ? '' : '_'}#{match.downcase}" }
|
67
33
|
end
|
68
|
-
end
|
69
|
-
|
70
|
-
class NilClass #:nodoc:
|
71
|
-
def blank?
|
72
|
-
true
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
class FalseClass #:nodoc:
|
77
|
-
def blank?
|
78
|
-
true
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class TrueClass #:nodoc:
|
83
|
-
def blank?
|
84
|
-
false
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
class Array #:nodoc:
|
89
|
-
alias_method :blank?, :empty?
|
90
|
-
end
|
91
|
-
|
92
|
-
class Hash #:nodoc:
|
93
|
-
alias_method :blank?, :empty?
|
94
34
|
|
95
|
-
# Return a new hash with all keys converted to symbols.
|
96
|
-
def symbolize_keys
|
97
|
-
inject({}) do |options, (key, value)|
|
98
|
-
options[key.to_sym] = value
|
99
|
-
options
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
class String #:nodoc:
|
105
|
-
def blank?
|
106
|
-
empty? || strip.empty?
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
class Numeric #:nodoc:
|
111
|
-
def blank?
|
112
|
-
false
|
113
|
-
end
|
114
35
|
end
|
115
|
-
end
|
data/lib/ec2/right_ec2.rb
CHANGED
@@ -68,7 +68,7 @@ module RightAws
|
|
68
68
|
include RightAwsBaseInterface
|
69
69
|
|
70
70
|
# Amazon EC2 API version being used
|
71
|
-
API_VERSION = "
|
71
|
+
API_VERSION = "2010-08-31"
|
72
72
|
DEFAULT_HOST = "ec2.amazonaws.com"
|
73
73
|
DEFAULT_PATH = '/'
|
74
74
|
DEFAULT_PROTOCOL = 'https'
|
@@ -81,7 +81,9 @@ module RightAws
|
|
81
81
|
# Amazon EC2 Instance Types : http://www.amazon.com/b?ie=UTF8&node=370375011
|
82
82
|
# Default EC2 instance type (platform)
|
83
83
|
DEFAULT_INSTANCE_TYPE = 'm1.small'
|
84
|
-
INSTANCE_TYPES = ['m1.small','c1.medium','m1.large','m1.xlarge',
|
84
|
+
INSTANCE_TYPES = ['t1.micro','m1.small','c1.medium','m1.large','m1.xlarge',
|
85
|
+
'c1.xlarge', 'm2.xlarge', 'm2.2xlarge', 'm2.4xlarge',
|
86
|
+
'cc1.4xlarge', 'cg1.4xlarge']
|
85
87
|
|
86
88
|
@@bench = AwsBenchmarkingBlock.new
|
87
89
|
def self.bench_xml
|
@@ -105,7 +107,6 @@ module RightAws
|
|
105
107
|
# * <tt>:region</tt>: EC2 region (North America by default)
|
106
108
|
# * <tt>:port</tt>: EC2 service port, default: DEFAULT_PORT
|
107
109
|
# * <tt>:protocol</tt>: 'http' or 'https', default: DEFAULT_PROTOCOL
|
108
|
-
# * <tt>:multi_thread</tt>: true=HTTP connection per thread, false=per process
|
109
110
|
# * <tt>:logger</tt>: for log messages, default: RAILS_DEFAULT_LOGGER else STDOUT
|
110
111
|
# * <tt>:signature_version</tt>: The signature version : '0','1' or '2'(default)
|
111
112
|
# * <tt>:cache</tt>: true/false: caching for: ec2_describe_images, describe_instances,
|
@@ -123,6 +124,10 @@ module RightAws
|
|
123
124
|
aws_access_key_id || ENV['AWS_ACCESS_KEY_ID'] ,
|
124
125
|
aws_secret_access_key|| ENV['AWS_SECRET_ACCESS_KEY'],
|
125
126
|
params)
|
127
|
+
# Eucalyptus supports some yummy features but Amazon does not
|
128
|
+
#if @params[:eucalyptus]
|
129
|
+
# @params[:port_based_group_ingress] = true unless @params.has_key?(:port_based_group_ingress)
|
130
|
+
#end
|
126
131
|
end
|
127
132
|
|
128
133
|
def generate_request(action, params={}) #:nodoc:
|
@@ -135,172 +140,70 @@ module RightAws
|
|
135
140
|
request_info_impl(:ec2_connection, @@bench, request, parser)
|
136
141
|
end
|
137
142
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
#
|
143
|
-
|
144
|
-
#
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
# {:to_port => "22", :protocol => "tcp", :from_port => "22", :cidr_ips => "0.0.0.0/0"},
|
153
|
-
# {:to_port => "80", :protocol => "tcp", :from_port => "80", :cidr_ips => "0.0.0.0/0"},
|
154
|
-
# {:to_port => "443", :protocol => "tcp", :from_port => "443", :cidr_ips => "0.0.0.0/0"}]},
|
155
|
-
# ..., {...}]
|
156
|
-
#
|
157
|
-
def describe_security_groups(list=[])
|
158
|
-
link = generate_request("DescribeSecurityGroups", amazonize_list('GroupName',list.to_a))
|
159
|
-
request_cache_or_info( :describe_security_groups, link, QEc2DescribeSecurityGroupsParser, @@bench, list.blank?) do |parser|
|
160
|
-
result = []
|
161
|
-
parser.result.each do |item|
|
162
|
-
perms = []
|
163
|
-
item.ipPermissions.each do |perm|
|
164
|
-
perm.groups.each do |ngroup|
|
165
|
-
perms << {:group => ngroup.groupName,
|
166
|
-
:owner => ngroup.userId}
|
167
|
-
end
|
168
|
-
perm.ipRanges.each do |cidr_ip|
|
169
|
-
perms << {:from_port => perm.fromPort,
|
170
|
-
:to_port => perm.toPort,
|
171
|
-
:protocol => perm.ipProtocol,
|
172
|
-
:cidr_ips => cidr_ip}
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
# delete duplication
|
177
|
-
perms.each_index do |i|
|
178
|
-
(0...i).each do |j|
|
179
|
-
if perms[i] == perms[j] then perms[i] = nil; break; end
|
180
|
-
end
|
181
|
-
end
|
182
|
-
perms.compact!
|
183
|
-
|
184
|
-
result << {:aws_owner => item.ownerId,
|
185
|
-
:aws_group_name => item.groupName,
|
186
|
-
:aws_description => item.groupDescription,
|
187
|
-
:aws_perms => perms}
|
188
|
-
|
143
|
+
def describe_resources_with_list_and_options(remote_function_name, remote_item_name, parser_class, list_and_options, &block) # :nodoc:
|
144
|
+
# 'RemoteFunctionName' -> :remote_funtion_name
|
145
|
+
cache_name = remote_function_name.right_underscore.to_sym
|
146
|
+
list, options = AwsUtils::split_items_and_params(list_and_options)
|
147
|
+
# Resource IDs to fetch
|
148
|
+
request_hash = amazonize_list(remote_item_name, list)
|
149
|
+
# Other custom options
|
150
|
+
options.each do |key, values|
|
151
|
+
next if values.right_blank?
|
152
|
+
case key
|
153
|
+
when :filters then
|
154
|
+
request_hash.merge!(amazonize_list(['Filter.?.Name', 'Filter.?.Value.?'], values))
|
155
|
+
else
|
156
|
+
request_hash.merge!(amazonize_list(key.to_s.right_camelize, values))
|
189
157
|
end
|
190
|
-
result
|
191
158
|
end
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
# Create new Security Group. Returns +true+ or an exception.
|
197
|
-
#
|
198
|
-
# ec2.create_security_group('default-1',"Default allowing SSH, HTTP, and HTTPS ingress") #=> true
|
199
|
-
#
|
200
|
-
def create_security_group(name, description)
|
201
|
-
# EC2 doesn't like an empty description...
|
202
|
-
description = " " if description.blank?
|
203
|
-
link = generate_request("CreateSecurityGroup",
|
204
|
-
'GroupName' => name.to_s,
|
205
|
-
'GroupDescription' => description.to_s)
|
206
|
-
request_info(link, RightBoolResponseParser.new(:logger => @logger))
|
159
|
+
cache_for = (list.right_blank? && options.right_blank?) ? cache_name : nil
|
160
|
+
link = generate_request(remote_function_name, request_hash)
|
161
|
+
request_cache_or_info(cache_for, link, parser_class, @@bench, cache_for, &block)
|
207
162
|
rescue Exception
|
208
163
|
on_exception
|
209
164
|
end
|
210
165
|
|
211
|
-
|
212
|
-
|
213
|
-
|
166
|
+
#-----------------------------------------------------------------
|
167
|
+
# Keys
|
168
|
+
#-----------------------------------------------------------------
|
169
|
+
|
170
|
+
# Retrieve a list of SSH keys.
|
214
171
|
#
|
215
|
-
|
216
|
-
link = generate_request("DeleteSecurityGroup",
|
217
|
-
'GroupName' => name.to_s)
|
218
|
-
request_info(link, RightBoolResponseParser.new(:logger => @logger))
|
219
|
-
rescue Exception
|
220
|
-
on_exception
|
221
|
-
end
|
222
|
-
|
223
|
-
# Authorize named ingress for security group. Allows instances that are member of someone
|
224
|
-
# else's security group to open connections to instances in my group.
|
172
|
+
# Accepts a list of ssh keys and/or a set of filters as the last parameter.
|
225
173
|
#
|
226
|
-
#
|
174
|
+
# Filters: fingerprint, key-name
|
227
175
|
#
|
228
|
-
|
229
|
-
link = generate_request("AuthorizeSecurityGroupIngress",
|
230
|
-
'GroupName' => name.to_s,
|
231
|
-
'SourceSecurityGroupName' => group.to_s,
|
232
|
-
'SourceSecurityGroupOwnerId' => owner.to_s.gsub(/-/,''))
|
233
|
-
request_info(link, RightBoolResponseParser.new(:logger => @logger))
|
234
|
-
rescue Exception
|
235
|
-
on_exception
|
236
|
-
end
|
237
|
-
|
238
|
-
# Revoke named ingress for security group.
|
176
|
+
# Returns an array of keys or an exception. Each key is represented as a two-element hash.
|
239
177
|
#
|
240
|
-
# ec2.
|
178
|
+
# ec2.describe_key_pairs #=>
|
179
|
+
# [{:aws_fingerprint=> "01:02:03:f4:25:e6:97:e8:9b:02:1a:26:32:4e:58:6b:7a:8c:9f:03", :aws_key_name=>"key-1"},
|
180
|
+
# {:aws_fingerprint=> "1e:29:30:47:58:6d:7b:8c:9f:08:11:20:3c:44:52:69:74:80:97:08", :aws_key_name=>"key-2"},
|
181
|
+
# ..., {...} ]
|
241
182
|
#
|
242
|
-
|
243
|
-
|
244
|
-
'GroupName' => name.to_s,
|
245
|
-
'SourceSecurityGroupName' => group.to_s,
|
246
|
-
'SourceSecurityGroupOwnerId' => owner.to_s.gsub(/-/,''))
|
247
|
-
request_info(link, RightBoolResponseParser.new(:logger => @logger))
|
248
|
-
rescue Exception
|
249
|
-
on_exception
|
250
|
-
end
|
251
|
-
|
252
|
-
# Add permission to a security group. Returns +true+ or an exception. +protocol+ is one of :'tcp'|'udp'|'icmp'.
|
183
|
+
# ec2.describe_key_pairs(:filters => {'fingerprint' => ["53:0b:73:c9:c8:18:98:6e:bc:98:9e:51:97:04:74:4b:07:f9:00:00",
|
184
|
+
# "9f:57:a5:bb:4b:e8:a7:f8:3c:fe:d6:db:41:f5:7e:97:b5:b2:00:00"]})
|
253
185
|
#
|
254
|
-
#
|
255
|
-
# ec2.authorize_security_group_IP_ingress('my_awesome_group', -1, -1, 'icmp') #=> true
|
186
|
+
# P.S. filters: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeKeyPairs.html
|
256
187
|
#
|
257
|
-
def
|
258
|
-
|
259
|
-
'GroupName' => name.to_s,
|
260
|
-
'IpProtocol' => protocol.to_s,
|
261
|
-
'FromPort' => from_port.to_s,
|
262
|
-
'ToPort' => to_port.to_s,
|
263
|
-
'CidrIp' => cidr_ip.to_s)
|
264
|
-
request_info(link, RightBoolResponseParser.new(:logger => @logger))
|
265
|
-
rescue Exception
|
266
|
-
on_exception
|
188
|
+
def describe_key_pairs(*list_and_options)
|
189
|
+
describe_resources_with_list_and_options('DescribeKeyPairs', 'KeyName', QEc2DescribeKeyPairParser, list_and_options)
|
267
190
|
end
|
268
|
-
|
269
|
-
#
|
191
|
+
|
192
|
+
# Import new SSH key. Returns a hash of the key's data or an exception.
|
270
193
|
#
|
271
|
-
# ec2.
|
194
|
+
# ec2.import_key_pair('my_awesome_key', 'C:\keys\myfavoritekeypair_public.ppk') #=>
|
195
|
+
# {:aws_key_name => "my_awesome_key",
|
196
|
+
# :aws_fingerprint => "01:02:03:f4:25:e6:97:e8:9b:02:1a:26:32:4e:58:6b:7a:8c:9f:03"}
|
272
197
|
#
|
273
|
-
def
|
274
|
-
link = generate_request("
|
275
|
-
'
|
276
|
-
'
|
277
|
-
|
278
|
-
'ToPort' => to_port.to_s,
|
279
|
-
'CidrIp' => cidr_ip.to_s)
|
280
|
-
request_info(link, RightBoolResponseParser.new(:logger => @logger))
|
198
|
+
def import_key_pair(name, public_key_material)
|
199
|
+
link = generate_request("ImportKeyPair",
|
200
|
+
'KeyName' => name.to_s,
|
201
|
+
'PublicKeyMaterial' => Base64.encode64(public_key_material.to_s))
|
202
|
+
request_info(link, QEc2ImportKeyPairParser.new(:logger => @logger))
|
281
203
|
rescue Exception
|
282
204
|
on_exception
|
283
205
|
end
|
284
206
|
|
285
|
-
#-----------------------------------------------------------------
|
286
|
-
# Keys
|
287
|
-
#-----------------------------------------------------------------
|
288
|
-
|
289
|
-
# Retrieve a list of SSH keys. Returns an array of keys or an exception. Each key is
|
290
|
-
# represented as a two-element hash.
|
291
|
-
#
|
292
|
-
# ec2.describe_key_pairs #=>
|
293
|
-
# [{:aws_fingerprint=> "01:02:03:f4:25:e6:97:e8:9b:02:1a:26:32:4e:58:6b:7a:8c:9f:03", :aws_key_name=>"key-1"},
|
294
|
-
# {:aws_fingerprint=> "1e:29:30:47:58:6d:7b:8c:9f:08:11:20:3c:44:52:69:74:80:97:08", :aws_key_name=>"key-2"},
|
295
|
-
# ..., {...} ]
|
296
|
-
#
|
297
|
-
def describe_key_pairs(list=[])
|
298
|
-
link = generate_request("DescribeKeyPairs", amazonize_list('KeyName',list.to_a))
|
299
|
-
request_cache_or_info :describe_key_pairs, link, QEc2DescribeKeyPairParser, @@bench, list.blank?
|
300
|
-
rescue Exception
|
301
|
-
on_exception
|
302
|
-
end
|
303
|
-
|
304
207
|
# Create new SSH key. Returns a hash of the key's data or an exception.
|
305
208
|
#
|
306
209
|
# ec2.create_key_pair('my_awesome_key') #=>
|
@@ -309,7 +212,7 @@ module RightAws
|
|
309
212
|
# :aws_material => "-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAK...Q8MDrCbuQ=\n-----END RSA PRIVATE KEY-----"}
|
310
213
|
#
|
311
214
|
def create_key_pair(name)
|
312
|
-
link = generate_request("CreateKeyPair",
|
215
|
+
link = generate_request("CreateKeyPair",
|
313
216
|
'KeyName' => name.to_s)
|
314
217
|
request_info(link, QEc2CreateKeyPairParser.new(:logger => @logger))
|
315
218
|
rescue Exception
|
@@ -359,6 +262,11 @@ module RightAws
|
|
359
262
|
end
|
360
263
|
|
361
264
|
# List elastic IP addresses assigned to your account.
|
265
|
+
#
|
266
|
+
# Accepts a list of addresses and/or a set of filters as the last parameter.
|
267
|
+
#
|
268
|
+
# Filters: instance-id, public-ip
|
269
|
+
#
|
362
270
|
# Returns an array of 2 keys (:instance_id and :public_ip) hashes:
|
363
271
|
#
|
364
272
|
# ec2.describe_addresses #=> [{:instance_id=>"i-d630cbbf", :public_ip=>"75.101.154.140"},
|
@@ -366,12 +274,12 @@ module RightAws
|
|
366
274
|
#
|
367
275
|
# ec2.describe_addresses('75.101.154.140') #=> [{:instance_id=>"i-d630cbbf", :public_ip=>"75.101.154.140"}]
|
368
276
|
#
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
277
|
+
# ec2.describe_addresses(:filters => { 'public-ip' => "75.101.154.140" })
|
278
|
+
#
|
279
|
+
# P.S. filters: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeAddresses.html
|
280
|
+
#
|
281
|
+
def describe_addresses(*list_and_options)
|
282
|
+
describe_resources_with_list_and_options('DescribeAddresses', 'PublicIp', QEc2DescribeAddressesParser, list_and_options)
|
375
283
|
end
|
376
284
|
|
377
285
|
# Disassociate the specified elastic IP address from the instance to which it is assigned.
|
@@ -405,6 +313,11 @@ module RightAws
|
|
405
313
|
#-----------------------------------------------------------------
|
406
314
|
|
407
315
|
# Describes availability zones that are currently available to the account and their states.
|
316
|
+
#
|
317
|
+
# Accepts a list of availability zones and/or a set of filters as the last parameter.
|
318
|
+
#
|
319
|
+
# Filters: message, region-name, state, zone-name
|
320
|
+
#
|
408
321
|
# Returns an array of 2 keys (:zone_name and :zone_state) hashes:
|
409
322
|
#
|
410
323
|
# ec2.describe_availability_zones #=> [{:region_name=>"us-east-1",
|
@@ -415,12 +328,10 @@ module RightAws
|
|
415
328
|
# :zone_state=>"available",
|
416
329
|
# :zone_name=>"us-east-1c"}]
|
417
330
|
#
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
rescue Exception
|
423
|
-
on_exception
|
331
|
+
# P.S. filters: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeAvailabilityZones.html
|
332
|
+
#
|
333
|
+
def describe_availability_zones(*list_and_options)
|
334
|
+
describe_resources_with_list_and_options('DescribeAvailabilityZones', 'ZoneName', QEc2DescribeAvailabilityZonesParser, list_and_options)
|
424
335
|
end
|
425
336
|
|
426
337
|
#-----------------------------------------------------------------
|
@@ -429,24 +340,16 @@ module RightAws
|
|
429
340
|
|
430
341
|
# Describe regions.
|
431
342
|
#
|
343
|
+
# Accepts a list of regions and/or a set of filters as the last parameter.
|
344
|
+
#
|
345
|
+
# Filters: endpoint, region-name
|
346
|
+
#
|
432
347
|
# ec2.describe_regions #=> ["eu-west-1", "us-east-1"]
|
433
348
|
#
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
rescue Exception
|
439
|
-
on_exception
|
440
|
-
end
|
441
|
-
|
442
|
-
#-----------------------------------------------------------------
|
443
|
-
# PARSERS: Boolean Response Parser
|
444
|
-
#-----------------------------------------------------------------
|
445
|
-
|
446
|
-
class RightBoolResponseParser < RightAWSParser #:nodoc:
|
447
|
-
def tagend(name)
|
448
|
-
@result = @text=='true' ? true : false if name == 'return'
|
449
|
-
end
|
349
|
+
# P.S. filters: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeRegions.html
|
350
|
+
#
|
351
|
+
def describe_regions(*list_and_options)
|
352
|
+
describe_resources_with_list_and_options('DescribeRegions', 'RegionName', QEc2DescribeRegionsParser, list_and_options)
|
450
353
|
end
|
451
354
|
|
452
355
|
#-----------------------------------------------------------------
|
@@ -482,74 +385,16 @@ module RightAws
|
|
482
385
|
end
|
483
386
|
end
|
484
387
|
|
485
|
-
|
486
|
-
# PARSERS: Security Groups
|
487
|
-
#-----------------------------------------------------------------
|
488
|
-
|
489
|
-
class QEc2UserIdGroupPairType #:nodoc:
|
490
|
-
attr_accessor :userId
|
491
|
-
attr_accessor :groupName
|
492
|
-
end
|
493
|
-
|
494
|
-
class QEc2IpPermissionType #:nodoc:
|
495
|
-
attr_accessor :ipProtocol
|
496
|
-
attr_accessor :fromPort
|
497
|
-
attr_accessor :toPort
|
498
|
-
attr_accessor :groups
|
499
|
-
attr_accessor :ipRanges
|
500
|
-
end
|
501
|
-
|
502
|
-
class QEc2SecurityGroupItemType #:nodoc:
|
503
|
-
attr_accessor :groupName
|
504
|
-
attr_accessor :groupDescription
|
505
|
-
attr_accessor :ownerId
|
506
|
-
attr_accessor :ipPermissions
|
507
|
-
end
|
508
|
-
|
509
|
-
class QEc2DescribeSecurityGroupsParser < RightAWSParser #:nodoc:
|
388
|
+
class QEc2ImportKeyPairParser < RightAWSParser #:nodoc:
|
510
389
|
def tagstart(name, attributes)
|
511
|
-
|
512
|
-
when 'item'
|
513
|
-
if @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo'
|
514
|
-
@group = QEc2SecurityGroupItemType.new
|
515
|
-
@group.ipPermissions = []
|
516
|
-
elsif @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo/item/ipPermissions'
|
517
|
-
@perm = QEc2IpPermissionType.new
|
518
|
-
@perm.ipRanges = []
|
519
|
-
@perm.groups = []
|
520
|
-
elsif @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo/item/ipPermissions/item/groups'
|
521
|
-
@sgroup = QEc2UserIdGroupPairType.new
|
522
|
-
end
|
523
|
-
end
|
390
|
+
@result = {} if name == 'ImportKeyPairResponse'
|
524
391
|
end
|
525
392
|
def tagend(name)
|
526
393
|
case name
|
527
|
-
when '
|
528
|
-
when '
|
529
|
-
when 'groupName'
|
530
|
-
if @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo/item'
|
531
|
-
@group.groupName = @text
|
532
|
-
elsif @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo/item/ipPermissions/item/groups/item'
|
533
|
-
@sgroup.groupName = @text
|
534
|
-
end
|
535
|
-
when 'ipProtocol' then @perm.ipProtocol = @text
|
536
|
-
when 'fromPort' then @perm.fromPort = @text
|
537
|
-
when 'toPort' then @perm.toPort = @text
|
538
|
-
when 'userId' then @sgroup.userId = @text
|
539
|
-
when 'cidrIp' then @perm.ipRanges << @text
|
540
|
-
when 'item'
|
541
|
-
if @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo/item/ipPermissions/item/groups'
|
542
|
-
@perm.groups << @sgroup
|
543
|
-
elsif @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo/item/ipPermissions'
|
544
|
-
@group.ipPermissions << @perm
|
545
|
-
elsif @xmlpath=='DescribeSecurityGroupsResponse/securityGroupInfo'
|
546
|
-
@result << @group
|
547
|
-
end
|
394
|
+
when 'keyName' then @result[:aws_key_name] = @text
|
395
|
+
when 'keyFingerprint' then @result[:aws_fingerprint] = @text
|
548
396
|
end
|
549
397
|
end
|
550
|
-
def reset
|
551
|
-
@result = []
|
552
|
-
end
|
553
398
|
end
|
554
399
|
|
555
400
|
#-----------------------------------------------------------------
|
@@ -568,7 +413,7 @@ module RightAws
|
|
568
413
|
end
|
569
414
|
def tagend(name)
|
570
415
|
case name
|
571
|
-
when 'instanceId' then @address[:instance_id] = @text.
|
416
|
+
when 'instanceId' then @address[:instance_id] = @text.right_blank? ? nil : @text
|
572
417
|
when 'publicIp' then @address[:public_ip] = @text
|
573
418
|
when 'item' then @result << @address
|
574
419
|
end
|
@@ -584,14 +429,20 @@ module RightAws
|
|
584
429
|
|
585
430
|
class QEc2DescribeAvailabilityZonesParser < RightAWSParser #:nodoc:
|
586
431
|
def tagstart(name, attributes)
|
587
|
-
|
432
|
+
case full_tag_name
|
433
|
+
when %r{/availabilityZoneInfo/item$} then @item = {}
|
434
|
+
end
|
588
435
|
end
|
589
436
|
def tagend(name)
|
590
437
|
case name
|
591
|
-
when 'regionName' then @
|
592
|
-
when 'zoneName' then @
|
593
|
-
when 'zoneState' then @
|
594
|
-
|
438
|
+
when 'regionName' then @item[:region_name] = @text
|
439
|
+
when 'zoneName' then @item[:zone_name] = @text
|
440
|
+
when 'zoneState' then @item[:zone_state] = @text
|
441
|
+
else
|
442
|
+
case full_tag_name
|
443
|
+
when %r{/messageSet/item/message$} then (@item[:messages] ||= []) << @text
|
444
|
+
when %r{/availabilityZoneInfo/item$} then @result << @item
|
445
|
+
end
|
595
446
|
end
|
596
447
|
end
|
597
448
|
def reset
|