aws-sdk 1.3.8 → 1.3.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/lib/aws.rb +2 -0
  2. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +563 -0
  3. data/lib/aws/auto_scaling.rb +162 -0
  4. data/lib/aws/auto_scaling/activity.rb +102 -0
  5. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  6. data/lib/aws/auto_scaling/client.rb +50 -0
  7. data/lib/aws/auto_scaling/client/xml.rb +32 -0
  8. data/lib/aws/auto_scaling/config.rb +18 -0
  9. data/lib/aws/auto_scaling/errors.rb +26 -0
  10. data/lib/aws/auto_scaling/group.rb +420 -0
  11. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  12. data/lib/aws/auto_scaling/group_options.rb +146 -0
  13. data/lib/aws/auto_scaling/instance.rb +192 -0
  14. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  15. data/lib/aws/auto_scaling/launch_configuration.rb +150 -0
  16. data/lib/aws/auto_scaling/launch_configuration_collection.rb +144 -0
  17. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  18. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  19. data/lib/aws/auto_scaling/request.rb +24 -0
  20. data/lib/aws/auto_scaling/scaling_policy.rb +125 -0
  21. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  22. data/lib/aws/auto_scaling/scaling_policy_options.rb +61 -0
  23. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  24. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  25. data/lib/aws/auto_scaling/tag.rb +59 -0
  26. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  27. data/lib/aws/core.rb +40 -8
  28. data/lib/aws/core/client.rb +28 -3
  29. data/lib/aws/core/configuration.rb +38 -31
  30. data/lib/aws/core/http/request.rb +3 -3
  31. data/lib/aws/core/http/response.rb +2 -1
  32. data/lib/aws/core/log_formatter.rb +454 -0
  33. data/lib/aws/core/resource.rb +2 -1
  34. data/lib/aws/core/response.rb +5 -0
  35. data/lib/aws/core/uri_escape.rb +1 -1
  36. data/lib/aws/core/xml_grammar.rb +21 -0
  37. data/lib/aws/dynamo_db/request.rb +1 -1
  38. data/lib/aws/ec2/network_acl_collection.rb +1 -2
  39. data/lib/aws/ec2/route_table_collection.rb +1 -2
  40. data/lib/aws/ec2/vpn_gateway_collection.rb +1 -1
  41. data/lib/aws/elb/load_balancer.rb +0 -2
  42. data/lib/aws/errors.rb +2 -2
  43. data/lib/aws/s3/object_version_collection.rb +1 -1
  44. data/lib/aws/s3/s3_object.rb +4 -4
  45. data/lib/aws/sqs/queue.rb +2 -2
  46. metadata +52 -27
  47. data/lib/aws/core/client_logging.rb +0 -133
@@ -0,0 +1,59 @@
1
+ # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ class AutoScaling
16
+
17
+ # Auto Scaling tags are hashes with two helper methods:
18
+ #
19
+ # * {#resource}
20
+ # * {#delete}
21
+ #
22
+ class Tag < Hash
23
+
24
+ # @private
25
+ def initialize options = {}
26
+
27
+ super()
28
+
29
+ @resource =
30
+ case options[:resource_type]
31
+ when 'auto-scaling-group'
32
+ group_name = options[:resource_id]
33
+ config = options.delete(:config)
34
+ Group.new(group_name, :config => config)
35
+ else
36
+ msg = "unhandled resource type: #{options[:resource_type]}"
37
+ raise ArgumentError, msg
38
+ end
39
+
40
+ merge!(options)
41
+
42
+ end
43
+
44
+ # @return [Group] Returns the tagged resource. Currently this is
45
+ # always an Auto Scaling group.
46
+ def resource
47
+ @resource
48
+ end
49
+
50
+ # Deletes the tag from the resource.
51
+ # @return [nil]
52
+ def delete
53
+ resource.delete_tags([self])
54
+ nil
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,112 @@
1
+ # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ class AutoScaling
16
+
17
+ # Provides an interface for enumerating tags defined in Auto Scaling.
18
+ #
19
+ # auto_scaling = AWS::AutoScaling.new
20
+ # auto_scaling.tags.each do |tag|
21
+ # puts "#{tag.key}:#{tag.value}"
22
+ # end
23
+ #
24
+ # == Filters
25
+ #
26
+ # You can filter the tags returned using {#filter}:
27
+ #
28
+ # # returns tags with the key "role"
29
+ # auto_scaling.filter(:key, 'role').to_a
30
+ #
31
+ # # returns tags with the key "role" and value "webserver"
32
+ # auto_scaling.filter(:key, 'role').filter(:value, 'webserver')to_a
33
+ #
34
+ # # returns tags with the Auto Scaling group name "group1"
35
+ # auto_scaling.filter(:auto_scaling_group, 'group1').to_a
36
+ #
37
+ # # returns all tags that propagate at launch
38
+ # auto_scaling.filter(:propagate_at_launch, true).to_a
39
+ #
40
+ # == Creating Tags
41
+ #
42
+ # You can create Auto Scaling tags when you:
43
+ #
44
+ # * [create]{GroupCollection#create} an Auto Scaling group
45
+ # * [update]{Group#update} an Auto Scaling group
46
+ #
47
+ # Both of these methods accept a +:tags+ option.
48
+ #
49
+ # tags = [
50
+ # { :key => 'auto-scaling-instance' }, # tag name only
51
+ # { :key => 'role', :value => 'webserver' }, # tag name and value
52
+ # ]
53
+ #
54
+ # # creating a group with tags
55
+ # group = auto_scaling.groups.create('group-name', :tags => tags, ...)
56
+ #
57
+ # # updating a group's tags
58
+ # group.update(:tags => tags)
59
+ #
60
+ class TagCollection
61
+
62
+ include Core::Collection::Limitable
63
+
64
+ # @private
65
+ def initialize options = {}
66
+ @filters = options.delete(:filters) || []
67
+ super
68
+ end
69
+
70
+ # Filters the tags by the given filter name and value(s).
71
+ #
72
+ # # return tags with the key "role" and the value "webserver"
73
+ # auto_scaling.tags.filter(:key, 'role').filer(:value, 'webserver')
74
+ #
75
+ # @param [Symbol] name Valid filter names include:
76
+ #
77
+ # * :key
78
+ # * :value
79
+ # * :propagate_at_launch
80
+ # * :auto_scaling_group
81
+ #
82
+ # @param [Array<String>] values
83
+ #
84
+ # @return [TagCollection]
85
+ #
86
+ def filter name, *values
87
+ name = name.to_s.gsub(/_/, '-')
88
+ values = values.flatten.map(&:to_s)
89
+ filter = { :name => name, :values => values }
90
+ TagCollection.new(:filters => @filters + [filter], :config => config)
91
+ end
92
+
93
+ protected
94
+
95
+ def _each_item next_token, limit, options = {}, &block
96
+
97
+ options[:next_token] = next_token if next_token
98
+ options[:max_records] = limit if limit
99
+ options[:filters] = @filters unless @filters.empty?
100
+
101
+ resp = client.describe_tags(options)
102
+ resp.tags.each do |tag|
103
+ yield(Tag.new(tag.to_hash.merge(:config => config)))
104
+ end
105
+
106
+ resp.next_token if resp.respond_to?(:next_token)
107
+
108
+ end
109
+
110
+ end
111
+ end
112
+ end
@@ -20,6 +20,7 @@ require 'aws/core/autoloader'
20
20
  #
21
21
  # The currently supported services are:
22
22
  #
23
+ # * {AWS::AutoScaling}
23
24
  # * {AWS::DynamoDB}
24
25
  # * {AWS::EC2}
25
26
  # * {AWS::ELB}
@@ -59,7 +60,7 @@ require 'aws/core/autoloader'
59
60
  module AWS
60
61
 
61
62
  # Current version of the AWS SDK for Ruby
62
- VERSION = "1.3.8"
63
+ VERSION = "1.3.9"
63
64
 
64
65
  register_autoloads(self) do
65
66
  autoload :Errors, 'errors'
@@ -76,7 +77,6 @@ module AWS
76
77
  autoload :AuthorizeWithSessionToken, 'authorize_with_session_token'
77
78
  autoload :Cacheable, 'cacheable'
78
79
  autoload :Client, 'client'
79
- autoload :ClientLogging, 'client_logging'
80
80
  autoload :Collection, 'collection'
81
81
  autoload :Configuration, 'configuration'
82
82
  autoload :ConfiguredClientMethods, 'configured_client_methods'
@@ -90,6 +90,7 @@ module AWS
90
90
  autoload :Inflection, 'inflection'
91
91
  autoload :JsonClient, 'json_client'
92
92
  autoload :LazyErrorClasses, 'lazy_error_classes'
93
+ autoload :LogFormatter, 'log_formatter'
93
94
  autoload :MetaUtils, 'meta_utils'
94
95
  autoload :Model, 'model'
95
96
  autoload :Naming, 'naming'
@@ -167,8 +168,11 @@ module AWS
167
168
  # @option options [String,nil] :session_token (nil) AWS secret token
168
169
  # credential.
169
170
  #
170
- # @option options [String] :dynamo_db_endpoint ('dynamodb.amazonaws.com') The
171
- # service endpoint for Amazon DynamoDB.
171
+ # @option options [String] :auto_scaling_endpoint ('autoscaling.us-east-1.amazonaws.com')
172
+ # The service endpoint for Auto Scaling.
173
+ #
174
+ # @option options [String] :dynamo_db_endpoint ('dynamodb.amazonaws.com')
175
+ # The service endpoint for Amazon DynamoDB.
172
176
  #
173
177
  # @option options [String] :dynamo_db_retry_throughput_errors (true) When
174
178
  # true, AWS::DynamoDB::Errors::ProvisionedThroughputExceededException
@@ -186,10 +190,38 @@ module AWS
186
190
  # @option options [String] :iam_endpoint ('iam.amazonaws.com') The
187
191
  # service endpoint for AWS Idenity Access Management (IAM).
188
192
  #
189
- # @option options [Object,nil] :logger (nil) A logger instance that
190
- # should receive log messages generated by service requets.
191
- # A logger needs to respond to #log and must accept a
192
- # severity (e.g. :info, :error, etc) and a string message.
193
+ # @option options [Logger,nil] :logger (nil) A logger to send
194
+ # log messages to. Here is an example that logs to standard out.
195
+ #
196
+ # require 'logger'
197
+ # AWS.config(:logger => Logger.new($stdout))
198
+ #
199
+ # @option options [Symbol] :log_level (:info) The level log messages are
200
+ # sent to the logger with (e.g. +:notice+, +:info+, +:warn+,
201
+ # +:debug+, etc).
202
+ #
203
+ # @option options [Object] :log_formatter The log formatter is responsible
204
+ # for building log messages from responses. You can quickly change
205
+ # log formats by providing a canned log formatter.
206
+ #
207
+ # AWS.config(:log_formatter => AWS::Core::LogFormatter.colored)
208
+ #
209
+ # Here is the complete list of canned log formatters:
210
+ #
211
+ # * +AWS::Core::LogFormatter.default+
212
+ # * +AWS::Core::LogFormatter.short+
213
+ # * +AWS::Core::LogFormatter.debug+
214
+ # * +AWS::Core::LogFormatter.colored+
215
+ #
216
+ # You can also create an instance of AWS::Core::LogFormatter
217
+ # with a custom log message pattern. See {Core::LogFormatter} for
218
+ # a complete list of pattern substituions.
219
+ #
220
+ # pattern = "[AWS :operation :duration] :error_message"
221
+ # AWS.config(:log_formatter => AWS::Core::LogFormatter.new(pattern))
222
+ #
223
+ # Lastly you can pass any object that responds to +#format+ accepting
224
+ # and instance of {Core::Response} and returns a string.
193
225
  #
194
226
  # @option options [Integer] :max_retries (3) The maximum number of times
195
227
  # service errors (500) should be retried. There is an exponential
@@ -22,8 +22,6 @@ module AWS
22
22
 
23
23
  extend Naming
24
24
 
25
- include ClientLogging
26
-
27
25
  CACHEABLE_REQUESTS = Set.new
28
26
 
29
27
  # Creates a new low-level client.
@@ -221,6 +219,8 @@ module AWS
221
219
 
222
220
  @http_handler.handle(response.http_request, http_response)
223
221
 
222
+ populate_error(response)
223
+
224
224
  populate_error(response)
225
225
  response.signal_success unless response.error
226
226
  response
@@ -278,6 +278,31 @@ module AWS
278
278
  end
279
279
  response
280
280
  end
281
+
282
+ private
283
+ def log_client_request options
284
+
285
+ # time the request, retries and all
286
+ start = Time.now
287
+ response = yield
288
+ response.duration = Time.now - start
289
+
290
+ if config.logger
291
+ if options[:async]
292
+ response.on_complete { log_response(response) }
293
+ else
294
+ log_response(response)
295
+ end
296
+ end
297
+
298
+ response
299
+
300
+ end
301
+
302
+ def log_response response
303
+ message = config.log_formatter.format(response)
304
+ config.logger.send(config.log_level, message)
305
+ end
281
306
 
282
307
  protected
283
308
  def populate_error response
@@ -335,7 +360,7 @@ module AWS
335
360
  private
336
361
  def client_request name, options, &block
337
362
  return_or_raise(options) do
338
- log_client_request(name, options) do
363
+ log_client_request(options) do
339
364
 
340
365
  if config.stub_requests?
341
366
 
@@ -63,6 +63,9 @@ module AWS
63
63
  #
64
64
  # @attr_reader [String,nil] session_token (nil) AWS secret token credential.
65
65
  #
66
+ # @attr_reader [String] auto_scaling_endpoint ('autoscaling.us-east-1.amazonaws.com')
67
+ # The service endpoint for Auto Scaling.
68
+ #
66
69
  # @attr_reader [String] dynamo_db_endpoint ('dynamodb.us-east-1.amazonaws.com')
67
70
  # The service endpoint for Amazon DynamoDB.
68
71
  #
@@ -82,10 +85,11 @@ module AWS
82
85
  # @attr_reader [String] iam_endpoint ('iam.amazonaws.com')
83
86
  # The service endpoint for AWS Idenity Access Management (IAM).
84
87
  #
85
- # @attr_reader [Object,nil] logger (nil) A logger instance that
86
- # should receive log messages generated by service requets.
87
- # A logger needs to respond to #log and must accept a
88
- # severity (e.g. :info, :error, etc) and a string message.
88
+ # @attr_reader [Logger,nil] logger (nil) The logging interface.
89
+ #
90
+ # @attr_reader [Symbol] log_level (:info) The log level.
91
+ #
92
+ # @attr_reader [LogFormatter] log_formatter The log message formatter.
89
93
  #
90
94
  # @attr_reader [Integer] max_retries (3) The maximum number of times
91
95
  # service errors (500) should be retried. There is an exponential
@@ -338,26 +342,6 @@ module AWS
338
342
 
339
343
  def add_service name, ruby_name, default_endpoint
340
344
 
341
- create_block = lambda do |config|
342
- AWS.const_get(name)::Client.new(:config => config)
343
- end
344
-
345
- needs = [
346
- :signer,
347
- :http_handler,
348
- :"#{ruby_name}_endpoint",
349
- :"#{ruby_name}_port",
350
- :max_retries,
351
- :stub_requests?,
352
- :proxy_uri,
353
- :use_ssl?,
354
- :ssl_verify_peer?,
355
- :ssl_ca_file,
356
- :user_agent_prefix,
357
- :logger,
358
- :logger_truncate_strings_at,
359
- ]
360
-
361
345
  add_option :"#{ruby_name}_endpoint", default_endpoint
362
346
 
363
347
  add_option(:"#{ruby_name}_port") do |config,value|
@@ -383,6 +367,27 @@ module AWS
383
367
  end
384
368
  end
385
369
 
370
+ needs = [
371
+ :signer,
372
+ :http_handler,
373
+ :"#{ruby_name}_endpoint",
374
+ :"#{ruby_name}_port",
375
+ :max_retries,
376
+ :stub_requests?,
377
+ :proxy_uri,
378
+ :use_ssl?,
379
+ :ssl_verify_peer?,
380
+ :ssl_ca_file,
381
+ :user_agent_prefix,
382
+ :logger,
383
+ :log_formatter,
384
+ :log_level,
385
+ ]
386
+
387
+ create_block = lambda do |config|
388
+ AWS.const_get(name)::Client.new(:config => config)
389
+ end
390
+
386
391
  add_option_with_needs :"#{ruby_name}_client", needs, &create_block
387
392
 
388
393
  end
@@ -391,22 +396,24 @@ module AWS
391
396
 
392
397
  add_option :access_key_id,
393
398
  ENV['AWS_ACCESS_KEY_ID'] || ENV['AMAZON_ACCESS_KEY_ID']
399
+
400
+ add_option :secret_access_key,
401
+ ENV['AWS_SECRET_ACCESS_KEY'] || ENV['AMAZON_SECRET_ACCESS_KEY']
402
+
403
+ add_option :session_token
394
404
 
395
- add_option :http_handler, Core::Http::NetHttpHandler.new
405
+ add_option :http_handler, Http::NetHttpHandler.new
396
406
 
397
407
  add_option :logger
398
408
 
399
- add_option :logger_truncate_strings_at, 1000
409
+ add_option :log_level, :info
410
+
411
+ add_option :log_formatter, LogFormatter.default
400
412
 
401
413
  add_option :max_retries, 3
402
414
 
403
415
  add_option :proxy_uri do |config,uri| uri ? URI.parse(uri.to_s) : nil end
404
416
 
405
- add_option :secret_access_key,
406
- ENV['AWS_SECRET_ACCESS_KEY'] || ENV['AMAZON_SECRET_ACCESS_KEY']
407
-
408
- add_option :session_token
409
-
410
417
  add_option_with_needs :signer,
411
418
  [:access_key_id, :secret_access_key, :session_token] do |config|
412
419
 
@@ -43,17 +43,17 @@ module AWS
43
43
  attr_accessor :host
44
44
 
45
45
  # @return [CaseInsensitiveHash] request headers
46
- attr_reader :headers
46
+ attr_accessor :headers
47
47
 
48
48
  # @return [Array] An array of request params, each param responds to
49
49
  # #name and #value.
50
- attr_reader :params
50
+ attr_accessor :params
51
51
 
52
52
  # @return [String] GET, PUT POST, HEAD or DELETE, defaults to POST
53
53
  attr_accessor :http_method
54
54
 
55
55
  # @return [String] path of the request URI, defaults to /
56
- attr_reader :path
56
+ attr_accessor :path
57
57
 
58
58
  # @return [String] the AWS access key ID used to authorize the
59
59
  # request