chef-provisioning-aws 3.0.0.pre.rc1 → 3.0.0.pre.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/lib/chef/provider/aws_cache_subnet_group.rb +1 -1
- data/lib/chef/provider/aws_cloudsearch_domain.rb +11 -5
- data/lib/chef/provider/aws_cloudwatch_alarm.rb +1 -1
- data/lib/chef/provider/aws_load_balancer.rb +2 -2
- data/lib/chef/provisioning/aws_driver/aws_tagger.rb +1 -1
- data/lib/chef/provisioning/aws_driver/driver.rb +86 -146
- data/lib/chef/provisioning/aws_driver/tagging_strategy/s3.rb +11 -1
- data/lib/chef/provisioning/aws_driver/version.rb +1 -1
- data/lib/chef/resource/aws_cloudsearch_domain.rb +6 -0
- data/lib/chef/resource/aws_rds_parameter_group.rb +1 -1
- data/spec/aws_support/matchers/create_an_aws_object.rb +4 -0
- data/spec/integration/aws_cache_subnet_group_spec.rb +1 -0
- data/spec/integration/aws_cloudwatch_alarm_spec.rb +12 -12
- data/spec/integration/aws_rds_parameter_group_spec.rb +2 -3
- data/spec/integration/aws_security_group_spec.rb +56 -61
- data/spec/integration/load_balancer_spec.rb +19 -66
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e72b88122b55d297b9a6d1deb67b9382e2970b28
|
4
|
+
data.tar.gz: 2524010329c49d98267ccaf4dfe2499ee7909f10
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf9349ad907b1570078a37b1d9e8cd2f5607bb251b6e16570ffd1570c59ccc52b4173ef2243dcf5bf56f4525b910f555c6701e72fa2b4d959747212d3d7c8ef7
|
7
|
+
data.tar.gz: 79d095797fb5d984a73cb01e820e88eda254c0958b960e454203e08714b0940353723480157de79228caf11ce932a171ee6ce0bcde65486b2764888d6483875d
|
data/Gemfile
CHANGED
@@ -81,7 +81,12 @@ class Chef::Provider::AwsCloudsearchDomain < Chef::Provisioning::AWSDriver::AWSP
|
|
81
81
|
|
82
82
|
def update_index_fields?(domain)
|
83
83
|
if ! new_resource.index_fields.nil?
|
84
|
-
|
84
|
+
index_fields.each do |index_field|
|
85
|
+
if ! new_resource.index_fields.include?(index_field.to_h[:options])
|
86
|
+
return true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
false
|
85
90
|
else
|
86
91
|
false
|
87
92
|
end
|
@@ -148,8 +153,9 @@ class Chef::Provider::AwsCloudsearchDomain < Chef::Provisioning::AWSDriver::AWSP
|
|
148
153
|
end
|
149
154
|
|
150
155
|
def scaling_parameters(object)
|
151
|
-
|
152
|
-
|
156
|
+
scaling_parameters = get_option(:scaling_parameters)
|
157
|
+
scaling_parameters.desired_instance_type = object[:search_instance_type]
|
158
|
+
scaling_parameters
|
153
159
|
end
|
154
160
|
|
155
161
|
def access_policies
|
@@ -157,7 +163,7 @@ class Chef::Provider::AwsCloudsearchDomain < Chef::Provisioning::AWSDriver::AWSP
|
|
157
163
|
end
|
158
164
|
|
159
165
|
def index_fields
|
160
|
-
cs_client.describe_index_fields(domain_name: new_resource.name)
|
166
|
+
cs_client.describe_index_fields(domain_name: new_resource.name).index_fields
|
161
167
|
end
|
162
168
|
|
163
169
|
def get_option(option_name, key=nil)
|
@@ -171,6 +177,6 @@ class Chef::Provider::AwsCloudsearchDomain < Chef::Provisioning::AWSDriver::AWSP
|
|
171
177
|
end
|
172
178
|
|
173
179
|
def cs_client
|
174
|
-
@cs_client ||= new_resource.driver.cloudsearch
|
180
|
+
@cs_client ||= new_resource.driver.cloudsearch
|
175
181
|
end
|
176
182
|
end
|
@@ -51,7 +51,7 @@ class Chef::Provider::AwsCloudwatchAlarm < Chef::Provisioning::AWSDriver::AWSPro
|
|
51
51
|
opts[opt].map! do |action|
|
52
52
|
if action.kind_of?(String) && !(action =~ /^arn:/)
|
53
53
|
aws_object = Chef::Resource::AwsSnsTopic.get_aws_object(action, resource: new_resource)
|
54
|
-
action = aws_object.
|
54
|
+
action = aws_object.attributes["TopicArn"] if aws_object
|
55
55
|
end
|
56
56
|
action
|
57
57
|
end
|
@@ -20,8 +20,8 @@ class Chef::Provider::AwsLoadBalancer < Chef::Provisioning::AWSDriver::AWSProvid
|
|
20
20
|
provides :aws_load_balancer
|
21
21
|
|
22
22
|
def destroy_aws_object(load_balancer)
|
23
|
-
converge_by "delete load balancer #{new_resource.name} (#{load_balancer.
|
24
|
-
load_balancer.
|
23
|
+
converge_by "delete load balancer #{new_resource.name} (#{load_balancer.load_balancer_name}) in #{region}" do
|
24
|
+
new_resource.driver.elb_client.delete_load_balancer(load_balancer_name: load_balancer.load_balancer_name)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -16,7 +16,7 @@ class AWSTagger
|
|
16
16
|
def_delegators :@tagging_strategy, :desired_tags, :current_tags, :set_tags, :delete_tags
|
17
17
|
|
18
18
|
def converge_tags
|
19
|
-
if desired_tags.nil?
|
19
|
+
if desired_tags.nil?
|
20
20
|
Chef::Log.debug "aws_tags not provided, nothing to converge"
|
21
21
|
return
|
22
22
|
end
|
@@ -159,96 +159,10 @@ module AWSDriver
|
|
159
159
|
aws_config_2[:region]
|
160
160
|
end
|
161
161
|
|
162
|
-
def cloudsearch
|
163
|
-
@cloudsearch ||=
|
164
|
-
@cloudsearch[api_version] ||= AWS::CloudSearch::Client.const_get("V#{api_version}").new
|
165
|
-
@cloudsearch[api_version]
|
162
|
+
def cloudsearch
|
163
|
+
@cloudsearch ||= Aws::CloudSearch::Client.new(aws_config)
|
166
164
|
end
|
167
|
-
|
168
|
-
def ec2
|
169
|
-
@ec2 ||= AWS::EC2.new(config: aws_config)
|
170
|
-
end
|
171
|
-
|
172
|
-
AWS_V2_SERVICES.each do |load_name, short_name|
|
173
|
-
class_eval <<-META
|
174
|
-
|
175
|
-
def #{short_name}_client
|
176
|
-
@#{short_name}_client ||= ::Aws::#{load_name}::Client.new(**aws_config_2)
|
177
|
-
end
|
178
|
-
|
179
|
-
def #{short_name}_resource
|
180
|
-
@#{short_name}_resource ||= ::Aws::#{load_name}::Resource.new(**(aws_config_2.merge({client: #{short_name}_client})))
|
181
|
-
end
|
182
|
-
|
183
|
-
META
|
184
|
-
end
|
185
|
-
|
186
|
-
def elb
|
187
|
-
@elb ||= AWS::ELB.new(config: aws_config)
|
188
|
-
end
|
189
|
-
|
190
|
-
def elasticache
|
191
|
-
@elasticache ||= AWS::ElastiCache::Client.new(config: aws_config)
|
192
|
-
end
|
193
|
-
|
194
|
-
def iam
|
195
|
-
@iam ||= AWS::IAM.new(config: aws_config)
|
196
|
-
end
|
197
|
-
|
198
|
-
def rds
|
199
|
-
@rds ||= ::Aws::RDS::Client.new(aws_config)
|
200
|
-
end
|
201
|
-
|
202
|
-
def s3
|
203
|
-
@s3 ||= AWS::S3.new(config: aws_config)
|
204
|
-
end
|
205
|
-
|
206
|
-
def sns
|
207
|
-
@sns ||= Aws::SNS::Client.new(config: aws_config)
|
208
|
-
end
|
209
|
-
|
210
|
-
def sqs
|
211
|
-
@sqs ||= AWS::SQS::Client.new(config: aws_config)
|
212
|
-
end
|
213
|
-
|
214
|
-
def auto_scaling
|
215
|
-
@auto_scaling ||= AWS::AutoScaling.new(config: aws_config)
|
216
|
-
end
|
217
|
-
|
218
|
-
def build_arn(partition: 'aws', service: nil, region: self.region, account_id: self.account_id, resource: nil)
|
219
|
-
"arn:#{partition}:#{service}:#{region}:#{account_id}:#{resource}"
|
220
|
-
end
|
221
|
-
|
222
|
-
def parse_arn(arn)
|
223
|
-
parts = arn.split(':', 6)
|
224
|
-
{
|
225
|
-
partition: parts[1],
|
226
|
-
service: parts[2],
|
227
|
-
region: parts[3],
|
228
|
-
account_id: parts[4],
|
229
|
-
resource: parts[5]
|
230
|
-
}
|
231
|
-
end
|
232
|
-
|
233
|
-
def account_id
|
234
|
-
begin
|
235
|
-
# We've got an AWS account root credential or an IAM admin with access rights
|
236
|
-
current_user = iam.client.get_user
|
237
|
-
arn = current_user[:user][:arn]
|
238
|
-
rescue AWS::IAM::Errors::AccessDenied => e
|
239
|
-
# If we don't have access, the error message still tells us our account ID and user ...
|
240
|
-
# https://forums.aws.amazon.com/thread.jspa?messageID=394344
|
241
|
-
if e.to_s !~ /\b(arn:aws:iam::[0-9]{12}:\S*)/
|
242
|
-
raise "IAM error response for GetUser did not include user ARN. Can't retrieve account ID."
|
243
|
-
end
|
244
|
-
arn = $1
|
245
|
-
end
|
246
|
-
parse_arn(arn)[:account_id]
|
247
|
-
end
|
248
|
-
|
249
|
-
# For creating things like AWS keypairs exclusively
|
250
|
-
@@chef_default_lock = Mutex.new
|
251
|
-
|
165
|
+
|
252
166
|
def self.canonicalize_url(driver_url, config)
|
253
167
|
[ driver_url, config ]
|
254
168
|
end
|
@@ -281,6 +195,13 @@ module AWSDriver
|
|
281
195
|
def allocate_load_balancer(action_handler, lb_spec, lb_options, machine_specs)
|
282
196
|
lb_options = deep_symbolize_keys(lb_options)
|
283
197
|
lb_options = AWSResource.lookup_options(lb_options, managed_entry_store: lb_spec.managed_entry_store, driver: self)
|
198
|
+
|
199
|
+
# renaming lb_options[:port] to lb_options[:load_balancer_port]
|
200
|
+
if lb_options[:listeners]
|
201
|
+
lb_options[:listeners].each do |listener|
|
202
|
+
listener[:load_balancer_port] = listener.delete(:port) if listener[:port]
|
203
|
+
end
|
204
|
+
end
|
284
205
|
# We delete the attributes, tags, health check, and sticky sessions here because they are not valid in the create call
|
285
206
|
# and must be applied afterward
|
286
207
|
lb_attributes = lb_options.delete(:attributes)
|
@@ -290,10 +211,11 @@ module AWSDriver
|
|
290
211
|
|
291
212
|
old_elb = nil
|
292
213
|
actual_elb = load_balancer_for(lb_spec)
|
293
|
-
if
|
214
|
+
if actual_elb.nil?
|
294
215
|
lb_options[:listeners] ||= get_listeners(:http)
|
216
|
+
|
295
217
|
if !lb_options[:subnets] && !lb_options[:availability_zones] && machine_specs
|
296
|
-
lb_options[:subnets] = machine_specs.map { |s| ec2_resource.
|
218
|
+
lb_options[:subnets] = machine_specs.map { |s| ec2_resource.instance(s.reference['instance_id']).subnet.id }.uniq
|
297
219
|
end
|
298
220
|
|
299
221
|
perform_action = proc { |desc, &block| action_handler.perform_action(desc, &block) }
|
@@ -309,10 +231,20 @@ module AWSDriver
|
|
309
231
|
action_handler.perform_action updates do
|
310
232
|
# IAM says the server certificate exists, but ELB throws this error
|
311
233
|
Chef::Provisioning::AWSDriver::AWSProvider.retry_with_backoff(::Aws::ElasticLoadBalancing::Errors::CertificateNotFound) do
|
234
|
+
lb_options[:listeners].each do |listener|
|
235
|
+
if listener.has_key?(:server_certificate)
|
236
|
+
listener[:ssl_certificate_id] = listener.delete(:server_certificate)
|
237
|
+
listener[:ssl_certificate_id] = listener[:ssl_certificate_id][:arn]
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
312
241
|
lb_options[:load_balancer_name]=lb_spec.name
|
313
242
|
actual_elb = elb.create_load_balancer(lb_options)
|
314
243
|
end
|
315
244
|
|
245
|
+
# load aws object for load balancer after create
|
246
|
+
actual_elb =load_balancer_for(lb_spec)
|
247
|
+
|
316
248
|
lb_spec.reference = {
|
317
249
|
'driver_version' => Chef::Provisioning::AWSDriver::VERSION,
|
318
250
|
'allocated_at' => Time.now.utc.to_s,
|
@@ -401,8 +333,8 @@ module AWSDriver
|
|
401
333
|
action += " (availability zones #{enable_zones.join(', ')})"
|
402
334
|
perform_action.call(action) do
|
403
335
|
begin
|
404
|
-
elb.
|
405
|
-
load_balancer_name: actual_elb.
|
336
|
+
elb.attach_load_balancer_to_subnets(
|
337
|
+
load_balancer_name: actual_elb.load_balancer_name,
|
406
338
|
subnets: attach_subnets
|
407
339
|
)
|
408
340
|
rescue ::Aws::ElasticLoadBalancing::Errors::InvalidConfigurationRequest => e
|
@@ -410,7 +342,7 @@ module AWSDriver
|
|
410
342
|
"Amazon does not have an atomic operation which allows this. You must create a new " +
|
411
343
|
"ELB with the correct subnets and move instances into it. Tried to attach subets " +
|
412
344
|
"#{attach_subnets.join(', ')} (availability zones #{enable_zones.join(', ')}) to " +
|
413
|
-
"existing ELB named #{actual_elb.
|
345
|
+
"existing ELB named #{actual_elb.load_balancer_name}"
|
414
346
|
raise e
|
415
347
|
end
|
416
348
|
end
|
@@ -422,8 +354,8 @@ module AWSDriver
|
|
422
354
|
disable_zones = (actual_zones_subnets.map {|s,z| z if detach_subnets.include?(s)}).compact
|
423
355
|
action += " (availability zones #{disable_zones.join(', ')})"
|
424
356
|
perform_action.call(action) do
|
425
|
-
elb.
|
426
|
-
load_balancer_name: actual_elb.
|
357
|
+
elb.detach_load_balancer_from_subnets(
|
358
|
+
load_balancer_name: actual_elb.load_balancer_name,
|
427
359
|
subnets: detach_subnets
|
428
360
|
)
|
429
361
|
end
|
@@ -434,49 +366,58 @@ module AWSDriver
|
|
434
366
|
if lb_options[:listeners]
|
435
367
|
add_listeners = {}
|
436
368
|
lb_options[:listeners].each { |l| add_listeners[l[:load_balancer_port]] = l }
|
437
|
-
actual_elb.
|
438
|
-
|
439
|
-
|
369
|
+
actual_elb.listener_descriptions.each do |listener_description|
|
370
|
+
listener = listener_description.listener
|
371
|
+
desired_listener = add_listeners.delete(listener.load_balancer_port)
|
440
372
|
|
373
|
+
if desired_listener
|
441
374
|
# listener.(port|protocol|instance_port|instance_protocol) are immutable for the life
|
442
375
|
# of the listener - must create a new one and delete old one
|
443
376
|
immutable_updates = []
|
444
|
-
if listener.protocol != desired_listener[:protocol].
|
377
|
+
if listener.protocol != desired_listener[:protocol].to_s.upcase
|
445
378
|
immutable_updates << " update protocol from #{listener.protocol.inspect} to #{desired_listener[:protocol].inspect}"
|
446
379
|
end
|
380
|
+
|
447
381
|
if listener.instance_port != desired_listener[:instance_port]
|
448
382
|
immutable_updates << " update instance port from #{listener.instance_port.inspect} to #{desired_listener[:instance_port].inspect}"
|
449
383
|
end
|
450
|
-
|
384
|
+
|
385
|
+
if listener.instance_protocol != desired_listener[:instance_protocol].to_s.upcase
|
451
386
|
immutable_updates << " update instance protocol from #{listener.instance_protocol.inspect} to #{desired_listener[:instance_protocol].inspect}"
|
452
387
|
end
|
388
|
+
|
453
389
|
if !immutable_updates.empty?
|
454
390
|
perform_action.call(immutable_updates) do
|
455
|
-
listener.
|
456
|
-
|
391
|
+
elb.delete_load_balancer_listeners({load_balancer_name: actual_elb.load_balancer_name, load_balancer_ports: [listener.load_balancer_port]})
|
392
|
+
elb.create_load_balancer_listeners({ listeners: [desired_listener], load_balancer_name: actual_elb.load_balancer_name })
|
393
|
+
# actual_elb.listeners.create(desired_listener)
|
457
394
|
end
|
458
|
-
elsif ! server_certificate_eql?(listener.
|
395
|
+
elsif listener.ssl_certificate_id && ! server_certificate_eql?(listener.ssl_certificate_id,
|
459
396
|
server_cert_from_spec(desired_listener))
|
460
397
|
# Server certificate is mutable - if no immutable changes required a full recreate, update cert
|
461
|
-
perform_action.call(" update server certificate from #{listener.
|
462
|
-
|
398
|
+
perform_action.call(" update server certificate from #{listener.ssl_certificate_id} to #{server_cert_from_spec(desired_listener)}") do
|
399
|
+
elb.set_load_balancer_listener_ssl_certificate({
|
400
|
+
load_balancer_name: actual_elb.load_balancer_name,
|
401
|
+
load_balancer_port: listener.load_balancer_port,
|
402
|
+
ssl_certificate_id: server_cert_from_spec(desired_listener)
|
403
|
+
})
|
463
404
|
end
|
464
405
|
end
|
465
|
-
|
466
406
|
else
|
467
|
-
perform_action.call(" remove listener #{listener.
|
468
|
-
listener.
|
407
|
+
perform_action.call(" remove listener #{listener.load_balancer_port}") do
|
408
|
+
elb.delete_load_balancer_listeners({load_balancer_name: actual_elb.load_balancer_name, load_balancer_ports: [listener.load_balancer_port]})
|
469
409
|
end
|
470
410
|
end
|
471
411
|
end
|
412
|
+
|
472
413
|
add_listeners.values.each do |listener|
|
473
|
-
updates = [ " add listener #{listener[:
|
414
|
+
updates = [ " add listener #{listener[:load_balancer_port]}" ]
|
474
415
|
updates << " set protocol to #{listener[:protocol].inspect}"
|
475
416
|
updates << " set instance port to #{listener[:instance_port].inspect}"
|
476
417
|
updates << " set instance protocol to #{listener[:instance_protocol].inspect}"
|
477
418
|
updates << " set server certificate to #{server_cert_from_spec(listener)}" if server_cert_from_spec(listener)
|
478
419
|
perform_action.call(updates) do
|
479
|
-
|
420
|
+
elb.create_load_balancer_listeners({ listeners: [listener], load_balancer_name: actual_elb.load_balancer_name })
|
480
421
|
end
|
481
422
|
end
|
482
423
|
end
|
@@ -486,13 +427,13 @@ module AWSDriver
|
|
486
427
|
|
487
428
|
# Update load balancer attributes
|
488
429
|
if lb_attributes
|
489
|
-
current = elb.
|
430
|
+
current = elb.describe_load_balancer_attributes(load_balancer_name: actual_elb.load_balancer_name)[:load_balancer_attributes].to_hash
|
490
431
|
# Need to do a deep copy w/ Marshal load/dump to avoid overwriting current
|
491
432
|
desired = deep_merge!(lb_attributes, Marshal.load(Marshal.dump(current)))
|
492
433
|
if current != desired
|
493
434
|
perform_action.call(" updating attributes to #{desired.inspect}") do
|
494
|
-
elb.
|
495
|
-
load_balancer_name: actual_elb.
|
435
|
+
elb.modify_load_balancer_attributes(
|
436
|
+
load_balancer_name: actual_elb.load_balancer_name,
|
496
437
|
load_balancer_attributes: desired.to_hash
|
497
438
|
)
|
498
439
|
end
|
@@ -501,12 +442,12 @@ module AWSDriver
|
|
501
442
|
|
502
443
|
# Update the load balancer health check, as above
|
503
444
|
if health_check
|
504
|
-
current = elb.
|
445
|
+
current = elb.describe_load_balancers(load_balancer_names: [actual_elb.load_balancer_name])[:load_balancer_descriptions][0][:health_check].to_hash
|
505
446
|
desired = deep_merge!(health_check, Marshal.load(Marshal.dump(current)))
|
506
447
|
if current != desired
|
507
448
|
perform_action.call(" updating health check to #{desired.inspect}") do
|
508
|
-
elb.
|
509
|
-
load_balancer_name: actual_elb.
|
449
|
+
elb.configure_health_check(
|
450
|
+
load_balancer_name: actual_elb.load_balancer_name,
|
510
451
|
health_check: desired.to_hash
|
511
452
|
)
|
512
453
|
end
|
@@ -515,8 +456,8 @@ module AWSDriver
|
|
515
456
|
|
516
457
|
# Update the load balancer sticky sessions
|
517
458
|
if sticky_sessions
|
518
|
-
policy_name = "#{actual_elb.
|
519
|
-
policies = elb.
|
459
|
+
policy_name = "#{actual_elb.load_balancer_name}-sticky-session-policy"
|
460
|
+
policies = elb.describe_load_balancer_policies(load_balancer_name: actual_elb.load_balancer_name)
|
520
461
|
|
521
462
|
existing_cookie_policy = policies[:policy_descriptions].detect { |pd| pd[:policy_type_name] == 'AppCookieStickinessPolicyType' && pd[:policy_name] == policy_name}
|
522
463
|
existing_cookie_name = existing_cookie_policy ? (existing_cookie_policy[:policy_attribute_descriptions].detect { |pad| pad[:attribute_name] == 'CookieName' })[:attribute_value] : nil
|
@@ -525,20 +466,20 @@ module AWSDriver
|
|
525
466
|
# Create or update the policy to have the desired cookie_name
|
526
467
|
if existing_cookie_policy.nil?
|
527
468
|
perform_action.call(" creating sticky sessions with cookie_name #{desired_cookie_name}") do
|
528
|
-
elb.
|
529
|
-
load_balancer_name: actual_elb.
|
469
|
+
elb.create_app_cookie_stickiness_policy(
|
470
|
+
load_balancer_name: actual_elb.load_balancer_name,
|
530
471
|
policy_name: policy_name,
|
531
472
|
cookie_name: desired_cookie_name
|
532
473
|
)
|
533
474
|
end
|
534
475
|
elsif existing_cookie_name && existing_cookie_name != desired_cookie_name
|
535
476
|
perform_action.call(" updating sticky sessions from cookie_name #{existing_cookie_name} to cookie_name #{desired_cookie_name}") do
|
536
|
-
elb.
|
537
|
-
load_balancer_name: actual_elb.
|
477
|
+
elb.delete_load_balancer_policy(
|
478
|
+
load_balancer_name: actual_elb.load_balancer_name,
|
538
479
|
policy_name: policy_name
|
539
480
|
)
|
540
|
-
elb.
|
541
|
-
load_balancer_name: actual_elb.
|
481
|
+
elb.create_app_cookie_stickiness_policy(
|
482
|
+
load_balancer_name: actual_elb.load_balancer_name,
|
542
483
|
policy_name: policy_name,
|
543
484
|
cookie_name: desired_cookie_name
|
544
485
|
)
|
@@ -546,7 +487,7 @@ module AWSDriver
|
|
546
487
|
end
|
547
488
|
|
548
489
|
# Ensure the policy is attached to the appropriate listener
|
549
|
-
elb_description = elb.
|
490
|
+
elb_description = elb.describe_load_balancers(load_balancer_names: [actual_elb.load_balancer_name])[:load_balancer_descriptions].first
|
550
491
|
listeners = elb_description[:listener_descriptions]
|
551
492
|
|
552
493
|
sticky_sessions[:ports].each do |ss_port|
|
@@ -558,8 +499,8 @@ module AWSDriver
|
|
558
499
|
unless policy_names.include?(policy_name)
|
559
500
|
policy_names << policy_name
|
560
501
|
|
561
|
-
elb.
|
562
|
-
load_balancer_name: actual_elb.
|
502
|
+
elb.set_load_balancer_policies_of_listener(
|
503
|
+
load_balancer_name: actual_elb.load_balancer_name,
|
563
504
|
load_balancer_port: ss_port,
|
564
505
|
policy_names: policy_names
|
565
506
|
)
|
@@ -570,22 +511,27 @@ module AWSDriver
|
|
570
511
|
|
571
512
|
# Update instance list, but only if there are machines specified
|
572
513
|
if machine_specs
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
514
|
+
instances_to_add = []
|
515
|
+
if actual_elb.instances
|
516
|
+
assigned_instance_ids = actual_elb.instances.map { |i| i.instance_id }
|
517
|
+
instances_to_add = machine_specs.select { |s| !assigned_instance_ids.include?(s.reference['instance_id']) }
|
518
|
+
instance_ids_to_remove = assigned_instance_ids - machine_specs.map { |s| s.reference['instance_id'] }
|
519
|
+
end
|
577
520
|
|
578
521
|
if instances_to_add.size > 0
|
579
522
|
perform_action.call(" add machines #{instances_to_add.map { |s| s.name }.join(', ')}") do
|
580
523
|
instance_ids_to_add = instances_to_add.map { |s| s.reference['instance_id'] }
|
581
|
-
Chef::Log.debug("Adding instances #{instance_ids_to_add.join(', ')} to load balancer #{actual_elb.
|
582
|
-
|
524
|
+
Chef::Log.debug("Adding instances #{instance_ids_to_add.join(', ')} to load balancer #{actual_elb.load_balancer_name} in region #{region}")
|
525
|
+
instances_to_add.each do |instance|
|
526
|
+
elb.register_instances_with_load_balancer({ instances: [ { instance_id: instance.reference['instance_id'] }], load_balancer_name: actual_elb.load_balancer_name})
|
527
|
+
end
|
583
528
|
end
|
584
529
|
end
|
585
530
|
|
586
531
|
if instance_ids_to_remove.size > 0
|
587
532
|
perform_action.call(" remove instances #{instance_ids_to_remove}") do
|
588
|
-
|
533
|
+
instances_to_remove = Hash[instance_ids_to_remove.map {|id| [:instance_id, id]}]
|
534
|
+
elb.deregister_instances_from_load_balancer({ instances: [instances_to_remove], load_balancer_name: actual_elb.load_balancer_name})
|
589
535
|
end
|
590
536
|
end
|
591
537
|
end
|
@@ -599,7 +545,7 @@ module AWSDriver
|
|
599
545
|
# Something went wrong before we could moved instances from the old ELB to the new one
|
600
546
|
# Don't delete the old ELB, but warn users there could now be 2 ELBs with the same name
|
601
547
|
unless old_elb.nil?
|
602
|
-
Chef::Log.warn("It is possible there are now 2 ELB instances - #{old_elb.
|
548
|
+
Chef::Log.warn("It is possible there are now 2 ELB instances - #{old_elb.load_balancer_name} and #{actual_elb.load_balancer_name}. " +
|
603
549
|
"Determine which is correct and manually clean up the other.")
|
604
550
|
end
|
605
551
|
end
|
@@ -613,8 +559,8 @@ module AWSDriver
|
|
613
559
|
end
|
614
560
|
|
615
561
|
def server_cert_to_string(cert)
|
616
|
-
if cert.
|
617
|
-
cert
|
562
|
+
if cert.is_a?(Hash) && cert.has_key?(:arn)
|
563
|
+
cert[:arn]
|
618
564
|
else
|
619
565
|
cert
|
620
566
|
end
|
@@ -868,12 +814,6 @@ EOD
|
|
868
814
|
strategy.cleanup_convergence(action_handler, machine_spec)
|
869
815
|
end
|
870
816
|
|
871
|
-
def cloudsearch(api_version="20130101")
|
872
|
-
@cloudsearch ||= {}
|
873
|
-
@cloudsearch[api_version] ||= ::Aws::CloudSearch::Client.const_get("V#{api_version}").new
|
874
|
-
@cloudsearch[api_version]
|
875
|
-
end
|
876
|
-
|
877
817
|
def ec2
|
878
818
|
@ec2 ||= ::Aws::EC2::Client.new(aws_config)
|
879
819
|
end
|
@@ -897,7 +837,7 @@ EOD
|
|
897
837
|
end
|
898
838
|
|
899
839
|
def elasticache
|
900
|
-
@elasticache ||= ::Aws::ElastiCache::Client.new(
|
840
|
+
@elasticache ||= ::Aws::ElastiCache::Client.new(aws_config)
|
901
841
|
end
|
902
842
|
|
903
843
|
def iam
|
@@ -1577,7 +1517,7 @@ EOD
|
|
1577
1517
|
def converge_elb_tags(aws_object, tags, action_handler)
|
1578
1518
|
elb_strategy = Chef::Provisioning::AWSDriver::TaggingStrategy::ELB.new(
|
1579
1519
|
elb_client,
|
1580
|
-
aws_object,
|
1520
|
+
aws_object.load_balancer_name,
|
1581
1521
|
tags
|
1582
1522
|
)
|
1583
1523
|
aws_tagger = Chef::Provisioning::AWSDriver::AWSTagger.new(elb_strategy, action_handler)
|
@@ -22,16 +22,26 @@ class S3
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def set_tags(tags)
|
25
|
+
return if @is_set_tag
|
26
|
+
# It will also run from delete_tags to prevent two times execution of same api class variable is defined
|
27
|
+
@is_set_tag = true
|
25
28
|
# http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Client.html#put_bucket_tagging-instance_method
|
26
29
|
s3_client.put_bucket_tagging({
|
27
30
|
bucket: bucket_name,
|
28
31
|
tagging: {
|
29
|
-
tag_set:
|
32
|
+
tag_set: desired_tags.map {|k,v| {key: k.to_s, value: v.to_s} }
|
30
33
|
}
|
31
34
|
})
|
32
35
|
end
|
33
36
|
|
34
37
|
def delete_tags(tag_keys)
|
38
|
+
if desired_tags.empty?
|
39
|
+
s3_client.delete_bucket_tagging({
|
40
|
+
bucket: bucket_name
|
41
|
+
})
|
42
|
+
else
|
43
|
+
set_tags(desired_tags)
|
44
|
+
end
|
35
45
|
# S3 doesn't have a client action for deleting individual tags, just ALL tags. But the
|
36
46
|
# put_bucket_tagging method will set the tags to what is provided so we don't need to
|
37
47
|
# worry about this
|
@@ -43,4 +43,10 @@ class Chef::Resource::AwsCloudsearchDomain < Chef::Provisioning::AWSDriver::AWSR
|
|
43
43
|
def aws_object
|
44
44
|
driver.cloudsearch.describe_domains(domain_names: [name])[:domain_status_list].find {|d| !d[:deleted] }
|
45
45
|
end
|
46
|
+
|
47
|
+
def cloudsearch_api_version(arg=nil)
|
48
|
+
unless arg.nil?
|
49
|
+
Chef::Log.warn("The ':cloudsearch_api_version' has been deprecated since it has been removed in AWS SDK version 2.")
|
50
|
+
end
|
51
|
+
end
|
46
52
|
end
|
@@ -24,7 +24,7 @@ class Chef::Resource::AwsRdsParameterGroup < Chef::Provisioning::AWSDriver::AWSR
|
|
24
24
|
parameters += more_results[:parameters]
|
25
25
|
marker = more_results[:marker]
|
26
26
|
end
|
27
|
-
|
27
|
+
driver.rds.reset_db_parameter_group(db_parameter_group_name: name, parameters: parameters)
|
28
28
|
|
29
29
|
object
|
30
30
|
rescue ::Aws::RDS::Errors::DBParameterGroupNotFound
|
@@ -52,6 +52,10 @@ module AWSSupport
|
|
52
52
|
|
53
53
|
example.instance_exec aws_object, &custom_matcher if custom_matcher
|
54
54
|
|
55
|
+
# We get response as a Struct for aws_cache_subnet_group resource.
|
56
|
+
# Hence converting it into a hash.
|
57
|
+
aws_object = aws_object.to_hash if resource_name == :aws_cache_subnet_group
|
58
|
+
|
55
59
|
# Check existence
|
56
60
|
if aws_object.nil?
|
57
61
|
differences << "#{resource_name}[#{name}] was not created!"
|
@@ -77,9 +77,9 @@ describe Chef::Resource::AwsCloudwatchAlarm do
|
|
77
77
|
value: "bar2"
|
78
78
|
}
|
79
79
|
],
|
80
|
-
insufficient_data_actions: [mytesttopic1.aws_object.
|
81
|
-
ok_actions: [mytesttopic1.aws_object.
|
82
|
-
alarm_actions: [mytesttopic1.aws_object.
|
80
|
+
insufficient_data_actions: [mytesttopic1.aws_object.attributes["TopicArn"]],
|
81
|
+
ok_actions: [mytesttopic1.aws_object.attributes["TopicArn"]],
|
82
|
+
alarm_actions: [mytesttopic1.aws_object.attributes["TopicArn"]],
|
83
83
|
actions_enabled: false,
|
84
84
|
alarm_description: "description",
|
85
85
|
unit: "Percent",
|
@@ -142,9 +142,9 @@ describe Chef::Resource::AwsCloudwatchAlarm do
|
|
142
142
|
value: "bar2"
|
143
143
|
}
|
144
144
|
],
|
145
|
-
insufficient_data_actions: [mytesttopic1.aws_object.
|
146
|
-
ok_actions: [mytesttopic1.aws_object.
|
147
|
-
alarm_actions: [mytesttopic1.aws_object.
|
145
|
+
insufficient_data_actions: [mytesttopic1.aws_object.attributes["TopicArn"]],
|
146
|
+
ok_actions: [mytesttopic1.aws_object.attributes["TopicArn"]],
|
147
|
+
alarm_actions: [mytesttopic1.aws_object.attributes["TopicArn"]],
|
148
148
|
actions_enabled: false,
|
149
149
|
alarm_description: "description",
|
150
150
|
unit: "Percent",
|
@@ -217,9 +217,9 @@ describe Chef::Resource::AwsCloudwatchAlarm do
|
|
217
217
|
value: "bar3"
|
218
218
|
}
|
219
219
|
],
|
220
|
-
insufficient_data_actions: [mytesttopic2.aws_object.
|
221
|
-
ok_actions: Set[mytesttopic1.aws_object.
|
222
|
-
alarm_actions: [mytesttopic2.aws_object.
|
220
|
+
insufficient_data_actions: [mytesttopic2.aws_object.attributes["TopicArn"]],
|
221
|
+
ok_actions: Set[mytesttopic1.aws_object.attributes["TopicArn"], mytesttopic2.aws_object.attributes["TopicArn"]],
|
222
|
+
alarm_actions: [mytesttopic2.aws_object.attributes["TopicArn"]],
|
223
223
|
actions_enabled: true,
|
224
224
|
alarm_description: "description2",
|
225
225
|
unit: "Bits",
|
@@ -245,9 +245,9 @@ describe Chef::Resource::AwsCloudwatchAlarm do
|
|
245
245
|
value: "bar3"
|
246
246
|
}
|
247
247
|
],
|
248
|
-
insufficient_data_actions: [mytesttopic2.aws_object.
|
249
|
-
ok_actions: Set[mytesttopic1.aws_object.
|
250
|
-
alarm_actions: [mytesttopic2.aws_object.
|
248
|
+
insufficient_data_actions: [mytesttopic2.aws_object.attributes["TopicArn"]],
|
249
|
+
ok_actions: Set[mytesttopic1.aws_object.attributes["TopicArn"], mytesttopic2.aws_object.attributes["TopicArn"]],
|
250
|
+
alarm_actions: [mytesttopic2.aws_object.attributes["TopicArn"]],
|
251
251
|
actions_enabled: true,
|
252
252
|
alarm_description: "description2",
|
253
253
|
unit: "Gigabytes",
|
@@ -46,8 +46,7 @@ describe Chef::Resource::AwsRdsParameterGroup do
|
|
46
46
|
)
|
47
47
|
|
48
48
|
expect(results.parameters).to eq([{:parameter_name => "max_connections", :parameter_value => "250", :apply_method => "pending-reboot"}])
|
49
|
-
|
50
|
-
results.aws_object[:parameters].each do |parameter|
|
49
|
+
results.parameters.each do |parameter|
|
51
50
|
expect(parameter[:parameter_value]).to eq("250") if parameter[:parameter_name] == "max_connections"
|
52
51
|
end
|
53
52
|
end
|
@@ -82,7 +81,7 @@ describe Chef::Resource::AwsRdsParameterGroup do
|
|
82
81
|
end
|
83
82
|
}
|
84
83
|
expect(results_2.parameters).to eq(updated_parameters)
|
85
|
-
results_2.
|
84
|
+
results_2.parameters.each do |parameter|
|
86
85
|
expect(parameter[:parameter_value]).to eq(final_max_connection_value) if parameter[:parameter_name] == "max_connections"
|
87
86
|
expect(parameter[:parameter_value]).to eq(final_application_name_value) if parameter[:parameter_name] == "application_name"
|
88
87
|
|
@@ -108,20 +108,18 @@ describe Chef::Resource::AwsSecurityGroup do
|
|
108
108
|
).and be_idempotent
|
109
109
|
end
|
110
110
|
end
|
111
|
-
|
112
111
|
end
|
113
112
|
|
114
113
|
with_aws "in a VPC" do
|
115
114
|
purge_all
|
116
115
|
setup_public_vpc
|
117
116
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
# end
|
117
|
+
load_balancer "testloadbalancer" do
|
118
|
+
load_balancer_options({
|
119
|
+
subnets: ["test_public_subnet"],
|
120
|
+
security_groups: ["test_security_group"]
|
121
|
+
})
|
122
|
+
end
|
125
123
|
|
126
124
|
it "aws_security_group 'test_sg' with no attributes works" do
|
127
125
|
expect_recipe {
|
@@ -219,60 +217,57 @@ describe Chef::Resource::AwsSecurityGroup do
|
|
219
217
|
).and be_idempotent
|
220
218
|
end
|
221
219
|
|
220
|
+
it "adds inbound and outbound_rules for source load_balancer" do
|
221
|
+
expect_recipe {
|
222
|
+
aws_security_group 'test_sg' do
|
223
|
+
vpc 'test_vpc'
|
224
|
+
inbound_rules(
|
225
|
+
testloadbalancer.aws_object => 1206,
|
226
|
+
{load_balancer: 'testloadbalancer'} => 1207,
|
227
|
+
)
|
228
|
+
outbound_rules(
|
229
|
+
1206 => testloadbalancer.aws_object,
|
230
|
+
1207 => {load_balancer: 'testloadbalancer'},
|
231
|
+
)
|
232
|
+
end
|
233
|
+
}.to create_an_aws_security_group('test_sg',
|
234
|
+
vpc_id: test_vpc.aws_object.id,
|
235
|
+
ip_permissions: [
|
236
|
+
set_ip_pemissions_mock_object(from_port: 1207, to_port: 1207, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)]),
|
237
|
+
set_ip_pemissions_mock_object(from_port: 1206, to_port: 1206, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)])
|
238
|
+
],
|
239
|
+
ip_permissions_egress: [
|
240
|
+
set_ip_pemissions_mock_object(from_port: 1207, to_port: 1207, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)]),
|
241
|
+
set_ip_pemissions_mock_object(from_port: 1206, to_port: 1206, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)])
|
242
|
+
]
|
243
|
+
).and be_idempotent
|
244
|
+
end
|
222
245
|
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
# ).and be_idempotent
|
249
|
-
# end
|
250
|
-
|
251
|
-
# it "adds inbound and outbound_rules for source load_balancer specified in hash" do
|
252
|
-
# expect_recipe {
|
253
|
-
# aws_security_group 'test_sg' do
|
254
|
-
# vpc 'test_vpc'
|
255
|
-
# inbound_rules([
|
256
|
-
# { port: 1206, sources: testloadbalancer.aws_object },
|
257
|
-
# { port: 1207, sources: {load_balancer: 'testloadbalancer'}}
|
258
|
-
# ])
|
259
|
-
# outbound_rules([
|
260
|
-
# { port: 1206, destinations: testloadbalancer.aws_object },
|
261
|
-
# { port: 1207, destinations: {load_balancer: 'testloadbalancer'}}
|
262
|
-
# ])
|
263
|
-
# end
|
264
|
-
# }.to create_an_aws_security_group('test_sg',
|
265
|
-
# vpc_id: test_vpc.aws_object.id,
|
266
|
-
# ip_permissions: [
|
267
|
-
# set_ip_pemissions_mock_object(from_port: 1206, to_port: 1206, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)]),
|
268
|
-
# set_ip_pemissions_mock_object(from_port: 1207, to_port: 1207, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)])
|
269
|
-
# ],
|
270
|
-
# ip_permissions_egress: [
|
271
|
-
# set_ip_pemissions_mock_object(from_port: 1206, to_port: 1206, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)]),
|
272
|
-
# set_ip_pemissions_mock_object(from_port: 1207, to_port: 1207, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)])
|
273
|
-
# ]
|
274
|
-
# ).and be_idempotent
|
275
|
-
# end
|
246
|
+
it "adds inbound and outbound_rules for source load_balancer specified in hash" do
|
247
|
+
expect_recipe {
|
248
|
+
aws_security_group 'test_sg' do
|
249
|
+
vpc 'test_vpc'
|
250
|
+
inbound_rules([
|
251
|
+
{ port: 1206, sources: testloadbalancer.aws_object },
|
252
|
+
{ port: 1207, sources: {load_balancer: 'testloadbalancer'}}
|
253
|
+
])
|
254
|
+
outbound_rules([
|
255
|
+
{ port: 1206, destinations: testloadbalancer.aws_object },
|
256
|
+
{ port: 1207, destinations: {load_balancer: 'testloadbalancer'}}
|
257
|
+
])
|
258
|
+
end
|
259
|
+
}.to create_an_aws_security_group('test_sg',
|
260
|
+
vpc_id: test_vpc.aws_object.id,
|
261
|
+
ip_permissions: [
|
262
|
+
set_ip_pemissions_mock_object(from_port: 1207, to_port: 1207, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)]),
|
263
|
+
set_ip_pemissions_mock_object(from_port: 1206, to_port: 1206, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)])
|
264
|
+
],
|
265
|
+
ip_permissions_egress: [
|
266
|
+
set_ip_pemissions_mock_object(from_port: 1207, to_port: 1207, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)]),
|
267
|
+
set_ip_pemissions_mock_object(from_port: 1206, to_port: 1206, ip_protocol: "tcp", ip_ranges: [], user_id_group_pairs: [Aws::EC2::Types::UserIdGroupPair.new(group_id: test_security_group.aws_object.id, group_name: nil, peering_status: nil, user_id: test_security_group.aws_object.owner_id, vpc_id: nil, vpc_peering_connection_id: nil)])
|
268
|
+
]
|
269
|
+
).and be_idempotent
|
270
|
+
end
|
276
271
|
|
277
272
|
it "can specify rules as a mapping from source/destination to port and protocol" do
|
278
273
|
expect_recipe {
|
@@ -45,7 +45,7 @@ describe Chef::Resource::LoadBalancer do
|
|
45
45
|
:protocol => :https,
|
46
46
|
:instance_port => 81,
|
47
47
|
:instance_protocol => :http,
|
48
|
-
:ssl_certificate_id => load_balancer_cert.aws_object.arn
|
48
|
+
:ssl_certificate_id => load_balancer_cert.aws_object.server_certificate_metadata.arn
|
49
49
|
}
|
50
50
|
],
|
51
51
|
subnets: ["test_public_subnet"],
|
@@ -91,33 +91,9 @@ describe Chef::Resource::LoadBalancer do
|
|
91
91
|
# availability_zones: [test_public_subnet.aws_object.availability_zone_name]
|
92
92
|
})
|
93
93
|
end
|
94
|
-
}.to create_an_aws_load_balancer('test-load-balancer',
|
95
|
-
|
96
|
-
|
97
|
-
:port => 80,
|
98
|
-
:protocol => :http,
|
99
|
-
:instance_port => 80,
|
100
|
-
:instance_protocol => :http,
|
101
|
-
},
|
102
|
-
{
|
103
|
-
:port => 443,
|
104
|
-
:protocol => :https,
|
105
|
-
:instance_port => 81,
|
106
|
-
:instance_protocol => :http,
|
107
|
-
:server_certificate => {arn: load_balancer_cert.aws_object.arn}
|
108
|
-
}
|
109
|
-
],
|
110
|
-
subnets: [test_public_subnet.aws_object],
|
111
|
-
security_groups: [test_security_group.aws_object],
|
112
|
-
health_check: {
|
113
|
-
target: "HTTP:80/",
|
114
|
-
interval: 10,
|
115
|
-
timeout: 5,
|
116
|
-
unhealthy_threshold: 2,
|
117
|
-
healthy_threshold: 2
|
118
|
-
},
|
119
|
-
scheme: "internal"
|
120
|
-
}).and be_idempotent
|
94
|
+
}.to create_an_aws_load_balancer('test-load-balancer',
|
95
|
+
driver.elb_client.describe_load_balancers(load_balancer_names: ["test-load-balancer"])[0][0]
|
96
|
+
).and be_idempotent
|
121
97
|
expect(
|
122
98
|
driver.elb_client.describe_load_balancer_attributes(load_balancer_name: "test-load-balancer").to_h
|
123
99
|
).to eq(load_balancer_attributes: {
|
@@ -184,7 +160,7 @@ describe Chef::Resource::LoadBalancer do
|
|
184
160
|
:protocol => :https,
|
185
161
|
:instance_port => 80,
|
186
162
|
:instance_protocol => :http,
|
187
|
-
:ssl_certificate_id => load_balancer_cert.aws_object.arn
|
163
|
+
:ssl_certificate_id => load_balancer_cert.aws_object.server_certificate_metadata.arn
|
188
164
|
}],
|
189
165
|
subnets: ["test_public_subnet"],
|
190
166
|
security_groups: ["test_security_group"],
|
@@ -230,14 +206,14 @@ describe Chef::Resource::LoadBalancer do
|
|
230
206
|
:protocol => :https,
|
231
207
|
:instance_port => 8080,
|
232
208
|
:instance_protocol => :http,
|
233
|
-
:ssl_certificate_id => load_balancer_cert.aws_object.arn
|
209
|
+
:ssl_certificate_id => load_balancer_cert.aws_object.server_certificate_metadata.arn
|
234
210
|
},
|
235
211
|
{
|
236
212
|
:port => 8443,
|
237
213
|
:protocol => :https,
|
238
214
|
:instance_port => 80,
|
239
215
|
:instance_protocol => :http,
|
240
|
-
:ssl_certificate_id => load_balancer_cert_2.aws_object.arn
|
216
|
+
:ssl_certificate_id => load_balancer_cert_2.aws_object.server_certificate_metadata.arn
|
241
217
|
}],
|
242
218
|
subnets: ["test_public_subnet2"],
|
243
219
|
security_groups: ["test_security_group2"],
|
@@ -274,32 +250,7 @@ describe Chef::Resource::LoadBalancer do
|
|
274
250
|
}
|
275
251
|
})
|
276
252
|
end
|
277
|
-
}.to update_an_aws_load_balancer('test-load-balancer',
|
278
|
-
listeners: [{
|
279
|
-
:port => 443,
|
280
|
-
:protocol => :https,
|
281
|
-
:instance_port => 8080,
|
282
|
-
:instance_protocol => :http,
|
283
|
-
:server_certificate => {arn: load_balancer_cert.aws_object.arn}
|
284
|
-
},
|
285
|
-
{
|
286
|
-
:port => 8443,
|
287
|
-
:protocol => :https,
|
288
|
-
:instance_port => 80,
|
289
|
-
:instance_protocol => :http,
|
290
|
-
:server_certificate => {arn: load_balancer_cert_2.aws_object.arn}
|
291
|
-
}],
|
292
|
-
subnets: [test_public_subnet2.aws_object],
|
293
|
-
security_groups: [test_security_group2.aws_object],
|
294
|
-
health_check: {
|
295
|
-
target: "HTTP:8080/",
|
296
|
-
interval: 15,
|
297
|
-
timeout: 4,
|
298
|
-
unhealthy_threshold: 3,
|
299
|
-
healthy_threshold: 3
|
300
|
-
},
|
301
|
-
scheme: "internal"
|
302
|
-
}).and be_idempotent
|
253
|
+
}.to update_an_aws_load_balancer('test-load-balancer', driver.elb_client.describe_load_balancers(load_balancer_names: ["test-load-balancer"])[0][0]).and be_idempotent
|
303
254
|
|
304
255
|
expect(
|
305
256
|
driver.elb_client.describe_load_balancer_attributes(load_balancer_name: "test-load-balancer").to_h
|
@@ -360,9 +311,10 @@ describe Chef::Resource::LoadBalancer do
|
|
360
311
|
})
|
361
312
|
machines ['test_load_balancer_machine1']
|
362
313
|
end
|
363
|
-
}.to create_an_aws_load_balancer('test-load-balancer'
|
364
|
-
|
365
|
-
|
314
|
+
}.to create_an_aws_load_balancer('test-load-balancer') { |aws_object|
|
315
|
+
ids = aws_object.instances.map {|i| i.instance_id}
|
316
|
+
expect([test_load_balancer_machine1.aws_object.id]).to eq(ids)
|
317
|
+
}.and be_idempotent
|
366
318
|
end
|
367
319
|
|
368
320
|
it "can reference machines by name or id" do
|
@@ -375,8 +327,7 @@ describe Chef::Resource::LoadBalancer do
|
|
375
327
|
machines ['test_load_balancer_machine1', test_load_balancer_machine2.aws_object.id]
|
376
328
|
end
|
377
329
|
}.to create_an_aws_load_balancer('test-load-balancer') { |aws_object|
|
378
|
-
|
379
|
-
ids = instances.map {|i| i.id}
|
330
|
+
ids = aws_object.instances.map {|i| i.instance_id}
|
380
331
|
expect(ids.to_set).to eq([test_load_balancer_machine1.aws_object.id, test_load_balancer_machine2.aws_object.id].to_set)
|
381
332
|
}.and be_idempotent
|
382
333
|
end
|
@@ -399,9 +350,10 @@ describe Chef::Resource::LoadBalancer do
|
|
399
350
|
})
|
400
351
|
machines ['test_load_balancer_machine2']
|
401
352
|
end
|
402
|
-
}.to match_an_aws_load_balancer('test-load-balancer'
|
403
|
-
|
404
|
-
|
353
|
+
}.to match_an_aws_load_balancer('test-load-balancer') { |aws_object|
|
354
|
+
ids = aws_object.instances.map {|i| i.instance_id}
|
355
|
+
expect([test_load_balancer_machine2.aws_object.id]).to eq(ids)
|
356
|
+
}.and be_idempotent
|
405
357
|
end
|
406
358
|
end
|
407
359
|
end
|
@@ -427,7 +379,8 @@ describe Chef::Resource::LoadBalancer do
|
|
427
379
|
aws_tags key1: "value"
|
428
380
|
load_balancer_options subnets: ["test_public_subnet"]
|
429
381
|
end
|
430
|
-
}.to create_an_aws_load_balancer('test-load-balancer'
|
382
|
+
}.to create_an_aws_load_balancer('test-load-balancer',
|
383
|
+
driver.elb_client.describe_load_balancers(load_balancer_names: ["test-load-balancer"])[0][0])
|
431
384
|
.and have_aws_load_balancer_tags('test-load-balancer',
|
432
385
|
{
|
433
386
|
'key1' => 'value'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-provisioning-aws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.pre.
|
4
|
+
version: 3.0.0.pre.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Ball
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-provisioning
|