aws 2.1.13 → 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.
@@ -8,7 +8,7 @@ The Appoxy AWS gem is a forked version of RightScale's AWS library.
8
8
  1. It didn't work with Ruby 1.9 - this version does
9
9
  1. RightScale doesn't have the source hosted for the community
10
10
  1. We needed fixes and changes for [http://code.google.com/p/simple-record/ SimpleRecord] and didn't want to wait for RightScale to do it.
11
- 1. We needed Elastic Load Balancing support
11
+ 1. We needed support for new AWS services.
12
12
 
13
13
  ## Discussion Group
14
14
 
@@ -28,11 +28,6 @@ Published by Appoxy LLC, under the MIT License. Special thanks to RightScale fro
28
28
 
29
29
  ## INSTALL:
30
30
 
31
- ONE TIME: Be sure to add the new gemcutter source:
32
-
33
- gem install gemcutter
34
- gem tumble
35
-
36
31
  THEN (you should have http://gemcutter.org in your sources and it MUST be above rubyforge.org):
37
32
 
38
33
  gem install aws
data/lib/aws.rb CHANGED
@@ -25,3 +25,5 @@ require 'sqs/right_sqs'
25
25
  require 'sdb/right_sdb_interface'
26
26
  require 'acf/right_acf_interface'
27
27
  require 'elb/elb_interface'
28
+ require 'rds/rds'
29
+
@@ -27,6 +27,7 @@ module Aws
27
27
  require 'pp'
28
28
  require 'cgi'
29
29
  require 'uri'
30
+ require 'xmlsimple'
30
31
 
31
32
  class AwsUtils #:nodoc:
32
33
  @@digest1 = OpenSSL::Digest::Digest.new("sha1")
@@ -269,6 +270,120 @@ module Aws
269
270
  end
270
271
  end
271
272
 
273
+ # FROM SDB
274
+ def generate_request2(aws_access_key, aws_secret_key, action, api_version, lib_params, user_params={}) #:nodoc:
275
+ # remove empty params from request
276
+ user_params.delete_if {|key, value| value.nil? }
277
+ #params_string = params.to_a.collect{|key,val| key + "=#{CGI::escape(val.to_s)}" }.join("&")
278
+ # prepare service data
279
+ service = lib_params[:service]
280
+ # puts 'service=' + service.to_s
281
+ service_hash = {"Action" => action,
282
+ "AWSAccessKeyId" => aws_access_key }
283
+ service_hash.update("Version" => api_version) if api_version
284
+ service_hash.update(user_params)
285
+ service_params = signed_service_params(aws_secret_key, service_hash, :get, lib_params[:server], lib_params[:service])
286
+ #
287
+ # use POST method if the length of the query string is too large
288
+ # see http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/MakingRESTRequests.html
289
+ if service_params.size > 2000
290
+ if signature_version == '2'
291
+ # resign the request because HTTP verb is included into signature
292
+ service_params = signed_service_params(aws_secret_key, service_hash, :post, lib_params[:server], service)
293
+ end
294
+ request = Net::HTTP::Post.new(service)
295
+ request.body = service_params
296
+ request['Content-Type'] = 'application/x-www-form-urlencoded'
297
+ else
298
+ request = Net::HTTP::Get.new("#{service}?#{service_params}")
299
+ end
300
+
301
+ #puts "\n\n --------------- QUERY REQUEST TO AWS -------------- \n\n"
302
+ #puts "#{@params[:service]}?#{service_params}\n\n"
303
+
304
+ # prepare output hash
305
+ { :request => request,
306
+ :server => lib_params[:server],
307
+ :port => lib_params[:port],
308
+ :protocol => lib_params[:protocol] }
309
+ end
310
+
311
+ def get_conn(connection_name, lib_params, logger)
312
+ thread = lib_params[:multi_thread] ? Thread.current : Thread.main
313
+ thread[connection_name] ||= Rightscale::HttpConnection.new(:exception => Aws::AwsError, :logger => logger)
314
+ conn = thread[connection_name]
315
+ return conn
316
+ end
317
+
318
+ def request_info2(request, parser, lib_params, connection_name, logger, bench)
319
+ t = get_conn(connection_name, lib_params, logger)
320
+ request_info_impl(t, bench, request, parser)
321
+ end
322
+
323
+ # This is the direction we should head instead of writing our own parsers for everything, much simpler
324
+ def request_info_xml_simple(connection_name, lib_params, request, logger)
325
+
326
+ @connection = get_conn(connection_name, lib_params, logger)
327
+ @last_request = request[:request]
328
+ @last_response = nil
329
+ response=nil
330
+ blockexception = nil
331
+
332
+ response = @connection.request(request)
333
+ # benchblock.service.add!{ response = @connection.request(request) }
334
+ # check response for errors...
335
+ @last_response = response
336
+ if response.is_a?(Net::HTTPSuccess)
337
+ @error_handler = nil
338
+ # benchblock.xml.add! { parser.parse(response) }
339
+ # return parser.result
340
+ return XmlSimple.xml_in(response.body, {"KeyToSymbol"=>false, 'ForceArray' => false})
341
+ else
342
+ @error_handler = AWSErrorHandler.new(self, nil, :errors_list => self.class.amazon_problems) unless @error_handler
343
+ check_result = @error_handler.check(request)
344
+ if check_result
345
+ @error_handler = nil
346
+ return check_result
347
+ end
348
+ request_text_data = "#{request[:server]}:#{request[:port]}#{request[:request].path}"
349
+ raise AwsError2.new(@last_response.code, @last_request_id, request_text_data, @last_response.body)
350
+ end
351
+
352
+ end
353
+
354
+ # FROM ELB
355
+ =begin
356
+ def generate_request2(action, params={})
357
+ service_hash = {"Action" => action,
358
+ "AWSAccessKeyId" => @aws_access_key_id,
359
+ "Version" => @@api }
360
+ service_hash.update(params)
361
+ service_params = signed_service_params(@aws_secret_access_key, service_hash, :get, @params[:server], @params[:service])
362
+
363
+ # use POST method if the length of the query string is too large
364
+ if service_params.size > 2000
365
+ if signature_version == '2'
366
+ # resign the request because HTTP verb is included into signature
367
+ service_params = signed_service_params(@aws_secret_access_key, service_hash, :post, @params[:server], @params[:service])
368
+ end
369
+ request = Net::HTTP::Post.new(service)
370
+ request.body = service_params
371
+ request['Content-Type'] = 'application/x-www-form-urlencoded'
372
+ else
373
+ request = Net::HTTP::Get.new("#{@params[:service]}?#{service_params}")
374
+ end
375
+
376
+ #puts "\n\n --------------- QUERY REQUEST TO AWS -------------- \n\n"
377
+ #puts "#{@params[:service]}?#{service_params}\n\n"
378
+
379
+ # prepare output hash
380
+ { :request => request,
381
+ :server => @params[:server],
382
+ :port => @params[:port],
383
+ :protocol => @params[:protocol] }
384
+ end
385
+ =end
386
+
272
387
  # Returns +true+ if the describe_xxx responses are being cached
273
388
  def caching?
274
389
  @params.key?(:cache) ? @params[:cache] : @@caching
@@ -443,11 +558,14 @@ module Aws
443
558
  # Raw request text data to AWS
444
559
  attr_reader :request_data
445
560
 
446
- def initialize(errors=nil, http_code=nil, request_id=nil, request_data=nil)
561
+ attr_reader :response
562
+
563
+ def initialize(errors=nil, http_code=nil, request_id=nil, request_data=nil, response=nil)
447
564
  @errors = errors
448
565
  @request_id = request_id
449
566
  @http_code = http_code
450
567
  @request_data = request_data
568
+ @response = response
451
569
  msg = @errors.is_a?(Array) ? @errors.map{|code, msg| "#{code}: #{msg}"}.join("; ") : @errors.to_s
452
570
  msg += "\nREQUEST(#{@request_data})" unless @request_data.nil?
453
571
  super(msg)
@@ -479,6 +597,7 @@ module Aws
479
597
  if options[:log]
480
598
  request = aws.last_request ? aws.last_request.path : '-none-'
481
599
  response = aws.last_response ? "#{aws.last_response.code} -- #{aws.last_response.message} -- #{aws.last_response.body}" : '-none-'
600
+ @response = response
482
601
  aws.logger.error error_text
483
602
  aws.logger.error "Request was: #{request}"
484
603
  aws.logger.error "Response was: #{response}"
@@ -496,6 +615,42 @@ module Aws
496
615
 
497
616
  end
498
617
 
618
+ # Simplified version
619
+ class AwsError2 < RuntimeError
620
+ # Request id (if exists)
621
+ attr_reader :request_id
622
+
623
+ # Response HTTP error code
624
+ attr_reader :http_code
625
+
626
+ # Raw request text data to AWS
627
+ attr_reader :request_data
628
+
629
+ attr_reader :response
630
+
631
+ attr_reader :errors
632
+
633
+ def initialize(http_code=nil, request_id=nil, request_data=nil, response=nil)
634
+
635
+ @request_id = request_id
636
+ @http_code = http_code
637
+ @request_data = request_data
638
+ @response = response
639
+ # puts '@response=' + @response.inspect
640
+
641
+ if @response
642
+ ref = XmlSimple.xml_in(@response, { "ForceArray"=>false })
643
+ # puts "refxml=" + ref.inspect
644
+ msg = "#{ref['Error']['Code']}: #{ref['Error']['Message']}"
645
+ else
646
+ msg = "#{@http_code}: REQUEST(#{@request_data})"
647
+ end
648
+ super(msg)
649
+ end
650
+
651
+
652
+ end
653
+
499
654
 
500
655
  class AWSErrorHandler
501
656
  # 0-100 (%)
@@ -144,7 +144,7 @@ module Aws
144
144
  # resign the request because HTTP verb is included into signature
145
145
  service_params = signed_service_params(@aws_secret_access_key, service_hash, :post, @params[:server], @params[:service])
146
146
  end
147
- request = Net::HTTP::Post.new(service)
147
+ request = Net::HTTP::Post.new(@params[:service])
148
148
  request.body = service_params
149
149
  request['Content-Type'] = 'application/x-www-form-urlencoded'
150
150
  else
@@ -24,7 +24,7 @@ module Aws
24
24
  end
25
25
 
26
26
  # Current API version (sometimes we have to check it outside the GEM).
27
- @@api = ENV['EC2_API_VERSION'] || API_VERSION
27
+ @@api = ENV['ELB_API_VERSION'] || API_VERSION
28
28
 
29
29
  def self.api
30
30
  @@api
@@ -44,42 +44,14 @@ module Aws
44
44
 
45
45
 
46
46
  def generate_request(action, params={})
47
- service_hash = {"Action" => action,
48
- "AWSAccessKeyId" => @aws_access_key_id,
49
- "Version" => @@api }
50
- service_hash.update(params)
51
- service_params = signed_service_params(@aws_secret_access_key, service_hash, :get, @params[:server], @params[:service])
52
-
53
- # use POST method if the length of the query string is too large
54
- if service_params.size > 2000
55
- if signature_version == '2'
56
- # resign the request because HTTP verb is included into signature
57
- service_params = signed_service_params(@aws_secret_access_key, service_hash, :post, @params[:server], @params[:service])
58
- end
59
- request = Net::HTTP::Post.new(service)
60
- request.body = service_params
61
- request['Content-Type'] = 'application/x-www-form-urlencoded'
62
- else
63
- request = Net::HTTP::Get.new("#{@params[:service]}?#{service_params}")
64
- end
65
-
66
- #puts "\n\n --------------- QUERY REQUEST TO AWS -------------- \n\n"
67
- #puts "#{@params[:service]}?#{service_params}\n\n"
68
-
69
- # prepare output hash
70
- { :request => request,
71
- :server => @params[:server],
72
- :port => @params[:port],
73
- :protocol => @params[:protocol] }
47
+ generate_request2(@aws_access_key_id, @aws_secret_access_key, action, @@api, @params, params)
74
48
  end
75
49
 
76
50
 
77
51
  # Sends request to Amazon and parses the response
78
52
  # Raises AwsError if any banana happened
79
53
  def request_info(request, parser)
80
- thread = @params[:multi_thread] ? Thread.current : Thread.main
81
- thread[:elb_connection] ||= Rightscale::HttpConnection.new(:exception => Aws::AwsError, :logger => @logger)
82
- request_info_impl(thread[:elb_connection], @@bench, request, parser)
54
+ request_info2(request, parser, @params, :elb_connection, @logger, @@bench)
83
55
  end
84
56
 
85
57
 
@@ -309,7 +281,7 @@ module Aws
309
281
  # puts 'tagstart ' + name + ' -- ' + @xmlpath
310
282
  if (name == 'member' &&
311
283
  (@xmlpath == 'RegisterInstancesWithLoadBalancerResponse/RegisterInstancesWithLoadBalancerResult/Instances' ||
312
- @xmlpath == 'DeregisterInstancesFromLoadBalancerResponse/DeregisterInstancesFromLoadBalancerResult/Instances')
284
+ @xmlpath == 'DeregisterInstancesFromLoadBalancerResponse/DeregisterInstancesFromLoadBalancerResult/Instances')
313
285
  )
314
286
  @member = { }
315
287
  end
@@ -0,0 +1,127 @@
1
+ module Aws
2
+
3
+
4
+ require 'xmlsimple'
5
+
6
+ # API Reference: http://docs.amazonwebservices.com/AmazonRDS/latest/APIReference/
7
+ class Rds < AwsBase
8
+ include AwsBaseInterface
9
+
10
+
11
+ # Amazon API version being used
12
+ API_VERSION = nil
13
+ DEFAULT_HOST = "rds.amazonaws.com"
14
+ DEFAULT_PATH = '/'
15
+ DEFAULT_PROTOCOL = 'https'
16
+ DEFAULT_PORT = 443
17
+
18
+ @@api = ENV['RDS_API_VERSION'] || API_VERSION
19
+
20
+ def self.api
21
+ @@api
22
+ end
23
+
24
+ @@bench = AwsBenchmarkingBlock.new
25
+
26
+ def self.bench_xml
27
+ @@bench.xml
28
+ end
29
+
30
+ def self.bench_ec2
31
+ @@bench.service
32
+ end
33
+
34
+ def initialize(aws_access_key_id=nil, aws_secret_access_key=nil, params={})
35
+ uri = ENV['RDS_URL'] ? URI.parse(ENV['RDS_URL']) : nil
36
+ init({ :name => 'RDS',
37
+ :default_host => uri ? uri.host : DEFAULT_HOST,
38
+ :default_port => uri ? uri.port : DEFAULT_PORT,
39
+ :default_service => uri ? uri.path : DEFAULT_PATH,
40
+ :default_protocol => uri ? uri.scheme : DEFAULT_PROTOCOL },
41
+ aws_access_key_id || ENV['AWS_ACCESS_KEY_ID'],
42
+ aws_secret_access_key|| ENV['AWS_SECRET_ACCESS_KEY'],
43
+ params)
44
+ end
45
+
46
+ def generate_request(action, params={})
47
+ generate_request2(@aws_access_key_id, @aws_secret_access_key, action, @@api, @params, params)
48
+ end
49
+
50
+
51
+ #-----------------------------------------------------------------
52
+ # REQUESTS
53
+ #-----------------------------------------------------------------
54
+
55
+ #
56
+ # identifier: db instance identifier. Must be unique per account per zone.
57
+ # instance_class: db.m1.small | db.m1.large | db.m1.xlarge | db.m2.2xlarge | db.m2.4xlarge
58
+ # See this for other values: http://docs.amazonwebservices.com/AmazonRDS/latest/APIReference/
59
+ #
60
+ # options:
61
+ # db_name: if you want a database created at the same time as the instance, specify :db_name option.
62
+ # availability_zone: default is random zone.
63
+ def create_db_instance(identifier, instance_class, allocated_storage, master_username, master_password, options={})
64
+ params = {}
65
+ params['DBInstanceIdentifier'] = identifier
66
+ params['DBInstanceClass'] = instance_class
67
+ params['AllocatedStorage'] = allocated_storage
68
+ params['MasterUsername'] = master_username
69
+ params['MasterUserPassword'] = master_password
70
+
71
+ params['Engine'] = options[:engine] || "MySQL5.1"
72
+ params['DBName'] = options[:db_name] if options[:db_name]
73
+ params['AvailabilityZone'] = options[:availability_zone] if options[:availability_zone]
74
+ params['PreferredMaintenanceWindow'] = options[:preferred_maintenance_window] if options[:preferred_maintenance_window]
75
+ params['BackupRetentionPeriod'] = options[:preferred_retention_period] if options[:preferred_retention_period]
76
+ params['PreferredBackupWindow'] = options[:preferred_backup_window] if options[:preferred_backup_window]
77
+
78
+ @logger.info("Creating DB Instance called #{identifier}")
79
+
80
+ link = generate_request("CreateDBInstance", params)
81
+ resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
82
+
83
+ rescue Exception
84
+ on_exception
85
+ end
86
+
87
+ # options:
88
+ # DBInstanceIdentifier
89
+ # MaxRecords
90
+ # Marker
91
+ def describe_db_instances(options={})
92
+ params = {}
93
+ params['DBInstanceIdentifier'] = options[:DBInstanceIdentifier] if options[:DBInstanceIdentifier]
94
+ params['MaxRecords'] = options[:MaxRecords] if options[:MaxRecords]
95
+ params['Marker'] = options[:Marker] if options[:Marker]
96
+
97
+ link = generate_request("DescribeDBInstances", params)
98
+ resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
99
+
100
+ rescue Exception
101
+ on_exception
102
+ end
103
+
104
+
105
+ # identifier: identifier of db instance to delete.
106
+ # final_snapshot_identifier: if specified, RDS will crate a final snapshot before deleting so you can restore it later.
107
+ def delete_db_instance(identifier, final_snapshot_identifier=nil)
108
+ @logger.info("Deleting DB Instance - " + identifier.to_s)
109
+
110
+ params = {}
111
+ params['DBInstanceIdentifier'] = identifier
112
+ if final_snapshot_identifier
113
+ params['FinalDBSnapshotIdentifier'] = final_snapshot_identifier
114
+ else
115
+ params['SkipFinalSnapshot'] = true
116
+ end
117
+
118
+ link = generate_request("DeleteDBInstance", params)
119
+ resp = request_info_xml_simple(:rds_connection, @params, link, @logger)
120
+
121
+ rescue Exception
122
+ on_exception
123
+ end
124
+
125
+ end
126
+
127
+ end
@@ -82,38 +82,7 @@ module Aws
82
82
  #-----------------------------------------------------------------
83
83
  # Requests
84
84
  #-----------------------------------------------------------------
85
- def generate_request(action, params={}) #:nodoc:
86
- # remove empty params from request
87
- params.delete_if {|key,value| value.nil? }
88
- #params_string = params.to_a.collect{|key,val| key + "=#{CGI::escape(val.to_s)}" }.join("&")
89
- # prepare service data
90
- service = @params[:service]
91
- # puts 'service=' + service.to_s
92
- service_hash = {"Action" => action,
93
- "AWSAccessKeyId" => @aws_access_key_id,
94
- "Version" => API_VERSION }
95
- service_hash.update(params)
96
- service_params = signed_service_params(@aws_secret_access_key, service_hash, :get, @params[:server], @params[:service])
97
- #
98
- # use POST method if the length of the query string is too large
99
- # see http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/MakingRESTRequests.html
100
- if service_params.size > 2000
101
- if signature_version == '2'
102
- # resign the request because HTTP verb is included into signature
103
- service_params = signed_service_params(@aws_secret_access_key, service_hash, :post, @params[:server], service)
104
- end
105
- request = Net::HTTP::Post.new(service)
106
- request.body = service_params
107
- request['Content-Type'] = 'application/x-www-form-urlencoded'
108
- else
109
- request = Net::HTTP::Get.new("#{service}?#{service_params}")
110
- end
111
- # prepare output hash
112
- { :request => request,
113
- :server => @params[:server],
114
- :port => @params[:port],
115
- :protocol => @params[:protocol] }
116
- end
85
+
117
86
 
118
87
  # Sends request to Amazon and parses the response
119
88
  # Raises AwsError if any banana happened
@@ -0,0 +1,70 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/aws'
3
+ require 'rds/rds'
4
+ require 'pp'
5
+ require File.dirname(__FILE__) + '/../test_credentials.rb'
6
+
7
+ class TestElb < Test::Unit::TestCase
8
+
9
+ # Some of RightEc2 instance methods concerning instance launching and image registration
10
+ # are not tested here due to their potentially risk.
11
+
12
+ def setup
13
+ TestCredentials.get_credentials
14
+
15
+ @rds = Aws::Rds.new(TestCredentials.aws_access_key_id,
16
+ TestCredentials.aws_secret_access_key)
17
+
18
+ @identifier = 'my-db-instance'
19
+ @identifier2 = 'my-db-instance2'
20
+
21
+ end
22
+
23
+ def test_01_create_db_instance
24
+
25
+
26
+ begin
27
+ db_instance2 = @rds.create_db_instance('right_ec2_awesome_test_key', "db.m1.small", 5, "master", "masterpass")
28
+ rescue => ex
29
+ puts "msg=" + ex.message
30
+ puts "response=" + ex.response
31
+ assert ex.message[0,"InvalidParameterValue".size] == "InvalidParameterValue"
32
+ end
33
+
34
+ db_instance = @rds.create_db_instance(@identifier, "db.m1.small", 5, "master", "masterpass")
35
+ puts 'db_instance=' + db_instance.inspect
36
+
37
+ db_instance2 = @rds.create_db_instance(@identifier2, "db.m1.small", 5, "master", "masterpass")
38
+ puts 'db_instance2=' + db_instance2.inspect
39
+
40
+ sleep 10
41
+
42
+
43
+ end
44
+
45
+ def test_02_describe_db_instances
46
+ instances_result = @rds.describe_db_instances
47
+ puts "instances_result=" + instances_result.inspect
48
+ instances = instances_result["DescribeDBInstancesResult"]["DBInstances"]["DBInstance"]
49
+ puts 'instances=' + instances.inspect
50
+ assert instances.size == 2
51
+ end
52
+
53
+ def test_06_delete_db_instance
54
+
55
+ @rds.delete_db_instance(@identifier)
56
+ @rds.delete_db_instance(@identifier2)
57
+
58
+ sleep 2
59
+
60
+ instances_result = @rds.describe_db_instances
61
+ puts "instances_result=" + instances_result.inspect
62
+ instances_result["DescribeDBInstancesResult"]["DBInstances"]["DBInstance"].each do |i|
63
+ assert i["DBInstanceStatus"] == "deleting"
64
+ end
65
+ # assert instances_result["DescribeDBInstancesResult"]["DBInstances"]["DBInstance"].size == 0
66
+
67
+ end
68
+
69
+
70
+ end
@@ -42,10 +42,8 @@ class TestCredentials
42
42
  Dir.chdir(File.expand_path("~/.test-configs")) do
43
43
  credentials = YAML::load(File.open("aws.yml"))
44
44
  @@config = credentials
45
- puts 'creds=' + credentials.inspect
46
45
  self.aws_access_key_id = credentials["amazon"]["access_key"]
47
46
  self.aws_secret_access_key = credentials["amazon"]["secret_key"]
48
- puts 'akey=' + self.aws_access_key_id
49
47
  end
50
48
  rescue Exception => e
51
49
  puts "#{e.message}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.13
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Travis Reeder
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2010-02-01 00:00:00 -08:00
14
+ date: 2010-02-02 00:00:00 -08:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
@@ -34,6 +34,16 @@ dependencies:
34
34
  - !ruby/object:Gem::Version
35
35
  version: "0"
36
36
  version:
37
+ - !ruby/object:Gem::Dependency
38
+ name: xml-simple
39
+ type: :runtime
40
+ version_requirement:
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
37
47
  description: AWS Ruby Library for interfacing with Amazon Web Services.
38
48
  email: travis@appoxy.com
39
49
  executables: []
@@ -51,6 +61,7 @@ files:
51
61
  - lib/ec2/right_ec2.rb
52
62
  - lib/ec2/right_mon_interface.rb
53
63
  - lib/elb/elb_interface.rb
64
+ - lib/rds/rds.rb
54
65
  - lib/right_aws.rb
55
66
  - lib/s3/right_s3.rb
56
67
  - lib/s3/right_s3_interface.rb
@@ -95,6 +106,7 @@ test_files:
95
106
  - test/ec2/test_right_ec2.rb
96
107
  - test/elb/test_elb.rb
97
108
  - test/http_connection.rb
109
+ - test/rds/test_rds.rb
98
110
  - test/s3/test_helper.rb
99
111
  - test/s3/test_right_s3.rb
100
112
  - test/s3/test_right_s3_stubbed.rb