amazon-ec2 0.4.8 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +7 -4
- data/README.rdoc +12 -12
- data/README_dev.rdoc +6 -0
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/amazon-ec2.gemspec +25 -18
- data/bin/ec2-gem-example.rb +3 -3
- data/bin/ec2-gem-profile.rb +2 -2
- data/bin/ec2sh +4 -4
- data/bin/setup.rb +4 -2
- data/lib/{EC2.rb → AWS.rb} +33 -67
- data/lib/AWS/EC2.rb +67 -0
- data/lib/AWS/EC2/availability_zones.rb +43 -0
- data/lib/AWS/EC2/console.rb +46 -0
- data/lib/AWS/EC2/elastic_ips.rb +154 -0
- data/lib/AWS/EC2/image_attributes.rb +168 -0
- data/lib/AWS/EC2/images.rb +136 -0
- data/lib/AWS/EC2/instances.rb +218 -0
- data/lib/AWS/EC2/keypairs.rb +96 -0
- data/lib/AWS/EC2/products.rb +45 -0
- data/lib/AWS/EC2/security_groups.rb +234 -0
- data/lib/AWS/EC2/snapshots.rb +96 -0
- data/lib/AWS/EC2/volumes.rb +172 -0
- data/lib/AWS/ELB.rb +67 -0
- data/lib/AWS/ELB/load_balancers.rb +198 -0
- data/lib/{EC2 → AWS}/exceptions.rb +21 -2
- data/lib/{EC2 → AWS}/responses.rb +4 -5
- data/perftools/ec2prof-results.txt +4 -4
- data/perftools/ec2prof.symbols +4 -4
- data/test/test_EC2.rb +14 -14
- data/test/test_EC2_availability_zones.rb +2 -2
- data/test/test_EC2_console.rb +5 -5
- data/test/test_EC2_elastic_ips.rb +13 -13
- data/test/test_EC2_image_attributes.rb +35 -35
- data/test/test_EC2_images.rb +7 -7
- data/test/test_EC2_instances.rb +35 -35
- data/test/test_EC2_keypairs.rb +10 -10
- data/test/test_EC2_products.rb +7 -7
- data/test/test_EC2_responses.rb +2 -2
- data/test/test_EC2_s3_xmlsimple.rb +2 -2
- data/test/test_EC2_security_groups.rb +13 -13
- data/test/test_EC2_snapshots.rb +2 -2
- data/test/test_EC2_volumes.rb +2 -2
- data/test/test_ELB_load_balancers.rb +239 -0
- data/test/test_helper.rb +1 -1
- metadata +24 -17
- data/lib/EC2/availability_zones.rb +0 -41
- data/lib/EC2/console.rb +0 -44
- data/lib/EC2/elastic_ips.rb +0 -153
- data/lib/EC2/image_attributes.rb +0 -166
- data/lib/EC2/images.rb +0 -134
- data/lib/EC2/instances.rb +0 -216
- data/lib/EC2/keypairs.rb +0 -94
- data/lib/EC2/products.rb +0 -43
- data/lib/EC2/security_groups.rb +0 -232
- data/lib/EC2/snapshots.rb +0 -94
- data/lib/EC2/volumes.rb +0 -170
data/lib/AWS/ELB.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
#--
|
2
|
+
# Amazon Web Services EC2 Query API Ruby library
|
3
|
+
#
|
4
|
+
# Ruby Gem Name:: amazon-ec2
|
5
|
+
# Author:: Glenn Rempe (mailto:glenn@rempe.us)
|
6
|
+
# Copyright:: Copyright (c) 2007-2008 Glenn Rempe
|
7
|
+
# License:: Distributes under the same terms as Ruby
|
8
|
+
# Home:: http://github.com/grempe/amazon-ec2/tree/master
|
9
|
+
#++
|
10
|
+
|
11
|
+
# Require any lib files that we have bundled with this Ruby Gem in the lib/EC2 directory.
|
12
|
+
# Parts of the EC2 module and Base class are broken out into separate
|
13
|
+
# files for maintainability and are organized by the functional groupings defined
|
14
|
+
# in the EC2 API developers guide.
|
15
|
+
Dir[File.join(File.dirname(__FILE__), 'ELB/**/*.rb')].sort.each { |lib| require lib }
|
16
|
+
|
17
|
+
module AWS
|
18
|
+
module ELB
|
19
|
+
|
20
|
+
# Which host FQDN will we connect to for all API calls to AWS?
|
21
|
+
# If ELB_URL is defined in the users ENV we can use that. It is
|
22
|
+
# expected that this var is set with something like:
|
23
|
+
# export ELB_URL='https://ec2.amazonaws.com'
|
24
|
+
#
|
25
|
+
if ENV['ELB_URL']
|
26
|
+
ELB_URL = ENV['ELB_URL']
|
27
|
+
VALID_HOSTS = ['elasticloadbalancing.amazonaws.com']
|
28
|
+
raise ArgumentError, "Invalid ELB_URL environment variable : #{ELB_URL}" unless VALID_HOSTS.include?(ELB_URL)
|
29
|
+
DEFAULT_HOST = URI.parse(ELB_URL).host
|
30
|
+
else
|
31
|
+
# default US host
|
32
|
+
DEFAULT_HOST = 'elasticloadbalancing.amazonaws.com'
|
33
|
+
end
|
34
|
+
|
35
|
+
# This is the version of the API as defined by Amazon Web Services
|
36
|
+
API_VERSION = '2009-05-15'
|
37
|
+
|
38
|
+
#Introduction:
|
39
|
+
#
|
40
|
+
# The library exposes one main interface class, 'AWS::ELB::Base'.
|
41
|
+
# This class provides all the methods for using the ELB service
|
42
|
+
# including the handling of header signing and other security issues .
|
43
|
+
# This class uses Net::HTTP to interface with the ELB Query API interface.
|
44
|
+
#
|
45
|
+
#Required Arguments:
|
46
|
+
#
|
47
|
+
# :access_key_id => String (default : "")
|
48
|
+
# :secret_access_key => String (default : "")
|
49
|
+
#
|
50
|
+
#Optional Arguments:
|
51
|
+
#
|
52
|
+
# :use_ssl => Boolean (default : true)
|
53
|
+
# :server => String (default : 'elasticloadbalancing.amazonaws.com')
|
54
|
+
# :proxy_server => String (default : nil)
|
55
|
+
#
|
56
|
+
class Base < AWS::Base
|
57
|
+
def api_version
|
58
|
+
API_VERSION
|
59
|
+
end
|
60
|
+
|
61
|
+
def default_host
|
62
|
+
DEFAULT_HOST
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,198 @@
|
|
1
|
+
module AWS
|
2
|
+
module ELB
|
3
|
+
class Base < AWS::Base
|
4
|
+
# Amazon Developer Guide Docs:
|
5
|
+
#
|
6
|
+
# This API creates a new LoadBalancer. Once the call has completed
|
7
|
+
# successfully, a new LoadBalancer will be created, but it will not be
|
8
|
+
# usable until at least one instance has been registered. When the
|
9
|
+
# LoadBalancer creation is completed, you can check whether it is usable
|
10
|
+
# by using the DescribeInstanceHealth API. The LoadBalancer is usable as
|
11
|
+
# soon as any registered instance is InService.
|
12
|
+
#
|
13
|
+
# Required Arguments:
|
14
|
+
#
|
15
|
+
# :load_balancer_name => String
|
16
|
+
# :availability_zones => Array
|
17
|
+
# :listeners => Array of Hashes (:protocol, :load_balancer_port, :instance_port)
|
18
|
+
# :availability_zones => Array of Strings
|
19
|
+
#
|
20
|
+
def create_load_balancer( options = {} )
|
21
|
+
raise ArgumentError, "No :availability_zones provided" if options[:availability_zones].nil? || options[:availability_zones].empty?
|
22
|
+
raise ArgumentError, "No :listeners provided" if options[:listeners].nil? || options[:listeners].empty?
|
23
|
+
raise ArgumentError, "No :load_balancer_name provided" if options[:load_balancer_name].nil? || options[:load_balancer_name].empty?
|
24
|
+
|
25
|
+
params = {}
|
26
|
+
|
27
|
+
params.merge!(pathlist('AvailabilityZones.member', [options[:availability_zones]].flatten))
|
28
|
+
params.merge!(pathhashlist('Listeners.member', [options[:listeners]].flatten, {
|
29
|
+
:protocol => 'Protocol',
|
30
|
+
:load_balancer_port => 'LoadBalancerPort',
|
31
|
+
:instance_port => 'InstancePort'
|
32
|
+
}))
|
33
|
+
params['LoadBalancerName'] = options[:load_balancer_name]
|
34
|
+
|
35
|
+
return response_generator(:action => "CreateLoadBalancer", :params => params)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Amazon Developer Guide Docs:
|
39
|
+
#
|
40
|
+
# This API deletes the specified LoadBalancer. On deletion, all of the
|
41
|
+
# configured properties of the LoadBalancer will be deleted. If you
|
42
|
+
# attempt to recreate the LoadBalancer, you need to reconfigure all the
|
43
|
+
# settings. The DNS name associated with a deleted LoadBalancer is no
|
44
|
+
# longer be usable. Once deleted, the name and associated DNS record of
|
45
|
+
# the LoadBalancer no longer exist and traffic sent to any of its IP
|
46
|
+
# addresses will no longer be delivered to your instances. You will not
|
47
|
+
# get the same DNS name even if you create a new LoadBalancer with same
|
48
|
+
# LoadBalancerName.
|
49
|
+
#
|
50
|
+
# Required Arguments:
|
51
|
+
#
|
52
|
+
# :load_balancer_name => String
|
53
|
+
#
|
54
|
+
def delete_load_balancer( options = {} )
|
55
|
+
raise ArgumentError, "No :load_balancer_name provided" if options[:load_balancer_name].nil? || options[:load_balancer_name].empty?
|
56
|
+
|
57
|
+
params = { 'LoadBalancerName' => options[:load_balancer_name] }
|
58
|
+
|
59
|
+
return response_generator(:action => "DeleteLoadBalancer", :params => params)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Amazon Developer Guide Docs:
|
63
|
+
#
|
64
|
+
# This API returns detailed configuration information for the specified
|
65
|
+
# LoadBalancers, or if no LoadBalancers are specified, then the API
|
66
|
+
# returns configuration information for all LoadBalancers created by the
|
67
|
+
# caller. For more information, please see LoadBalancer.
|
68
|
+
#
|
69
|
+
# You must have created the specified input LoadBalancers in order to
|
70
|
+
# retrieve this information. In other words, in order to successfully call
|
71
|
+
# this API, you must provide the same account credentials as those that
|
72
|
+
# were used to create the LoadBalancer.
|
73
|
+
#
|
74
|
+
# Optional Arguments:
|
75
|
+
#
|
76
|
+
# :load_balancer_names => String
|
77
|
+
#
|
78
|
+
def describe_load_balancers( options = {} )
|
79
|
+
options = { :load_balancer_names => [] }.merge(options)
|
80
|
+
|
81
|
+
params = pathlist("LoadBalancerName.member", options[:load_balancer_names])
|
82
|
+
|
83
|
+
return response_generator(:action => "DescribeLoadBalancers", :params => params)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Amazon Developer Guide Docs:
|
87
|
+
#
|
88
|
+
# This API adds new instances to the LoadBalancer.
|
89
|
+
#
|
90
|
+
# Once the instance is registered, it starts receiving traffic and
|
91
|
+
# requests from the LoadBalancer. Any instance that is not in any of the
|
92
|
+
# Availability Zones registered for the LoadBalancer will be moved to
|
93
|
+
# the OutOfService state. It will move to the InService state when the
|
94
|
+
# Availability Zone is added to the LoadBalancer.
|
95
|
+
#
|
96
|
+
# You must have been the one who created the LoadBalancer. In other
|
97
|
+
# words, in order to successfully call this API, you must provide the
|
98
|
+
# same account credentials as those that were used to create the
|
99
|
+
# LoadBalancer.
|
100
|
+
#
|
101
|
+
# NOTE: Completion of this API does not guarantee that operation has
|
102
|
+
# completed. Rather, it means that the request has been registered and
|
103
|
+
# the changes will happen shortly.
|
104
|
+
#
|
105
|
+
# Required Arguments:
|
106
|
+
#
|
107
|
+
# :instances => Array of Strings
|
108
|
+
# :load_balancer_name => String
|
109
|
+
#
|
110
|
+
def register_instances_with_load_balancer( options = {} )
|
111
|
+
raise ArgumentError, "No :instances provided" if options[:instances].nil? || options[:instances].empty?
|
112
|
+
raise ArgumentError, "No :load_balancer_name provided" if options[:load_balancer_name].nil? || options[:load_balancer_name].empty?
|
113
|
+
|
114
|
+
params = {}
|
115
|
+
|
116
|
+
params.merge!(pathlist('Instances.member', [options[:instances]].flatten))
|
117
|
+
params['LoadBalancerName'] = options[:load_balancer_name]
|
118
|
+
|
119
|
+
return response_generator(:action => "RegisterInstancesWithLoadBalancer", :params => params)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Amazon Developer Guide Docs:
|
123
|
+
#
|
124
|
+
# This API deregisters instances from the LoadBalancer. Trying to
|
125
|
+
# deregister an instance that is not registered with the LoadBalancer
|
126
|
+
# does nothing.
|
127
|
+
#
|
128
|
+
# In order to successfully call this API, you must provide the same
|
129
|
+
# account credentials as those that were used to create the
|
130
|
+
# LoadBalancer.
|
131
|
+
#
|
132
|
+
# Once the instance is deregistered, it will stop receiving traffic from
|
133
|
+
# the LoadBalancer.
|
134
|
+
#
|
135
|
+
# Required Arguments:
|
136
|
+
#
|
137
|
+
# :instances => Array of Strings
|
138
|
+
# :load_balancer_name => String
|
139
|
+
#
|
140
|
+
def deregister_instances_from_load_balancer( options = {} )
|
141
|
+
raise ArgumentError, "No :instances provided" if options[:instances].nil? || options[:instances].empty?
|
142
|
+
raise ArgumentError, "No :load_balancer_name provided" if options[:load_balancer_name].nil? || options[:load_balancer_name].empty?
|
143
|
+
|
144
|
+
params = {}
|
145
|
+
|
146
|
+
params.merge!(pathlist('Instances.member', [options[:instances]].flatten))
|
147
|
+
params['LoadBalancerName'] = options[:load_balancer_name]
|
148
|
+
|
149
|
+
return response_generator(:action => "DeregisterInstancesFromLoadBalancer", :params => params)
|
150
|
+
end
|
151
|
+
|
152
|
+
# Amazon Developer Guide Docs:
|
153
|
+
#
|
154
|
+
# This API enables you to define an application healthcheck for the
|
155
|
+
# instances.
|
156
|
+
#
|
157
|
+
# Note: Completion of this API does not guarantee that operation has completed. Rather, it means that the request has been registered and the changes will happen shortly.
|
158
|
+
#
|
159
|
+
# Required Arguments
|
160
|
+
#
|
161
|
+
# :health_check => Hash (:timeout, :interval, :unhealthy_threshold, :healthy_threshold)
|
162
|
+
# :load_balancer_name => String
|
163
|
+
#
|
164
|
+
def configure_health_check( options = {} )
|
165
|
+
raise ArgumentError, "No :health_check provided" if options[:health_check].nil? || options[:health_check].empty?
|
166
|
+
raise ArgumentError, "No :health_check => :target provided" if options[:health_check][:target].nil? || options[:health_check][:target].empty?
|
167
|
+
raise ArgumentError, "No :health_check => :timeout provided" if options[:health_check][:timeout].nil? || options[:health_check][:timeout].empty?
|
168
|
+
raise ArgumentError, "No :health_check => :interval provided" if options[:health_check][:interval].nil? || options[:health_check][:interval].empty?
|
169
|
+
raise ArgumentError, "No :health_check => :unhealthy_threshold provided" if options[:health_check][:unhealthy_threshold].nil? || options[:health_check][:unhealthy_threshold].empty?
|
170
|
+
raise ArgumentError, "No :health_check => :healthy_threshold provided" if options[:health_check][:healthy_threshold].nil? || options[:health_check][:healthy_threshold].empty?
|
171
|
+
raise ArgumentError, "No :load_balancer_name provided" if options[:load_balancer_name].nil? || options[:load_balancer_name].empty?
|
172
|
+
|
173
|
+
params = {}
|
174
|
+
|
175
|
+
params['LoadBalancerName'] = options[:load_balancer_name]
|
176
|
+
params['HealthCheck.Target'] = options[:health_check][:target]
|
177
|
+
params['HealthCheck.Timeout'] = options[:health_check][:timeout]
|
178
|
+
params['HealthCheck.Interval'] = options[:health_check][:interval]
|
179
|
+
params['HealthCheck.UnhealthyThreshold'] = options[:health_check][:unhealthy_threshold]
|
180
|
+
params['HealthCheck.HealthyThreshold'] = options[:health_check][:healthy_threshold]
|
181
|
+
|
182
|
+
return response_generator(:action => "ConfigureHealthCheck", :params => params)
|
183
|
+
end
|
184
|
+
|
185
|
+
def describe_intance_health( options = {} )
|
186
|
+
raise "Not yet implemented"
|
187
|
+
end
|
188
|
+
|
189
|
+
def disable_availability_zones_for_load_balancer( options = {} )
|
190
|
+
raise "Not yet implemented"
|
191
|
+
end
|
192
|
+
|
193
|
+
def enable_availability_zones_for_load_balancer( options = {} )
|
194
|
+
raise "Not yet implemented"
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
@@ -8,8 +8,7 @@
|
|
8
8
|
# Home:: http://github.com/grempe/amazon-ec2/tree/master
|
9
9
|
#++
|
10
10
|
|
11
|
-
module
|
12
|
-
|
11
|
+
module AWS
|
13
12
|
# OUR CUSTOM ERROR CODES
|
14
13
|
|
15
14
|
# All of our errors are superclassed by Error < RuntimeError
|
@@ -127,6 +126,26 @@ module EC2
|
|
127
126
|
class InvalidAMIAttributeItemValue < Error #:nodoc:
|
128
127
|
end
|
129
128
|
|
129
|
+
# ELB ERRORS
|
130
|
+
|
131
|
+
class LoadBalancerNotFound < Error #:nodoc:
|
132
|
+
end
|
133
|
+
|
134
|
+
class ValidationError < Error #:nodoc:
|
135
|
+
end
|
136
|
+
|
137
|
+
class DuplicateLoadBalancerName < Error #:nodoc:
|
138
|
+
end
|
139
|
+
|
140
|
+
class TooManyLoadBalancers < Error #:nodoc:
|
141
|
+
end
|
142
|
+
|
143
|
+
class InvalidInstance < Error #:nodoc:
|
144
|
+
end
|
145
|
+
|
146
|
+
class InvalidConfigurationRequest < Error #:nodoc:
|
147
|
+
end
|
148
|
+
|
130
149
|
# AWS EC2 SERVER ERROR CODES
|
131
150
|
|
132
151
|
# Internal AWS EC2 Error.
|
@@ -19,9 +19,9 @@ class Hash
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
module
|
22
|
+
module AWS
|
23
23
|
|
24
|
-
# The make_request() and
|
24
|
+
# The make_request() and aws_error? methods, which are shared by all, will raise any
|
25
25
|
# exceptions encountered along the way as it converses with EC2.
|
26
26
|
#
|
27
27
|
# Exception Handling: If for some reason an error occurrs when executing a method
|
@@ -45,13 +45,12 @@ module EC2
|
|
45
45
|
def self.parse(options = {})
|
46
46
|
options = {
|
47
47
|
:xml => "",
|
48
|
-
:parse_options => { 'forcearray' => ['item'], 'suppressempty' => nil, 'keeproot' => false }
|
48
|
+
:parse_options => { 'forcearray' => ['item', 'member'], 'suppressempty' => nil, 'keeproot' => false }
|
49
49
|
}.merge(options)
|
50
50
|
|
51
51
|
# NOTE: Parsing the response as a nested set of Response objects was extremely
|
52
52
|
# memory intensive and appeared to leak (the memory was not freed on subsequent requests).
|
53
53
|
# It was changed to return the raw XmlSimple response.
|
54
|
-
|
55
54
|
response = XmlSimple.xml_in(options[:xml], options[:parse_options])
|
56
55
|
|
57
56
|
return response
|
@@ -59,4 +58,4 @@ module EC2
|
|
59
58
|
|
60
59
|
end # class Response
|
61
60
|
|
62
|
-
end # module
|
61
|
+
end # module AWS
|
@@ -99,7 +99,7 @@ Total: 2178 samples
|
|
99
99
|
0 0.0% 99.6% 32 1.5% Net::HTTPResponse#read_chunked
|
100
100
|
0 0.0% 99.6% 12 0.6% REXML::Parsers::XPathParser#LocationPath
|
101
101
|
0 0.0% 99.6% 152 7.0% Array#map
|
102
|
-
0 0.0% 99.6% 945 43.4% EC2::Base#response_generator
|
102
|
+
0 0.0% 99.6% 945 43.4% AWS::EC2::Base#response_generator
|
103
103
|
0 0.0% 99.6% 1 0.0% Net::HTTPResponse.read_status_line
|
104
104
|
0 0.0% 99.6% 34 1.6% Net::HTTP#request
|
105
105
|
0 0.0% 99.6% 275 12.6% Array#each
|
@@ -109,7 +109,7 @@ Total: 2178 samples
|
|
109
109
|
0 0.0% 99.6% 32 1.5% Net::HTTPResponse#reading_body
|
110
110
|
0 0.0% 99.6% 1 0.0% Net::HTTPResponse.each_response_header
|
111
111
|
0 0.0% 99.6% 801 36.8% REXML::Document#build
|
112
|
-
0 0.0% 99.6% 34 1.6% EC2::Base#make_request
|
112
|
+
0 0.0% 99.6% 34 1.6% AWS::EC2::Base#make_request
|
113
113
|
0 0.0% 99.6% 32 1.5% Net::HTTPResponse#body
|
114
114
|
0 0.0% 99.6% 32 1.5% Array#delete_if
|
115
115
|
0 0.0% 99.6% 1 0.0% REXML::XPathParser#namespaces=
|
@@ -117,8 +117,8 @@ Total: 2178 samples
|
|
117
117
|
0 0.0% 99.6% 1113 51.1% XmlSimple#xml_in
|
118
118
|
0 0.0% 99.6% 27 1.2% Object#timeout
|
119
119
|
0 0.0% 99.6% 801 36.8% XmlSimple#parse
|
120
|
-
0 0.0% 99.6% 918 42.1% EC2::Base#describe_images
|
121
|
-
0 0.0% 99.6% 934 42.9%
|
120
|
+
0 0.0% 99.6% 918 42.1% AWS::EC2::Base#describe_images
|
121
|
+
0 0.0% 99.6% 934 42.9% AWS::Response.parse
|
122
122
|
0 0.0% 99.6% 801 36.8% REXML::Document#initialize
|
123
123
|
0 0.0% 99.6% 22 1.0% Array#join
|
124
124
|
0 0.0% 99.6% 1 0.0% Net::BufferedIO#readline
|
data/perftools/ec2prof.symbols
CHANGED
@@ -7,9 +7,9 @@
|
|
7
7
|
01222665: REXML::Element#each_element
|
8
8
|
011249a9: XmlSimple#xml_in
|
9
9
|
0223eb95: XmlSimple.xml_in
|
10
|
-
022884f1:
|
11
|
-
011ba34d: EC2::Base#response_generator
|
12
|
-
011ba17d: EC2::Base#describe_images
|
10
|
+
022884f1: AWS::Response.parse
|
11
|
+
011ba34d: AWS::EC2::Base#response_generator
|
12
|
+
011ba17d: AWS::EC2::Base#describe_images
|
13
13
|
01124af1: XmlSimple#get_attributes
|
14
14
|
012219b1: REXML::Attributes#each_attribute
|
15
15
|
01219c51: REXML::Attributes#each
|
@@ -48,7 +48,7 @@
|
|
48
48
|
025a912d: Net::HTTPResponse.each_response_header
|
49
49
|
025a8bfd: Net::HTTPResponse.read_new
|
50
50
|
012d8c71: Net::HTTP#request
|
51
|
-
011ba2e5: EC2::Base#make_request
|
51
|
+
011ba2e5: AWS::EC2::Base#make_request
|
52
52
|
012d4611: Net::HTTP#start
|
53
53
|
005067ad: Net::BufferedIO#read
|
54
54
|
012d87bd: Net::HTTPResponse#read_chunked
|
data/test/test_EC2.rb
CHANGED
@@ -12,11 +12,11 @@ require File.dirname(__FILE__) + '/test_helper.rb'
|
|
12
12
|
|
13
13
|
context "The EC2 method " do
|
14
14
|
|
15
|
-
|
15
|
+
before do
|
16
16
|
end
|
17
17
|
|
18
|
-
specify "EC2::Base attribute readers should be available" do
|
19
|
-
@ec2 = EC2::Base.new( :access_key_id => "not a key",
|
18
|
+
specify "AWS::EC2::Base attribute readers should be available" do
|
19
|
+
@ec2 = AWS::EC2::Base.new( :access_key_id => "not a key",
|
20
20
|
:secret_access_key => "not a secret",
|
21
21
|
:use_ssl => true,
|
22
22
|
:server => "foo.example.com" )
|
@@ -26,8 +26,8 @@ context "The EC2 method " do
|
|
26
26
|
@ec2.server.should.equal "foo.example.com"
|
27
27
|
end
|
28
28
|
|
29
|
-
specify "EC2::Base should work with insecure connections as well" do
|
30
|
-
@ec2 = EC2::Base.new( :access_key_id => "not a key",
|
29
|
+
specify "AWS::EC2::Base should work with insecure connections as well" do
|
30
|
+
@ec2 = AWS::EC2::Base.new( :access_key_id => "not a key",
|
31
31
|
:secret_access_key => "not a secret",
|
32
32
|
:use_ssl => false,
|
33
33
|
:server => "foo.example.com" )
|
@@ -37,8 +37,8 @@ context "The EC2 method " do
|
|
37
37
|
@ec2.server.should.equal "foo.example.com"
|
38
38
|
end
|
39
39
|
|
40
|
-
specify "EC2::Base should allow specification of port" do
|
41
|
-
@ec2 = EC2::Base.new( :access_key_id => "not a key",
|
40
|
+
specify "AWS::EC2::Base should allow specification of port" do
|
41
|
+
@ec2 = AWS::EC2::Base.new( :access_key_id => "not a key",
|
42
42
|
:secret_access_key => "not a secret",
|
43
43
|
:use_ssl => true,
|
44
44
|
:server => "foo.example.com",
|
@@ -49,20 +49,20 @@ context "The EC2 method " do
|
|
49
49
|
@ec2.server.should.equal "foo.example.com"
|
50
50
|
end
|
51
51
|
|
52
|
-
specify "
|
52
|
+
specify "AWS.canonical_string(path) should conform to Amazon's requirements " do
|
53
53
|
path = {"name1" => "value1", "name2" => "value2", "name3" => "value3"}
|
54
54
|
if ENV['EC2_URL'].nil? || ENV['EC2_URL'] == 'https://ec2.amazonaws.com'
|
55
|
-
|
55
|
+
AWS.canonical_string(path, 'ec2.amazonaws.com').should.equal "POST\nec2.amazonaws.com\n/\nname1=value1&name2=value2&name3=value3"
|
56
56
|
elsif ENV['EC2_URL'] == 'https://us-east-1.ec2.amazonaws.com'
|
57
|
-
|
57
|
+
AWS.canonical_string(path, 'ec2.amazonaws.com').should.equal "POST\nus-east-1.ec2.amazonaws.com\n/\nname1=value1&name2=value2&name3=value3"
|
58
58
|
elsif ENV['EC2_URL'] == 'https://eu-west-1.ec2.amazonaws.com'
|
59
|
-
|
59
|
+
AWS.canonical_string(path, 'ec2.amazonaws.com').should.equal "POST\neu-west-1.ec2.amazonaws.com\n/\nname1=value1&name2=value2&name3=value3"
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
specify "
|
64
|
-
|
65
|
-
|
63
|
+
specify "AWS.encode should return the expected string" do
|
64
|
+
AWS.encode("secretaccesskey", "foobar123", urlencode=true).should.equal "e3jeuDc3DIX2mW8cVqWiByj4j5g%3D"
|
65
|
+
AWS.encode("secretaccesskey", "foobar123", urlencode=false).should.equal "e3jeuDc3DIX2mW8cVqWiByj4j5g="
|
66
66
|
end
|
67
67
|
|
68
68
|
end
|