cloud-mu 1.9.0.pre.beta → 2.0.0.pre.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Berksfile +16 -54
- data/Berksfile.lock +14 -62
- data/bin/mu-aws-setup +131 -108
- data/bin/mu-configure +311 -74
- data/bin/mu-gcp-setup +84 -62
- data/bin/mu-load-config.rb +46 -2
- data/bin/mu-self-update +11 -9
- data/bin/mu-upload-chef-artifacts +4 -4
- data/{mu.gemspec → cloud-mu.gemspec} +2 -2
- data/cookbooks/awscli/Berksfile +8 -0
- data/cookbooks/mu-activedirectory/Berksfile +11 -0
- data/cookbooks/mu-firewall/Berksfile +9 -0
- data/cookbooks/mu-firewall/metadata.rb +1 -1
- data/cookbooks/mu-glusterfs/Berksfile +10 -0
- data/cookbooks/mu-jenkins/Berksfile +14 -0
- data/cookbooks/mu-master/Berksfile +23 -0
- data/cookbooks/mu-master/attributes/default.rb +1 -1
- data/cookbooks/mu-master/metadata.rb +2 -2
- data/cookbooks/mu-master/recipes/default.rb +1 -1
- data/cookbooks/mu-master/recipes/init.rb +7 -3
- data/cookbooks/mu-master/recipes/ssl-certs.rb +1 -0
- data/cookbooks/mu-mongo/Berksfile +10 -0
- data/cookbooks/mu-openvpn/Berksfile +11 -0
- data/cookbooks/mu-php54/Berksfile +13 -0
- data/cookbooks/mu-splunk/Berksfile +10 -0
- data/cookbooks/mu-tools/Berksfile +21 -0
- data/cookbooks/mu-tools/files/default/Mu_CA.pem +15 -15
- data/cookbooks/mu-utility/Berksfile +9 -0
- data/cookbooks/mu-utility/metadata.rb +2 -1
- data/cookbooks/nagios/Berksfile +7 -4
- data/cookbooks/s3fs/Berksfile +9 -0
- data/environments/dev.json +6 -6
- data/environments/prod.json +6 -6
- data/modules/mu.rb +20 -42
- data/modules/mu/cleanup.rb +102 -100
- data/modules/mu/cloud.rb +90 -28
- data/modules/mu/clouds/aws.rb +449 -218
- data/modules/mu/clouds/aws/alarm.rb +29 -17
- data/modules/mu/clouds/aws/cache_cluster.rb +78 -64
- data/modules/mu/clouds/aws/collection.rb +25 -18
- data/modules/mu/clouds/aws/container_cluster.rb +73 -66
- data/modules/mu/clouds/aws/database.rb +124 -116
- data/modules/mu/clouds/aws/dnszone.rb +27 -20
- data/modules/mu/clouds/aws/firewall_rule.rb +30 -22
- data/modules/mu/clouds/aws/folder.rb +18 -3
- data/modules/mu/clouds/aws/function.rb +77 -23
- data/modules/mu/clouds/aws/group.rb +19 -12
- data/modules/mu/clouds/aws/habitat.rb +153 -0
- data/modules/mu/clouds/aws/loadbalancer.rb +59 -52
- data/modules/mu/clouds/aws/log.rb +30 -23
- data/modules/mu/clouds/aws/msg_queue.rb +29 -20
- data/modules/mu/clouds/aws/notifier.rb +222 -0
- data/modules/mu/clouds/aws/role.rb +178 -90
- data/modules/mu/clouds/aws/search_domain.rb +40 -24
- data/modules/mu/clouds/aws/server.rb +169 -137
- data/modules/mu/clouds/aws/server_pool.rb +60 -83
- data/modules/mu/clouds/aws/storage_pool.rb +59 -31
- data/modules/mu/clouds/aws/user.rb +36 -27
- data/modules/mu/clouds/aws/userdata/linux.erb +101 -93
- data/modules/mu/clouds/aws/vpc.rb +250 -189
- data/modules/mu/clouds/azure.rb +132 -0
- data/modules/mu/clouds/cloudformation.rb +65 -1
- data/modules/mu/clouds/cloudformation/alarm.rb +8 -0
- data/modules/mu/clouds/cloudformation/cache_cluster.rb +7 -0
- data/modules/mu/clouds/cloudformation/collection.rb +7 -0
- data/modules/mu/clouds/cloudformation/database.rb +7 -0
- data/modules/mu/clouds/cloudformation/dnszone.rb +7 -0
- data/modules/mu/clouds/cloudformation/firewall_rule.rb +9 -2
- data/modules/mu/clouds/cloudformation/loadbalancer.rb +7 -0
- data/modules/mu/clouds/cloudformation/log.rb +7 -0
- data/modules/mu/clouds/cloudformation/server.rb +7 -0
- data/modules/mu/clouds/cloudformation/server_pool.rb +7 -0
- data/modules/mu/clouds/cloudformation/vpc.rb +7 -0
- data/modules/mu/clouds/google.rb +214 -110
- data/modules/mu/clouds/google/container_cluster.rb +42 -24
- data/modules/mu/clouds/google/database.rb +15 -6
- data/modules/mu/clouds/google/firewall_rule.rb +17 -25
- data/modules/mu/clouds/google/group.rb +13 -5
- data/modules/mu/clouds/google/habitat.rb +105 -0
- data/modules/mu/clouds/google/loadbalancer.rb +28 -20
- data/modules/mu/clouds/google/server.rb +93 -354
- data/modules/mu/clouds/google/server_pool.rb +18 -10
- data/modules/mu/clouds/google/user.rb +22 -14
- data/modules/mu/clouds/google/vpc.rb +97 -69
- data/modules/mu/config.rb +133 -38
- data/modules/mu/config/alarm.rb +25 -0
- data/modules/mu/config/cache_cluster.rb +5 -3
- data/modules/mu/config/cache_cluster.yml +23 -0
- data/modules/mu/config/database.rb +25 -16
- data/modules/mu/config/database.yml +3 -3
- data/modules/mu/config/function.rb +1 -2
- data/modules/mu/config/{project.rb → habitat.rb} +10 -10
- data/modules/mu/config/notifier.rb +85 -0
- data/modules/mu/config/notifier.yml +9 -0
- data/modules/mu/config/role.rb +1 -1
- data/modules/mu/config/search_domain.yml +2 -2
- data/modules/mu/config/server.rb +13 -1
- data/modules/mu/config/server.yml +3 -3
- data/modules/mu/config/server_pool.rb +3 -1
- data/modules/mu/config/storage_pool.rb +3 -1
- data/modules/mu/config/storage_pool.yml +19 -0
- data/modules/mu/config/vpc.rb +70 -8
- data/modules/mu/groomers/chef.rb +2 -3
- data/modules/mu/kittens.rb +500 -122
- data/modules/mu/master.rb +5 -5
- data/modules/mu/mommacat.rb +151 -91
- data/modules/tests/super_complex_bok.yml +12 -0
- data/modules/tests/super_simple_bok.yml +12 -0
- data/spec/mu/clouds/azure_spec.rb +82 -0
- data/spec/spec_helper.rb +105 -0
- metadata +26 -5
- data/modules/mu/clouds/aws/notification.rb +0 -139
- data/modules/mu/config/notification.rb +0 -44
@@ -186,17 +186,17 @@ module MU
|
|
186
186
|
# @param tag_value [String]: The value of the tag specified by tag_key to match when searching by tag.
|
187
187
|
# @param flags [Hash]: Optional flags
|
188
188
|
# @return [Array<Hash<String,OpenStruct>>]: The cloud provider's complete descriptions of matching Databases
|
189
|
-
def self.find(cloud_id: nil, region: MU.curRegion, tag_key: "Name", tag_value: nil, flags: {})
|
189
|
+
def self.find(cloud_id: nil, region: MU.curRegion, tag_key: "Name", tag_value: nil, credentials: nil, flags: {})
|
190
190
|
map = {}
|
191
191
|
if cloud_id
|
192
|
-
db = MU::Cloud::AWS::Database.getDatabaseById(cloud_id, region: region)
|
192
|
+
db = MU::Cloud::AWS::Database.getDatabaseById(cloud_id, region: region, credentials: credentials)
|
193
193
|
map[cloud_id] = db if db
|
194
194
|
end
|
195
195
|
|
196
196
|
if tag_value
|
197
|
-
MU::Cloud::AWS.rds(region).describe_db_instances.db_instances.each { |db|
|
198
|
-
resp = MU::Cloud::AWS.rds(region).list_tags_for_resource(
|
199
|
-
resource_name: MU::Cloud::AWS::Database.getARN(db.db_instance_identifier, "db", "rds", region: region)
|
197
|
+
MU::Cloud::AWS.rds(credentials: credentials, region: region).describe_db_instances.db_instances.each { |db|
|
198
|
+
resp = MU::Cloud::AWS.rds(credentials: credentials, region: region).list_tags_for_resource(
|
199
|
+
resource_name: MU::Cloud::AWS::Database.getARN(db.db_instance_identifier, "db", "rds", region: region, credentials: credentials)
|
200
200
|
)
|
201
201
|
if resp && resp.tag_list && !resp.tag_list.empty?
|
202
202
|
resp.tag_list.each { |tag|
|
@@ -218,7 +218,8 @@ module MU
|
|
218
218
|
# @param region [String]: The region in which the resource resides.
|
219
219
|
# @param account_number [String]: The account in which the resource resides.
|
220
220
|
# @return [String]
|
221
|
-
def self.getARN(resource, resource_type, client_type, region: MU.curRegion, account_number:
|
221
|
+
def self.getARN(resource, resource_type, client_type, region: MU.curRegion, account_number: nil, credentials: nil)
|
222
|
+
account_number ||= MU::Cloud::AWS.credToAcct(credentials)
|
222
223
|
aws_str = MU::Cloud::AWS.isGovCloud?(region) ? "aws-us-gov" : "aws"
|
223
224
|
"arn:#{aws_str}:#{client_type}:#{region}:#{account_number}:#{resource_type}:#{resource}"
|
224
225
|
end
|
@@ -246,18 +247,6 @@ module MU
|
|
246
247
|
return tags
|
247
248
|
end
|
248
249
|
|
249
|
-
# Add our standard tag set to an Amazon RDS resource.
|
250
|
-
# @param resource [String]: The name of the resource
|
251
|
-
# @param resource_type [String]: The type of the resource (one of `db, es, og, pg, ri, secgrp, snapshot, subgrp`)
|
252
|
-
# @param region [String]: The cloud provider region
|
253
|
-
def addStandardTags(resource, resource_type, region: MU.curRegion)
|
254
|
-
MU.log "Adding tags to RDS resource #{resource}: #{allTags}"
|
255
|
-
MU::Cloud::AWS.rds(region).add_tags_to_resource(
|
256
|
-
resource_name: MU::Cloud::AWS::Database.getARN(resource, resource_type, "rds", region: region),
|
257
|
-
tags: allTags
|
258
|
-
)
|
259
|
-
end
|
260
|
-
|
261
250
|
# Getting the password for the master user, and saving it in a database / cluster specif vault
|
262
251
|
def getPassword
|
263
252
|
if @config['password'].nil?
|
@@ -334,10 +323,10 @@ module MU
|
|
334
323
|
point_in_time_config[:use_latest_restorable_time] = true if @config['restore_time'] == "latest"
|
335
324
|
end
|
336
325
|
|
337
|
-
if @config["read_replica_of"] || @config["create_read_replica"]
|
326
|
+
if @config["read_replica_of"]# || @config["create_read_replica"]
|
338
327
|
srcdb = @config['source_identifier']
|
339
328
|
if @config["read_replica_of"]["region"] and @config['region'] != @config["read_replica_of"]["region"]
|
340
|
-
srcdb = MU::Cloud::AWS::Database.getARN(@config['source_identifier'], "db", "rds", region: @config["read_replica_of"]["region"])
|
329
|
+
srcdb = MU::Cloud::AWS::Database.getARN(@config['source_identifier'], "db", "rds", region: @config["read_replica_of"]["region"], credentials: @config['credentials'])
|
341
330
|
end
|
342
331
|
read_replica_struct = {
|
343
332
|
db_instance_identifier: @config['identifier'],
|
@@ -360,22 +349,24 @@ module MU
|
|
360
349
|
begin
|
361
350
|
if %w{existing_snapshot new_snapshot}.include?(@config["creation_style"])
|
362
351
|
MU.log "Creating database instance #{@config['identifier']} from snapshot #{@config["snapshot_id"]}"
|
363
|
-
resp = MU::Cloud::AWS.rds(@config['region']).restore_db_instance_from_db_snapshot(config)
|
352
|
+
resp = MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).restore_db_instance_from_db_snapshot(config)
|
364
353
|
elsif @config["creation_style"] == "point_in_time"
|
365
354
|
MU.log "Creating database instance #{@config['identifier']} based on point in time backup #{@config['restore_time']} of #{@config['source_identifier']}"
|
366
|
-
resp = MU::Cloud::AWS.rds(@config['region']).restore_db_instance_to_point_in_time(point_in_time_config)
|
355
|
+
resp = MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).restore_db_instance_to_point_in_time(point_in_time_config)
|
367
356
|
elsif @config["read_replica_of"]
|
368
357
|
MU.log "Creating read replica database instance #{@config['identifier']} for #{@config['source_identifier']}"
|
369
358
|
begin
|
370
|
-
resp = MU::Cloud::AWS.rds(@config['region']).create_db_instance_read_replica(read_replica_struct)
|
359
|
+
resp = MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).create_db_instance_read_replica(read_replica_struct)
|
371
360
|
rescue Aws::RDS::Errors::DBSubnetGroupNotAllowedFault => e
|
372
361
|
MU.log "Being forced to use source database's subnet group: #{e.message}", MU::WARN
|
373
362
|
read_replica_struct.delete(:db_subnet_group_name)
|
374
|
-
resp = MU::Cloud::AWS.rds(@config['region']).create_db_instance_read_replica(read_replica_struct)
|
363
|
+
resp = MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).create_db_instance_read_replica(read_replica_struct)
|
375
364
|
end
|
376
365
|
elsif @config["creation_style"] == "new"
|
377
|
-
MU.log "Creating database instance #{@config['identifier']}"
|
378
|
-
|
366
|
+
MU.log "Creating pristine database instance #{@config['identifier']} (#{@config['name']}) in #{@config['region']}"
|
367
|
+
puts @config['credentials']
|
368
|
+
pp config
|
369
|
+
resp = MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).create_db_instance(config)
|
379
370
|
end
|
380
371
|
rescue Aws::RDS::Errors::InvalidParameterValue => e
|
381
372
|
if attempts < 5
|
@@ -392,7 +383,7 @@ module MU
|
|
392
383
|
retries = 0
|
393
384
|
|
394
385
|
begin
|
395
|
-
MU::Cloud::AWS.rds(@config['region']).wait_until(:db_instance_available, db_instance_identifier: @config['identifier']) do |waiter|
|
386
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).wait_until(:db_instance_available, db_instance_identifier: @config['identifier']) do |waiter|
|
396
387
|
# Does create_db_instance implement wait_until_available ?
|
397
388
|
waiter.max_attempts = nil
|
398
389
|
waiter.before_attempt do |attempts|
|
@@ -410,10 +401,12 @@ module MU
|
|
410
401
|
retry
|
411
402
|
end
|
412
403
|
|
413
|
-
database = MU::Cloud::AWS::Database.getDatabaseById(@config['identifier'], region: @config['region'])
|
404
|
+
database = MU::Cloud::AWS::Database.getDatabaseById(@config['identifier'], region: @config['region'], credentials: @config['credentials'])
|
414
405
|
MU::Cloud::AWS::DNSZone.genericMuDNSEntry(name: database.db_instance_identifier, target: "#{database.endpoint.address}.", cloudclass: MU::Cloud::Database, sync_wait: @config['dns_sync_wait'])
|
415
406
|
MU.log "Database #{@config['name']} is at #{database.endpoint.address}", MU::SUMMARY
|
416
|
-
|
407
|
+
if @config['auth_vault']
|
408
|
+
MU.log "knife vault show #{@config['auth_vault']['vault']} #{@config['auth_vault']['item']} for Database #{@config['name']} credentials", MU::SUMMARY
|
409
|
+
end
|
417
410
|
|
418
411
|
# If referencing an existing DB, insert this deploy's DB security group so it can access db
|
419
412
|
if @config["creation_style"] == 'existing'
|
@@ -432,7 +425,7 @@ module MU
|
|
432
425
|
mod_config[:vpc_security_group_ids] = vpc_sg_ids
|
433
426
|
mod_config[:db_instance_identifier] = @config["identifier"]
|
434
427
|
|
435
|
-
MU::Cloud::AWS.rds(@config['region']).modify_db_instance(mod_config)
|
428
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).modify_db_instance(mod_config)
|
436
429
|
MU.log "Modified database #{@config['identifier']} with new security groups: #{mod_config}", MU::NOTICE
|
437
430
|
end
|
438
431
|
|
@@ -454,12 +447,12 @@ module MU
|
|
454
447
|
mod_config[:vpc_security_group_ids] = @config["vpc_security_group_ids"]
|
455
448
|
mod_config[:apply_immediately] = true
|
456
449
|
|
457
|
-
MU::Cloud::AWS.rds(@config['region']).modify_db_instance(mod_config)
|
450
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).modify_db_instance(mod_config)
|
458
451
|
wait_start_time = Time.now
|
459
452
|
retries = 0
|
460
453
|
|
461
454
|
begin
|
462
|
-
MU::Cloud::AWS.rds(@config['region']).wait_until(:db_instance_available, db_instance_identifier: @config['identifier']) do |waiter|
|
455
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).wait_until(:db_instance_available, db_instance_identifier: @config['identifier']) do |waiter|
|
463
456
|
# Does create_db_instance implement wait_until_available ?
|
464
457
|
waiter.max_attempts = nil
|
465
458
|
waiter.before_attempt do |attempts|
|
@@ -481,7 +474,7 @@ module MU
|
|
481
474
|
# Maybe wait for DB instance to be in available state. DB should still be writeable at this state
|
482
475
|
if @config['allow_major_version_upgrade'] && @config["creation_style"] == "new"
|
483
476
|
MU.log "Setting major database version upgrade on #{@config['identifier']}'"
|
484
|
-
MU::Cloud::AWS.rds(@config['region']).modify_db_instance(
|
477
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).modify_db_instance(
|
485
478
|
db_instance_identifier: @config['identifier'],
|
486
479
|
apply_immediately: true,
|
487
480
|
allow_major_version_upgrade: true
|
@@ -534,13 +527,13 @@ module MU
|
|
534
527
|
resp =
|
535
528
|
if @config["creation_style"] == "new"
|
536
529
|
MU.log "Creating new database cluster #{@config['identifier']}"
|
537
|
-
MU::Cloud::AWS.rds(@config['region']).create_db_cluster(cluster_config_struct)
|
530
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).create_db_cluster(cluster_config_struct)
|
538
531
|
elsif %w{existing_snapshot new_snapshot}.include?(@config["creation_style"])
|
539
532
|
MU.log "Creating new database cluster #{@config['identifier']} from snapshot #{@config["snapshot_id"]}"
|
540
|
-
MU::Cloud::AWS.rds(@config['region']).restore_db_cluster_from_snapshot(cluster_config_struct)
|
533
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).restore_db_cluster_from_snapshot(cluster_config_struct)
|
541
534
|
elsif @config["creation_style"] == "point_in_time"
|
542
535
|
MU.log "Creating new database cluster #{@config['identifier']} from point in time backup #{@config["restore_time"]} of #{@config["source_identifier"]}"
|
543
|
-
MU::Cloud::AWS.rds(@config['region']).restore_db_cluster_to_point_in_time(cluster_config_struct)
|
536
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).restore_db_cluster_to_point_in_time(cluster_config_struct)
|
544
537
|
end
|
545
538
|
rescue Aws::RDS::Errors::InvalidParameterValue => e
|
546
539
|
if attempts < 5
|
@@ -557,7 +550,7 @@ module MU
|
|
557
550
|
loop do
|
558
551
|
MU.log "Waiting for #{@config['identifier']} to become available", MU::NOTICE if attempts % 5 == 0
|
559
552
|
attempts += 1
|
560
|
-
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(@config['identifier'], region: @config['region'])
|
553
|
+
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(@config['identifier'], region: @config['region'], credentials: @config['credentials'])
|
561
554
|
break unless cluster.status != "available"
|
562
555
|
sleep 30
|
563
556
|
end
|
@@ -573,19 +566,19 @@ module MU
|
|
573
566
|
}
|
574
567
|
|
575
568
|
modify_db_cluster_struct[:preferred_maintenance_window] = @config["preferred_maintenance_window"] if @config["preferred_maintenance_window"]
|
576
|
-
MU::Cloud::AWS.rds(@config['region']).modify_db_cluster(modify_db_cluster_struct)
|
569
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).modify_db_cluster(modify_db_cluster_struct)
|
577
570
|
|
578
571
|
attempts = 0
|
579
572
|
loop do
|
580
573
|
MU.log "Waiting for #{@config['identifier']} to become available", MU::NOTICE if attempts % 5 == 0
|
581
574
|
attempts += 1
|
582
|
-
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(@config['identifier'], region: @config['region'])
|
575
|
+
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(@config['identifier'], region: @config['region'], credentials: @config['credentials'])
|
583
576
|
break unless cluster.status != "available"
|
584
577
|
sleep 30
|
585
578
|
end
|
586
579
|
end
|
587
580
|
|
588
|
-
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(@config['identifier'], region: @config['region'])
|
581
|
+
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(@config['identifier'], region: @config['region'], credentials: @config['credentials'])
|
589
582
|
MU::Cloud::AWS::DNSZone.genericMuDNSEntry(name: cluster.db_cluster_identifier, target: "#{cluster.endpoint}.", cloudclass: MU::Cloud::Database, sync_wait: @config['dns_sync_wait'])
|
590
583
|
return cluster.db_cluster_identifier
|
591
584
|
end
|
@@ -628,10 +621,10 @@ module MU
|
|
628
621
|
# If we didn't specify a VPC try to figure out if the account has a default VPC
|
629
622
|
vpc_id = nil
|
630
623
|
subnets = []
|
631
|
-
MU::Cloud::AWS.ec2(@config['region']).describe_vpcs.vpcs.each { |vpc|
|
624
|
+
MU::Cloud::AWS.ec2(region: @config['region'], credentials: @config['credentials']).describe_vpcs.vpcs.each { |vpc|
|
632
625
|
if vpc.is_default
|
633
626
|
vpc_id = vpc.vpc_id
|
634
|
-
subnets = MU::Cloud::AWS.ec2(@config['region']).describe_subnets(
|
627
|
+
subnets = MU::Cloud::AWS.ec2(region: @config['region'], credentials: @config['credentials']).describe_subnets(
|
635
628
|
filters: [
|
636
629
|
{
|
637
630
|
name: "vpc-id",
|
@@ -662,7 +655,7 @@ module MU
|
|
662
655
|
end
|
663
656
|
|
664
657
|
if @config['creation_style'] == "existing"
|
665
|
-
srcdb = MU::Cloud::AWS.rds(@config['region']).describe_db_instances(
|
658
|
+
srcdb = MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).describe_db_instances(
|
666
659
|
db_instance_identifier: @config['identifier']
|
667
660
|
)
|
668
661
|
srcdb_vpc = srcdb.db_instances.first.db_subnet_group.vpc_id
|
@@ -676,7 +669,7 @@ module MU
|
|
676
669
|
raise MuError, "Couldn't find subnets in #{@vpc} to add to #{@config["subnet_group_name"]}. Make sure the subnets are valid and publicly_accessible is set correctly"
|
677
670
|
else
|
678
671
|
# Create subnet group
|
679
|
-
resp = MU::Cloud::AWS.rds(@config['region']).create_db_subnet_group(
|
672
|
+
resp = MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).create_db_subnet_group(
|
680
673
|
db_subnet_group_name: @config["subnet_group_name"],
|
681
674
|
db_subnet_group_description: @config["subnet_group_name"],
|
682
675
|
subnet_ids: subnet_ids,
|
@@ -715,7 +708,7 @@ module MU
|
|
715
708
|
def createDBClusterParameterGroup
|
716
709
|
MU.log "Creating a cluster parameter group #{@config["parameter_group_name"]}"
|
717
710
|
|
718
|
-
MU::Cloud::AWS.rds(@config['region']).create_db_cluster_parameter_group(
|
711
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).create_db_cluster_parameter_group(
|
719
712
|
db_cluster_parameter_group_name: @config["parameter_group_name"],
|
720
713
|
db_parameter_group_family: @config["parameter_group_family"],
|
721
714
|
description: "Parameter group for #{@config["parameter_group_family"]}",
|
@@ -729,7 +722,7 @@ module MU
|
|
729
722
|
}
|
730
723
|
|
731
724
|
MU.log "Modifiying cluster parameter group #{@config["parameter_group_name"]}"
|
732
|
-
MU::Cloud::AWS.rds(@config['region']).modify_db_cluster_parameter_group(
|
725
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).modify_db_cluster_parameter_group(
|
733
726
|
db_cluster_parameter_group_name: @config["parameter_group_name"],
|
734
727
|
parameters: params
|
735
728
|
)
|
@@ -739,7 +732,7 @@ module MU
|
|
739
732
|
# Create a database parameter group.
|
740
733
|
def createDBParameterGroup
|
741
734
|
MU.log "Creating a database parameter group #{@config["parameter_group_name"]}"
|
742
|
-
MU::Cloud::AWS.rds(@config['region']).create_db_parameter_group(
|
735
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).create_db_parameter_group(
|
743
736
|
db_parameter_group_name: @config["parameter_group_name"],
|
744
737
|
db_parameter_group_family: @config["parameter_group_family"],
|
745
738
|
description: "Parameter group for #{@config["parameter_group_family"]}",
|
@@ -753,7 +746,7 @@ module MU
|
|
753
746
|
}
|
754
747
|
|
755
748
|
MU.log "Modifiying database parameter group #{@config["parameter_group_name"]}"
|
756
|
-
MU::Cloud::AWS.rds(@config['region']).modify_db_parameter_group(
|
749
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).modify_db_parameter_group(
|
757
750
|
db_parameter_group_name: @config["parameter_group_name"],
|
758
751
|
parameters: params
|
759
752
|
)
|
@@ -765,7 +758,7 @@ module MU
|
|
765
758
|
# @param region [String]: The cloud provider region
|
766
759
|
# @return [OpenStruct]
|
767
760
|
def self.getDBClusterParameterGroup(param_group_id, region: MU.curRegion)
|
768
|
-
MU::Cloud::AWS.rds(region).describe_db_cluster_parameter_groups(db_cluster_parameter_group_name: param_group_id).db_cluster_parameter_groups.first
|
761
|
+
MU::Cloud::AWS.rds(region: region).describe_db_cluster_parameter_groups(db_cluster_parameter_group_name: param_group_id).db_cluster_parameter_groups.first
|
769
762
|
# rescue DBClusterParameterGroupNotFound => e
|
770
763
|
# Of course the API will return DBParameterGroupNotFound instead of the documented DBClusterParameterGroupNotFound error.
|
771
764
|
rescue Aws::RDS::Errors::DBParameterGroupNotFound => e
|
@@ -777,7 +770,7 @@ module MU
|
|
777
770
|
# @param region [String]: The cloud provider region
|
778
771
|
# @return [OpenStruct]
|
779
772
|
def self.getDBParameterGroup(param_group_id, region: MU.curRegion)
|
780
|
-
MU::Cloud::AWS.rds(region).describe_db_parameter_groups(db_parameter_group_name: param_group_id).db_parameter_groups.first
|
773
|
+
MU::Cloud::AWS.rds(region: region).describe_db_parameter_groups(db_parameter_group_name: param_group_id).db_parameter_groups.first
|
781
774
|
rescue Aws::RDS::Errors::DBParameterGroupNotFound => e
|
782
775
|
#we're fine returning nil
|
783
776
|
end
|
@@ -787,7 +780,7 @@ module MU
|
|
787
780
|
# @param region [String]: The cloud provider region
|
788
781
|
# @return [OpenStruct]
|
789
782
|
def self.getSubnetGroup(subnet_id, region: MU.curRegion)
|
790
|
-
MU::Cloud::AWS.rds(region).describe_db_subnet_groups(db_subnet_group_name: subnet_id).db_subnet_groups.first
|
783
|
+
MU::Cloud::AWS.rds(region: region).describe_db_subnet_groups(db_subnet_group_name: subnet_id).db_subnet_groups.first
|
791
784
|
rescue Aws::RDS::Errors::DBSubnetGroupNotFoundFault => e
|
792
785
|
#we're fine returning nil
|
793
786
|
end
|
@@ -795,7 +788,7 @@ module MU
|
|
795
788
|
# Called automatically by {MU::Deploy#createResources}
|
796
789
|
def groom
|
797
790
|
unless @config["create_cluster"]
|
798
|
-
database = MU::Cloud::AWS::Database.getDatabaseById(@config['identifier'], region: @config['region'])
|
791
|
+
database = MU::Cloud::AWS::Database.getDatabaseById(@config['identifier'], region: @config['region'], credentials: @config['credentials'])
|
799
792
|
|
800
793
|
# Run SQL on deploy
|
801
794
|
if @config['run_sql_on_deploy']
|
@@ -885,7 +878,7 @@ module MU
|
|
885
878
|
MU.log "Setting multi-az on #{@config['identifier']}"
|
886
879
|
attempts = 0
|
887
880
|
begin
|
888
|
-
MU::Cloud::AWS.rds(@config['region']).modify_db_instance(
|
881
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).modify_db_instance(
|
889
882
|
db_instance_identifier: @config['identifier'],
|
890
883
|
apply_immediately: true,
|
891
884
|
multi_az: true
|
@@ -946,7 +939,7 @@ module MU
|
|
946
939
|
if !cloud_desc.db_security_groups.empty?
|
947
940
|
cloud_desc.db_security_groups.each { |rds_sg|
|
948
941
|
begin
|
949
|
-
MU::Cloud::AWS.rds(@config['region']).authorize_db_security_group_ingress(
|
942
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).authorize_db_security_group_ingress(
|
950
943
|
db_security_group_name: rds_sg.db_security_group_name,
|
951
944
|
cidrip: cidr
|
952
945
|
)
|
@@ -969,9 +962,9 @@ module MU
|
|
969
962
|
# @param db_id [String]: The cloud provider's identifier for this database.
|
970
963
|
# @param region [String]: The cloud provider region
|
971
964
|
# @return [OpenStruct]
|
972
|
-
def self.getDatabaseById(db_id, region: MU.curRegion)
|
965
|
+
def self.getDatabaseById(db_id, region: MU.curRegion, credentials: nil)
|
973
966
|
raise MuError, "You must provide a db_id" if db_id.nil?
|
974
|
-
MU::Cloud::AWS.rds(region).describe_db_instances(db_instance_identifier: db_id).db_instances.first
|
967
|
+
MU::Cloud::AWS.rds(region: region, credentials: credentials).describe_db_instances(db_instance_identifier: db_id).db_instances.first
|
975
968
|
rescue Aws::RDS::Errors::DBInstanceNotFound => e
|
976
969
|
# We're fine with this returning nil when searching for a database instance the doesn't exist.
|
977
970
|
end
|
@@ -980,8 +973,8 @@ module MU
|
|
980
973
|
# @param db_cluster_id [String]: The cloud provider's identifier for this database cluster.
|
981
974
|
# @param region [String]: The cloud provider region
|
982
975
|
# @return [OpenStruct]
|
983
|
-
def self.getDatabaseClusterById(db_cluster_id, region: MU.curRegion)
|
984
|
-
MU::Cloud::AWS.rds(region).describe_db_clusters(db_cluster_identifier: db_cluster_id).db_clusters.first
|
976
|
+
def self.getDatabaseClusterById(db_cluster_id, region: MU.curRegion, credentials: nil)
|
977
|
+
MU::Cloud::AWS.rds(region: region, credentials: credentials).describe_db_clusters(db_cluster_identifier: db_cluster_id).db_clusters.first
|
985
978
|
rescue Aws::RDS::Errors::DBClusterNotFoundFault => e
|
986
979
|
# We're fine with this returning nil when searching for a database cluster the doesn't exist.
|
987
980
|
end
|
@@ -1002,7 +995,7 @@ module MU
|
|
1002
995
|
deploy_struct =
|
1003
996
|
if db["create_cluster"]
|
1004
997
|
db["identifier"] = @mu_name.downcase if db["identifier"].nil?
|
1005
|
-
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(db["identifier"], region: db['region'])
|
998
|
+
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(db["identifier"], region: db['region'], credentials: @config['credentials'])
|
1006
999
|
# DNS records for the "real" zone should always be registered as late as possible so override_existing only overwrites the records after the resource is ready to use.
|
1007
1000
|
if db['dns_records']
|
1008
1001
|
db['dns_records'].each { |dnsrec|
|
@@ -1124,13 +1117,13 @@ module MU
|
|
1124
1117
|
begin
|
1125
1118
|
snapshot =
|
1126
1119
|
if @config["create_cluster"]
|
1127
|
-
MU::Cloud::AWS.rds(@config['region']).create_db_cluster_snapshot(
|
1120
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).create_db_cluster_snapshot(
|
1128
1121
|
db_cluster_snapshot_identifier: snap_id,
|
1129
1122
|
db_cluster_identifier: @config["identifier"],
|
1130
1123
|
tags: allTags
|
1131
1124
|
)
|
1132
1125
|
else
|
1133
|
-
MU::Cloud::AWS.rds(@config['region']).create_db_snapshot(
|
1126
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).create_db_snapshot(
|
1134
1127
|
db_snapshot_identifier: snap_id,
|
1135
1128
|
db_instance_identifier: @config["identifier"],
|
1136
1129
|
tags: allTags
|
@@ -1149,9 +1142,9 @@ module MU
|
|
1149
1142
|
MU.log "Waiting for RDS snapshot of #{@config["identifier"]} to be ready...", MU::DEBUG
|
1150
1143
|
snapshot_resp =
|
1151
1144
|
if @config["create_cluster"]
|
1152
|
-
MU::Cloud::AWS.rds(@config['region']).describe_db_cluster_snapshots(db_cluster_snapshot_identifier: snap_id)
|
1145
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).describe_db_cluster_snapshots(db_cluster_snapshot_identifier: snap_id)
|
1153
1146
|
else
|
1154
|
-
MU::Cloud::AWS.rds(@config['region']).describe_db_snapshots(db_snapshot_identifier: snap_id)
|
1147
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).describe_db_snapshots(db_snapshot_identifier: snap_id)
|
1155
1148
|
end
|
1156
1149
|
|
1157
1150
|
if @config["create_cluster"]
|
@@ -1171,9 +1164,9 @@ module MU
|
|
1171
1164
|
def getExistingSnapshot
|
1172
1165
|
resp =
|
1173
1166
|
if @config["create_cluster"]
|
1174
|
-
MU::Cloud::AWS.rds(@config['region']).describe_db_cluster_snapshots(db_cluster_snapshot_identifier: @config["identifier"])
|
1167
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).describe_db_cluster_snapshots(db_cluster_snapshot_identifier: @config["identifier"])
|
1175
1168
|
else
|
1176
|
-
MU::Cloud::AWS.rds(@config['region']).describe_db_snapshots(db_snapshot_identifier: @config["identifier"])
|
1169
|
+
MU::Cloud::AWS.rds(region: @config['region'], credentials: @config['credentials']).describe_db_snapshots(db_snapshot_identifier: @config["identifier"])
|
1177
1170
|
end
|
1178
1171
|
|
1179
1172
|
snapshots = @config["create_cluster"] ? resp.db_cluster_snapshots : resp.db_snapshots
|
@@ -1186,20 +1179,29 @@ module MU
|
|
1186
1179
|
end
|
1187
1180
|
end
|
1188
1181
|
|
1182
|
+
# Does this resource type exist as a global (cloud-wide) artifact, or
|
1183
|
+
# is it localized to a region/zone?
|
1184
|
+
# @return [Boolean]
|
1185
|
+
def self.isGlobal?
|
1186
|
+
false
|
1187
|
+
end
|
1188
|
+
|
1189
1189
|
# Called by {MU::Cleanup}. Locates resources that were created by the
|
1190
1190
|
# currently-loaded deployment, and purges them.
|
1191
1191
|
# @param noop [Boolean]: If true, will only print what would be done
|
1192
1192
|
# @param ignoremaster [Boolean]: If true, will remove resources not flagged as originating from this Mu server
|
1193
1193
|
# @param region [String]: The cloud provider region in which to operate
|
1194
1194
|
# @return [void]
|
1195
|
-
def self.cleanup(
|
1196
|
-
|
1195
|
+
def self.cleanup(noop: false, ignoremaster: false, credentials: nil, region: MU.curRegion, flags: {})
|
1196
|
+
skipsnapshots = flags["skipsnapshots"]
|
1197
|
+
|
1198
|
+
resp = MU::Cloud::AWS.rds(credentials: credentials, region: region).describe_db_instances
|
1197
1199
|
threads = []
|
1198
1200
|
|
1199
1201
|
resp.db_instances.each { |db|
|
1200
1202
|
db_id = db.db_instance_identifier
|
1201
|
-
arn = MU::Cloud::AWS::Database.getARN(db.db_instance_identifier, "db", "rds", region: region)
|
1202
|
-
tags = MU::Cloud::AWS.rds(region).list_tags_for_resource(resource_name: arn).tag_list
|
1203
|
+
arn = MU::Cloud::AWS::Database.getARN(db.db_instance_identifier, "db", "rds", region: region, credentials: credentials)
|
1204
|
+
tags = MU::Cloud::AWS.rds(credentials: credentials, region: region).list_tags_for_resource(resource_name: arn).tag_list
|
1203
1205
|
|
1204
1206
|
found_muid = false
|
1205
1207
|
found_master = false
|
@@ -1223,7 +1225,7 @@ module MU
|
|
1223
1225
|
threads << Thread.new(db) { |mydb|
|
1224
1226
|
MU.dupGlobals(parent_thread_id)
|
1225
1227
|
Thread.abort_on_exception = true
|
1226
|
-
MU::Cloud::AWS::Database.terminate_rds_instance(mydb, noop: noop, skipsnapshots: skipsnapshots, region: region, deploy_id: MU.deploy_id, cloud_id: db.db_instance_identifier, mu_name: db.db_instance_identifier.upcase)
|
1228
|
+
MU::Cloud::AWS::Database.terminate_rds_instance(mydb, noop: noop, skipsnapshots: skipsnapshots, region: region, deploy_id: MU.deploy_id, cloud_id: db.db_instance_identifier, mu_name: db.db_instance_identifier.upcase, credentials: credentials)
|
1227
1229
|
}
|
1228
1230
|
end
|
1229
1231
|
}
|
@@ -1235,11 +1237,11 @@ module MU
|
|
1235
1237
|
|
1236
1238
|
# Cleanup database clusters
|
1237
1239
|
threads = []
|
1238
|
-
resp = MU::Cloud::AWS.rds(region).describe_db_clusters
|
1240
|
+
resp = MU::Cloud::AWS.rds(credentials: credentials, region: region).describe_db_clusters
|
1239
1241
|
resp.db_clusters.each { |cluster|
|
1240
1242
|
cluster_id = cluster.db_cluster_identifier
|
1241
|
-
arn = MU::Cloud::AWS::Database.getARN(cluster_id, "cluster", "rds", region: region)
|
1242
|
-
tags = MU::Cloud::AWS.rds(region).list_tags_for_resource(resource_name: arn).tag_list
|
1243
|
+
arn = MU::Cloud::AWS::Database.getARN(cluster_id, "cluster", "rds", region: region, credentials: credentials)
|
1244
|
+
tags = MU::Cloud::AWS.rds(credentials: credentials, region: region).list_tags_for_resource(resource_name: arn).tag_list
|
1243
1245
|
|
1244
1246
|
found_muid = false
|
1245
1247
|
found_master = false
|
@@ -1263,7 +1265,7 @@ module MU
|
|
1263
1265
|
threads << Thread.new(cluster) { |mydbcluster|
|
1264
1266
|
MU.dupGlobals(parent_thread_id)
|
1265
1267
|
Thread.abort_on_exception = true
|
1266
|
-
MU::Cloud::AWS::Database.terminate_rds_cluster(mydbcluster, noop: noop, skipsnapshots: skipsnapshots, region: region, deploy_id: MU.deploy_id, cloud_id: cluster_id, mu_name: cluster_id.upcase)
|
1268
|
+
MU::Cloud::AWS::Database.terminate_rds_cluster(mydbcluster, noop: noop, skipsnapshots: skipsnapshots, region: region, deploy_id: MU.deploy_id, cloud_id: cluster_id, mu_name: cluster_id.upcase, credentials: credentials)
|
1267
1269
|
}
|
1268
1270
|
end
|
1269
1271
|
}
|
@@ -1275,10 +1277,10 @@ module MU
|
|
1275
1277
|
|
1276
1278
|
threads = []
|
1277
1279
|
# Cleanup database subnet group
|
1278
|
-
MU::Cloud::AWS.rds(region).describe_db_subnet_groups.db_subnet_groups.each { |sub_group|
|
1280
|
+
MU::Cloud::AWS.rds(credentials: credentials, region: region).describe_db_subnet_groups.db_subnet_groups.each { |sub_group|
|
1279
1281
|
sub_group_id = sub_group.db_subnet_group_name
|
1280
|
-
arn = MU::Cloud::AWS::Database.getARN(sub_group_id, "subgrp", "rds", region: region)
|
1281
|
-
tags = MU::Cloud::AWS.rds(region).list_tags_for_resource(resource_name: arn).tag_list
|
1282
|
+
arn = MU::Cloud::AWS::Database.getARN(sub_group_id, "subgrp", "rds", region: region, credentials: credentials)
|
1283
|
+
tags = MU::Cloud::AWS.rds(credentials: credentials, region: region).list_tags_for_resource(resource_name: arn).tag_list
|
1282
1284
|
|
1283
1285
|
found_muid = false
|
1284
1286
|
found_master = false
|
@@ -1308,10 +1310,10 @@ module MU
|
|
1308
1310
|
}
|
1309
1311
|
|
1310
1312
|
# Cleanup database parameter group
|
1311
|
-
MU::Cloud::AWS.rds(region).describe_db_parameter_groups.db_parameter_groups.each { |param_group|
|
1313
|
+
MU::Cloud::AWS.rds(credentials: credentials, region: region).describe_db_parameter_groups.db_parameter_groups.each { |param_group|
|
1312
1314
|
param_group_id = param_group.db_parameter_group_name
|
1313
|
-
arn = MU::Cloud::AWS::Database.getARN(param_group_id, "pg", "rds", region: region)
|
1314
|
-
tags = MU::Cloud::AWS.rds(region).list_tags_for_resource(resource_name: arn).tag_list
|
1315
|
+
arn = MU::Cloud::AWS::Database.getARN(param_group_id, "pg", "rds", region: region, credentials: credentials)
|
1316
|
+
tags = MU::Cloud::AWS.rds(credentials: credentials, region: region).list_tags_for_resource(resource_name: arn).tag_list
|
1315
1317
|
|
1316
1318
|
found_muid = false
|
1317
1319
|
found_master = false
|
@@ -1341,10 +1343,10 @@ module MU
|
|
1341
1343
|
}
|
1342
1344
|
|
1343
1345
|
# Cleanup database cluster parameter group
|
1344
|
-
MU::Cloud::AWS.rds(region).describe_db_cluster_parameter_groups.db_cluster_parameter_groups.each { |param_group|
|
1346
|
+
MU::Cloud::AWS.rds(credentials: credentials, region: region).describe_db_cluster_parameter_groups.db_cluster_parameter_groups.each { |param_group|
|
1345
1347
|
param_group_id = param_group.db_cluster_parameter_group_name
|
1346
|
-
arn = MU::Cloud::AWS::Database.getARN(param_group_id, "cluster-pg", "rds", region: region)
|
1347
|
-
tags = MU::Cloud::AWS.rds(region).list_tags_for_resource(resource_name: arn).tag_list
|
1348
|
+
arn = MU::Cloud::AWS::Database.getARN(param_group_id, "cluster-pg", "rds", region: region, credentials: credentials)
|
1349
|
+
tags = MU::Cloud::AWS.rds(credentials: credentials, region: region).list_tags_for_resource(resource_name: arn).tag_list
|
1348
1350
|
|
1349
1351
|
found_muid = false
|
1350
1352
|
found_master = false
|
@@ -1447,16 +1449,20 @@ module MU
|
|
1447
1449
|
def self.validateConfig(db, configurator)
|
1448
1450
|
ok = true
|
1449
1451
|
|
1450
|
-
|
1451
|
-
|
1452
|
-
|
1453
|
-
|
1452
|
+
if db['create_cluster'] or db['engine'] == "aurora" or db["member_of_cluster"]
|
1453
|
+
case db['engine']
|
1454
|
+
when "mysql", "aurora", "aurora-mysql"
|
1455
|
+
db["engine"] = "aurora-mysql"
|
1456
|
+
when "postgres", "postgresql", "postgresql-mysql"
|
1457
|
+
db["engine"] = "aurora-postgresql"
|
1454
1458
|
else
|
1455
|
-
false
|
1459
|
+
ok = false
|
1460
|
+
MU.log "Requested a clustered database, but engine #{db['engine']} is not supported for clustering", MU::ERR
|
1456
1461
|
end
|
1462
|
+
end
|
1457
1463
|
|
1458
1464
|
db["license_model"] ||=
|
1459
|
-
if
|
1465
|
+
if ["postgres", "postgresql", "aurora-postgresql"].include?(db["engine"])
|
1460
1466
|
"postgresql-license"
|
1461
1467
|
elsif db["engine"] == "mysql"
|
1462
1468
|
"general-public-license"
|
@@ -1465,15 +1471,15 @@ module MU
|
|
1465
1471
|
end
|
1466
1472
|
|
1467
1473
|
if db["create_read_replica"] or db['read_replica_of']
|
1468
|
-
if
|
1469
|
-
MU.log "Read replica(s) database instances
|
1474
|
+
if !["postgres", "postgresql", "mysql", "aurora-mysql", "aurora-postgresql", "mariadb"].include?(db["engine"])
|
1475
|
+
MU.log "Read replica(s) database instances not supported for #{db["engine"]}.", MU::ERR
|
1470
1476
|
ok = false
|
1471
1477
|
end
|
1472
1478
|
end
|
1473
1479
|
|
1474
1480
|
if db["creation_style"] == "existing"
|
1475
1481
|
begin
|
1476
|
-
MU::Cloud::AWS.rds(db['region']).describe_db_instances(
|
1482
|
+
MU::Cloud::AWS.rds(region: db['region']).describe_db_instances(
|
1477
1483
|
db_instance_identifier: db['identifier']
|
1478
1484
|
)
|
1479
1485
|
rescue Aws::RDS::Errors::DBInstanceNotFound => e
|
@@ -1556,7 +1562,7 @@ module MU
|
|
1556
1562
|
# Remove an RDS database and associated artifacts
|
1557
1563
|
# @param db [OpenStruct]: The cloud provider's description of the database artifact
|
1558
1564
|
# @return [void]
|
1559
|
-
def self.terminate_rds_instance(db, noop: false, skipsnapshots: false, region: MU.curRegion, deploy_id: MU.deploy_id, mu_name: nil, cloud_id: nil)
|
1565
|
+
def self.terminate_rds_instance(db, noop: false, skipsnapshots: false, region: MU.curRegion, deploy_id: MU.deploy_id, mu_name: nil, cloud_id: nil, credentials: nil)
|
1560
1566
|
raise MuError, "terminate_rds_instance requires a non-nil database descriptor" if db.nil?
|
1561
1567
|
db_id = db.db_instance_identifier
|
1562
1568
|
|
@@ -1578,7 +1584,7 @@ module MU
|
|
1578
1584
|
|
1579
1585
|
rdssecgroups = Array.new
|
1580
1586
|
begin
|
1581
|
-
secgroup = MU::Cloud::AWS.rds(region).describe_db_security_groups(db_security_group_name: db_id)
|
1587
|
+
secgroup = MU::Cloud::AWS.rds(region: region).describe_db_security_groups(db_security_group_name: db_id)
|
1582
1588
|
rescue Aws::RDS::Errors::DBSecurityGroupNotFound
|
1583
1589
|
# this is normal in VPC world
|
1584
1590
|
end
|
@@ -1591,6 +1597,7 @@ module MU
|
|
1591
1597
|
loop do
|
1592
1598
|
MU.log "Waiting for #{db_id} to be in a removable state...", MU::NOTICE
|
1593
1599
|
db = MU::Cloud::AWS::Database.getDatabaseById(db_id, region: region)
|
1600
|
+
return if db.nil?
|
1594
1601
|
break unless %w{creating modifying backing-up}.include?(db.db_instance_status)
|
1595
1602
|
sleep 60
|
1596
1603
|
end
|
@@ -1601,15 +1608,15 @@ module MU
|
|
1601
1608
|
if %w{deleting deleted}.include?(db.db_instance_status)
|
1602
1609
|
MU.log "#{db_id} has already been terminated", MU::WARN
|
1603
1610
|
else
|
1604
|
-
def self.dbSkipSnap(db_id, region)
|
1611
|
+
def self.dbSkipSnap(db_id, region, credentials)
|
1605
1612
|
# We're calling this several times so lets declare it once
|
1606
1613
|
MU.log "Terminating #{db_id} (not saving final snapshot)"
|
1607
|
-
MU::Cloud::AWS.rds(region).delete_db_instance(db_instance_identifier: db_id, skip_final_snapshot: true)
|
1614
|
+
MU::Cloud::AWS.rds(region: region, credentials: credentials).delete_db_instance(db_instance_identifier: db_id, skip_final_snapshot: true)
|
1608
1615
|
end
|
1609
1616
|
|
1610
|
-
def self.dbCreateSnap(db_id, region)
|
1617
|
+
def self.dbCreateSnap(db_id, region, credentials)
|
1611
1618
|
MU.log "Terminating #{db_id} (final snapshot: #{db_id}-mufinal)"
|
1612
|
-
MU::Cloud::AWS.rds(region).delete_db_instance(db_instance_identifier: db_id, final_db_snapshot_identifier: "#{db_id}-mufinal", skip_final_snapshot: false)
|
1619
|
+
MU::Cloud::AWS.rds(region: region, credentials: credentials).delete_db_instance(db_instance_identifier: db_id, final_db_snapshot_identifier: "#{db_id}-mufinal", skip_final_snapshot: false)
|
1613
1620
|
end
|
1614
1621
|
|
1615
1622
|
if !noop
|
@@ -1617,9 +1624,9 @@ module MU
|
|
1617
1624
|
begin
|
1618
1625
|
if db.db_cluster_identifier || db.read_replica_source_db_instance_identifier
|
1619
1626
|
# make sure we don't create final snapshot for a database instance that is part of a cluster, or if it's a read replica database instance
|
1620
|
-
dbSkipSnap(db_id, region)
|
1627
|
+
dbSkipSnap(db_id, region, credentials)
|
1621
1628
|
else
|
1622
|
-
skipsnapshots ? dbSkipSnap(db_id, region) : dbCreateSnap(db_id, region)
|
1629
|
+
skipsnapshots ? dbSkipSnap(db_id, region, credentials) : dbCreateSnap(db_id, region, credentials)
|
1623
1630
|
end
|
1624
1631
|
rescue Aws::RDS::Errors::InvalidDBInstanceState => e
|
1625
1632
|
if retries < 5
|
@@ -1631,10 +1638,10 @@ module MU
|
|
1631
1638
|
MU.log "#{db_id} is not in a removable state after several retries, giving up. #{e.inspect}", MU::ERR
|
1632
1639
|
end
|
1633
1640
|
rescue Aws::RDS::Errors::DBSnapshotAlreadyExists
|
1634
|
-
dbSkipSnap(db_id, region)
|
1641
|
+
dbSkipSnap(db_id, region, credentials)
|
1635
1642
|
MU.log "Snapshot of #{db_id} already exists", MU::WARN
|
1636
1643
|
rescue Aws::RDS::Errors::SnapshotQuotaExceeded
|
1637
|
-
dbSkipSnap(db_id, region)
|
1644
|
+
dbSkipSnap(db_id, region, credentials)
|
1638
1645
|
MU.log "Snapshot quota exceeded while deleting #{db_id}", MU::ERR
|
1639
1646
|
end
|
1640
1647
|
end
|
@@ -1657,7 +1664,7 @@ module MU
|
|
1657
1664
|
begin
|
1658
1665
|
rdssecgroups.each { |sg|
|
1659
1666
|
MU.log "Removing RDS Security Group #{sg}"
|
1660
|
-
MU::Cloud::AWS.rds(region).delete_db_security_group(db_security_group_name: sg) if !noop
|
1667
|
+
MU::Cloud::AWS.rds(region: region).delete_db_security_group(db_security_group_name: sg) if !noop
|
1661
1668
|
}
|
1662
1669
|
rescue Aws::RDS::Errors::DBSecurityGroupNotFound
|
1663
1670
|
MU.log "RDS Security Group #{sg} disappeared before we could remove it", MU::WARN
|
@@ -1679,7 +1686,7 @@ module MU
|
|
1679
1686
|
# Remove an RDS database cluster and associated artifacts
|
1680
1687
|
# @param cluster [OpenStruct]: The cloud provider's description of the database artifact
|
1681
1688
|
# @return [void]
|
1682
|
-
def self.terminate_rds_cluster(cluster, noop: false, skipsnapshots: false, region: MU.curRegion, deploy_id: MU.deploy_id, mu_name: nil, cloud_id: nil)
|
1689
|
+
def self.terminate_rds_cluster(cluster, noop: false, skipsnapshots: false, region: MU.curRegion, deploy_id: MU.deploy_id, mu_name: nil, cloud_id: nil, credentials: nil)
|
1683
1690
|
raise MuError, "terminate_rds_cluster requires a non-nil database cluster descriptor" if cluster.nil?
|
1684
1691
|
cluster_id = cluster.db_cluster_identifier
|
1685
1692
|
|
@@ -1689,6 +1696,7 @@ module MU
|
|
1689
1696
|
region: region,
|
1690
1697
|
deploy_id: deploy_id,
|
1691
1698
|
cloud_id: cloud_id,
|
1699
|
+
credentials: credentials,
|
1692
1700
|
mu_name: mu_name
|
1693
1701
|
).first
|
1694
1702
|
|
@@ -1699,7 +1707,7 @@ module MU
|
|
1699
1707
|
unless cluster.status == "available"
|
1700
1708
|
loop do
|
1701
1709
|
MU.log "Waiting for #{cluster_id} to be in a removable state...", MU::NOTICE
|
1702
|
-
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(cluster_id, region: region)
|
1710
|
+
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(cluster_id, region: region, credentials: credentials)
|
1703
1711
|
break unless %w{creating modifying backing-up}.include?(cluster.status)
|
1704
1712
|
sleep 60
|
1705
1713
|
end
|
@@ -1711,20 +1719,20 @@ module MU
|
|
1711
1719
|
MU.log "#{cluster_id} has already been terminated", MU::WARN
|
1712
1720
|
else
|
1713
1721
|
unless noop
|
1714
|
-
def self.clusterSkipSnap(cluster_id, region)
|
1722
|
+
def self.clusterSkipSnap(cluster_id, region, credentials)
|
1715
1723
|
# We're calling this several times so lets declare it once
|
1716
1724
|
MU.log "Terminating #{cluster_id}. Not saving final snapshot"
|
1717
|
-
MU::Cloud::AWS.rds(region).delete_db_cluster(db_cluster_identifier: cluster_id, skip_final_snapshot: true)
|
1725
|
+
MU::Cloud::AWS.rds(region: region, credentials: credentials).delete_db_cluster(db_cluster_identifier: cluster_id, skip_final_snapshot: true)
|
1718
1726
|
end
|
1719
1727
|
|
1720
|
-
def self.clusterCreateSnap(cluster_id, region)
|
1728
|
+
def self.clusterCreateSnap(cluster_id, region, credentials)
|
1721
1729
|
MU.log "Terminating #{cluster_id}. Saving final snapshot: #{cluster_id}-mufinal"
|
1722
|
-
MU::Cloud::AWS.rds(region).delete_db_cluster(db_cluster_identifier: cluster_id, skip_final_snapshot: false, final_db_snapshot_identifier: "#{cluster_id}-mufinal")
|
1730
|
+
MU::Cloud::AWS.rds(region: region, credentials: credentials).delete_db_cluster(db_cluster_identifier: cluster_id, skip_final_snapshot: false, final_db_snapshot_identifier: "#{cluster_id}-mufinal")
|
1723
1731
|
end
|
1724
1732
|
|
1725
1733
|
retries = 0
|
1726
1734
|
begin
|
1727
|
-
skipsnapshots ? clusterSkipSnap(cluster_id, region) : clusterCreateSnap(cluster_id, region)
|
1735
|
+
skipsnapshots ? clusterSkipSnap(cluster_id, region, credentials) : clusterCreateSnap(cluster_id, region, credentials)
|
1728
1736
|
rescue Aws::RDS::Errors::InvalidDBClusterStateFault => e
|
1729
1737
|
if retries < 5
|
1730
1738
|
MU.log "#{cluster_id} is not in a removable state, retrying several times", MU::WARN
|
@@ -1735,10 +1743,10 @@ module MU
|
|
1735
1743
|
MU.log "#{cluster_id} is not in a removable state after several retries, giving up. #{e.inspect}", MU::ERR
|
1736
1744
|
end
|
1737
1745
|
rescue Aws::RDS::Errors::DBClusterSnapshotAlreadyExistsFault
|
1738
|
-
clusterSkipSnap(cluster_id, region)
|
1746
|
+
clusterSkipSnap(cluster_id, region, credentials)
|
1739
1747
|
MU.log "Snapshot of #{cluster_id} already exists", MU::WARN
|
1740
1748
|
rescue Aws::RDS::Errors::DBClusterQuotaExceeded
|
1741
|
-
clusterSkipSnap(cluster_id, region)
|
1749
|
+
clusterSkipSnap(cluster_id, region, credentials)
|
1742
1750
|
MU.log "Snapshot quota exceeded while deleting #{cluster_id}", MU::ERR
|
1743
1751
|
end
|
1744
1752
|
end
|
@@ -1747,7 +1755,7 @@ module MU
|
|
1747
1755
|
# We're wating until getDatabaseClusterById returns nil. This assumes the database cluster object doesn't linger around in "deleted" state for a while.
|
1748
1756
|
loop do
|
1749
1757
|
MU.log "Waiting for #{cluster_id} to terminate", MU::NOTICE
|
1750
|
-
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(cluster_id, region: region)
|
1758
|
+
cluster = MU::Cloud::AWS::Database.getDatabaseClusterById(cluster_id, region: region, credentials: credentials)
|
1751
1759
|
break unless cluster
|
1752
1760
|
sleep 30
|
1753
1761
|
end
|
@@ -1773,7 +1781,7 @@ module MU
|
|
1773
1781
|
def self.delete_subnet_group(subnet_group_id, region: MU.curRegion)
|
1774
1782
|
retries ||= 0
|
1775
1783
|
MU.log "Deleting DB subnet group #{subnet_group_id}"
|
1776
|
-
MU::Cloud::AWS.rds(region).delete_db_subnet_group(db_subnet_group_name: subnet_group_id)
|
1784
|
+
MU::Cloud::AWS.rds(region: region).delete_db_subnet_group(db_subnet_group_name: subnet_group_id)
|
1777
1785
|
rescue Aws::RDS::Errors::DBSubnetGroupNotFoundFault => e
|
1778
1786
|
MU.log "DB subnet group #{subnet_group_id} disappeared before we could remove it", MU::WARN
|
1779
1787
|
rescue Aws::RDS::Errors::InvalidDBSubnetGroupStateFault=> e
|
@@ -1794,7 +1802,7 @@ module MU
|
|
1794
1802
|
def self.delete_db_parameter_group(parameter_group_id, region: MU.curRegion)
|
1795
1803
|
retries ||= 0
|
1796
1804
|
MU.log "Deleting DB parameter group #{parameter_group_id}"
|
1797
|
-
MU::Cloud::AWS.rds(region).delete_db_parameter_group(db_parameter_group_name: parameter_group_id)
|
1805
|
+
MU::Cloud::AWS.rds(region: region).delete_db_parameter_group(db_parameter_group_name: parameter_group_id)
|
1798
1806
|
rescue Aws::RDS::Errors::DBParameterGroupNotFound
|
1799
1807
|
MU.log "DB parameter group #{parameter_group_id} disappeared before we could remove it", MU::WARN
|
1800
1808
|
rescue Aws::RDS::Errors::InvalidDBParameterGroupState => e
|
@@ -1815,7 +1823,7 @@ module MU
|
|
1815
1823
|
def self.delete_db_cluster_parameter_group(parameter_group_id, region: MU.curRegion)
|
1816
1824
|
retries ||= 0
|
1817
1825
|
MU.log "Deleting cluster parameter group #{parameter_group_id}"
|
1818
|
-
MU::Cloud::AWS.rds(region).delete_db_cluster_parameter_group(db_cluster_parameter_group_name: parameter_group_id)
|
1826
|
+
MU::Cloud::AWS.rds(region: region).delete_db_cluster_parameter_group(db_cluster_parameter_group_name: parameter_group_id)
|
1819
1827
|
# AWS API sucks. instead of returning the documented error DBClusterParameterGroupNotFoundFault it errors out with DBParameterGroupNotFound.
|
1820
1828
|
rescue Aws::RDS::Errors::DBParameterGroupNotFound
|
1821
1829
|
MU.log "Cluster parameter group #{parameter_group_id} disappeared before we could remove it", MU::WARN
|