aws-sdk 1.0.1 → 1.0.2
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/lib/aws/base_client.rb +11 -8
- data/lib/aws/cacheable.rb +2 -3
- data/lib/aws/common.rb +7 -1
- data/lib/aws/configuration.rb +8 -0
- data/lib/aws/default_signer.rb +17 -2
- data/lib/aws/ec2/client.rb +17 -15
- data/lib/aws/ec2/image.rb +27 -0
- data/lib/aws/ec2/resource.rb +5 -5
- data/lib/aws/http/curb_handler.rb +5 -1
- data/lib/aws/http/httparty_handler.rb +37 -3
- data/lib/aws/http/request.rb +4 -1
- data/lib/aws/http/request_param.rb +8 -1
- data/lib/aws/http/response.rb +3 -6
- data/lib/aws/naming.rb +0 -1
- data/lib/aws/policy.rb +1 -1
- data/lib/aws/rails.rb +24 -18
- data/lib/aws/record/base.rb +40 -0
- data/lib/aws/record/finder_methods.rb +17 -71
- data/lib/aws/record/optimistic_locking.rb +34 -0
- data/lib/aws/record/scope.rb +156 -16
- data/lib/aws/record/scopes.rb +55 -0
- data/lib/aws/s3/bucket_collection.rb +13 -0
- data/lib/aws/s3/client.rb +35 -0
- data/lib/aws/s3/data_options.rb +1 -1
- data/lib/aws/s3/policy.rb +1 -1
- data/lib/aws/s3/request.rb +9 -11
- data/lib/aws/s3/s3_object.rb +5 -4
- data/lib/aws/sns.rb +1 -4
- data/lib/aws/sns/policy.rb +1 -1
- data/lib/aws/sqs/policy.rb +1 -1
- metadata +13 -12
- data/lib/aws/http/builtin_handler.rb +0 -69
data/lib/aws/base_client.rb
CHANGED
@@ -70,10 +70,11 @@ module AWS
|
|
70
70
|
options[:"#{self.class.service_ruby_name}_endpoint"] =
|
71
71
|
options.delete(:endpoint)
|
72
72
|
end
|
73
|
-
|
74
|
-
|
73
|
+
|
74
|
+
options_without_config = options.dup
|
75
|
+
@config = options_without_config.delete(:config)
|
75
76
|
@config ||= AWS.config
|
76
|
-
@config = @config.with(
|
77
|
+
@config = @config.with(options_without_config)
|
77
78
|
@signer = @config.signer
|
78
79
|
@http_handler = @config.http_handler
|
79
80
|
@stubs = {}
|
@@ -155,8 +156,8 @@ module AWS
|
|
155
156
|
def new_request
|
156
157
|
req = self.class::REQUEST_CLASS.new
|
157
158
|
req.http_method = 'POST'
|
158
|
-
req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
159
|
-
req.add_param 'Timestamp', Time.now.utc.strftime('%Y-%m-%dT%
|
159
|
+
req.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
|
160
|
+
req.add_param 'Timestamp', Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
|
160
161
|
req.add_param 'Version', self.class::API_VERSION
|
161
162
|
req
|
162
163
|
end
|
@@ -221,8 +222,7 @@ module AWS
|
|
221
222
|
private
|
222
223
|
def make_async_request response
|
223
224
|
|
224
|
-
pauses = async_request_with_retries(response,
|
225
|
-
response.http_request)
|
225
|
+
pauses = async_request_with_retries(response, response.http_request)
|
226
226
|
|
227
227
|
response
|
228
228
|
|
@@ -378,12 +378,15 @@ module AWS
|
|
378
378
|
opts = options.dup
|
379
379
|
opts.delete(:async)
|
380
380
|
|
381
|
-
# configure the http request
|
382
381
|
http_request = new_request
|
382
|
+
|
383
|
+
# configure the http request
|
383
384
|
http_request.host = endpoint
|
385
|
+
http_request.proxy_uri = config.proxy_uri
|
384
386
|
http_request.use_ssl = config.use_ssl?
|
385
387
|
http_request.ssl_verify_peer = config.ssl_verify_peer?
|
386
388
|
http_request.ssl_ca_file = config.ssl_ca_file
|
389
|
+
|
387
390
|
send("configure_#{name}_request", http_request, opts, &block)
|
388
391
|
http_request.headers["user-agent"] = user_agent_string
|
389
392
|
http_request.add_authorization!(signer)
|
data/lib/aws/cacheable.rb
CHANGED
data/lib/aws/common.rb
CHANGED
@@ -41,7 +41,7 @@ module AWS
|
|
41
41
|
# sqs.config.max_retries #=> 2
|
42
42
|
#
|
43
43
|
# If you want to change a configuration value for a single instance you
|
44
|
-
# pass the new configuration value to that
|
44
|
+
# pass the new configuration value to that object's initializer:
|
45
45
|
#
|
46
46
|
# AWS::SQS.new(:max_retries => 0)
|
47
47
|
#
|
@@ -65,6 +65,12 @@ module AWS
|
|
65
65
|
# messages generated by service requets. A logger needs to respond to
|
66
66
|
# #log and must accept a severity (e.g. :info, :error, etc) and
|
67
67
|
# a string message.
|
68
|
+
# @option options [String, URI, nil] :proxy_uri (nil) The URI of the proxy
|
69
|
+
# to send service requests through. You can pass a URI object or a
|
70
|
+
# URI string:
|
71
|
+
#
|
72
|
+
# AWS.config(:proxy_uri => 'https://user:password@my.proxy:443/path?query')
|
73
|
+
#
|
68
74
|
# @option options [String] :s3_endpoint ('s3.amazonaws.com') The
|
69
75
|
# service endpoint to use when communicating with Amazon S3.
|
70
76
|
# @option [Integer] :s3_multipart_threshold (16777216) When uploading
|
data/lib/aws/configuration.rb
CHANGED
@@ -14,6 +14,7 @@
|
|
14
14
|
require 'aws/default_signer'
|
15
15
|
require 'aws/http/httparty_handler'
|
16
16
|
require 'set'
|
17
|
+
require 'uri'
|
17
18
|
|
18
19
|
module AWS
|
19
20
|
|
@@ -81,6 +82,7 @@ module AWS
|
|
81
82
|
:sns_endpoint => 'sns.us-east-1.amazonaws.com',
|
82
83
|
:sqs_endpoint => 'sqs.us-east-1.amazonaws.com',
|
83
84
|
:stub_requests => false,
|
85
|
+
:proxy_uri => nil,
|
84
86
|
:use_ssl => true,
|
85
87
|
:user_agent_prefix => nil,
|
86
88
|
:ssl_verify_peer => true,
|
@@ -259,6 +261,12 @@ module AWS
|
|
259
261
|
@options[:ssl_ca_file]
|
260
262
|
end
|
261
263
|
|
264
|
+
# @return [URI::HTTP, URI::HTTPS, nil] Returns the URI for the configured
|
265
|
+
# proxy if there is one. Defaults to nil.
|
266
|
+
def proxy_uri
|
267
|
+
@options[:proxy_uri] ? URI.parse(@options[:proxy_uri].to_s) : nil
|
268
|
+
end
|
269
|
+
|
262
270
|
# @private
|
263
271
|
def inspect
|
264
272
|
"<#{self.class}>"
|
data/lib/aws/default_signer.rb
CHANGED
@@ -16,16 +16,31 @@ require 'openssl'
|
|
16
16
|
|
17
17
|
module AWS
|
18
18
|
|
19
|
-
#
|
19
|
+
# Computes signatures using credentials that are stored in memory.
|
20
20
|
class DefaultSigner
|
21
21
|
|
22
|
-
|
22
|
+
# @return [String] The Access Key ID used to sign requests.
|
23
|
+
attr_reader :access_key_id
|
23
24
|
|
25
|
+
# @return [String] The Secret Access Key used to sign requests.
|
26
|
+
attr_reader :secret_access_key
|
27
|
+
|
28
|
+
# @param [String] access_key_id The Access Key ID used to sign
|
29
|
+
# requests.
|
30
|
+
#
|
31
|
+
# @param [String] secret_access_key The Secret Access Key used to
|
32
|
+
# sign requests.
|
24
33
|
def initialize(access_key_id, secret_access_key)
|
25
34
|
@access_key_id = access_key_id
|
26
35
|
@secret_access_key = secret_access_key
|
27
36
|
end
|
28
37
|
|
38
|
+
# Signs a string using the credentials stored in memory.
|
39
|
+
#
|
40
|
+
# @param [String] string_to_sign The string to sign.
|
41
|
+
#
|
42
|
+
# @param [String] digest_method The digest method to use when
|
43
|
+
# computing the HMAC digest.
|
29
44
|
def sign(string_to_sign, digest_method = 'sha256')
|
30
45
|
Base64.encode64(
|
31
46
|
OpenSSL::HMAC.digest(
|
data/lib/aws/ec2/client.rb
CHANGED
@@ -31,21 +31,23 @@ module AWS
|
|
31
31
|
REQUEST_CLASS = EC2::Request
|
32
32
|
|
33
33
|
# @private
|
34
|
-
CACHEABLE_REQUESTS = Set[
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
34
|
+
CACHEABLE_REQUESTS = Set[
|
35
|
+
:describe_instances,
|
36
|
+
:describe_instance_attribute,
|
37
|
+
:describe_images,
|
38
|
+
:describe_image_attribute,
|
39
|
+
:describe_volumes,
|
40
|
+
:describe_security_groups,
|
41
|
+
:describe_addresses,
|
42
|
+
:describe_key_pairs,
|
43
|
+
:describe_regions,
|
44
|
+
:describe_availability_zones,
|
45
|
+
:describe_reserved_instances,
|
46
|
+
:describe_reserved_instances_offerings,
|
47
|
+
:describe_snapshots,
|
48
|
+
:describe_snapshot_attribute,
|
49
|
+
:describe_tags
|
50
|
+
]
|
49
51
|
|
50
52
|
configure_client
|
51
53
|
|
data/lib/aws/ec2/image.rb
CHANGED
@@ -94,6 +94,9 @@ module AWS
|
|
94
94
|
# [delete_on_termination] True if the Amazon EBS volume is
|
95
95
|
# deleted on instance termination.
|
96
96
|
#
|
97
|
+
# @attr_reader [Array<String>] product_codes Returns an array of
|
98
|
+
# product codes attached to this instance.
|
99
|
+
#
|
97
100
|
# @attr_reader [Symbol] virtualization_type The type of
|
98
101
|
# virtualization of the AMI. Possible values:
|
99
102
|
#
|
@@ -229,6 +232,30 @@ module AWS
|
|
229
232
|
end
|
230
233
|
end
|
231
234
|
|
235
|
+
describe_call_attribute :product_codes, :memoize => true do
|
236
|
+
translate_output do |list|
|
237
|
+
(list || []).collect{|item| item.product_code }
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
# Adds one or more product codes:
|
242
|
+
#
|
243
|
+
# image.add_product_codes 'ABCXYZ', 'MNOPQR'
|
244
|
+
#
|
245
|
+
# You can also pass an array of product codes:
|
246
|
+
#
|
247
|
+
# image.add_product_codes ['ABCXYZ', 'MNOPQR']
|
248
|
+
#
|
249
|
+
# @param [Array<String>] product_codes
|
250
|
+
# @return [nil]
|
251
|
+
def add_product_codes *product_codes
|
252
|
+
opts = {}
|
253
|
+
opts[:image_id] = self.id
|
254
|
+
opts[:product_codes] = product_codes.flatten
|
255
|
+
client.modify_image_attribute(opts)
|
256
|
+
nil
|
257
|
+
end
|
258
|
+
|
232
259
|
# @private
|
233
260
|
def __permissions_attribute__
|
234
261
|
"launchPermission"
|
data/lib/aws/ec2/resource.rb
CHANGED
@@ -26,11 +26,9 @@ module AWS
|
|
26
26
|
def initialize(*args)
|
27
27
|
super
|
28
28
|
@memoized_attributes = {}
|
29
|
-
if options = args.last and
|
30
|
-
options.kind_of?(Hash)
|
29
|
+
if options = args.last and options.kind_of?(Hash)
|
31
30
|
self.class.memoized_attributes.each do |att|
|
32
|
-
@memoized_attributes[att] = options[att] if
|
33
|
-
options.key?(att)
|
31
|
+
@memoized_attributes[att] = options[att] if options.key?(att)
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
@@ -311,10 +309,12 @@ module AWS
|
|
311
309
|
request_name = Inflection.class_name(name.to_s)
|
312
310
|
request_name = request_name[0,1].downcase + request_name[1..-1]
|
313
311
|
|
314
|
-
# define
|
312
|
+
# define getter
|
315
313
|
define_method(getter) do
|
316
314
|
retrieve_attribute(getter) { describe_attribute_call(request_name) }
|
317
315
|
end
|
316
|
+
|
317
|
+
# define setter
|
318
318
|
define_method(setter) do |input_value|
|
319
319
|
set_mutable_attribute(name, input_value)
|
320
320
|
end unless opts[:setter] == false
|
@@ -85,11 +85,15 @@ module AWS
|
|
85
85
|
url = request.use_ssl? ?
|
86
86
|
"https://#{request.host}:443#{request.uri}" :
|
87
87
|
"http://#{request.host}#{request.uri}"
|
88
|
-
puts url
|
89
88
|
|
90
89
|
curl = Curl::Easy.new(url)
|
91
90
|
curl.headers = request.headers
|
92
91
|
|
92
|
+
if proxy = request.proxy_uri
|
93
|
+
curl.proxy_url = proxy.to_s
|
94
|
+
curl.proxy_port = proxy.port
|
95
|
+
end
|
96
|
+
|
93
97
|
curl.on_header {|header_data|
|
94
98
|
name, value = header_data.strip.split(/:\s+/, 2)
|
95
99
|
response.headers[name] = value
|
@@ -16,9 +16,38 @@ require 'httparty'
|
|
16
16
|
module AWS
|
17
17
|
module Http
|
18
18
|
|
19
|
-
#
|
19
|
+
# Makes HTTP requests using HTTParty. This is the default
|
20
|
+
# handler, so you don't need to do anything special to configure
|
21
|
+
# it. However, you can directly instantiate this class in order
|
22
|
+
# to send extra options to HTTParty, for example to enable an HTTP
|
23
|
+
# proxy:
|
24
|
+
#
|
25
|
+
# AWS.config(
|
26
|
+
# :http_handler => AWS::Http::HTTPartyHandler.new(
|
27
|
+
# :http_proxyaddr => "http://myproxy.com",
|
28
|
+
# :http_proxyport => 80
|
29
|
+
# )
|
30
|
+
# )
|
31
|
+
#
|
20
32
|
class HTTPartyHandler
|
21
33
|
|
34
|
+
# @return [Hash] The default options to send to HTTParty on each
|
35
|
+
# request.
|
36
|
+
attr_reader :default_request_options
|
37
|
+
|
38
|
+
# Constructs a new HTTP handler using HTTParty.
|
39
|
+
#
|
40
|
+
# @param [Hash] options Default options to send to HTTParty on
|
41
|
+
# each request. These options will be sent to +get+, +post+,
|
42
|
+
# +head+, +put+, or +delete+ when a request is made. Note
|
43
|
+
# that +:body+, +:headers+, +:parser+, and +:ssl_ca_file+ are
|
44
|
+
# ignored. If you need to set the CA file, you should use the
|
45
|
+
# +:ssl_ca_file+ option to {AWS.config} or
|
46
|
+
# {AWS::Configuration} instead.
|
47
|
+
def initialize options = {}
|
48
|
+
@default_request_options = options
|
49
|
+
end
|
50
|
+
|
22
51
|
include HTTParty
|
23
52
|
|
24
53
|
class NoOpParser < HTTParty::Parser
|
@@ -27,10 +56,15 @@ module AWS
|
|
27
56
|
|
28
57
|
def handle(request, response)
|
29
58
|
|
30
|
-
opts = {
|
59
|
+
opts = default_request_options.merge({
|
31
60
|
:body => request.body,
|
32
61
|
:parser => NoOpParser
|
33
|
-
}
|
62
|
+
})
|
63
|
+
|
64
|
+
if request.proxy_uri
|
65
|
+
opts[:http_proxyaddr] = request.proxy_uri.to_s
|
66
|
+
opts[:http_proxyport] = request.proxy_uri.port
|
67
|
+
end
|
34
68
|
|
35
69
|
if request.use_ssl?
|
36
70
|
url = "https://#{request.host}:443#{request.uri}"
|
data/lib/aws/http/request.rb
CHANGED
@@ -18,7 +18,6 @@ module AWS
|
|
18
18
|
module Http
|
19
19
|
|
20
20
|
# Base class for all service reqeusts.
|
21
|
-
# @private
|
22
21
|
class Request
|
23
22
|
|
24
23
|
# Returns a new empty http request object.
|
@@ -51,6 +50,10 @@ module AWS
|
|
51
50
|
# request
|
52
51
|
attr_accessor :access_key_id
|
53
52
|
|
53
|
+
# @return [nil, URI] The URI to the proxy server requests are
|
54
|
+
# sent through if configured. Returns nil if there is no proxy.
|
55
|
+
attr_accessor :proxy_uri
|
56
|
+
|
54
57
|
# @param [Boolean] ssl If the request should be sent over ssl or not.
|
55
58
|
def use_ssl= use_ssl
|
56
59
|
@use_ssl = use_ssl
|
@@ -17,6 +17,10 @@ module AWS
|
|
17
17
|
module Http
|
18
18
|
class Request
|
19
19
|
|
20
|
+
# Represents a single request paramater. Some services accept this
|
21
|
+
# in a form encoded body string, others as query parameters.
|
22
|
+
# It is up to each service's Request class to determine how to
|
23
|
+
# consume these params.
|
20
24
|
# @private
|
21
25
|
class Param
|
22
26
|
|
@@ -52,10 +56,13 @@ module AWS
|
|
52
56
|
end
|
53
57
|
end
|
54
58
|
|
59
|
+
# @private
|
60
|
+
protected
|
55
61
|
def escape value
|
62
|
+
value = value.encode("UTF-8") if
|
63
|
+
value.respond_to?(:encode)
|
56
64
|
CGI::escape(value.to_s).gsub('+', '%20')
|
57
65
|
end
|
58
|
-
protected :escape
|
59
66
|
|
60
67
|
end
|
61
68
|
end
|
data/lib/aws/http/response.rb
CHANGED
@@ -12,19 +12,16 @@
|
|
12
12
|
# language governing permissions and limitations under the License.
|
13
13
|
|
14
14
|
module AWS
|
15
|
-
|
16
|
-
# @private
|
15
|
+
|
17
16
|
module Http
|
18
17
|
|
19
18
|
# Represents the http response from a service request.
|
20
19
|
#
|
21
20
|
# Responses have:
|
22
|
-
#
|
21
|
+
#
|
23
22
|
# * status (200, 404, 500, etc)
|
24
23
|
# * headers (hash of response headers)
|
25
24
|
# * body (the response body)
|
26
|
-
#
|
27
|
-
# @private
|
28
25
|
class Response
|
29
26
|
|
30
27
|
# @return [Integer] (200) response http status code
|
@@ -41,7 +38,7 @@ module AWS
|
|
41
38
|
attr_accessor :timeout
|
42
39
|
alias_method :timeout?, :timeout
|
43
40
|
|
44
|
-
# @param [Hash] options
|
41
|
+
# @param [Hash] options
|
45
42
|
# @option options [Integer] :status (200) HTTP status code
|
46
43
|
# @option options [Hash] :headers ({}) HTTP response headers
|
47
44
|
# @option options [String] :body ('') HTTP response body
|
data/lib/aws/naming.rb
CHANGED
data/lib/aws/policy.rb
CHANGED
@@ -17,7 +17,7 @@ require 'date'
|
|
17
17
|
|
18
18
|
module AWS
|
19
19
|
|
20
|
-
# Represents an access policy for
|
20
|
+
# Represents an access policy for AWS operations and resources. For example:
|
21
21
|
#
|
22
22
|
# policy = Policy.new do |policy|
|
23
23
|
# policy.allow(:actions => ['s3:PutObject'],
|
data/lib/aws/rails.rb
CHANGED
@@ -17,6 +17,7 @@ module AWS
|
|
17
17
|
|
18
18
|
if Object.const_defined?(:Rails) and Rails.const_defined?(:Railtie)
|
19
19
|
|
20
|
+
# @private
|
20
21
|
class Railtie < Rails::Railtie
|
21
22
|
|
22
23
|
# configure our plugin on boot. other extension points such
|
@@ -125,17 +126,20 @@ module AWS
|
|
125
126
|
path = Pathname.new("#{rails_root}/config/aws.yml")
|
126
127
|
|
127
128
|
if File.exists?(path)
|
128
|
-
cfg = YAML::load(ERB.new(File.read(path)).result)
|
129
|
-
|
129
|
+
cfg = YAML::load(ERB.new(File.read(path)).result)
|
130
|
+
unless cfg[rails_env]
|
131
|
+
raise "config/aws.yml is missing a section for `#{rails_env}`"
|
132
|
+
end
|
133
|
+
AWS.config(cfg[rails_env])
|
130
134
|
end
|
131
135
|
|
132
136
|
end
|
133
137
|
|
134
138
|
# Adds a delivery method to ActionMailer that uses {AWS::SimplEmailService}.
|
135
139
|
#
|
136
|
-
# Once you have an SES delivery method you can configure Rails to
|
137
|
-
# for ActionMailer in your environment configuration
|
138
|
-
# RAILS_ROOT/config/environments/production.rb)
|
140
|
+
# Once you have an SES delivery method you can configure Rails to
|
141
|
+
# use this for ActionMailer in your environment configuration
|
142
|
+
# (e.g. RAILS_ROOT/config/environments/production.rb)
|
139
143
|
#
|
140
144
|
# config.action_mailer.delivery_method = :amazon_ses
|
141
145
|
#
|
@@ -153,21 +157,23 @@ module AWS
|
|
153
157
|
# AWS.add_action_mailer_delivery_method(:ses, custom_options)
|
154
158
|
#
|
155
159
|
# @param [Hash] options
|
156
|
-
#
|
157
|
-
#
|
158
|
-
#
|
159
|
-
#
|
160
|
-
#
|
160
|
+
#
|
161
|
+
# @param [Symbol] name (:amazon_ses) The name of the delivery
|
162
|
+
# method. The name used here should be the same as you set in
|
163
|
+
# your environment config. If you name the delivery method
|
164
|
+
# +:amazon_ses+ then you could do something like this in your
|
165
|
+
# config/environments/ENV.rb file:
|
166
|
+
#
|
161
167
|
# config.action_mailer.delivery_method = :amazon_ses
|
162
168
|
#
|
163
|
-
# @param [Hash] options
|
164
|
-
# {AWS::SimpleEmailService#new} before delivering email.
|
169
|
+
# @param [Hash] options A hash of options that are passes to
|
170
|
+
# {AWS::SimpleEmailService#new} before delivering email.
|
165
171
|
#
|
166
|
-
# @return [nil]
|
172
|
+
# @return [nil]
|
167
173
|
def self.add_action_mailer_delivery_method name = :amazon_ses, options = {}
|
168
|
-
|
174
|
+
|
169
175
|
amb = ::ActionMailer::Base
|
170
|
-
|
176
|
+
|
171
177
|
if ::Rails.version.to_f >= 3
|
172
178
|
amb.add_delivery_method(name, AWS::SimpleEmailService, options)
|
173
179
|
else
|
@@ -175,11 +181,11 @@ module AWS
|
|
175
181
|
AWS::SimpleEmailService.new(options).send_raw_email(mail)
|
176
182
|
end
|
177
183
|
end
|
178
|
-
|
184
|
+
|
179
185
|
nil
|
180
|
-
|
186
|
+
|
181
187
|
end
|
182
|
-
|
188
|
+
|
183
189
|
# Configures AWS to log to the Rails defualt logger.
|
184
190
|
# @return [nil]
|
185
191
|
def self.log_to_rails_logger
|