aws-sdk 1.3.5 → 1.3.6

Sign up to get free protection for your applications and to get access to all the features.
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,65 @@
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 NetworkACLCollection < Collection
18
+
19
+ include TaggedCollection
20
+ include Core::Collection::Simple
21
+
22
+ # Creates a network ACL.
23
+ #
24
+ # @param [Hash] options
25
+ #
26
+ # @option options [VPC,String] :vpc The vpc or vpc id of where you want
27
+ # to create the subnet. This option is required if this collection
28
+ # does not have a populated vpc ({#vpc} returns nil).
29
+ #
30
+ # @return [NetworkACL]
31
+ #
32
+ def create options = {}
33
+
34
+ client_opts = {}
35
+ client_opts[:vpc_id] = vpc_id_option(options)
36
+
37
+ resp = client.create_network_acl(client_opts)
38
+
39
+ NetworkACL.new_from(:create_network_acl, resp.network_acl,
40
+ resp.network_acl.network_acl_id, :config => config)
41
+
42
+ end
43
+
44
+ # @param [String] network_acl_id
45
+ # @return [NetworkACL]
46
+ def [] network_acl_id
47
+ NetworkACL.new(network_acl_id, :config => config)
48
+ end
49
+
50
+ protected
51
+ def _each_item options = {}, &block
52
+ response = filtered_request(:describe_network_acls, options, &block)
53
+ response.network_acl_set.each do |a|
54
+
55
+ network_acl = NetworkACL.new_from(:describe_network_acls, a,
56
+ a.network_acl_id, :config => config)
57
+
58
+ yield(network_acl)
59
+
60
+ end
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,174 @@
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/network_interface/attachment'
15
+
16
+ module AWS
17
+ class EC2
18
+
19
+ # Represents a network interface in EC2.
20
+ class NetworkInterface < Resource
21
+
22
+ include TaggedItem
23
+
24
+ def initialize network_interface_id, options = {}
25
+ @network_interface_id = network_interface_id
26
+ super
27
+ end
28
+
29
+ # @return [String]
30
+ attr_reader :network_interface_id
31
+
32
+ alias_method :id, :network_interface_id
33
+
34
+ attribute :vpc_id, :static => true
35
+
36
+ attribute :subnet_id, :static => true
37
+
38
+ mutable_attribute :description
39
+
40
+ attribute :owner_id, :static => true
41
+
42
+ attribute :status, :to_sym => true
43
+
44
+ attribute :private_ip_address, :static => true
45
+
46
+ attribute :private_dns_name, :static => true
47
+
48
+ mutable_attribute :source_dest_check?,
49
+ :set_as => :source_dest_check
50
+
51
+ alias_method :source_dest_check, :source_dest_check?
52
+
53
+ attribute :attachment_details, :as => :attachment
54
+
55
+ protected :attachment_details
56
+
57
+ mutable_attribute :groups
58
+
59
+ protected :groups
60
+
61
+ populates_from(:create_network_interface) do |resp|
62
+ resp.network_interface if resp.network_interface.network_interface_id == id
63
+ end
64
+
65
+ populates_from(:describe_network_interfaces) do |resp|
66
+ resp.network_interface_set.find{|i| i.network_interface_id == id }
67
+ end
68
+
69
+ # @return [VPC] Returns the VPC this network interface belongs to.
70
+ def vpc
71
+ VPC.new(vpc_id, :config => config)
72
+ end
73
+
74
+ # @return [Subnet] Returns the Subnet this network interface
75
+ # belongs to.
76
+ def subnet
77
+ Subnet.new(subnet_id, :vpc_id => vpc_id, :config => config)
78
+ end
79
+
80
+ # @return [Array<SecurityGroup>]
81
+ def security_groups
82
+ groups.collect do |g|
83
+ SecurityGroup.new(g.group_id, :name => g.group_name, :config => config)
84
+ end
85
+ end
86
+
87
+ # @param [Array<SecurityGroup>,Array<String>] groups A list of
88
+ # security groups objects or security group ids. This replaces
89
+ # the security group set on this network interface.
90
+ #
91
+ # @return [nil]
92
+ #
93
+ def set_security_groups *groups
94
+ self.groups = [groups].flatten.collect do |g|
95
+ g.is_a?(SecurityGroup) ? g.security_group_id : g
96
+ end
97
+ nil
98
+ end
99
+ alias_method :security_groups=, :set_security_groups
100
+
101
+ # @return [Instance,nil] Returns the instance this network interface
102
+ # is attached to. If it has not been attached, then nil is
103
+ # returned.
104
+ def instance
105
+ if attachment = self.attachment
106
+ attachment.instance
107
+ end
108
+ end
109
+
110
+ def attachment
111
+ if details = attachment_details
112
+ Attachment.new(self, details)
113
+ end
114
+ end
115
+
116
+ # @param [Instance,String] instance The instance to attach this network
117
+ # interface to, may be an {Instance} object or an instance id string.
118
+ #
119
+ # @param [Hash] options
120
+ #
121
+ # @option options [Integer] :device_index (1) The index of the device
122
+ # for the network interface attachment on the instance. Defaults to 1.
123
+ #
124
+ # @return [nil]
125
+ #
126
+ def attach instance, options = {}
127
+
128
+ instance_id = instance.is_a?(Instance) ? instance.instance_id : instance
129
+
130
+ client_opts = {}
131
+ client_opts[:network_interface_id] = network_interface_id
132
+ client_opts[:instance_id] = instance_id
133
+ client_opts[:device_index] = options[:device_index] || 1
134
+
135
+ client.attach_network_interface(client_opts)
136
+
137
+ nil
138
+
139
+ end
140
+
141
+ # Detaches this network interface.
142
+ # @param [Hash] options
143
+ # @option (see NetworkInterface::Attachment#detach)
144
+ # @return (see NetworkInterface::Attachment#detach)
145
+ def detach options = {}
146
+ if attachment = self.attachment
147
+ attachment.detach(options)
148
+ else
149
+ raise 'unable to detach network interface, no attachment present'
150
+ end
151
+ end
152
+
153
+ # Deletes this network interface.
154
+ # @return [nil]
155
+ def delete
156
+ client_opts = {}
157
+ client_opts[:network_interface_id] = network_interface_id
158
+ client.delete_network_interface(client_opts)
159
+ nil
160
+ end
161
+
162
+ # @return [Boolean] Returns true if this network interface exists.
163
+ def exists?
164
+ begin
165
+ get_resource
166
+ true
167
+ rescue Errors::InvalidNetworkInterfaceID::NotFound
168
+ false
169
+ end
170
+ end
171
+
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,100 @@
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/network_interface/attachment'
15
+
16
+ module AWS
17
+ class EC2
18
+ class NetworkInterface < Resource
19
+ class Attachment
20
+
21
+ def initialize network_interface, details
22
+ @network_interface = network_interface
23
+ @attachment_id = details.attachment_id
24
+ @instance = Instance.new(details.instance_id,
25
+ :owner_id => details.instance_owner_id,
26
+ :config => network_interface.config)
27
+ @instance_owner_id = details.instance_owner_id
28
+ @device_index = details.device_index
29
+ @status = details.status.to_sym
30
+ @attach_time = details.attach_time
31
+ @delete_on_termination = details.delete_on_termination?
32
+ end
33
+
34
+ # @return [String] Returns the attachment id.
35
+ attr_reader :attachment_id
36
+
37
+ alias_method :id, :attachment_id
38
+
39
+ # @return [NetworkInterface] Returns the network interface this
40
+ # is an attachment for.
41
+ attr_reader :network_interface
42
+
43
+ # @return [Instance] Returns the instance the network interface
44
+ # is attached to.
45
+ attr_reader :instance
46
+
47
+ # @return [String] Returns the instance owner id.
48
+ attr_reader :instance_owner_id
49
+
50
+ # @return [Integer] The index of the device for the network
51
+ # interface attachment on the instance.
52
+ attr_reader :device_index
53
+
54
+ # @return [Symbol] Returns the attachment status.
55
+ attr_reader :status
56
+
57
+ # @return [Time]
58
+ attr_reader :attach_time
59
+
60
+ # @return [Boolean]
61
+ attr_reader :delete_on_termination
62
+
63
+ alias_method :delete_on_termination?, :delete_on_termination
64
+
65
+ # Allows you to toggle the delete on termination state.
66
+ #
67
+ # network_interface.attachment.delete_on_termination = false
68
+ #
69
+ # @param [Boolean] state
70
+ #
71
+ def delete_on_termination= state
72
+ opts = {}
73
+ opts[:network_interface_id] = network_interface.id
74
+ opts[:attachment] = {}
75
+ opts[:attachment][:attachment_id] = id
76
+ opts[:attachment][:delete_on_termination] = state
77
+ network_interface.client.modify_network_interface_attribute(opts)
78
+ end
79
+
80
+ # Detaches the network interface from the instance.
81
+ #
82
+ # @param [Hash] options
83
+ #
84
+ # @option options [Boolean] :force (false) Set true to force
85
+ # a detachment.
86
+ #
87
+ # @return [nil]
88
+ #
89
+ def detach options = {}
90
+ client_opts = {}
91
+ client_opts[:attachment_id] = attachment_id
92
+ client_opts[:force] = options[:force] == true
93
+ network_interface.client.detach_network_interface(client_opts)
94
+ end
95
+ alias_method :delete, :detach
96
+
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,103 @@
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 NetworkInterfaceCollection < Collection
17
+
18
+ include TaggedCollection
19
+ include Core::Collection::Simple
20
+
21
+ # Creates a network interface.
22
+ #
23
+ # @param [Hash] options
24
+ #
25
+ # @option options [Subnet,String] :subnet The subnet or subnet id
26
+ # to associate with the network interface.
27
+ #
28
+ # @option options [String] :private_ip_address The private IP address
29
+ # of the network interface.
30
+ #
31
+ # @option options [String] :description The description of the
32
+ # network interface.
33
+ #
34
+ # @option options [Array<SecurityGroup>,Array<String>] :security_groups
35
+ # A list of security groups (or security group id strings) that
36
+ # should be used by this network interface.
37
+ #
38
+ # @return [NetworkInterface]
39
+ #
40
+ def create options = {}
41
+
42
+ client_opts = {}
43
+
44
+ client_opts[:subnet_id] = subnet_id_option(options)
45
+
46
+ client_opts[:private_ip_address] = options[:private_ip_address] if
47
+ options.key?(:private_ip_address)
48
+
49
+ client_opts[:description] = options[:description] if
50
+ options.key?(:description)
51
+
52
+ groups = groups_options(options)
53
+ client_opts[:groups] = groups if groups
54
+
55
+ resp = client.create_network_interface(client_opts)
56
+
57
+ NetworkInterface.new_from(:create_network_interface,
58
+ resp.network_interface,
59
+ resp.network_interface.network_interface_id,
60
+ :config => config)
61
+
62
+ end
63
+
64
+ # @param [String] network_interface_id
65
+ # @return [NetworkInterface]
66
+ def [] network_interface_id
67
+ NetworkInterface.new(network_interface_id, :config => config)
68
+ end
69
+
70
+ protected
71
+ def groups_options options
72
+
73
+ # accept this option a variety of different ways
74
+ groups = options[:security_groups]
75
+ groups ||= options[:security_group_ids]
76
+ groups ||= options[:security_group]
77
+ groups ||= options[:security_group_id]
78
+
79
+ if groups
80
+ [groups].flatten.map{|sg| sg.is_a?(SecurityGroup) ? sg.id : sg }
81
+ else
82
+ nil
83
+ end
84
+
85
+ end
86
+
87
+ protected
88
+ def _each_item options = {}, &block
89
+ resp = filtered_request(:describe_network_interfaces, options, &block)
90
+ resp.network_interface_set.each do |n|
91
+
92
+ network_interface = NetworkInterface.new_from(
93
+ :describe_network_interfaces, n,
94
+ n.network_interface_id, :config => config)
95
+
96
+ yield(network_interface)
97
+
98
+ end
99
+ end
100
+
101
+ end
102
+ end
103
+ end
@@ -66,7 +66,17 @@ module AWS
66
66
  :volumes,
67
67
  :snapshots,
68
68
  :reserved_instances,
69
- :reserved_instances_offerings
69
+ :reserved_instances_offerings,
70
+ :vpcs,
71
+ :subnets,
72
+ :network_acls,
73
+ :route_tables,
74
+ :network_interfaces,
75
+ :internet_gateways,
76
+ :customer_gateways,
77
+ :vpn_gateways,
78
+ :dhcp_options,
79
+ :vpn_connections,
70
80
  ]
71
81
 
72
82
  PROXIED_METHODS.each do |method|