aws-sdk 1.3.5 → 1.3.6

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.
Files changed (57) hide show
  1. data/lib/aws/api_config/EC2-2011-12-15.yml +2791 -0
  2. data/lib/aws/core.rb +4 -4
  3. data/lib/aws/core/client.rb +1 -0
  4. data/lib/aws/core/client_logging.rb +9 -2
  5. data/lib/aws/core/lazy_error_classes.rb +1 -1
  6. data/lib/aws/core/response.rb +5 -0
  7. data/lib/aws/core/service_interface.rb +3 -2
  8. data/lib/aws/core/uri_escape.rb +1 -2
  9. data/lib/aws/ec2.rb +80 -1
  10. data/lib/aws/ec2/client.rb +29 -10
  11. data/lib/aws/ec2/client/xml.rb +51 -1
  12. data/lib/aws/ec2/customer_gateway.rb +90 -0
  13. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  14. data/lib/aws/ec2/dhcp_options.rb +106 -0
  15. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  16. data/lib/aws/ec2/filtered_collection.rb +27 -2
  17. data/lib/aws/ec2/image.rb +7 -4
  18. data/lib/aws/ec2/instance.rb +54 -2
  19. data/lib/aws/ec2/instance_collection.rb +5 -3
  20. data/lib/aws/ec2/internet_gateway.rb +122 -0
  21. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  22. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  23. data/lib/aws/ec2/network_acl.rb +254 -0
  24. data/lib/aws/ec2/network_acl/association.rb +56 -0
  25. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  26. data/lib/aws/ec2/network_acl_collection.rb +65 -0
  27. data/lib/aws/ec2/network_interface.rb +174 -0
  28. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  29. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  30. data/lib/aws/ec2/region.rb +11 -1
  31. data/lib/aws/ec2/resource.rb +6 -2
  32. data/lib/aws/ec2/route_table.rb +204 -0
  33. data/lib/aws/ec2/route_table/association.rb +119 -0
  34. data/lib/aws/ec2/route_table/route.rb +113 -0
  35. data/lib/aws/ec2/route_table_collection.rb +73 -0
  36. data/lib/aws/ec2/security_group.rb +15 -5
  37. data/lib/aws/ec2/security_group_collection.rb +15 -12
  38. data/lib/aws/ec2/subnet.rb +161 -0
  39. data/lib/aws/ec2/subnet_collection.rb +115 -0
  40. data/lib/aws/ec2/vpc.rb +166 -0
  41. data/lib/aws/ec2/vpc_collection.rb +71 -0
  42. data/lib/aws/ec2/vpn_connection.rb +99 -0
  43. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  44. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  45. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  46. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  47. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  48. data/lib/aws/iam/login_profile.rb +4 -0
  49. data/lib/aws/iam/user.rb +6 -0
  50. data/lib/aws/record/hash_model.rb +3 -3
  51. data/lib/aws/simple_workflow.rb +6 -3
  52. data/lib/aws/simple_workflow/activity_task_collection.rb +7 -2
  53. data/lib/aws/simple_workflow/decision_task_collection.rb +11 -5
  54. data/lib/aws/simple_workflow/option_formatters.rb +7 -0
  55. data/lib/net/http/connection_pool.rb +19 -5
  56. metadata +33 -5
  57. data/lib/aws/api_config/EC2-2011-02-28.yml +0 -2314
@@ -0,0 +1,123 @@
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
+ require 'aws/ec2/vpn_gateway/attachment'
15
+
16
+ module AWS
17
+ class EC2
18
+
19
+ class VPNGateway < Resource
20
+
21
+ include TaggedItem
22
+
23
+ def initialize vpn_gateway_id, options = {}
24
+ @vpn_gateway_id = vpn_gateway_id
25
+ super
26
+ end
27
+
28
+ # @return [String]
29
+ attr_reader :vpn_gateway_id
30
+
31
+ alias_method :id, :vpn_gateway_id
32
+
33
+ attribute :state, :to_sym => true
34
+
35
+ attribute :vpn_type, :static => true
36
+
37
+ attribute :attachment_set, :as => :attachments
38
+
39
+ protected :attachment_set
40
+
41
+ populates_from(:create_vpn_gateway) do |resp|
42
+ resp.vpn_gateway if resp.vpn_gateway.vpn_gateway_id == id
43
+ end
44
+
45
+ populates_from(:describe_vpn_gateways) do |resp|
46
+ resp.vpn_gateway_set.find do |gateway|
47
+ gateway.vpn_gateway_id == vpn_gateway_id
48
+ end
49
+ end
50
+
51
+ # @return [Array<VPNGateway::Attachment>]
52
+ def attachments
53
+ attachment_set.map {|details| Attachment.new(self, details) }
54
+ end
55
+
56
+ # @return [VPC,nil] Returns the currently attached VPC, or nil
57
+ # if this gateway has not been attached.
58
+ def vpc
59
+ if attachment = attachments.first
60
+ attachment.vpc
61
+ end
62
+ end
63
+
64
+ # Attaches this vpn gateway to the given VPC.
65
+ # @param [VPC,String] vpc A {VPC} object or a vpc id string.
66
+ # @return [Attachment]
67
+ def attach vpc
68
+
69
+ client_opts = {}
70
+ client_opts[:vpn_gateway_id] = vpn_gateway_id
71
+ client_opts[:vpc_id] = vpc_id(vpc)
72
+
73
+ resp = client.attach_vpn_gateway(client_opts)
74
+
75
+ Attachment.new(self, resp.attachment)
76
+
77
+ end
78
+
79
+ # Detaches this vpn gateway from the given VPC.
80
+ # @param [VPC,String] vpc A {VPC} object or a vpc id string.
81
+ # @return [nil]
82
+ def detach vpc
83
+ client_opts = {}
84
+ client_opts[:vpn_gateway_id] = vpn_gateway_id
85
+ client_opts[:vpc_id] = vpc_id(vpc)
86
+ client.detach_vpn_gateway(client_opts)
87
+ nil
88
+ end
89
+
90
+ # @return [VPNConnectionCollection] Returns a collection
91
+ # of VPC connections for this gateway.
92
+ def vpn_connections
93
+ connections = VPNConnectionCollection.new(:config => config)
94
+ connections.filter('vpn-gateway-id', id)
95
+ end
96
+
97
+ # Deletes this vpn gateway.
98
+ # @return [nil]
99
+ def delete
100
+ client_opts = {}
101
+ client_opts[:vpn_gateway_id] = vpn_gateway_id
102
+ client.delete_vpn_gateway(client_opts)
103
+ nil
104
+ end
105
+
106
+ # @return [Boolean] Returns true if the gateway exists.
107
+ def exists?
108
+ begin
109
+ client.describe_vpn_gateways(:vpn_gateway_ids => [id])
110
+ true
111
+ rescue Errors::InvalidVPNGatewayID::NotFound
112
+ false
113
+ end
114
+ end
115
+
116
+ protected
117
+ def vpc_id vpc
118
+ vpc.is_a?(VPC) ? vpc.vpc_id : vpc
119
+ end
120
+
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,45 @@
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 EC2
16
+ class VPNGateway < Resource
17
+ class Attachment
18
+
19
+ # @private
20
+ def initialize vpn_gateway, details
21
+ @vpn_gateway = vpn_gateway
22
+ @vpc = VPC.new(details.vpc_id, :config => vpn_gateway.config)
23
+ @state = details.state.to_sym
24
+ end
25
+
26
+ # @return [VPNGateway]
27
+ attr_reader :vpn_gateway
28
+
29
+ # @return [VPC]
30
+ attr_reader :vpc
31
+
32
+ # @return [Symbol]
33
+ attr_reader :state
34
+
35
+ # Deletes this attachment.
36
+ # @return (see VPNGateway#detach)
37
+ def delete
38
+ vpn_gateway.detach(vpc)
39
+ end
40
+ alias_method :detach, :delete
41
+
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,77 @@
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 EC2
16
+
17
+ class VPNGatewayCollection < Collection
18
+
19
+ include TaggedCollection
20
+ include Core::Collection::Simple
21
+
22
+ # Creates a new virtual private gateway. A virtual private gateway is
23
+ # the VPC-side endpoint for your VPN connection. You can create a
24
+ # virtual private gateway before creating the VPC itself.
25
+ #
26
+ # @param [Hash] options
27
+ #
28
+ # @option options [String] :vpn_type ('ipsec.1') The type of VPN
29
+ # connection this virtual private gateway supports.
30
+ #
31
+ # @option options [AvailabilityZone,String] :availability_zone
32
+ # The Availability Zone where you want the virtual private gateway.
33
+ # AWS can select a default zone for you. This can be an
34
+ # {AvailablityZone} object or availability zone name string.
35
+ #
36
+ # @return [VPNGateway]
37
+ #
38
+ def create options = {}
39
+
40
+ client_opts = {}
41
+ client_opts[:type] = options[:vpn_type] || 'ipsec.1'
42
+
43
+ if az = options[:availability_zone]
44
+ az = az.name if az.is_a?(AvailabilityZone)
45
+ client_opts[:availability_zone] = az
46
+ end
47
+
48
+ resp = client.create_vpn_gateway(client_opts)
49
+
50
+ VPNGateway.new_from(:create_vpn_gateway, resp.vpn_gateway,
51
+ resp.vpn_gateway.vpn_gateway_id, :config => config)
52
+
53
+ end
54
+
55
+ # @param [String] vpn_gateway_id
56
+ # @return [VPNGateway]
57
+ def [] vpn_gateway_id
58
+ VPNGateway.new(vpn_gateway_id, :config => config)
59
+ end
60
+
61
+ protected
62
+
63
+ def _each_item options = {}, &block
64
+ response = filtered_request(:describe_vpn_gateways, options, &block)
65
+ response.vpn_gateway_set.each do |g|
66
+
67
+ gateway = VPNGateway.new_from(:describe_vpn_gateways, g,
68
+ g.vpn_gateway_id, :config => config)
69
+
70
+ yield(gateway)
71
+
72
+ end
73
+ end
74
+
75
+ end
76
+ end
77
+ end
@@ -27,6 +27,7 @@ module AWS
27
27
  #
28
28
  # @example Deleting the login profile for a user
29
29
  # user.login_profile.delete
30
+ #
30
31
  class LoginProfile < Resource
31
32
 
32
33
  # @private
@@ -67,8 +68,11 @@ module AWS
67
68
  # about making keys inactive or deleting them, see
68
69
  # {User#access_keys}.
69
70
  #
71
+ # @return [nil]
72
+ #
70
73
  def delete
71
74
  client.delete_login_profile(resource_options)
75
+ nil
72
76
  end
73
77
 
74
78
  # @return [Boolean] True if a login profile exists for the user.
@@ -111,6 +111,12 @@ module AWS
111
111
  nil
112
112
  end
113
113
 
114
+ # Deletes the current user, after:
115
+ # * deleting its login profile
116
+ # * removing it from all groups
117
+ # * deleting all of its access keys
118
+ # * deleting its mfa devices
119
+ # * deleting its signing certificates
114
120
  def delete!
115
121
  groups.clear
116
122
  access_keys.clear
@@ -57,8 +57,7 @@ module AWS
57
57
  # @param [Integer] write_capacity_units
58
58
  # See {DynamoDB::TableCollection#create} for more information.
59
59
  #
60
- # @param [Hash] options Hash of options passed to
61
- # {DynamoDB::TableCollection#create}.
60
+ # @param [Hash] options
62
61
  #
63
62
  # @option options [String] :shard_name Defaults to the class name. The
64
63
  # shard name will be prefixed with {AWS::Record.table_prefix},
@@ -70,7 +69,8 @@ module AWS
70
69
 
71
70
  table_name = dynamo_db_table_name(options[:shard_name])
72
71
 
73
- create_opts = { :hash_key => { :id => :string } }
72
+ create_opts = {}
73
+ create_opts[:hash_key] = { :id => :string }
74
74
 
75
75
  dynamo_db.tables.create(
76
76
  table_name,
@@ -98,16 +98,19 @@ module AWS
98
98
  # * request_cancel_external_workflow_execution workflow_execution, options = {}
99
99
  # * start_child_workflow_execution workflow_type, options = {}
100
100
  #
101
+ # This sample gets a decision task and responds based on the events
102
+ # by scheduling an activity task or completing the workflow execution.
103
+ #
101
104
  # # poll for decision tasks from 'my-task-list'
102
- # domain.decision_tasks.poll('my-task-list') do |decision_task|
105
+ # domain.decision_tasks.poll('my-task-list') do |task|
103
106
  #
104
107
  # # invesitate new events and make decisions
105
- # decision_task.new_events.each do |event|
108
+ # task.new_events.each do |event|
106
109
  # case event.event_type
107
110
  # when 'WorkflowExecutionStarted'
108
111
  # task.schedule_activity_task 'do-something', :input => 'abc xyz'
109
112
  # when 'ActivityTaskCompleted'
110
- # task.comlete_workflow_execution :results => event.attributes.result
113
+ # task.complete_workflow_execution :result => event.attributes.result
111
114
  # end
112
115
  # end
113
116
  #
@@ -30,6 +30,10 @@ module AWS
30
30
 
31
31
  # Returns the number of tasks in the specified +task_list+.
32
32
  #
33
+ # count = activity_tasks.count('task-list-name')
34
+ # count.truncated? #=> false
35
+ # count.to_i #=> 7
36
+ #
33
37
  # @note This operation is eventually consistent. The results are best
34
38
  # effort and may not exactly reflect recent updates and changes.
35
39
  #
@@ -54,7 +58,8 @@ module AWS
54
58
  # @option options [String] :identity (nil) Identity of the worker
55
59
  # making the request, which is recorded in the ActivityTaskStarted
56
60
  # event in the workflow history. This enables diagnostic tracing
57
- # when problems arise. The form of this identity is user defined.
61
+ # when problems arise. The :identity defaults to the hostname and
62
+ # pid (e.g. "hostname:pid").
58
63
  #
59
64
  # @yieldparam [ActivityTask] activity_task Yields if a task is
60
65
  # available within 60 seconds.
@@ -68,7 +73,7 @@ module AWS
68
73
  client_opts = {}
69
74
  client_opts[:domain] = domain.name
70
75
  client_opts[:task_list] = { :name => task_list }
71
- client_opts[:identity] = options[:identity] if options[:identity]
76
+ client_opts[:identity] = identity_opt(options)
72
77
 
73
78
  response = client.poll_for_activity_task(client_opts)
74
79
 
@@ -24,7 +24,7 @@ module AWS
24
24
  # To get a count of decision tasks needing attention, call {#count}
25
25
  # with a task list name:
26
26
  #
27
- # domain.decision_tasks.count('my-task-list') #=> 7
27
+ # domain.decision_tasks.count('my-task-list').to_i #=> 7
28
28
  #
29
29
  # == Getting a single decision task
30
30
  #
@@ -83,14 +83,19 @@ module AWS
83
83
 
84
84
  # Returns the number of decision tasks in the specified +task_list+.
85
85
  #
86
+ # count = decision_tasks.count('task-list-name')
87
+ # count.truncated? #=> false
88
+ # count.to_i #=> 7
89
+ #
86
90
  # @note This operation is eventually consistent. The results are best
87
91
  # effort and may not exactly reflect recent updates and changes.
88
92
  #
89
93
  # @param [String] task_list Name of the task list to count
90
94
  # decision tasks for.
91
95
  #
92
- # @return [Integer] Returns the number of descision tasks for the
93
- # given +task_list+.
96
+ # @return [Count] Returns a {Count} object that specifies the number
97
+ # of decision tasks for the given task list. This count will
98
+ # also indiciate if the count was truncated.
94
99
  #
95
100
  def count task_list
96
101
  options = {}
@@ -133,7 +138,8 @@ module AWS
133
138
  # @option options [String] :identity The identity of the decider
134
139
  # requesting a decision task. This will be recorded in the
135
140
  # DecisionTaskStarted event in the workflow history.
136
- # If +:identity+ is not passed, a random UUID will be generated.
141
+ # If +:identity+ is not passed then the hostname and
142
+ # process id will be sent (e.g. "hostname:pid").
137
143
  #
138
144
  # @option options [Boolean] :reverse_event_order (false) When true,
139
145
  # the history events on the decision task will enumerate in
@@ -155,7 +161,7 @@ module AWS
155
161
 
156
162
  client_opts = {}
157
163
  client_opts[:domain] = domain.name
158
- client_opts[:identity] = options[:identity] if options[:identity]
164
+ client_opts[:identity] = identity_opt(options)
159
165
  client_opts[:task_list] = { :name => task_list }
160
166
  client_opts[:maximum_page_size] = options[:event_batch_size] || 1000
161
167
  client_opts[:reverse_order] = options.key?(:reverse_event_order) ?
@@ -11,11 +11,18 @@
11
11
  # ANY KIND, either express or implied. See the License for the specific
12
12
  # language governing permissions and limitations under the License.
13
13
 
14
+ require 'socket'
15
+
14
16
  module AWS
15
17
  class SimpleWorkflow
16
18
 
17
19
  # @private
18
20
  module OptionFormatters
21
+
22
+ protected
23
+ def identity_opt options
24
+ options[:identity] || "#{Socket.gethostname}:#{Process.pid}"
25
+ end
19
26
 
20
27
  protected
21
28
  def upcase_opts options, *opt_names
@@ -117,24 +117,37 @@ class Net::HTTP::ConnectionPool
117
117
  end
118
118
 
119
119
  def request connection, *request_args, &block
120
+
120
121
  session = nil
121
122
  response = nil
122
123
  retried = false
124
+
123
125
  begin
126
+
124
127
  session = session_for(connection)
125
128
  session.http_session.read_timeout = connection.read_timeout
126
129
  response = session.request(*request_args, &block)
127
- rescue *SOCKET_ERRORS => error
128
- # retry socket errors once
129
- unless retried
130
+
131
+ rescue Exception => error
132
+
133
+ # close the http session to prevent the connection from being
134
+ # left open and risk the other side sending data
135
+ session.finish if session
136
+
137
+ # retry socket errors once on a new session
138
+ if SOCKET_ERRORS.include?(error.class) and !retried
130
139
  retried = true
131
140
  retry
132
141
  end
142
+
133
143
  raise error
144
+
134
145
  else
135
146
  @pool_mutex.synchronize { @pool << session }
136
147
  end
148
+
137
149
  response
150
+
138
151
  end
139
152
 
140
153
  # Returns the number of sessions currently in the pool, not counting those
@@ -143,12 +156,13 @@ class Net::HTTP::ConnectionPool
143
156
  @pool_mutex.synchronize { @pool.size }
144
157
  end
145
158
 
146
- # Removes http sessions from the pool that have passed the idle timeout
159
+ # Removes stale http sessions from the pool (that have exceeded
160
+ # the idle timeout).
147
161
  def clean!
148
162
  @pool_mutex.synchronize { _clean }
149
163
  end
150
164
 
151
- # Finishes and removes removes all sessions from the pool.
165
+ # Closes and removes removes all sessions from the pool.
152
166
  # If empty! is called while there are outstanding requests they may
153
167
  # get checked back into the pool, leaving the pool in a non-empty state.
154
168
  def empty!