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.
- data/lib/aws/api_config/EC2-2011-12-15.yml +2791 -0
- data/lib/aws/core.rb +4 -4
- data/lib/aws/core/client.rb +1 -0
- data/lib/aws/core/client_logging.rb +9 -2
- data/lib/aws/core/lazy_error_classes.rb +1 -1
- data/lib/aws/core/response.rb +5 -0
- data/lib/aws/core/service_interface.rb +3 -2
- data/lib/aws/core/uri_escape.rb +1 -2
- data/lib/aws/ec2.rb +80 -1
- data/lib/aws/ec2/client.rb +29 -10
- data/lib/aws/ec2/client/xml.rb +51 -1
- data/lib/aws/ec2/customer_gateway.rb +90 -0
- data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
- data/lib/aws/ec2/dhcp_options.rb +106 -0
- data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
- data/lib/aws/ec2/filtered_collection.rb +27 -2
- data/lib/aws/ec2/image.rb +7 -4
- data/lib/aws/ec2/instance.rb +54 -2
- data/lib/aws/ec2/instance_collection.rb +5 -3
- data/lib/aws/ec2/internet_gateway.rb +122 -0
- data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
- data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
- data/lib/aws/ec2/network_acl.rb +254 -0
- data/lib/aws/ec2/network_acl/association.rb +56 -0
- data/lib/aws/ec2/network_acl/entry.rb +147 -0
- data/lib/aws/ec2/network_acl_collection.rb +65 -0
- data/lib/aws/ec2/network_interface.rb +174 -0
- data/lib/aws/ec2/network_interface/attachment.rb +100 -0
- data/lib/aws/ec2/network_interface_collection.rb +103 -0
- data/lib/aws/ec2/region.rb +11 -1
- data/lib/aws/ec2/resource.rb +6 -2
- data/lib/aws/ec2/route_table.rb +204 -0
- data/lib/aws/ec2/route_table/association.rb +119 -0
- data/lib/aws/ec2/route_table/route.rb +113 -0
- data/lib/aws/ec2/route_table_collection.rb +73 -0
- data/lib/aws/ec2/security_group.rb +15 -5
- data/lib/aws/ec2/security_group_collection.rb +15 -12
- data/lib/aws/ec2/subnet.rb +161 -0
- data/lib/aws/ec2/subnet_collection.rb +115 -0
- data/lib/aws/ec2/vpc.rb +166 -0
- data/lib/aws/ec2/vpc_collection.rb +71 -0
- data/lib/aws/ec2/vpn_connection.rb +99 -0
- data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
- data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
- data/lib/aws/ec2/vpn_gateway.rb +123 -0
- data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
- data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
- data/lib/aws/iam/login_profile.rb +4 -0
- data/lib/aws/iam/user.rb +6 -0
- data/lib/aws/record/hash_model.rb +3 -3
- data/lib/aws/simple_workflow.rb +6 -3
- data/lib/aws/simple_workflow/activity_task_collection.rb +7 -2
- data/lib/aws/simple_workflow/decision_task_collection.rb +11 -5
- data/lib/aws/simple_workflow/option_formatters.rb +7 -0
- data/lib/net/http/connection_pool.rb +19 -5
- metadata +33 -5
- data/lib/aws/api_config/EC2-2011-02-28.yml +0 -2314
@@ -0,0 +1,73 @@
|
|
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 CustomerGatewayCollection < Collection
|
18
|
+
|
19
|
+
include TaggedCollection
|
20
|
+
include Core::Collection::Simple
|
21
|
+
|
22
|
+
# @param [Integer] bgp_asn The customer gateway's Border Gateway
|
23
|
+
# Protocol (BGP) Autonomous System Number (ASN).
|
24
|
+
#
|
25
|
+
# @param [String] ip_address The Internet-routable IP address for the
|
26
|
+
# customer gateway's outside interface. The address must be static.
|
27
|
+
#
|
28
|
+
# @param [Hash] options
|
29
|
+
#
|
30
|
+
# @option options [String] :vpn_type ('ipsec.1') The type of VPN
|
31
|
+
# connection this customer gateway supports.
|
32
|
+
#
|
33
|
+
# @return [CustomerGateway]
|
34
|
+
#
|
35
|
+
def create bgp_asn, ip_address, options = {}
|
36
|
+
|
37
|
+
client_opts = {}
|
38
|
+
client_opts[:bgp_asn] = bgp_asn
|
39
|
+
client_opts[:public_ip] = ip_address
|
40
|
+
client_opts[:type] = options[:vpn_type] || 'ipsec.1'
|
41
|
+
|
42
|
+
resp = client.create_customer_gateway(client_opts)
|
43
|
+
|
44
|
+
CustomerGateway.new_from(:create_customer_gateway,
|
45
|
+
resp.customer_gateway,
|
46
|
+
resp.customer_gateway.customer_gateway_id,
|
47
|
+
:config => config)
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param [String] customer_gateway_id
|
52
|
+
# @return [CustomerGateway]
|
53
|
+
def [] customer_gateway_id
|
54
|
+
CustomerGateway.new(customer_gateway_id, :config => config)
|
55
|
+
end
|
56
|
+
|
57
|
+
protected
|
58
|
+
|
59
|
+
def _each_item options = {}, &block
|
60
|
+
response = filtered_request(:describe_customer_gateways, options, &block)
|
61
|
+
response.customer_gateway_set.each do |g|
|
62
|
+
|
63
|
+
gateway = CustomerGateway.new_from(:describe_customer_gateways, g,
|
64
|
+
g.customer_gateway_id, :config => config)
|
65
|
+
|
66
|
+
yield(gateway)
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,106 @@
|
|
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 DHCPOptions < Resource
|
18
|
+
|
19
|
+
include TaggedItem
|
20
|
+
|
21
|
+
# @private
|
22
|
+
def initialize dhcp_options_id, options = {}
|
23
|
+
@dhcp_options_id = dhcp_options_id
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [String]
|
28
|
+
attr_reader :dhcp_options_id
|
29
|
+
|
30
|
+
alias_method :id, :dhcp_options_id
|
31
|
+
|
32
|
+
attribute :dhcp_configuration_set, :static => true
|
33
|
+
|
34
|
+
protected :dhcp_configuration_set
|
35
|
+
|
36
|
+
populates_from(:create_dhcp_options) do |resp|
|
37
|
+
resp.dhcp_options if resp.dhcp_options.dhcp_options_id == id
|
38
|
+
end
|
39
|
+
|
40
|
+
populates_from(:describe_dhcp_options) do |resp|
|
41
|
+
resp.dhcp_options_set.find do |dhcp_options|
|
42
|
+
dhcp_options.dhcp_options_id == dhcp_options_id
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Hash]
|
47
|
+
def configuration
|
48
|
+
dhcp_configuration_set.inject({}) do |config,opt|
|
49
|
+
key = opt.key.gsub(/-/, '_').to_sym
|
50
|
+
values = opt.value_set.map(&:value)
|
51
|
+
values = values.first if key == :domain_name
|
52
|
+
values = values.first.to_i if key == :netbios_node_type
|
53
|
+
config.merge(key => values)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Associates this set of options to the given VPC.
|
58
|
+
# @param [VPC,String] vpc A {VPC} object or a vpc id string.
|
59
|
+
# @return [nil]
|
60
|
+
def associate vpc
|
61
|
+
client_opts = {}
|
62
|
+
client_opts[:dhcp_options_id] = dhcp_options_id
|
63
|
+
client_opts[:vpc_id] = vpc_id_option(vpc)
|
64
|
+
client.associate_dhcp_options(client_opts)
|
65
|
+
nil
|
66
|
+
end
|
67
|
+
|
68
|
+
# Deletes these DHCP options. An error will be raised if these
|
69
|
+
# options are currently associated to a VPC. To disassociate this
|
70
|
+
# set of options from a VPC, associate a different set of options
|
71
|
+
# with the VPC.
|
72
|
+
#
|
73
|
+
# @return [nil]
|
74
|
+
#
|
75
|
+
def delete
|
76
|
+
client_opts = {}
|
77
|
+
client_opts[:dhcp_options_id] = dhcp_options_id
|
78
|
+
client.delete_dhcp_options(client_opts)
|
79
|
+
nil
|
80
|
+
end
|
81
|
+
|
82
|
+
# @return [VPCCollection] Returns a collection that represents
|
83
|
+
# all VPCs currently using this dhcp options.
|
84
|
+
def vpcs
|
85
|
+
vpcs = VPCCollection.new(:config => config)
|
86
|
+
vpcs.filter('dhcp-options-id', dhcp_options_id)
|
87
|
+
end
|
88
|
+
|
89
|
+
# @return [Boolean] Returns true if the dhcp options exists.
|
90
|
+
def exists?
|
91
|
+
begin
|
92
|
+
get_resource
|
93
|
+
true
|
94
|
+
rescue Errors::InvalidDhcpOptionID::NotFound
|
95
|
+
false
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
protected
|
100
|
+
def vpc_id_option vpc
|
101
|
+
vpc.is_a?(VPC) ? vpc.vpc_id : vpc
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,87 @@
|
|
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 DHCPOptionsCollection < Collection
|
18
|
+
|
19
|
+
include TaggedCollection
|
20
|
+
include Core::Collection::Simple
|
21
|
+
|
22
|
+
# @param [Hash] options
|
23
|
+
#
|
24
|
+
# @option options [required,String] :domain_name A domain name of your
|
25
|
+
# choice (e.g., example.com).
|
26
|
+
#
|
27
|
+
# @option options [Array<String>] :domain_name_servers
|
28
|
+
# The IP addresses of domain name servers. You can specify up to
|
29
|
+
# four addresses.
|
30
|
+
#
|
31
|
+
# @option options [Array<String>] :ntp_servers
|
32
|
+
# The IP addresses of Network Time Protocol (NTP) servers. You can
|
33
|
+
# specify up to four addresses.
|
34
|
+
#
|
35
|
+
# @option options [Array<String>] :netbios_name_servers
|
36
|
+
# The IP addresses of NetBIOS name servers. You can specify up to
|
37
|
+
# four addresses.
|
38
|
+
#
|
39
|
+
# @option options [String] :netbios_node_type Value indicating the
|
40
|
+
# NetBIOS node type (1, 2, 4, or 8). For more information about the
|
41
|
+
# values, go to RFC 2132. We recommend you only use 2 at this time
|
42
|
+
# (broadcast and multicast are currently not supported).
|
43
|
+
#
|
44
|
+
def create options = {}
|
45
|
+
|
46
|
+
configurations = []
|
47
|
+
options.each_pair do |opt,values|
|
48
|
+
opt = opt.to_s.gsub(/_/, '-')
|
49
|
+
values = values.is_a?(Array) ? values : [values]
|
50
|
+
configurations << { :key => opt, :values => values.map(&:to_s) }
|
51
|
+
end
|
52
|
+
|
53
|
+
client_opts = {}
|
54
|
+
client_opts[:dhcp_configurations] = configurations
|
55
|
+
|
56
|
+
resp = client.create_dhcp_options(client_opts)
|
57
|
+
|
58
|
+
DHCPOptions.new_from(:create_dhcp_options,
|
59
|
+
resp.dhcp_options,
|
60
|
+
resp.dhcp_options.dhcp_options_id,
|
61
|
+
:config => config)
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
# @param [String] dhcp_options_id
|
66
|
+
# @return [DHCPOptions]
|
67
|
+
def [] dhcp_options_id
|
68
|
+
DHCPOptions.new(dhcp_options_id, :config => config)
|
69
|
+
end
|
70
|
+
|
71
|
+
protected
|
72
|
+
|
73
|
+
def _each_item options = {}, &block
|
74
|
+
response = filtered_request(:describe_dhcp_options, options, &block)
|
75
|
+
response.dhcp_options_set.each do |opts|
|
76
|
+
|
77
|
+
options = DHCPOptions.new_from(:describe_dhcp_options, opts,
|
78
|
+
opts.dhcp_options_id, :config => config)
|
79
|
+
|
80
|
+
yield(options)
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -47,11 +47,36 @@ module AWS
|
|
47
47
|
client.send(client_method, options)
|
48
48
|
end
|
49
49
|
|
50
|
+
protected
|
51
|
+
def vpc_id_option options
|
52
|
+
vpc_id = options[:vpc]
|
53
|
+
vpc_id ||= options[:vpc_id]
|
54
|
+
vpc_id ||= filter_value_for('vpc-id')
|
55
|
+
vpc_id = vpc_id.id if vpc_id.is_a?(VPC)
|
56
|
+
vpc_id
|
57
|
+
end
|
58
|
+
|
59
|
+
protected
|
60
|
+
def subnet_id_option options
|
61
|
+
subnet_id = options.delete(:subnet)
|
62
|
+
subnet_id ||= options[:subnet_id]
|
63
|
+
subnet_id ||= filter_value_for('subnet-id')
|
64
|
+
subnet_id = subnet_id.id if subnet_id.is_a?(Subnet)
|
65
|
+
subnet_id
|
66
|
+
end
|
67
|
+
|
68
|
+
protected
|
69
|
+
def filter_value_for filter_name
|
70
|
+
@filters.each do |filter|
|
71
|
+
return filter[:values].first if filter[:name] == filter_name
|
72
|
+
end
|
73
|
+
nil
|
74
|
+
end
|
75
|
+
|
50
76
|
# @private
|
51
77
|
protected
|
52
78
|
def preserved_options
|
53
|
-
{ :config => config,
|
54
|
-
:filters => @filters }
|
79
|
+
{ :config => config, :filters => @filters }
|
55
80
|
end
|
56
81
|
|
57
82
|
# @private
|
data/lib/aws/ec2/image.rb
CHANGED
@@ -128,6 +128,7 @@ module AWS
|
|
128
128
|
attribute :hypervisor, :to_sym => true, :static => true
|
129
129
|
|
130
130
|
attribute :block_device_mapping
|
131
|
+
|
131
132
|
protected :block_device_mapping
|
132
133
|
|
133
134
|
attribute :product_codes, :static => true do
|
@@ -231,12 +232,14 @@ module AWS
|
|
231
232
|
# image.add_product_codes ['ABCXYZ', 'MNOPQR']
|
232
233
|
#
|
233
234
|
# @param [Array<String>] product_codes
|
235
|
+
#
|
234
236
|
# @return [nil]
|
237
|
+
#
|
235
238
|
def add_product_codes *product_codes
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
client.modify_image_attribute(
|
239
|
+
client_opts = {}
|
240
|
+
client_opts[:image_id] = self.id
|
241
|
+
client_opts[:product_codes] = product_codes.flatten
|
242
|
+
client.modify_image_attribute(client_opts)
|
240
243
|
nil
|
241
244
|
end
|
242
245
|
|
data/lib/aws/ec2/instance.rb
CHANGED
@@ -274,11 +274,16 @@ module AWS
|
|
274
274
|
|
275
275
|
mutable_describe_call_attribute :ramdisk_id, :set_as => :ramdisk
|
276
276
|
|
277
|
-
|
278
|
-
|
277
|
+
mutable_describe_attribute :source_dest_check do
|
278
|
+
translates_output{|bool| bool == "true" }
|
279
|
+
end
|
280
|
+
|
281
|
+
alias_method :source_dest_check?, :source_dest_check
|
279
282
|
|
280
283
|
mutable_describe_call_attribute :group_set
|
281
284
|
|
285
|
+
describe_call_attribute :network_interface_set
|
286
|
+
|
282
287
|
mutable_describe_attribute(:user_data) do
|
283
288
|
translates_output {|v| Base64.decode64(v) if v }
|
284
289
|
translates_input {|v| Base64.encode64(v).strip }
|
@@ -351,6 +356,53 @@ module AWS
|
|
351
356
|
provider.provides :monitoring
|
352
357
|
end
|
353
358
|
|
359
|
+
# @return [VPC,nil] Returns the VPC this instance was launched in.
|
360
|
+
# If this instance was not launched inside a VPC, nil is returned.
|
361
|
+
def vpc
|
362
|
+
if vpc_id
|
363
|
+
VPC.new(vpc_id, :config => config)
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
# @return [Subnet,nil] Returns the VPC subnet this instance was
|
368
|
+
# launched in. Returns nil if this was not launched in a VPC.
|
369
|
+
def subnet
|
370
|
+
if subnet_id
|
371
|
+
Subnet.new(subnet_id, :vpc_id => vpc_id, :config => config)
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
# @return [Array<NetworkInterface>] Returns a list of elastic network
|
376
|
+
# interfaces attached to this instance (VPC only). Non-vpc
|
377
|
+
# instance may not have attached network interfaces.
|
378
|
+
def network_interfaces
|
379
|
+
network_interface_set.collect do |ni|
|
380
|
+
NetworkInterface.new_from(:describe_network_interfaces, ni,
|
381
|
+
ni.network_interface_id, :config => config)
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
385
|
+
# Attaches a network interface to this instance (VPC only).
|
386
|
+
#
|
387
|
+
# @param [NetworkInterface,String] network_interface A network interface
|
388
|
+
# (or network interface id string) to attach to this vpc instance.
|
389
|
+
#
|
390
|
+
# @param [Hash] options
|
391
|
+
#
|
392
|
+
# @option (see NetworkInterface#attach)
|
393
|
+
#
|
394
|
+
# @return [nil]
|
395
|
+
#
|
396
|
+
def attach_network_interface network_interface, options = {}
|
397
|
+
if network_interface.is_a?(NetworkInterface)
|
398
|
+
network_interface.attach(self, options)
|
399
|
+
else
|
400
|
+
i = NetworkInterface.new(network_interface, :config => config)
|
401
|
+
i.attach(self, options)
|
402
|
+
end
|
403
|
+
nil
|
404
|
+
end
|
405
|
+
|
354
406
|
# @return [Array<SecurityGroup>] Returns a list of security
|
355
407
|
# groups the instance belongs to.
|
356
408
|
def security_groups
|
@@ -169,8 +169,8 @@ module AWS
|
|
169
169
|
# Determines whether the instance stops or terminates on
|
170
170
|
# instance-initiated shutdown.
|
171
171
|
#
|
172
|
-
# @option options [String] :subnet (nil) The
|
173
|
-
# subnet to launch the instance in.
|
172
|
+
# @option options [Subnet,String] :subnet (nil) The VPC Subnet (or
|
173
|
+
# subnet id string) to launch the instance in.
|
174
174
|
#
|
175
175
|
# @option options [String] :private_ip_address (nil) If you're using VPC,
|
176
176
|
# you can optionally use this option to assign the instance a
|
@@ -236,7 +236,9 @@ module AWS
|
|
236
236
|
|
237
237
|
options[:placement] = placement unless placement.empty?
|
238
238
|
|
239
|
-
|
239
|
+
if subnet_id = subnet_id_option(options)
|
240
|
+
options[:subnet_id] = subnet_id
|
241
|
+
end
|
240
242
|
|
241
243
|
security_group_opts(options)
|
242
244
|
|
@@ -0,0 +1,122 @@
|
|
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/internet_gateway/attachment'
|
15
|
+
|
16
|
+
module AWS
|
17
|
+
class EC2
|
18
|
+
|
19
|
+
class InternetGateway < Resource
|
20
|
+
|
21
|
+
include TaggedItem
|
22
|
+
|
23
|
+
def initialize internet_gateway_id, options = {}
|
24
|
+
@internet_gateway_id = internet_gateway_id
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [String]
|
29
|
+
attr_reader :internet_gateway_id
|
30
|
+
|
31
|
+
alias_method :id, :internet_gateway_id
|
32
|
+
|
33
|
+
attribute :vpc_id
|
34
|
+
|
35
|
+
attribute :attachment_set
|
36
|
+
|
37
|
+
protected :attachment_set
|
38
|
+
|
39
|
+
populates_from(:describe_internet_gateways) do |resp|
|
40
|
+
resp.internet_gateway_set.find do |gateway|
|
41
|
+
gateway.internet_gateway_id == internet_gateway_id
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [Array<InternetGateway::Attachment>]
|
46
|
+
def attachments
|
47
|
+
attachment_set.map {|details| Attachment.new(self, details) }
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [VPC,nil] Returns the currently attached VPC, or nil
|
51
|
+
# if this gateway has not been attached.
|
52
|
+
def vpc
|
53
|
+
if attachment = attachments.first
|
54
|
+
attachment.vpc
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Attaches this internet gateway to the given VPC. If this
|
59
|
+
# gateway is already attached to a different VPC, it will
|
60
|
+
# be detached from that one first. If you pass nil, then
|
61
|
+
# this internet gateway will
|
62
|
+
#
|
63
|
+
# internet_gateway.vpc = 'vpc-123'
|
64
|
+
#
|
65
|
+
# @param [VPC,String] vpc A {VPC} object or a vpc id string.
|
66
|
+
#
|
67
|
+
def vpc= vpc
|
68
|
+
if attachment = attachments.first
|
69
|
+
attachment.delete
|
70
|
+
end
|
71
|
+
attach(vpc) if vpc
|
72
|
+
end
|
73
|
+
|
74
|
+
# Attaches this internet gateway to the given VPC.
|
75
|
+
# @param [VPC,String] vpc A {VPC} object or a vpc id string.
|
76
|
+
# @return [nil]
|
77
|
+
def attach vpc
|
78
|
+
client_opts = {}
|
79
|
+
client_opts[:internet_gateway_id] = internet_gateway_id
|
80
|
+
client_opts[:vpc_id] = vpc_id_option(vpc)
|
81
|
+
client.attach_internet_gateway(client_opts)
|
82
|
+
nil
|
83
|
+
end
|
84
|
+
|
85
|
+
# Detaches this internet gateway from the given VPC.
|
86
|
+
# @param [VPC,String] vpc A {VPC} object or a vpc id string.
|
87
|
+
# @return [nil]
|
88
|
+
def detach vpc
|
89
|
+
client_opts = {}
|
90
|
+
client_opts[:internet_gateway_id] = internet_gateway_id
|
91
|
+
client_opts[:vpc_id] = vpc_id_option(vpc)
|
92
|
+
client.detach_internet_gateway(client_opts)
|
93
|
+
nil
|
94
|
+
end
|
95
|
+
|
96
|
+
# Deletes this internet gateway.
|
97
|
+
# @return [nil]
|
98
|
+
def delete
|
99
|
+
client_opts = {}
|
100
|
+
client_opts[:internet_gateway_id] = internet_gateway_id
|
101
|
+
client.delete_internet_gateway(client_opts)
|
102
|
+
nil
|
103
|
+
end
|
104
|
+
|
105
|
+
# @return [Boolean] Returns true if the gateway exists.
|
106
|
+
def exists?
|
107
|
+
begin
|
108
|
+
get_resource
|
109
|
+
true
|
110
|
+
rescue Errors::InvalidInternetGatewayID::NotFound
|
111
|
+
false
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
protected
|
116
|
+
def vpc_id_option vpc
|
117
|
+
vpc.is_a?(VPC) ? vpc.vpc_id : vpc
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|