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.
- data/README.markdown +1 -6
- data/lib/aws.rb +2 -0
- data/lib/awsbase/right_awsbase.rb +156 -1
- data/lib/ec2/right_ec2.rb +1 -1
- data/lib/elb/elb_interface.rb +4 -32
- data/lib/rds/rds.rb +127 -0
- data/lib/sdb/right_sdb_interface.rb +1 -32
- data/test/rds/test_rds.rb +70 -0
- data/test/test_credentials.rb +0 -2
- metadata +14 -2
data/README.markdown
CHANGED
@@ -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
|
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
@@ -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
|
-
|
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 (%)
|
data/lib/ec2/right_ec2.rb
CHANGED
@@ -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
|
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
|
data/lib/elb/elb_interface.rb
CHANGED
@@ -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['
|
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
|
-
|
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
|
-
|
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
|
-
|
284
|
+
@xmlpath == 'DeregisterInstancesFromLoadBalancerResponse/DeregisterInstancesFromLoadBalancerResult/Instances')
|
313
285
|
)
|
314
286
|
@member = { }
|
315
287
|
end
|
data/lib/rds/rds.rb
ADDED
@@ -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
|
-
|
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
|
data/test/test_credentials.rb
CHANGED
@@ -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.
|
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-
|
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
|