aboisvert_aws 3.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 (78) hide show
  1. data/History.txt +329 -0
  2. data/Manifest.txt +61 -0
  3. data/README.txt +163 -0
  4. data/Rakefile +130 -0
  5. data/lib/acf/right_acf_interface.rb +549 -0
  6. data/lib/acf/right_acf_invalidations.rb +144 -0
  7. data/lib/acf/right_acf_origin_access_identities.rb +230 -0
  8. data/lib/acf/right_acf_streaming_interface.rb +229 -0
  9. data/lib/acw/right_acw_interface.rb +248 -0
  10. data/lib/as/right_as_interface.rb +698 -0
  11. data/lib/awsbase/benchmark_fix.rb +39 -0
  12. data/lib/awsbase/right_awsbase.rb +1343 -0
  13. data/lib/awsbase/support.rb +35 -0
  14. data/lib/awsbase/version.rb +9 -0
  15. data/lib/ec2/right_ec2.rb +541 -0
  16. data/lib/ec2/right_ec2_ebs.rb +481 -0
  17. data/lib/ec2/right_ec2_images.rb +444 -0
  18. data/lib/ec2/right_ec2_instances.rb +788 -0
  19. data/lib/ec2/right_ec2_monitoring.rb +70 -0
  20. data/lib/ec2/right_ec2_placement_groups.rb +108 -0
  21. data/lib/ec2/right_ec2_reserved_instances.rb +184 -0
  22. data/lib/ec2/right_ec2_security_groups.rb +491 -0
  23. data/lib/ec2/right_ec2_spot_instances.rb +422 -0
  24. data/lib/ec2/right_ec2_tags.rb +139 -0
  25. data/lib/ec2/right_ec2_vpc.rb +590 -0
  26. data/lib/ec2/right_ec2_vpc2.rb +381 -0
  27. data/lib/ec2/right_ec2_windows_mobility.rb +84 -0
  28. data/lib/elb/right_elb_interface.rb +573 -0
  29. data/lib/emr/right_emr_interface.rb +727 -0
  30. data/lib/iam/right_iam_access_keys.rb +71 -0
  31. data/lib/iam/right_iam_groups.rb +195 -0
  32. data/lib/iam/right_iam_interface.rb +341 -0
  33. data/lib/iam/right_iam_mfa_devices.rb +67 -0
  34. data/lib/iam/right_iam_users.rb +251 -0
  35. data/lib/rds/right_rds_interface.rb +1384 -0
  36. data/lib/right_aws.rb +86 -0
  37. data/lib/route_53/right_route_53_interface.rb +640 -0
  38. data/lib/s3/right_s3.rb +1138 -0
  39. data/lib/s3/right_s3_interface.rb +1278 -0
  40. data/lib/sdb/active_sdb.rb +1107 -0
  41. data/lib/sdb/right_sdb_interface.rb +762 -0
  42. data/lib/sns/right_sns_interface.rb +286 -0
  43. data/lib/sqs/right_sqs.rb +387 -0
  44. data/lib/sqs/right_sqs_gen2.rb +342 -0
  45. data/lib/sqs/right_sqs_gen2_interface.rb +523 -0
  46. data/lib/sqs/right_sqs_interface.rb +593 -0
  47. data/right_aws.gemspec +90 -0
  48. data/test/README.mdown +39 -0
  49. data/test/acf/test_helper.rb +2 -0
  50. data/test/acf/test_right_acf.rb +138 -0
  51. data/test/awsbase/test_helper.rb +2 -0
  52. data/test/awsbase/test_right_awsbase.rb +11 -0
  53. data/test/ec2/test_helper.rb +2 -0
  54. data/test/ec2/test_right_ec2.rb +107 -0
  55. data/test/elb/test_helper.rb +2 -0
  56. data/test/elb/test_right_elb.rb +43 -0
  57. data/test/http_connection.rb +87 -0
  58. data/test/rds/test_helper.rb +2 -0
  59. data/test/rds/test_right_rds.rb +120 -0
  60. data/test/route_53/fixtures/a_record.xml +18 -0
  61. data/test/route_53/fixtures/alias_record.xml +18 -0
  62. data/test/route_53/test_helper.rb +2 -0
  63. data/test/route_53/test_right_route_53.rb +141 -0
  64. data/test/s3/test_helper.rb +2 -0
  65. data/test/s3/test_right_s3.rb +528 -0
  66. data/test/s3/test_right_s3_stubbed.rb +97 -0
  67. data/test/sdb/test_active_sdb.rb +357 -0
  68. data/test/sdb/test_batch_put_attributes.rb +54 -0
  69. data/test/sdb/test_helper.rb +3 -0
  70. data/test/sdb/test_right_sdb.rb +253 -0
  71. data/test/sns/test_helper.rb +2 -0
  72. data/test/sns/test_right_sns.rb +153 -0
  73. data/test/sqs/test_helper.rb +2 -0
  74. data/test/sqs/test_right_sqs.rb +285 -0
  75. data/test/sqs/test_right_sqs_gen2.rb +264 -0
  76. data/test/test_credentials.rb +37 -0
  77. data/test/ts_right_aws.rb +15 -0
  78. metadata +257 -0
@@ -0,0 +1,381 @@
1
+ #
2
+ # Copyright (c) 2011 RightScale Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #
23
+
24
+ module RightAws
25
+
26
+ class Ec2
27
+
28
+ # VPC v2: Limits
29
+ #
30
+ # http://docs.amazonwebservices.com/AmazonVPC/latest/UserGuide/index.html?VPC_Appendix_Limits.html
31
+
32
+ #----------------------
33
+ # InternetGateways
34
+ #----------------------
35
+
36
+ # Create internet gateway
37
+ #
38
+ # ec2.create_internet_gateway #=>
39
+ # { :internet_gateway_id=>"igw-6585c10c", :tags=>{}}
40
+ #
41
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-CreateInternetGateway.html
42
+ #
43
+ def create_internet_gateway
44
+ link = generate_request("CreateInternetGateway")
45
+ request_info(link, QEc2DescribeInternetGatewaysParser.new(:logger => @logger)).first
46
+ rescue Exception
47
+ on_exception
48
+ end
49
+
50
+ # Describe internet gateways.
51
+ #
52
+ # ec2.describe_internet_gateways #=>
53
+ # [{:state=>"available",
54
+ # :internet_gateway_id=>"igw-6585c10c",
55
+ # :vpc_id=>"vpc-df80a6b6",
56
+ # :tags=>{}},
57
+ # {:internet_gateway_id=>"igw-883503e1",
58
+ # :tags=>{}}]
59
+ #
60
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-CreateInternetGateway.html
61
+ #
62
+ def describe_internet_gateways(*list_and_options)
63
+ describe_resources_with_list_and_options('DescribeInternetGateways', 'InternetGatewayId', QEc2DescribeInternetGatewaysParser, list_and_options)
64
+ rescue Exception
65
+ on_exception
66
+ end
67
+
68
+ # Delete internet gateway.
69
+ #
70
+ # ec2.delete_internet_gateway("igw-6585c10c") #=> true
71
+ #
72
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteInternetGateway.html
73
+ #
74
+ def delete_internet_gateway(internet_gateway_id)
75
+ link = generate_request("DeleteInternetGateway", 'InternetGatewayId' => internet_gateway_id )
76
+ request_info(link, RightHttp2xxParser.new(:logger => @logger))
77
+ rescue Exception
78
+ on_exception
79
+ end
80
+
81
+ # Attaches an Internet gateway to a VPC, enabling connectivity between the Internet and the VPC.
82
+ #
83
+ # ec2.attach_internet_gateway("igw-6585c10c", "vpc-df80a6b6") #=> true
84
+ #
85
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-AttachInternetGateway.html
86
+ #
87
+ def attach_internet_gateway(internet_gateway_id, vpc_id)
88
+ request_hash = { 'InternetGatewayId' => internet_gateway_id,
89
+ 'VpcId' => vpc_id }
90
+ link = generate_request("AttachInternetGateway", request_hash)
91
+ request_info(link, RightHttp2xxParser.new(:logger => @logger))
92
+ rescue Exception
93
+ on_exception
94
+ end
95
+
96
+ # Detaches an Internet gateway from a VPC, disabling connectivity between the Internet and the VPC.
97
+ # The VPC must not contain any running instances with Elastic IP addresses.
98
+ #
99
+ # ec2.detach_internet_gateway("igw-6585c10c", "vpc-df80a6b6") #=> true
100
+ #
101
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DetachInternetGateway.html
102
+ #
103
+ def detach_internet_gateway(internet_gateway_id, vpc_id)
104
+ request_hash = { 'InternetGatewayId' => internet_gateway_id,
105
+ 'VpcId' => vpc_id }
106
+ link = generate_request("DetachInternetGateway", request_hash)
107
+ request_info(link, RightHttp2xxParser::new(:logger => @logger))
108
+ rescue Exception
109
+ on_exception
110
+ end
111
+
112
+ #----------------------
113
+ # RouteTables
114
+ #----------------------
115
+
116
+ # Describe route tables.
117
+ #
118
+ # # List all tables
119
+ # ec2.describe_route_tables #=>
120
+ # [{:route_table_id=>"rtb-be3006d7",
121
+ # :route_set=>
122
+ # [{:state=>"active",
123
+ # :destination_cidr_block=>"10.0.3.0/24",
124
+ # :gateway_id=>"local"}],
125
+ # :vpc_id=>"vpc-df80a6b6",
126
+ # :association_set=>[],
127
+ # :tags=>{}},
128
+ # {:route_table_id=>"rtb-e36cf98a",
129
+ # :route_set=>
130
+ # [{:state=>"active",
131
+ # :destination_cidr_block=>"192.168.0.0/24",
132
+ # :gateway_id=>"local"}],
133
+ # :vpc_id=>"vpc-e16cf988",
134
+ # :association_set=>
135
+ # [{:route_table_id=>"rtb-e36cf98a",
136
+ # :main=>true,
137
+ # :route_table_association_id=>"rtbassoc-e26cf98b"}],
138
+ # :tags=>{}}, ... ]
139
+ #
140
+ # # Filter tables by VpcId
141
+ # ec2.describe_route_tables(:filters => {'vpc-id' => "vpc-df80a6b6"})
142
+ #
143
+ # # Custom route table
144
+ # ec2.describe_route_tables("rtb-be3006d7") #=>
145
+ # [{:vpc_id=>"vpc-df80a6b6",
146
+ # :route_set=>
147
+ # [{:state=>"active",
148
+ # :destination_cidr_block=>"0.0.0.1/32",
149
+ # :gateway_id=>"igw-6585c10c"},
150
+ # {:state=>"active",
151
+ # :destination_cidr_block=>"10.0.3.0/24",
152
+ # :gateway_id=>"local"}],
153
+ # :route_table_id=>"rtb-be3006d7",
154
+ # :tags=>{},
155
+ # :association_set=>
156
+ # [{:route_table_association_id=>"rtbassoc-a02610c9",
157
+ # :subnet_id=>"subnet-b95f76d0",
158
+ # :route_table_id=>"rtb-be3006d7"}]}]
159
+ #
160
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeRouteTables.html
161
+ #
162
+ def describe_route_tables(*list_and_options)
163
+ describe_resources_with_list_and_options('DescribeRouteTables', 'RouteTableId', QEc2DescribeRouteTablesParser, list_and_options)
164
+ rescue Exception
165
+ on_exception
166
+ end
167
+
168
+ # Creates a new route table within a VPC. After you create a new route table, you can add routes and associate the table with a subne
169
+ #
170
+ # ec2.create_route_table("vpc-df80a6b6") #=>
171
+ # {:route_table_id=>"rtb-4331072a",
172
+ # :route_set=>
173
+ # [{:state=>"active",
174
+ # :destination_cidr_block=>"10.0.3.0/24",
175
+ # :gateway_id=>"local"}],
176
+ # :vpc_id=>"vpc-df80a6b6",
177
+ # :association_set=>[],
178
+ # :tags=>{}}
179
+ #
180
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-CreateRouteTable.html
181
+ #
182
+ def create_route_table(vpc_id)
183
+ link = generate_request("CreateRouteTable", 'VpcId' => vpc_id )
184
+ request_info(link, QEc2DescribeRouteTablesParser::new(:logger => @logger)).first
185
+ rescue Exception
186
+ on_exception
187
+ end
188
+
189
+ # Deletes a route table from a VPC.
190
+ # The route table must not be associated with a subnet. You can't delete the main route table.
191
+ #
192
+ # ec2.delete_route_table("rtb-4331072a") #=> true
193
+ #
194
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DeleteRouteTable.html
195
+ def delete_route_table(route_table_id)
196
+ link = generate_request("DeleteRouteTable", 'RouteTableId' => route_table_id )
197
+ request_info(link, RightHttp2xxParser.new(:logger => @logger))
198
+ rescue Exception
199
+ on_exception
200
+ end
201
+
202
+ # Associates a subnet with a route table. The subnet and route table must be in the same VPC.
203
+ # This association causes traffic originating from the subnet to be routed according to the routes in
204
+ # the route table. The action returns an association ID, which you need if you want to disassociate
205
+ # the route table from the subnet later. A route table can be associated with multiple subnets.
206
+ #
207
+ # ec2.associate_route_table("rtb-be3006d7", "subnet-b95f76d0") #=> true
208
+ #
209
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-AssociateRouteTable.html
210
+ #
211
+ def associate_route_table(route_table_id, subnet_id)
212
+ request_hash = { 'RouteTableId' => route_table_id,
213
+ 'SubnetId' => subnet_id }
214
+ link = generate_request("AssociateRouteTable", request_hash)
215
+ request_info(link, RightHttp2xxParser.new(:logger => @logger))
216
+ rescue Exception
217
+ on_exception
218
+ end
219
+
220
+ # Disassociates a subnet from a route table.
221
+ #
222
+ # ec2.disassociate_route_table(route_table_association_id) #=> true
223
+ #
224
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DisassociateRouteTable.html
225
+ #
226
+ def disassociate_route_table(route_table_association_id)
227
+ link = generate_request("DisassociateRouteTable", 'AssociationId' => route_table_association_id )
228
+ request_info(link, RightHttp2xxParser.new(:logger => @logger))
229
+ rescue Exception
230
+ on_exception
231
+ end
232
+
233
+ # Changes the route table associated with a given subnet in a VPC. After you execute this action, the subnet
234
+ # uses the routes in the new route table it's associated with.
235
+ # You can also use this action to change which table is the main route table in the VPC. You just specify
236
+ # the main route table's association ID and the route table that you want to be the new main route table.
237
+ #
238
+ # ec2.replace_route_table_association("rtb-be3006d7", "rtbassoc-a02610c9") #=> true
239
+ #
240
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ReplaceRouteTableAssociation.html
241
+ #
242
+ def replace_route_table_association(route_table_id, route_table_association_id)
243
+ request_hash = { 'RouteTableId' => route_table_id,
244
+ 'AssociationId' => route_table_association_id }
245
+ link = generate_request("ReplaceRouteTableAssociation", request_hash)
246
+ request_info(link, RightHttp2xxParser.new(:logger => @logger))
247
+ rescue Exception
248
+ on_exception
249
+ end
250
+
251
+ #---------------------
252
+ # Routes
253
+ #---------------------
254
+
255
+ # Creates a new route in a route table within a VPC. The route's target can be either a gateway attached to
256
+ # the VPC or a NAT instance in the VPC.
257
+ # Options: :gateway_id, :instance_id
258
+ #
259
+ # ec2.create_route("rtb-be3006d7", "0.0.0.1/32", :gateway_id => 'igw-6585c10c') #=> true
260
+ #
261
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateRoute.html
262
+ #
263
+ def create_route(route_table_id, destination_cidr_block, options = {})
264
+ request_hash = { 'RouteTableId' => route_table_id,
265
+ 'DestinationCidrBlock' => destination_cidr_block }
266
+ request_hash['GatewayId'] = options[:gateway_id] unless options[:gateway_id].right_blank?
267
+ request_hash['InstanceId'] = options[:instance_id] unless options[:instance_id].right_blank?
268
+ link = generate_request("CreateRoute", request_hash)
269
+ request_info(link, RightHttp2xxParser.new(:logger => @logger))
270
+ rescue Exception
271
+ on_exception
272
+ end
273
+
274
+ # Deletes a route from a route table in a VPC.
275
+ #
276
+ # ec2.delete_route("rtb-be3006d7", "0.0.0.1/32") #=> true
277
+ #
278
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteRoute.html
279
+ #
280
+ def delete_route(route_table_id, destination_cidr_block)
281
+ link = generate_request("DeleteRoute", 'RouteTableId' => route_table_id,
282
+ 'DestinationCidrBlock' => destination_cidr_block )
283
+ request_info(link, RightHttp2xxParser.new(:logger => @logger))
284
+ rescue Exception
285
+ on_exception
286
+ end
287
+
288
+ # Replaces an existing route within a route table in a VPC
289
+ # Options: :gateway_id, :instance_id
290
+ #
291
+ # ec2.replace_route("rtb-be3006d7", "0.0.0.2/32", :gateway_id => 'igw-6585c10c') #=> true
292
+ #
293
+ # P.S. http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-ReplaceRoute.html
294
+ #
295
+ def replace_route(route_table_id, destination_cidr_block, options = {})
296
+ request_hash = { 'RouteTableId' => route_table_id,
297
+ 'DestinationCidrBlock' => destination_cidr_block }
298
+ request_hash['GatewayId'] = options[:gateway_id] unless options[:gateway_id].right_blank?
299
+ request_hash['InstanceId'] = options[:instance_id] unless options[:instance_id].right_blank?
300
+ link = generate_request("ReplaceRoute", request_hash)
301
+ request_info(link, RightHttp2xxParser.new(:logger => @logger))
302
+ rescue Exception
303
+ on_exception
304
+ end
305
+
306
+ #---------------------
307
+ # InternetGateways
308
+ #---------------------
309
+
310
+ class QEc2DescribeInternetGatewaysParser < RightAWSParser #:nodoc:
311
+ def tagstart(name, attributes)
312
+ case full_tag_name
313
+ when %r{/(internetGatewaySet/item|internetGateway)$} then @item = { :tags => {} }
314
+ when %r{/tagSet/item$} then @aws_tag = {}
315
+ end
316
+ end
317
+ def tagend(name)
318
+ case full_tag_name
319
+ # item
320
+ when %r{/(internetGatewaySet/item|internetGateway)$} then @result << @item
321
+ when %r{/internetGatewayId$} then @item[:internet_gateway_id] = @text
322
+ when %r{/vpcId$} then @item[:vpc_id] = @text
323
+ when %r{/state$} then @item[:state] = @text
324
+ # tags
325
+ when %r{/tagSet/item/key$} then @aws_tag[:key] = @text
326
+ when %r{/tagSet/item/value$} then @aws_tag[:value] = @text
327
+ when %r{/tagSet/item$} then @item[:tags][@aws_tag[:key]] = @aws_tag[:value]
328
+ end
329
+ end
330
+ def reset
331
+ @result = []
332
+ end
333
+ end
334
+
335
+ #---------------------
336
+ # Routes
337
+ #---------------------
338
+
339
+ class QEc2DescribeRouteTablesParser < RightAWSParser #:nodoc:
340
+ def tagstart(name, attributes)
341
+ case full_tag_name
342
+ when %r{/(routeTableSet/item|routeTable)$}
343
+ @item = { :route_set => [],
344
+ :association_set => [],
345
+ :tags => {}}
346
+ when %r{/routeSet/item$} then @route_set = {}
347
+ when %r{/associationSet/item$} then @association_set = {}
348
+ end
349
+ end
350
+ def tagend(name)
351
+ case full_tag_name
352
+ # item
353
+ when %r{/(routeTableSet/item|routeTable)/routeTableId$} then @item[:route_table_id] = @text
354
+ when %r{/(routeTableSet/item|routeTable)/vpcId$} then @item[:vpc_id] = @text
355
+ when %r{/(routeTableSet/item|routeTable)$} then @result << @item
356
+ # route set
357
+ when %r{/routeSet/item/destinationCidrBlock$} then @route_set[:destination_cidr_block] = @text
358
+ when %r{/routeSet/item/gatewayId$} then @route_set[:gateway_id] = @text
359
+ when %r{/routeSet/item/instanceId$} then @route_set[:instance_id] = @text
360
+ when %r{/routeSet/item/state$} then @route_set[:state] = @text
361
+ when %r{/routeSet/item$} then @item[:route_set] << @route_set
362
+ # association set
363
+ when %r{/associationSet/item/routeTableId$} then @association_set[:route_table_id] = @text
364
+ when %r{/associationSet/item/routeTableAssociationId$} then @association_set[:route_table_association_id] = @text
365
+ when %r{/associationSet/item/subnetId$} then @association_set[:subnet_id] = @text
366
+ when %r{/associationSet/item/main} then @association_set[:main] = @text == 'true'
367
+ when %r{/associationSet/item$} then @item[:association_set] << @association_set
368
+ # tags
369
+ when %r{/tagSet/item/key$} then @aws_tag[:key] = @text
370
+ when %r{/tagSet/item/value$} then @aws_tag[:value] = @text
371
+ when %r{/tagSet/item$} then @item[:tags][@aws_tag[:key]] = @aws_tag[:value]
372
+ end
373
+ end
374
+ def reset
375
+ @result = []
376
+ end
377
+ end
378
+
379
+ end
380
+
381
+ end
@@ -0,0 +1,84 @@
1
+ #
2
+ # Copyright (c) 2010 RightScale Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #
23
+
24
+ module RightAws
25
+
26
+ class Ec2
27
+
28
+ def describe_licenses(*license_ids)
29
+ link = generate_request("DescribeLicenses", amazonize_list('LicenseId', license_ids))
30
+ request_info(link, QEc2DescribeLicensesParser.new(:logger => @logger))
31
+ end
32
+
33
+ def activate_license(license_id, capacity)
34
+ link = generate_request("ActivateLicense", 'LicenseId' => license_id,
35
+ 'Capacity' => capacity)
36
+ request_info(link, RightBoolResponseParser.new(:logger => @logger))
37
+ end
38
+
39
+ # def get_license_capacity(license_id)
40
+ # link = generate_request("GetLicenseCapacity", 'LicenseId' => license_id)
41
+ # request_info(link, RightBoolResponseParser.new(:logger => @logger))
42
+ # end
43
+
44
+ def deactivate_license(license_id, capacity)
45
+ link = generate_request("DeactivateLicense", 'LicenseId' => license_id,
46
+ 'Capacity' => capacity)
47
+ request_info(link, RightBoolResponseParser.new(:logger => @logger))
48
+ end
49
+
50
+ #-----------------------------------------------------------------
51
+ # PARSERS: Images
52
+ #-----------------------------------------------------------------
53
+
54
+ class QEc2DescribeLicensesParser < RightAWSParser #:nodoc:
55
+ def tagstart(name, attributes)
56
+ case full_tag_name
57
+ when %r{/licenseSet/item$} then @item = { :capacities => [] }
58
+ when %r{/capacitySet/item$} then @capacity_item = {}
59
+ end
60
+ end
61
+ def tagend(name)
62
+ case name
63
+ when 'licenseId' then @item[:license_id] = @text
64
+ when 'type' then @item[:type] = @text
65
+ when 'pool' then @item[:pool] = @text
66
+ when 'capacity' then @capacity_item[:capacity] = @text.to_i
67
+ when 'instanceCapacity' then @capacity_item[:instance_capacity] = @text.to_i
68
+ when 'state' then @capacity_item[:state] = @text
69
+ when 'earliestAllowedDeactivationTime' then @capacity_item[:earliest_allowed_deactivation_time] = @text
70
+ else
71
+ case full_tag_name
72
+ when %r{/capacitySet/item$} then @item[:capacities] << @capacity_item
73
+ when %r{/licenseSet/item$} then @result << @item
74
+ end
75
+ end
76
+ end
77
+ def reset
78
+ @result = []
79
+ end
80
+ end
81
+
82
+ end
83
+
84
+ end