ingamer_raws 2.0.2 → 2.1.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/Gemfile +11 -0
- data/Gemfile.lock +22 -0
- data/History.txt +22 -1
- data/Manifest.txt +11 -1
- data/README.txt +0 -4
- data/Rakefile +19 -25
- data/lib/acf/right_acf_interface.rb +199 -135
- data/lib/acf/right_acf_invalidations.rb +144 -0
- data/lib/acf/right_acf_origin_access_identities.rb +4 -4
- data/lib/acf/right_acf_streaming_interface.rb +19 -26
- data/lib/acw/right_acw_interface.rb +1 -2
- data/lib/as/right_as_interface.rb +6 -7
- data/lib/awsbase/right_awsbase.rb +287 -91
- data/lib/awsbase/support.rb +2 -82
- data/lib/awsbase/version.rb +9 -0
- data/lib/ec2/right_ec2.rb +101 -38
- data/lib/ec2/right_ec2_ebs.rb +71 -58
- data/lib/ec2/right_ec2_images.rb +82 -42
- data/lib/ec2/right_ec2_instances.rb +74 -44
- data/lib/ec2/right_ec2_placement_groups.rb +108 -0
- data/lib/ec2/right_ec2_reserved_instances.rb +50 -46
- data/lib/ec2/right_ec2_security_groups.rb +147 -28
- data/lib/ec2/right_ec2_spot_instances.rb +53 -27
- data/lib/ec2/right_ec2_tags.rb +139 -0
- data/lib/ec2/right_ec2_vpc.rb +151 -139
- data/lib/ec2/right_ec2_windows_mobility.rb +84 -0
- data/lib/elb/right_elb_interface.rb +93 -18
- 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 +513 -202
- data/lib/right_aws.rb +12 -12
- data/lib/route_53/right_route_53_interface.rb +630 -0
- data/lib/s3/right_s3.rb +9 -12
- data/lib/s3/right_s3_interface.rb +10 -11
- data/lib/sdb/active_sdb.rb +18 -33
- data/lib/sdb/right_sdb_interface.rb +36 -4
- 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 +4 -5
- data/lib/sqs/right_sqs_interface.rb +6 -7
- metadata +19 -6
@@ -30,7 +30,11 @@ module RightAws
|
|
30
30
|
#-----------------------------------------------------------------
|
31
31
|
|
32
32
|
# Retrieve reserved instances list.
|
33
|
-
#
|
33
|
+
#
|
34
|
+
# Accepts a list of reserved instances and/or a set of filters as the last parameter.
|
35
|
+
#
|
36
|
+
# Filters: availability-zone, duration, fixed-price, instance-type, product-description,
|
37
|
+
# reserved-instances-id, start, state, tag-key, tag-value, tag:key, usage-price
|
34
38
|
#
|
35
39
|
# ec2.describe_reserved_instances #=>
|
36
40
|
# [{:aws_id=>"1ba8e2e3-1c40-434c-a741-5ff16a4c542e",
|
@@ -44,21 +48,19 @@ module RightAws
|
|
44
48
|
# :aws_start=>"2009-12-18T20:39:39.569Z"
|
45
49
|
# :aws_instance_count=>1}]
|
46
50
|
#
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
51
|
+
# ec2.describe_reserved_instances(:filters => {'availability-zone' => 'us-east-1a'})
|
52
|
+
#
|
53
|
+
# P.S. filters: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeReservedInstances.html
|
54
|
+
#
|
55
|
+
def describe_reserved_instances(*list_and_options)
|
56
|
+
describe_resources_with_list_and_options('DescribeReservedInstances', 'ReservedInstancesId', QEc2DescribeReservedInstancesParser, list_and_options)
|
53
57
|
end
|
54
58
|
|
55
59
|
# Retrieve reserved instances offerings.
|
56
|
-
#
|
60
|
+
#
|
61
|
+
# Accepts a list of reserved instances offerings and/or a set of filters as the last parameter.
|
57
62
|
#
|
58
|
-
#
|
59
|
-
# :aws_instance_type => String
|
60
|
-
# :aws_availability_zone => String
|
61
|
-
# :aws_product_description => String
|
63
|
+
# Filters: availability-zone, duration, fixed-price, instance-type, product-description, reserved-instances-offering-id, usage-price
|
62
64
|
#
|
63
65
|
# ec2.describe_reserved_instances_offerings #=>
|
64
66
|
# [{:aws_instance_type=>"c1.medium",
|
@@ -77,19 +79,12 @@ module RightAws
|
|
77
79
|
# :aws_usage_price=>0.24,
|
78
80
|
# :aws_fixed_price=>2600.0}]
|
79
81
|
#
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
rparams['InstanceType'] = params[:aws_instance_type] if params[:aws_instance_type]
|
87
|
-
rparams['AvailabilityZone'] = params[:aws_availability_zone] if params[:aws_availability_zone]
|
88
|
-
rparams['ProductDescription'] = params[:aws_product_description] if params[:aws_product_description]
|
89
|
-
link = generate_request("DescribeReservedInstancesOfferings", rparams)
|
90
|
-
request_cache_or_info(:describe_reserved_instances_offerings, link, QEc2DescribeReservedInstancesOfferingsParser, @@bench, list.blank?)
|
91
|
-
rescue Exception
|
92
|
-
on_exception
|
82
|
+
# ec2.describe_reserved_instances_offerings(:filters => {'availability-zone' => 'us-east-1c'})
|
83
|
+
#
|
84
|
+
# P.S. filters: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeReservedInstancesOfferings.html
|
85
|
+
#
|
86
|
+
def describe_reserved_instances_offerings(*list_and_options)
|
87
|
+
describe_resources_with_list_and_options('DescribeReservedInstancesOfferings', 'ReservedInstancesOfferingId', QEc2DescribeReservedInstancesOfferingsParser, list_and_options)
|
93
88
|
end
|
94
89
|
|
95
90
|
# Purchase a Reserved Instance.
|
@@ -111,21 +106,30 @@ module RightAws
|
|
111
106
|
|
112
107
|
class QEc2DescribeReservedInstancesParser < RightAWSParser #:nodoc:
|
113
108
|
def tagstart(name, attributes)
|
114
|
-
|
109
|
+
case full_tag_name
|
110
|
+
when %r{/reservedInstancesSet/item$} then @item = { :tags => {} }
|
111
|
+
when %r{/tagSet/item$} then @aws_tag = {}
|
112
|
+
end
|
115
113
|
end
|
116
114
|
def tagend(name)
|
117
115
|
case name
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
116
|
+
when 'reservedInstancesId' then @item[:aws_id] = @text
|
117
|
+
when 'instanceType' then @item[:aws_instance_type] = @text
|
118
|
+
when 'availabilityZone' then @item[:aws_availability_zone] = @text
|
119
|
+
when 'duration' then @item[:aws_duration] = @text.to_i
|
120
|
+
when 'usagePrice' then @item[:aws_usage_price] = @text.to_f
|
121
|
+
when 'fixedPrice' then @item[:aws_fixed_price] = @text.to_f
|
122
|
+
when 'instanceCount' then @item[:aws_instance_count] = @text.to_i
|
123
|
+
when 'productDescription' then @item[:aws_product_description] = @text
|
124
|
+
when 'state' then @item[:aws_state] = @text
|
125
|
+
when 'start' then @item[:aws_start] = @text
|
126
|
+
else
|
127
|
+
case full_tag_name
|
128
|
+
when %r{/tagSet/item/key$} then @aws_tag[:key] = @text
|
129
|
+
when %r{/tagSet/item/value$} then @aws_tag[:value] = @text
|
130
|
+
when %r{/tagSet/item$} then @item[:tags][@aws_tag[:key]] = @aws_tag[:value]
|
131
|
+
when %r{/reservedInstancesSet/item$} then @result << @item
|
132
|
+
end
|
129
133
|
end
|
130
134
|
end
|
131
135
|
def reset
|
@@ -136,19 +140,19 @@ module RightAws
|
|
136
140
|
class QEc2DescribeReservedInstancesOfferingsParser < RightAWSParser #:nodoc:
|
137
141
|
def tagstart(name, attributes)
|
138
142
|
@item = {} if name == 'item'
|
139
|
-
|
143
|
+
end
|
140
144
|
def tagend(name)
|
141
145
|
case name
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
146
|
+
when 'reservedInstancesOfferingId' then @item[:aws_id] = @text
|
147
|
+
when 'instanceType' then @item[:aws_instance_type] = @text
|
148
|
+
when 'availabilityZone' then @item[:aws_availability_zone] = @text
|
149
|
+
when 'duration' then @item[:aws_duration] = @text.to_i
|
150
|
+
when 'usagePrice' then @item[:aws_usage_price] = @text.to_f
|
151
|
+
when 'fixedPrice' then @item[:aws_fixed_price] = @text.to_f
|
152
|
+
when 'productDescription' then @item[:aws_product_description] = @text
|
149
153
|
when 'item' then @result << @item
|
154
|
+
end
|
150
155
|
end
|
151
|
-
end
|
152
156
|
def reset
|
153
157
|
@result = []
|
154
158
|
end
|
@@ -29,7 +29,12 @@ module RightAws
|
|
29
29
|
# Security groups
|
30
30
|
#-----------------------------------------------------------------
|
31
31
|
|
32
|
-
# Retrieve Security Groups information.
|
32
|
+
# Retrieve Security Groups information.
|
33
|
+
#
|
34
|
+
# Accepts a list of security groups and/or a set of filters as the last parameter.
|
35
|
+
#
|
36
|
+
# Filters: description, group-name, ip-permission.cidr, ip-permission.from-port, ip-permission.group-name,
|
37
|
+
# ip-permission.protocol, ip-permission.to-port, ip-permission.user-id, owner-id
|
33
38
|
#
|
34
39
|
# # Amazon cloud:
|
35
40
|
# ec2 = Rightscale::Ec2.new(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
|
@@ -79,10 +84,12 @@ module RightAws
|
|
79
84
|
# :aws_description=>"default group",
|
80
85
|
# :aws_owner=>"826693181925"}]
|
81
86
|
#
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
87
|
+
# ec2.describe_security_groups(:filters => {'ip-permission.from-port' => '22'})
|
88
|
+
#
|
89
|
+
# P.S. filters: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSecurityGroups.html
|
90
|
+
#
|
91
|
+
def describe_security_groups(*list_and_options)
|
92
|
+
describe_resources_with_list_and_options('DescribeSecurityGroups', 'GroupName', QEc2DescribeSecurityGroupsParser, list_and_options) do |parser|
|
86
93
|
result = []
|
87
94
|
parser.result.each do |item|
|
88
95
|
result_item = { :aws_owner => item[:owner_id],
|
@@ -105,12 +112,6 @@ module RightAws
|
|
105
112
|
perm = result_perm.dup
|
106
113
|
perm[:group] = group[:group_name]
|
107
114
|
perm[:owner] = group[:user_id]
|
108
|
-
# AWS does not support Port Based Group Permissions but Eucalyptus does
|
109
|
-
unless @params[:port_based_group_ingress]
|
110
|
-
perm.delete(:from_port)
|
111
|
-
perm.delete(:to_port)
|
112
|
-
perm.delete(:protocol)
|
113
|
-
end
|
114
115
|
aws_perms << perm
|
115
116
|
end
|
116
117
|
end
|
@@ -119,8 +120,6 @@ module RightAws
|
|
119
120
|
end
|
120
121
|
result
|
121
122
|
end
|
122
|
-
rescue Exception
|
123
|
-
on_exception
|
124
123
|
end
|
125
124
|
|
126
125
|
# Create new Security Group. Returns +true+ or an exception.
|
@@ -129,7 +128,7 @@ module RightAws
|
|
129
128
|
#
|
130
129
|
def create_security_group(name, description=nil)
|
131
130
|
# EC2 doesn't like an empty description...
|
132
|
-
description = "-" if description.
|
131
|
+
description = "-" if description.right_blank?
|
133
132
|
link = generate_request("CreateSecurityGroup",
|
134
133
|
'GroupName' => name.to_s,
|
135
134
|
'GroupDescription' => description.to_s)
|
@@ -150,13 +149,14 @@ module RightAws
|
|
150
149
|
on_exception
|
151
150
|
end
|
152
151
|
|
153
|
-
# Edit group permissions.
|
152
|
+
# Edit AWS/Eucaliptus security group permissions.
|
154
153
|
#
|
155
|
-
#
|
156
|
-
#
|
157
|
-
#
|
158
|
-
#
|
159
|
-
# :
|
154
|
+
# Options:
|
155
|
+
# action - :authorize (or :grant) | :revoke (or :remove)
|
156
|
+
# group_name - security group name
|
157
|
+
# permissions - a combination of options below:
|
158
|
+
# :source_group_owner => UserId
|
159
|
+
# :source_group => GroupName
|
160
160
|
# :from_port => from port
|
161
161
|
# :to_port => to port
|
162
162
|
# :port => set both :from_port and to_port with the same value
|
@@ -171,7 +171,8 @@ module RightAws
|
|
171
171
|
# :port => '80',
|
172
172
|
# :cidr_ip => '127.0.0.1/32') #=> true
|
173
173
|
#
|
174
|
-
# P.S.
|
174
|
+
# P.S. This method is deprecated for AWS and but still good for Eucaliptus clouds.
|
175
|
+
# Use +modify_security_group_ingress+ method for AWS clouds.
|
175
176
|
#
|
176
177
|
def edit_security_group(action, group_name, params)
|
177
178
|
hash = {}
|
@@ -181,16 +182,134 @@ module RightAws
|
|
181
182
|
else raise "Unknown action #{action.inspect}!"
|
182
183
|
end
|
183
184
|
hash['GroupName'] = group_name
|
184
|
-
hash['SourceSecurityGroupName'] = params[:source_group] unless params[:source_group].
|
185
|
-
hash['SourceSecurityGroupOwnerId'] = params[:source_group_owner].to_s.gsub(/-/,'') unless params[:source_group_owner].
|
186
|
-
hash['IpProtocol'] = params[:protocol] unless params[:protocol].
|
187
|
-
unless params[:port].
|
185
|
+
hash['SourceSecurityGroupName'] = params[:source_group] unless params[:source_group].right_blank?
|
186
|
+
hash['SourceSecurityGroupOwnerId'] = params[:source_group_owner].to_s.gsub(/-/,'') unless params[:source_group_owner].right_blank?
|
187
|
+
hash['IpProtocol'] = params[:protocol] unless params[:protocol].right_blank?
|
188
|
+
unless params[:port].right_blank?
|
188
189
|
hash['FromPort'] = params[:port]
|
189
190
|
hash['ToPort'] = params[:port]
|
190
191
|
end
|
191
|
-
hash['FromPort'] = params[:from_port] unless params[:from_port].
|
192
|
-
hash['ToPort'] = params[:to_port] unless params[:to_port].
|
193
|
-
hash['CidrIp'] = params[:cidr_ip] unless params[:cidr_ip].
|
192
|
+
hash['FromPort'] = params[:from_port] unless params[:from_port].right_blank?
|
193
|
+
hash['ToPort'] = params[:to_port] unless params[:to_port].right_blank?
|
194
|
+
hash['CidrIp'] = params[:cidr_ip] unless params[:cidr_ip].right_blank?
|
195
|
+
#
|
196
|
+
link = generate_request(action, hash)
|
197
|
+
request_info(link, RightBoolResponseParser.new(:logger => @logger))
|
198
|
+
rescue Exception
|
199
|
+
on_exception
|
200
|
+
end
|
201
|
+
|
202
|
+
# Modify AWS security group permissions.
|
203
|
+
#
|
204
|
+
# Options:
|
205
|
+
# action - :authorize (or :grant) | :revoke (or :remove)
|
206
|
+
# group_name - security group name
|
207
|
+
# permissions - a combination of options below:
|
208
|
+
# # Ports:
|
209
|
+
# :from_port => from port
|
210
|
+
# :to_port => to port
|
211
|
+
# :port => set both :from_port and to_port with the same value
|
212
|
+
# # Protocol
|
213
|
+
# :protocol => :tcp | :udp | :icmp
|
214
|
+
# # Group(s)
|
215
|
+
# :source_group_owner => UserId
|
216
|
+
# :source_group => GroupName
|
217
|
+
# # or
|
218
|
+
# :source_groups => { UserId1 => GroupName1, UserName2 => GroupName2 }
|
219
|
+
# :source_groups => [ [ UserId1, GroupName1 ], [ UserName2 => GroupName2 ] ]
|
220
|
+
# # CidrIp(s)
|
221
|
+
# :cidr_ip => '0.0.0.0/0'
|
222
|
+
# :cidr_ips => ['1.1.1.1/1', '2.2.2.2/2']
|
223
|
+
#
|
224
|
+
# # CidrIP based permissions:
|
225
|
+
#
|
226
|
+
# ec2.modify_security_group_ingress(:authorize, 'my_cool_group',
|
227
|
+
# :cidr_ip => "127.0.0.0/31",
|
228
|
+
# :port => 811,
|
229
|
+
# :protocol => 'tcp' ) #=> true
|
230
|
+
#
|
231
|
+
# ec2.modify_security_group_ingress(:revoke, 'my_cool_group',
|
232
|
+
# :cidr_ips => ["127.0.0.1/32", "127.0.0.2/32"],
|
233
|
+
# :port => 812,
|
234
|
+
# :protocol => 'tcp' ) #=> true
|
235
|
+
#
|
236
|
+
# # Group based permissions:
|
237
|
+
#
|
238
|
+
# ec2.modify_security_group_ingress(:authorize, 'my_cool_group',
|
239
|
+
# :source_group_owner => "586789340000",
|
240
|
+
# :source_group => "sketchy-us",
|
241
|
+
# :port => 800,
|
242
|
+
# :protocol => 'tcp' ) #=> true
|
243
|
+
#
|
244
|
+
# ec2.modify_security_group_ingress(:authorize, 'my_cool_group',
|
245
|
+
# :source_groups => { "586789340000" => "sketchy-us",
|
246
|
+
# "635201710000" => "sketchy" },
|
247
|
+
# :port => 801,
|
248
|
+
# :protocol => 'tcp' ) #=> true
|
249
|
+
#
|
250
|
+
# ec2.modify_security_group_ingress(:revoke, 'my_cool_group',
|
251
|
+
# :source_groups => [[ "586789340000", "sketchy-us" ],
|
252
|
+
# [ "586789340000", "default" ]],
|
253
|
+
# :port => 809,
|
254
|
+
# :protocol => 'tcp' ) #=> true
|
255
|
+
#
|
256
|
+
# # +Permissions+ can be an array of permission hashes:
|
257
|
+
#
|
258
|
+
# ec2.modify_security_group_ingress(:authorize, 'my_cool_group',
|
259
|
+
# [{ :source_groups => { "586789340000" => "sketchy-us",
|
260
|
+
# "635201710000" => "sketchy" },
|
261
|
+
# :port => 803,
|
262
|
+
# :protocol => 'tcp'},
|
263
|
+
# { :cidr_ips => ["127.0.0.1/32", "127.0.0.2/32"],
|
264
|
+
# :port => 812,
|
265
|
+
# :protocol => 'tcp' }]) #=> true
|
266
|
+
#
|
267
|
+
def modify_security_group_ingress(action, group_name, permissions)
|
268
|
+
hash = {}
|
269
|
+
case action
|
270
|
+
when :authorize, :grant then action = "AuthorizeSecurityGroupIngress"
|
271
|
+
when :revoke, :remove then action = "RevokeSecurityGroupIngress"
|
272
|
+
else raise "Unknown action #{action.inspect}!"
|
273
|
+
end
|
274
|
+
# Group Name
|
275
|
+
hash["GroupName"] = group_name
|
276
|
+
#
|
277
|
+
permissions = [permissions] unless permissions.is_a?(Array)
|
278
|
+
permissions.each_with_index do |permission, idx|
|
279
|
+
pid = idx+1
|
280
|
+
# Protocol
|
281
|
+
hash["IpPermissions.#{pid}.IpProtocol"] = permission[:protocol]
|
282
|
+
# Port
|
283
|
+
unless permission[:port].right_blank?
|
284
|
+
hash["IpPermissions.#{pid}.FromPort"] = permission[:port]
|
285
|
+
hash["IpPermissions.#{pid}.ToPort"] = permission[:port]
|
286
|
+
else
|
287
|
+
hash["IpPermissions.#{pid}.FromPort"] = permission[:from_port]
|
288
|
+
hash["IpPermissions.#{pid}.ToPort"] = permission[:to_port]
|
289
|
+
end
|
290
|
+
# Source Group(s)
|
291
|
+
# Old way (if it is used):
|
292
|
+
# :source_group_owner => UserId, :source_group => GroupName
|
293
|
+
if !permission[:source_group].right_blank? && !permission[:source_group_owner].right_blank?
|
294
|
+
permission[:source_groups] = { permission[:source_group_owner] => permission[:source_group]}
|
295
|
+
end
|
296
|
+
# # Fix UserId(s): '0000-0000-0000' => '000000000000'
|
297
|
+
# permission[:source_groups] = Array(permission[:source_groups])
|
298
|
+
# permission[:source_groups].each do |item|
|
299
|
+
# item[0] = item[0].to_s.gsub(/-/,'')
|
300
|
+
# end
|
301
|
+
# New way:
|
302
|
+
# :source_groups => {UserId1 => GroupName1, ... UserIdN => GroupNameN}
|
303
|
+
# or (this allows using same UserId multiple times )
|
304
|
+
# :source_groups => [[UserId1, GroupName1], ... [UserIdN, GroupNameN]]
|
305
|
+
hash.merge!(amazonize_list( ["IpPermissions.#{pid}.Groups.?.UserId",
|
306
|
+
"IpPermissions.#{pid}.Groups.?.GroupName"],
|
307
|
+
permission[:source_groups] ))
|
308
|
+
# CidrIp(s)
|
309
|
+
cidr_ips = permission[:cidr_ips] unless permission[:cidr_ips].right_blank?
|
310
|
+
cidr_ips ||= permission[:cidr_ip] unless permission[:cidr_ip].right_blank?
|
311
|
+
hash.merge!(amazonize_list("IpPermissions.1.IpRanges.?.CidrIp", cidr_ips))
|
312
|
+
end
|
194
313
|
#
|
195
314
|
link = generate_request(action, hash)
|
196
315
|
request_info(link, RightBoolResponseParser.new(:logger => @logger))
|
@@ -30,7 +30,10 @@ module RightAws
|
|
30
30
|
#-----------------------------------------------------------------
|
31
31
|
|
32
32
|
# Describe Spot Price history.
|
33
|
+
#
|
33
34
|
# Options: :start_time, :end_time, instance_types, product_description
|
35
|
+
#
|
36
|
+
# Filters: instance-type, product-description, spot-price, timestamp
|
34
37
|
#
|
35
38
|
# ec2.describe_spot_price_history #=>
|
36
39
|
# [{:spot_price=>0.054,
|
@@ -63,13 +66,21 @@ module RightAws
|
|
63
66
|
# :spot_price=>0.058,
|
64
67
|
# :instance_type=>"c1.medium"}, ... ]
|
65
68
|
#
|
69
|
+
# ec2.describe_spot_price_history(:filters => {'spot-price' => '0.2' })
|
70
|
+
#
|
71
|
+
# ec2.describe_spot_price_history(:instance_types => ["c1.medium"], :filters => {'spot-price' => '0.2' })
|
72
|
+
#
|
73
|
+
#
|
74
|
+
# P.S. filters: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeSpotPriceHistory.html
|
75
|
+
#
|
66
76
|
def describe_spot_price_history(options={})
|
67
77
|
options = options.dup
|
68
78
|
request_hash = {}
|
69
|
-
request_hash['
|
70
|
-
request_hash['
|
71
|
-
request_hash['
|
72
|
-
request_hash
|
79
|
+
request_hash.merge!(amazonize_list(['Filter.?.Name', 'Filter.?.Value.?'], options[:filters])) unless options[:filters].right_blank?
|
80
|
+
request_hash['StartTime'] = AwsUtils::utc_iso8601(options[:start_time]) unless options[:start_time].right_blank?
|
81
|
+
request_hash['EndTime'] = AwsUtils::utc_iso8601(options[:end_time]) unless options[:end_time].right_blank?
|
82
|
+
request_hash['ProductDescription'] = options[:product_description] unless options[:product_description].right_blank?
|
83
|
+
request_hash.merge!(amazonize_list('InstanceType', Array(options[:instance_types]))) unless options[:instance_types].right_blank?
|
73
84
|
link = generate_request("DescribeSpotPriceHistory", request_hash)
|
74
85
|
request_info(link, QEc2DescribeSpotPriceHistoryParser.new)
|
75
86
|
rescue Exception
|
@@ -78,6 +89,14 @@ module RightAws
|
|
78
89
|
|
79
90
|
# Describe Spot Instance requests.
|
80
91
|
#
|
92
|
+
# Accepts a list of requests and/or a set of filters as the last parameter.
|
93
|
+
#
|
94
|
+
# Filters: availability-zone-group, create-time, fault-code, fault-message, instance-id, launch-group,
|
95
|
+
# launch.block-device-mapping.delete-on-termination, launch.block-device-mapping.device-name,
|
96
|
+
# launch.block-device-mapping.snapshot-id, launch.group-id, launch.image-id, launch.instance-type,
|
97
|
+
# launch.kernel-id, launch.key-name, launch.monitoring-enabled, launch.ramdisk-id, product-description,
|
98
|
+
# spot-instance-request-id, spot-price, state, tag-key, tag-value, tag:key, type, valid-from, valid-until
|
99
|
+
#
|
81
100
|
# ec2.describe_spot_instance_requests #=>
|
82
101
|
# [{:type=>"one-time",
|
83
102
|
# :create_time=>"2010-03-10T10:30:32.000Z",
|
@@ -113,9 +132,12 @@ module RightAws
|
|
113
132
|
# :monitoring_enabled=>false,
|
114
133
|
# :key_name=>"tim"}]
|
115
134
|
#
|
116
|
-
|
117
|
-
|
118
|
-
|
135
|
+
# ec2.describe_spot_instance_requests(:filters => {'type'=>"one-time", 'state'=>"open"})
|
136
|
+
#
|
137
|
+
# P.S. filters: http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeSpotInstanceRequests.html
|
138
|
+
#
|
139
|
+
def describe_spot_instance_requests(*list_and_options)
|
140
|
+
describe_resources_with_list_and_options('DescribeSpotInstanceRequests', 'SpotInstanceRequestId', QEc2DescribeSpotInstanceParser, list_and_options)
|
119
141
|
end
|
120
142
|
|
121
143
|
# Create a Spot Instance request.
|
@@ -205,25 +227,25 @@ module RightAws
|
|
205
227
|
request_hash = { 'SpotPrice' => options[:spot_price],
|
206
228
|
'LaunchSpecification.ImageId' => options[:image_id],
|
207
229
|
'LaunchSpecification.InstanceType' => options[:instance_type]}
|
208
|
-
request_hash['ValidFrom'] = AwsUtils::utc_iso8601(options[:valid_from]) unless options[:valid_from].
|
209
|
-
request_hash['ValidUntil'] = AwsUtils::utc_iso8601(options[:valid_until]) unless options[:valid_until].
|
210
|
-
request_hash['InstanceCount'] = options[:instance_count] unless options[:instance_count].
|
211
|
-
request_hash['Type'] = options[:type] unless options[:type].
|
212
|
-
request_hash['LaunchGroup'] = options[:launch_group] unless options[:launch_group].
|
213
|
-
request_hash['AvailabilityZoneGroup'] = options[:availability_zone_group] unless options[:availability_zone_group].
|
214
|
-
request_hash['LaunchSpecification.KeyName'] = options[:key_name] unless options[:key_name].
|
215
|
-
request_hash['LaunchSpecification.AddressingType'] = options[:addressing_type] unless options[:addressing_type].
|
216
|
-
request_hash['LaunchSpecification.KernelId'] = options[:kernel_id] unless options[:kernel_id].
|
217
|
-
request_hash['LaunchSpecification.RamdiskId'] = options[:ramdisk_id] unless options[:ramdisk_id].
|
218
|
-
request_hash['LaunchSpecification.SubnetId'] = options[:subnet_id] unless options[:subnet_id].
|
219
|
-
request_hash['LaunchSpecification.Placement.AvailabilityZone'] = options[:availability_zone] unless options[:availability_zone].
|
220
|
-
request_hash['LaunchSpecification.Monitoring.Enabled'] = options[:monitoring_enabled] unless options[:monitoring_enabled].
|
221
|
-
request_hash.merge!(amazonize_list('LaunchSpecification.SecurityGroup', options[:groups])) unless options[:groups].
|
230
|
+
request_hash['ValidFrom'] = AwsUtils::utc_iso8601(options[:valid_from]) unless options[:valid_from].right_blank?
|
231
|
+
request_hash['ValidUntil'] = AwsUtils::utc_iso8601(options[:valid_until]) unless options[:valid_until].right_blank?
|
232
|
+
request_hash['InstanceCount'] = options[:instance_count] unless options[:instance_count].right_blank?
|
233
|
+
request_hash['Type'] = options[:type] unless options[:type].right_blank?
|
234
|
+
request_hash['LaunchGroup'] = options[:launch_group] unless options[:launch_group].right_blank?
|
235
|
+
request_hash['AvailabilityZoneGroup'] = options[:availability_zone_group] unless options[:availability_zone_group].right_blank?
|
236
|
+
request_hash['LaunchSpecification.KeyName'] = options[:key_name] unless options[:key_name].right_blank?
|
237
|
+
request_hash['LaunchSpecification.AddressingType'] = options[:addressing_type] unless options[:addressing_type].right_blank?
|
238
|
+
request_hash['LaunchSpecification.KernelId'] = options[:kernel_id] unless options[:kernel_id].right_blank?
|
239
|
+
request_hash['LaunchSpecification.RamdiskId'] = options[:ramdisk_id] unless options[:ramdisk_id].right_blank?
|
240
|
+
request_hash['LaunchSpecification.SubnetId'] = options[:subnet_id] unless options[:subnet_id].right_blank?
|
241
|
+
request_hash['LaunchSpecification.Placement.AvailabilityZone'] = options[:availability_zone] unless options[:availability_zone].right_blank?
|
242
|
+
request_hash['LaunchSpecification.Monitoring.Enabled'] = options[:monitoring_enabled] unless options[:monitoring_enabled].right_blank?
|
243
|
+
request_hash.merge!(amazonize_list('LaunchSpecification.SecurityGroup', options[:groups])) unless options[:groups].right_blank?
|
222
244
|
request_hash.merge!(amazonize_block_device_mappings(options[:block_device_mappings], 'LaunchSpecification.BlockDeviceMapping'))
|
223
|
-
unless options[:user_data].
|
245
|
+
unless options[:user_data].right_blank?
|
224
246
|
# See RightAws::Ec2#run_instances
|
225
247
|
options[:user_data].strip!
|
226
|
-
request_hash['LaunchSpecification.UserData'] = Base64.encode64(options[:user_data]).delete("\n") unless options[:user_data].
|
248
|
+
request_hash['LaunchSpecification.UserData'] = Base64.encode64(options[:user_data]).delete("\n") unless options[:user_data].right_blank?
|
227
249
|
end
|
228
250
|
link = generate_request("RequestSpotInstances", request_hash)
|
229
251
|
request_info(link, QEc2DescribeSpotInstanceParser.new(:logger => @logger))
|
@@ -253,7 +275,7 @@ module RightAws
|
|
253
275
|
#
|
254
276
|
def create_spot_datafeed_subscription(bucket, prefix=nil)
|
255
277
|
request_hash = { 'Bucket' => bucket }
|
256
|
-
request_hash['Prefix'] = prefix unless prefix.
|
278
|
+
request_hash['Prefix'] = prefix unless prefix.right_blank?
|
257
279
|
link = generate_request("CreateSpotDatafeedSubscription", request_hash)
|
258
280
|
request_info(link, QEc2DescribeSpotDatafeedSubscriptionParser.new(:logger => @logger))
|
259
281
|
end
|
@@ -306,10 +328,12 @@ module RightAws
|
|
306
328
|
def tagstart(name, attributes)
|
307
329
|
case full_tag_name
|
308
330
|
when %r{spotInstanceRequestSet/item$}
|
309
|
-
@item = {}
|
331
|
+
@item = { :tags => {} }
|
310
332
|
when %r{/blockDeviceMapping/item$}
|
311
333
|
@item[:block_device_mappings] ||= []
|
312
334
|
@block_device_mapping = {}
|
335
|
+
when %r{/tagSet/item$}
|
336
|
+
@aws_tag = {}
|
313
337
|
end
|
314
338
|
end
|
315
339
|
def tagend(name)
|
@@ -351,8 +375,10 @@ module RightAws
|
|
351
375
|
when 'deleteOnTermination' then @block_device_mapping[:ebs_delete_on_termination] = @text == 'true' ? true : false
|
352
376
|
when 'item' then @item[:block_device_mappings] << @block_device_mapping
|
353
377
|
end
|
354
|
-
when %r{
|
355
|
-
|
378
|
+
when %r{/tagSet/item/key$} then @aws_tag[:key] = @text
|
379
|
+
when %r{/tagSet/item/value$} then @aws_tag[:value] = @text
|
380
|
+
when %r{/tagSet/item$} then @item[:tags][@aws_tag[:key]] = @aws_tag[:value]
|
381
|
+
when %r{spotInstanceRequestSet/item$} then @result << @item
|
356
382
|
end
|
357
383
|
end
|
358
384
|
end
|