aws-sdk 1.1.4 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/aws.rb +2 -0
- data/lib/aws/api_config/ELB-2011-08-15.yml +380 -0
- data/lib/aws/api_config/SNS-2010-03-31.yml +2 -2
- data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +5 -5
- data/lib/aws/core.rb +18 -3
- data/lib/aws/core/client_logging.rb +5 -6
- data/lib/aws/core/collection.rb +241 -0
- data/lib/aws/core/collection/batchable.rb +133 -0
- data/lib/aws/core/collection/limitable.rb +92 -0
- data/lib/aws/core/collection/simple.rb +89 -0
- data/lib/aws/core/configuration.rb +23 -0
- data/lib/aws/core/option_grammar.rb +2 -0
- data/lib/aws/core/page_result.rb +73 -0
- data/lib/aws/ec2/security_group.rb +154 -89
- data/lib/aws/ec2/security_group/egress_ip_permission_collection.rb +1 -2
- data/lib/aws/ec2/security_group/{ip_permission_collection.rb → ingress_ip_permission_collection.rb} +4 -1
- data/lib/aws/ec2/security_group/ip_permission.rb +23 -45
- data/lib/aws/elb.rb +65 -0
- data/lib/aws/elb/availability_zone_collection.rb +138 -0
- data/lib/aws/elb/backend_server_policy_collection.rb +150 -0
- data/lib/aws/elb/client.rb +35 -0
- data/lib/aws/elb/client/xml.rb +33 -0
- data/lib/aws/elb/config.rb +18 -0
- data/lib/aws/elb/errors.rb +30 -0
- data/lib/aws/elb/instance_collection.rb +174 -0
- data/lib/aws/elb/listener.rb +189 -0
- data/lib/aws/elb/listener_collection.rb +119 -0
- data/lib/aws/elb/listener_opts.rb +45 -0
- data/lib/aws/elb/listener_spec.rb +14 -0
- data/lib/aws/elb/load_balancer.rb +255 -0
- data/lib/aws/elb/load_balancer_collection.rb +113 -0
- data/lib/aws/elb/load_balancer_policy.rb +93 -0
- data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
- data/lib/aws/elb/request.rb +23 -0
- data/lib/aws/iam/collection.rb +24 -26
- data/lib/aws/iam/group_user_collection.rb +21 -28
- data/lib/aws/iam/server_certificate_collection.rb +1 -37
- data/lib/aws/record.rb +1 -1
- data/lib/aws/record/base.rb +14 -1
- data/lib/aws/record/finder_methods.rb +4 -1
- data/lib/aws/record/validations.rb +73 -32
- data/lib/aws/{core/api_config_transform.rb → record/validators/method.rb} +9 -12
- data/lib/aws/s3/bucket_collection.rb +6 -4
- data/lib/aws/s3/client.rb +37 -6
- data/lib/aws/s3/config.rb +3 -1
- data/lib/aws/s3/prefixed_collection.rb +1 -2
- data/lib/aws/s3/presigned_post.rb +37 -4
- data/lib/aws/s3/s3_object.rb +93 -1
- data/lib/aws/simple_db/domain.rb +8 -0
- data/lib/aws/simple_db/item.rb +15 -0
- data/lib/aws/simple_db/item_collection.rb +255 -201
- data/lib/aws/simple_db/item_data.rb +1 -1
- data/lib/aws/simple_email_service/client.rb +0 -1
- data/lib/aws/sns/client.rb +0 -1
- metadata +107 -55
- data/lib/aws/core/collections.rb +0 -229
- data/lib/aws/simple_email_service/client/options.rb +0 -21
- data/lib/aws/sns/client/options.rb +0 -21
@@ -0,0 +1,119 @@
|
|
1
|
+
# Copyright 2011 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 ELB
|
16
|
+
|
17
|
+
class ListenerCollection
|
18
|
+
|
19
|
+
include ListenerOpts
|
20
|
+
include Core::Collection::Simple
|
21
|
+
|
22
|
+
def initialize load_balancer, options = {}
|
23
|
+
@load_balancer = load_balancer
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [LoadBalancer]
|
28
|
+
attr_reader :load_balancer
|
29
|
+
|
30
|
+
# @param [Hash] options
|
31
|
+
#
|
32
|
+
# @option options [Integer] :port Specifies the external
|
33
|
+
# load balancer port number. This property cannot be modified for
|
34
|
+
# the life of the LoadBalancer.
|
35
|
+
#
|
36
|
+
# @option options [String,Symbol] :protocol Specifies the load balancer
|
37
|
+
# transport protocol to use for routing. Valid values include:
|
38
|
+
#
|
39
|
+
# @option options [Integer] :instance_port Specifies the TCP port on
|
40
|
+
# which the instance server is listening. This property cannot be
|
41
|
+
# modified for the life of the load balancer.
|
42
|
+
#
|
43
|
+
# @option options [String,Symbol] :instance_protocol Specifies the
|
44
|
+
# protocol to use for routing traffic to back-end instances. Valid
|
45
|
+
# values include:
|
46
|
+
#
|
47
|
+
# * :http, 'HTTP'
|
48
|
+
# * :https, 'HTTPS'
|
49
|
+
# * :tcp, 'TCP'
|
50
|
+
# * :ssl, 'SSL'
|
51
|
+
#
|
52
|
+
# This property cannot be modified for the life of the load balacner.
|
53
|
+
#
|
54
|
+
# NOTE: If the front-end protocol is HTTP or HTTPS, +:instance_protocol+
|
55
|
+
# has to be at the same protocol layer, i.e., HTTP or HTTPS. Likewise,
|
56
|
+
# if the front-end protocol is TCP or SSL, +:instance_protocol+ has
|
57
|
+
# to be TCP or SSL.
|
58
|
+
#
|
59
|
+
# NOTE: If there is another listener with the same +:instance_port+
|
60
|
+
# whose +:instance_protocol+ is secure, i.e., HTTPS or SSL, the
|
61
|
+
# listener's +:instance_protocol+ has to be secure, i.e., HTTPS
|
62
|
+
# or SSL. If there is another listener with the same +:instance_port+
|
63
|
+
# whose +:instance_protocol+ is HTTP or TCP, the listener's
|
64
|
+
# +:instance_protocol+ must be either HTTP or TCP.
|
65
|
+
#
|
66
|
+
# * :tcp, 'TCP'
|
67
|
+
# * :http, 'HTTP'
|
68
|
+
#
|
69
|
+
# This property cannot be modified for the life of the load balancer.
|
70
|
+
#
|
71
|
+
# @option options [String,IAM::ServerCertificate] :server_certificate The
|
72
|
+
# ARN string of an IAM::ServerCertifcate or an IAM::ServerCertificate
|
73
|
+
# object. Reqruied for HTTPs listeners.
|
74
|
+
#
|
75
|
+
# @return [Listener]
|
76
|
+
def create options = {}
|
77
|
+
|
78
|
+
format_listener_opts(options)
|
79
|
+
|
80
|
+
client.create_load_balancer_listeners(
|
81
|
+
:load_balancer_name => load_balancer.name,
|
82
|
+
:listeners => [options])
|
83
|
+
|
84
|
+
Listener.new(load_balancer,
|
85
|
+
options[:load_balancer_port],
|
86
|
+
options.merge(:config => config))
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
# @return [Listener]
|
91
|
+
def [] port
|
92
|
+
Listener.new(load_balancer, port, :config => config)
|
93
|
+
end
|
94
|
+
|
95
|
+
protected
|
96
|
+
def _each_item options = {}
|
97
|
+
load_balancer.listener_descriptions.each do |desc|
|
98
|
+
|
99
|
+
desc = desc.listener
|
100
|
+
|
101
|
+
opts = {}
|
102
|
+
opts[:config] = config
|
103
|
+
opts[:protocol] = desc.protocol
|
104
|
+
opts[:instance_port] = desc.instance_port
|
105
|
+
opts[:instance_protocol] = desc.instance_protocol
|
106
|
+
opts[:ssl_certificate_id] = desc.ssl_certificate_id if
|
107
|
+
desc.respond_to?(:ssl_certificate_id)
|
108
|
+
|
109
|
+
listener = Listener.new(load_balancer, desc.load_balancer_port, opts)
|
110
|
+
|
111
|
+
yield(listener)
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Copyright 2011 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 ELB
|
16
|
+
|
17
|
+
# @private
|
18
|
+
module ListenerOpts
|
19
|
+
|
20
|
+
# convert protocols from symbols to strings (e.g. :http to 'HTTP')
|
21
|
+
protected
|
22
|
+
def format_listener_opts options
|
23
|
+
|
24
|
+
# accept the :load_balancer_port option by :port
|
25
|
+
options[:load_balancer_port] = options.delete(:port) if
|
26
|
+
options[:port]
|
27
|
+
|
28
|
+
# convert symbolized protocol names into upper-cased strings
|
29
|
+
[:protocol, :instance_protocol].each do |opt|
|
30
|
+
options[opt] = options[opt].to_s.upcase if options[opt]
|
31
|
+
end
|
32
|
+
|
33
|
+
# convert iam server certificates into the ssl certificate id
|
34
|
+
if cert = options.delete(:server_certificate)
|
35
|
+
options[:ssl_certificate_id] = cert.is_a?(IAM::ServerCertificate) ?
|
36
|
+
cert.arn : cert
|
37
|
+
end
|
38
|
+
|
39
|
+
options
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Copyright 2011 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
|
+
|
@@ -0,0 +1,255 @@
|
|
1
|
+
# Copyright 2011 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 ELB
|
16
|
+
|
17
|
+
|
18
|
+
#
|
19
|
+
# @attr_reader [String] name The name of the load balancer.
|
20
|
+
#
|
21
|
+
# @attr_reader [Array<String>] availability_zone_names Return the names of
|
22
|
+
# the availability zones this load balancer routes traffic to.
|
23
|
+
#
|
24
|
+
# @attr_reader [String] canonical_hosted_zone_name Provides the name of
|
25
|
+
# the Amazon Route 53 hosted zone that is associated with the load
|
26
|
+
# balancer. For more information: {http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/index.html?using-domain-names-with-elb.html}.
|
27
|
+
#
|
28
|
+
# @attr_reader [String] canonical_hosted_zone_name_id Provides the ID of
|
29
|
+
# the Amazon Route 53 hosted zone name that is associated with the
|
30
|
+
# load balancer. For more information: {http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/index.html?using-domain-names-with-elb.html}.
|
31
|
+
#
|
32
|
+
# @attr_reader [String] dns_name Specifies the external DNS name
|
33
|
+
# associated with this load balancer.
|
34
|
+
#
|
35
|
+
class LoadBalancer < Core::Resource
|
36
|
+
|
37
|
+
def initialize name, options = {}
|
38
|
+
super(options.merge(:name => name.to_s))
|
39
|
+
end
|
40
|
+
|
41
|
+
attribute :name, :as => :load_balancer_name, :static => true
|
42
|
+
|
43
|
+
#availability_zones
|
44
|
+
attribute :availability_zone_names, :as => :availability_zones
|
45
|
+
|
46
|
+
#backend_server_policies
|
47
|
+
attribute :backend_server_descriptions
|
48
|
+
|
49
|
+
attribute :canonical_hosted_zone_name, :static => true
|
50
|
+
|
51
|
+
attribute :canonical_hosted_zone_name_id, :static => true
|
52
|
+
|
53
|
+
attribute :created_time, :static => true
|
54
|
+
|
55
|
+
attribute :dns_name, :static => true
|
56
|
+
|
57
|
+
#health_check_configuration
|
58
|
+
attribute :health_check_description, :as => :health_check
|
59
|
+
|
60
|
+
#instances
|
61
|
+
attribute :instance_descriptions, :as => :instances
|
62
|
+
|
63
|
+
#listeners
|
64
|
+
attribute :listener_descriptions
|
65
|
+
|
66
|
+
#source_security_group
|
67
|
+
attribute :security_group_description,
|
68
|
+
:as => :source_security_group,
|
69
|
+
:static => true
|
70
|
+
|
71
|
+
populates_from(:describe_load_balancers) do |resp|
|
72
|
+
resp.load_balancer_descriptions.find do |lb|
|
73
|
+
lb.load_balancer_name == name
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# A collection that help maanage the availability zones for
|
78
|
+
# this load balancer.
|
79
|
+
#
|
80
|
+
# @example enable an availability zone
|
81
|
+
#
|
82
|
+
# load_balancer.availability_zones.enable('us-east-1b')
|
83
|
+
#
|
84
|
+
# @example disable an availability zone
|
85
|
+
#
|
86
|
+
# load_balancer.availability_zones.disable('us-east-1b')
|
87
|
+
#
|
88
|
+
# @example list enabled availability zoens
|
89
|
+
#
|
90
|
+
# load_balancer.availability_zones.each do |zone|
|
91
|
+
# puts zone.name
|
92
|
+
# end
|
93
|
+
#
|
94
|
+
# @return [AvailabilityZoneCollection] Returns a collection that
|
95
|
+
# represents this load balancer's availability zones. You can
|
96
|
+
# use this collection to enable and disable availability zones.
|
97
|
+
def availability_zones
|
98
|
+
AvailabilityZoneCollection.new(self)
|
99
|
+
end
|
100
|
+
|
101
|
+
# @return [ListenerCollection]
|
102
|
+
def listeners
|
103
|
+
ListenerCollection.new(self)
|
104
|
+
end
|
105
|
+
|
106
|
+
# @return [PolicyCollection]
|
107
|
+
def policies
|
108
|
+
LoadBalancerPolicyCollection.new(self)
|
109
|
+
end
|
110
|
+
|
111
|
+
# @return [InstanceCollection]
|
112
|
+
def instances
|
113
|
+
InstanceCollection.new(self)
|
114
|
+
end
|
115
|
+
|
116
|
+
# @return [BackendServerPolicyCollection]
|
117
|
+
def backend_server_policies
|
118
|
+
BackendServerPolicyCollection.new(self)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Updates the configuration that drives the instance health checks.
|
122
|
+
#
|
123
|
+
# You only need to pass the options you want to change. You can
|
124
|
+
# call {#health_check_configuration} if you want to see what the
|
125
|
+
# current configuration values are.
|
126
|
+
#
|
127
|
+
# @param [Hash] options
|
128
|
+
#
|
129
|
+
# @option options [Integer] :healthy_threshold Specifies the number of
|
130
|
+
# consecutive health probe successes required before moving the
|
131
|
+
# instance to the Healthy state.
|
132
|
+
#
|
133
|
+
# @option options [Integer] :unhealthy_threshold Specifies the number
|
134
|
+
# of consecutive health probe failures required before moving the
|
135
|
+
# instance to the Unhealthy state.
|
136
|
+
#
|
137
|
+
# @option options [Integer] :interval Specifies the approximate
|
138
|
+
# interval, in seconds, between health checks of an individual
|
139
|
+
# instance.
|
140
|
+
#
|
141
|
+
# @option options [Integer] :timeout Specifies the amount of time, in
|
142
|
+
# seconds, during which no response means a failed health probe.
|
143
|
+
# This value must be less than the +:interval+ value.
|
144
|
+
#
|
145
|
+
# @option options [String] :target Specifies the instance being checked.
|
146
|
+
#
|
147
|
+
# This option should be formatted like: "TCP:80"
|
148
|
+
#
|
149
|
+
# * The protocol is either TCP, HTTP, HTTPS, or SSL.
|
150
|
+
# * The range of valid ports is one (1) through 65535.
|
151
|
+
#
|
152
|
+
# TCP is the default, specified as a TCP: port pair, for example
|
153
|
+
# "TCP:5000". In this case a healthcheck simply attempts to open a
|
154
|
+
# TCP connection to the instance on the specified port. Failure to
|
155
|
+
# connect within the configured timeout is considered unhealthy.
|
156
|
+
#
|
157
|
+
# SSL is also specified as SSL: port pair, for example, SSL:5000.
|
158
|
+
# For HTTP or HTTPS protocol, the situation is different. You have
|
159
|
+
# to include a ping path in the string. HTTP is specified as a
|
160
|
+
# HTTP:port;/;PathToPing; grouping, for example
|
161
|
+
# "HTTP:80/weather/us/wa/seattle". In this case, a HTTP GET request
|
162
|
+
# is issued to the instance on the given port and path. Any answer
|
163
|
+
# other than "200 OK" within the timeout period is considered
|
164
|
+
# unhealthy.
|
165
|
+
#
|
166
|
+
# The total length of the HTTP ping target needs to be 1024 16-bit
|
167
|
+
# Unicode characters or less.
|
168
|
+
#
|
169
|
+
def configure_health_check options = {}
|
170
|
+
|
171
|
+
new_config = health_check_configuration.merge(options)
|
172
|
+
|
173
|
+
response = client.configure_health_check(
|
174
|
+
:load_balancer_name => name,
|
175
|
+
:health_check => new_config)
|
176
|
+
|
177
|
+
new_config
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
# Returns a hash of the various health probes conducted on the
|
182
|
+
# load balancer instances. The following entries are returned:
|
183
|
+
#
|
184
|
+
# * +:healthy_threshold+
|
185
|
+
# * +:unhealthy_threshold+
|
186
|
+
# * +:interval+
|
187
|
+
# * +:target+
|
188
|
+
# * +:timeout+
|
189
|
+
#
|
190
|
+
# See {#configure_health_check} for more details on what each of the
|
191
|
+
# configuration values mean.
|
192
|
+
#
|
193
|
+
# @return [Hash]
|
194
|
+
#
|
195
|
+
def health_check_configuration
|
196
|
+
cfg = health_check_description
|
197
|
+
{
|
198
|
+
:healthy_threshold => cfg.healthy_threshold,
|
199
|
+
:unhealthy_threshold => cfg.unhealthy_threshold,
|
200
|
+
:interval => cfg.interval,
|
201
|
+
:target => cfg.target,
|
202
|
+
:timeout => cfg.timeout,
|
203
|
+
}
|
204
|
+
end
|
205
|
+
|
206
|
+
# Generally you don't need to call this method, rather you can
|
207
|
+
# just pass the load balancer as a source to the various
|
208
|
+
# authorize and revoke methods of {SecurityGroup}:
|
209
|
+
#
|
210
|
+
# security_group.authorize_ingress(load_balancer)
|
211
|
+
#
|
212
|
+
# security_group.revoke_ingress(load_balancer)
|
213
|
+
#
|
214
|
+
# @return [Hash] Returns a hash that can be passed to the following
|
215
|
+
# {SecurityGroup} methods as a source:
|
216
|
+
#
|
217
|
+
# * {SecurityGroup#authorize_ingress}
|
218
|
+
# * {SecurityGroup#authorize_egress}
|
219
|
+
#
|
220
|
+
def source_security_group
|
221
|
+
{
|
222
|
+
:group_name => security_group_description.group_name,
|
223
|
+
:user_id => security_group_description.owner_alias,
|
224
|
+
}
|
225
|
+
end
|
226
|
+
|
227
|
+
# @return [Boolean] Returns true if the load balancer exists.
|
228
|
+
def exists?
|
229
|
+
client.describe_load_balancers(:load_balancer_names => [name])
|
230
|
+
true
|
231
|
+
rescue Errors::LoadBalancerNotFound
|
232
|
+
false
|
233
|
+
end
|
234
|
+
|
235
|
+
# Deletes the load balancer.
|
236
|
+
# @return [nil]
|
237
|
+
def delete
|
238
|
+
client.delete_load_balancer(:load_balancer_name => name)
|
239
|
+
nil
|
240
|
+
end
|
241
|
+
|
242
|
+
protected
|
243
|
+
def resource_identifiers
|
244
|
+
[[:load_balancer_name,name]]
|
245
|
+
end
|
246
|
+
|
247
|
+
protected
|
248
|
+
def get_resource attr_name
|
249
|
+
# describing all, makes memoization more efficient
|
250
|
+
client.describe_load_balancers
|
251
|
+
end
|
252
|
+
|
253
|
+
end
|
254
|
+
end
|
255
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# Copyright 2011 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 ELB
|
16
|
+
|
17
|
+
class LoadBalancerCollection
|
18
|
+
|
19
|
+
include ListenerOpts
|
20
|
+
include Core::Collection::Simple
|
21
|
+
|
22
|
+
# Creates and returns a load balancer. A load balancer requires:
|
23
|
+
#
|
24
|
+
# * a unique name
|
25
|
+
# * at least one availability zone
|
26
|
+
# * at least one listener
|
27
|
+
#
|
28
|
+
# An example that creates a load balancer in two availability zones
|
29
|
+
# with a single listener:
|
30
|
+
#
|
31
|
+
# load_balancer = elb.load_balancers.create('my-load-balancer',
|
32
|
+
# :availability_zones => %w(us-east-1a us-east-1b),
|
33
|
+
# :listeners => [{
|
34
|
+
# :port => 80,
|
35
|
+
# :protocol => :http,
|
36
|
+
# :instance_port => 80,
|
37
|
+
# :instance_protocol => :http,
|
38
|
+
# }])
|
39
|
+
#
|
40
|
+
# @param [String] name The name of your load balancer. The name must
|
41
|
+
# be unique within your set of load balancers.
|
42
|
+
#
|
43
|
+
# @param [Hash] options
|
44
|
+
#
|
45
|
+
# @option options [required,Array] :availability_zones An array of
|
46
|
+
# one or more availability zones. Values may be availability zone
|
47
|
+
# name strings, or {AWS::EC2::AvabilityZone} objects.
|
48
|
+
#
|
49
|
+
# @option options [required,Array] :listeners An array of load balancer
|
50
|
+
# listener options. Each value must be an array with the following
|
51
|
+
# keys:
|
52
|
+
#
|
53
|
+
# +:port+
|
54
|
+
# +:protocol+
|
55
|
+
# +:instance_port+
|
56
|
+
# +:instance_protocol+
|
57
|
+
#
|
58
|
+
# Port values should be integers, and protocols should be symbols or
|
59
|
+
# strings (e.g. :http, or 'HTTP'). See {ListenerCollection#create}
|
60
|
+
# for more detailed description of each option.
|
61
|
+
#
|
62
|
+
# @option options [String,IAM::ServerCertificate] :server_certificate (nil)
|
63
|
+
# The ARN string of an IAM::ServerCertifcate or an
|
64
|
+
# IAM::ServerCertificate object. Reqruied for HTTPs listeners.
|
65
|
+
#
|
66
|
+
def create name, options = {}
|
67
|
+
|
68
|
+
zones = [options[:availability_zones]].flatten.collect do |zone|
|
69
|
+
zone.is_a?(EC2::AvailabilityZone) ? zone.name : zone
|
70
|
+
end
|
71
|
+
|
72
|
+
listeners = [options[:listeners]].flatten.collect do |listener_opts|
|
73
|
+
format_listener_opts(listener_opts)
|
74
|
+
end
|
75
|
+
|
76
|
+
response = client.create_load_balancer(
|
77
|
+
:load_balancer_name => name.to_s,
|
78
|
+
:availability_zones => zones,
|
79
|
+
:listeners => listeners)
|
80
|
+
|
81
|
+
opts = {}
|
82
|
+
opts[:config] = config
|
83
|
+
opts[:dns_name] = response.dns_name
|
84
|
+
|
85
|
+
LoadBalancer.new(name, opts)
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
# @return [LoadBalancer] Returns the load balancer with the given
|
90
|
+
# name. This does not make a request, just returns a reference.
|
91
|
+
def [] name
|
92
|
+
LoadBalancer.new(name, :config => config)
|
93
|
+
end
|
94
|
+
|
95
|
+
protected
|
96
|
+
def _each_item options = {}, &block
|
97
|
+
response = client.describe_load_balancers
|
98
|
+
response.load_balancer_descriptions.each do |description|
|
99
|
+
|
100
|
+
load_balancer = LoadBalancer.new_from(
|
101
|
+
:describe_load_balancers,
|
102
|
+
description,
|
103
|
+
description.load_balancer_name,
|
104
|
+
:config => config)
|
105
|
+
|
106
|
+
yield(load_balancer)
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|