cloud-mu 3.1.3 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Dockerfile +15 -3
- data/ansible/roles/mu-windows/README.md +33 -0
- data/ansible/roles/mu-windows/defaults/main.yml +2 -0
- data/ansible/roles/mu-windows/files/LaunchConfig.json +9 -0
- data/ansible/roles/mu-windows/files/config.xml +76 -0
- data/ansible/roles/mu-windows/handlers/main.yml +2 -0
- data/ansible/roles/mu-windows/meta/main.yml +53 -0
- data/ansible/roles/mu-windows/tasks/main.yml +36 -0
- data/ansible/roles/mu-windows/tests/inventory +2 -0
- data/ansible/roles/mu-windows/tests/test.yml +5 -0
- data/ansible/roles/mu-windows/vars/main.yml +2 -0
- data/bin/mu-adopt +21 -13
- data/bin/mu-azure-tests +57 -0
- data/bin/mu-cleanup +2 -4
- data/bin/mu-configure +52 -0
- data/bin/mu-deploy +3 -3
- data/bin/mu-findstray-tests +25 -0
- data/bin/mu-gen-docs +2 -4
- data/bin/mu-load-config.rb +4 -4
- data/bin/mu-node-manage +15 -16
- data/bin/mu-run-tests +147 -37
- data/cloud-mu.gemspec +22 -20
- data/cookbooks/mu-activedirectory/resources/domain.rb +4 -4
- data/cookbooks/mu-activedirectory/resources/domain_controller.rb +4 -4
- data/cookbooks/mu-tools/libraries/helper.rb +3 -2
- data/cookbooks/mu-tools/libraries/monkey.rb +35 -0
- data/cookbooks/mu-tools/recipes/apply_security.rb +14 -14
- data/cookbooks/mu-tools/recipes/aws_api.rb +9 -0
- data/cookbooks/mu-tools/recipes/eks.rb +2 -2
- data/cookbooks/mu-tools/recipes/google_api.rb +2 -2
- data/cookbooks/mu-tools/recipes/selinux.rb +2 -1
- data/cookbooks/mu-tools/recipes/windows-client.rb +163 -164
- data/cookbooks/mu-tools/resources/disk.rb +1 -1
- data/cookbooks/mu-tools/resources/windows_users.rb +44 -43
- data/extras/clean-stock-amis +25 -19
- data/extras/generate-stock-images +1 -0
- data/extras/image-generators/AWS/win2k12.yaml +18 -13
- data/extras/image-generators/AWS/win2k16.yaml +18 -13
- data/extras/image-generators/AWS/win2k19.yaml +21 -0
- data/extras/image-generators/Google/centos6.yaml +1 -0
- data/extras/image-generators/Google/centos7.yaml +1 -1
- data/modules/mommacat.ru +6 -16
- data/modules/mu.rb +158 -111
- data/modules/mu/adoption.rb +404 -71
- data/modules/mu/cleanup.rb +221 -306
- data/modules/mu/cloud.rb +129 -1633
- data/modules/mu/cloud/database.rb +49 -0
- data/modules/mu/cloud/dnszone.rb +44 -0
- data/modules/mu/cloud/machine_images.rb +212 -0
- data/modules/mu/cloud/providers.rb +81 -0
- data/modules/mu/cloud/resource_base.rb +926 -0
- data/modules/mu/cloud/server.rb +40 -0
- data/modules/mu/cloud/server_pool.rb +1 -0
- data/modules/mu/cloud/ssh_sessions.rb +228 -0
- data/modules/mu/cloud/winrm_sessions.rb +237 -0
- data/modules/mu/cloud/wrappers.rb +169 -0
- data/modules/mu/config.rb +171 -1767
- data/modules/mu/config/alarm.rb +2 -6
- data/modules/mu/config/bucket.rb +32 -3
- data/modules/mu/config/cache_cluster.rb +2 -2
- data/modules/mu/config/cdn.rb +100 -0
- data/modules/mu/config/collection.rb +4 -4
- data/modules/mu/config/container_cluster.rb +9 -4
- data/modules/mu/config/database.rb +84 -105
- data/modules/mu/config/database.yml +1 -2
- data/modules/mu/config/dnszone.rb +10 -9
- data/modules/mu/config/doc_helpers.rb +516 -0
- data/modules/mu/config/endpoint.rb +5 -4
- data/modules/mu/config/firewall_rule.rb +103 -4
- data/modules/mu/config/folder.rb +4 -4
- data/modules/mu/config/function.rb +19 -10
- data/modules/mu/config/group.rb +4 -4
- data/modules/mu/config/habitat.rb +4 -4
- data/modules/mu/config/job.rb +89 -0
- data/modules/mu/config/loadbalancer.rb +60 -14
- data/modules/mu/config/log.rb +4 -4
- data/modules/mu/config/msg_queue.rb +4 -4
- data/modules/mu/config/nosqldb.rb +4 -4
- data/modules/mu/config/notifier.rb +10 -21
- data/modules/mu/config/ref.rb +411 -0
- data/modules/mu/config/role.rb +4 -4
- data/modules/mu/config/schema_helpers.rb +509 -0
- data/modules/mu/config/search_domain.rb +4 -4
- data/modules/mu/config/server.rb +98 -71
- data/modules/mu/config/server.yml +1 -0
- data/modules/mu/config/server_pool.rb +5 -9
- data/modules/mu/config/storage_pool.rb +1 -1
- data/modules/mu/config/tail.rb +200 -0
- data/modules/mu/config/user.rb +4 -4
- data/modules/mu/config/vpc.rb +71 -27
- data/modules/mu/config/vpc.yml +0 -1
- data/modules/mu/defaults/AWS.yaml +91 -68
- data/modules/mu/defaults/Azure.yaml +1 -0
- data/modules/mu/defaults/Google.yaml +3 -2
- data/modules/mu/deploy.rb +43 -26
- data/modules/mu/groomer.rb +17 -2
- data/modules/mu/groomers/ansible.rb +188 -41
- data/modules/mu/groomers/chef.rb +116 -55
- data/modules/mu/logger.rb +127 -148
- data/modules/mu/master.rb +410 -2
- data/modules/mu/master/chef.rb +3 -4
- data/modules/mu/master/ldap.rb +3 -3
- data/modules/mu/master/ssl.rb +12 -3
- data/modules/mu/mommacat.rb +218 -2612
- data/modules/mu/mommacat/daemon.rb +403 -0
- data/modules/mu/mommacat/naming.rb +473 -0
- data/modules/mu/mommacat/search.rb +495 -0
- data/modules/mu/mommacat/storage.rb +722 -0
- data/modules/mu/{clouds → providers}/README.md +1 -1
- data/modules/mu/{clouds → providers}/aws.rb +380 -122
- data/modules/mu/{clouds → providers}/aws/alarm.rb +7 -5
- data/modules/mu/{clouds → providers}/aws/bucket.rb +297 -59
- data/modules/mu/{clouds → providers}/aws/cache_cluster.rb +37 -71
- data/modules/mu/providers/aws/cdn.rb +782 -0
- data/modules/mu/{clouds → providers}/aws/collection.rb +26 -25
- data/modules/mu/{clouds → providers}/aws/container_cluster.rb +724 -744
- data/modules/mu/providers/aws/database.rb +1744 -0
- data/modules/mu/{clouds → providers}/aws/dnszone.rb +88 -70
- data/modules/mu/providers/aws/endpoint.rb +1072 -0
- data/modules/mu/{clouds → providers}/aws/firewall_rule.rb +220 -247
- data/modules/mu/{clouds → providers}/aws/folder.rb +8 -8
- data/modules/mu/{clouds → providers}/aws/function.rb +300 -142
- data/modules/mu/{clouds → providers}/aws/group.rb +31 -29
- data/modules/mu/{clouds → providers}/aws/habitat.rb +18 -15
- data/modules/mu/providers/aws/job.rb +466 -0
- data/modules/mu/{clouds → providers}/aws/loadbalancer.rb +66 -56
- data/modules/mu/{clouds → providers}/aws/log.rb +17 -14
- data/modules/mu/{clouds → providers}/aws/msg_queue.rb +29 -19
- data/modules/mu/{clouds → providers}/aws/nosqldb.rb +114 -16
- data/modules/mu/{clouds → providers}/aws/notifier.rb +142 -65
- data/modules/mu/{clouds → providers}/aws/role.rb +158 -118
- data/modules/mu/{clouds → providers}/aws/search_domain.rb +201 -59
- data/modules/mu/{clouds → providers}/aws/server.rb +844 -1139
- data/modules/mu/{clouds → providers}/aws/server_pool.rb +74 -65
- data/modules/mu/{clouds → providers}/aws/storage_pool.rb +26 -44
- data/modules/mu/{clouds → providers}/aws/user.rb +24 -25
- data/modules/mu/{clouds → providers}/aws/userdata/README.md +0 -0
- data/modules/mu/{clouds → providers}/aws/userdata/linux.erb +5 -4
- data/modules/mu/{clouds → providers}/aws/userdata/windows.erb +2 -1
- data/modules/mu/{clouds → providers}/aws/vpc.rb +525 -931
- data/modules/mu/providers/aws/vpc_subnet.rb +286 -0
- data/modules/mu/{clouds → providers}/azure.rb +29 -9
- data/modules/mu/{clouds → providers}/azure/container_cluster.rb +3 -8
- data/modules/mu/{clouds → providers}/azure/firewall_rule.rb +18 -11
- data/modules/mu/{clouds → providers}/azure/habitat.rb +8 -6
- data/modules/mu/{clouds → providers}/azure/loadbalancer.rb +5 -5
- data/modules/mu/{clouds → providers}/azure/role.rb +8 -10
- data/modules/mu/{clouds → providers}/azure/server.rb +97 -49
- data/modules/mu/{clouds → providers}/azure/user.rb +6 -8
- data/modules/mu/{clouds → providers}/azure/userdata/README.md +0 -0
- data/modules/mu/{clouds → providers}/azure/userdata/linux.erb +0 -0
- data/modules/mu/{clouds → providers}/azure/userdata/windows.erb +0 -0
- data/modules/mu/{clouds → providers}/azure/vpc.rb +16 -21
- data/modules/mu/{clouds → providers}/cloudformation.rb +18 -7
- data/modules/mu/{clouds → providers}/cloudformation/alarm.rb +3 -3
- data/modules/mu/{clouds → providers}/cloudformation/cache_cluster.rb +3 -3
- data/modules/mu/{clouds → providers}/cloudformation/collection.rb +3 -3
- data/modules/mu/{clouds → providers}/cloudformation/database.rb +6 -17
- data/modules/mu/{clouds → providers}/cloudformation/dnszone.rb +3 -3
- data/modules/mu/{clouds → providers}/cloudformation/firewall_rule.rb +3 -3
- data/modules/mu/{clouds → providers}/cloudformation/loadbalancer.rb +3 -3
- data/modules/mu/{clouds → providers}/cloudformation/log.rb +3 -3
- data/modules/mu/{clouds → providers}/cloudformation/server.rb +7 -7
- data/modules/mu/{clouds → providers}/cloudformation/server_pool.rb +5 -5
- data/modules/mu/{clouds → providers}/cloudformation/vpc.rb +5 -7
- data/modules/mu/{clouds → providers}/docker.rb +0 -0
- data/modules/mu/{clouds → providers}/google.rb +68 -30
- data/modules/mu/{clouds → providers}/google/bucket.rb +13 -15
- data/modules/mu/{clouds → providers}/google/container_cluster.rb +85 -78
- data/modules/mu/{clouds → providers}/google/database.rb +11 -21
- data/modules/mu/{clouds → providers}/google/firewall_rule.rb +15 -14
- data/modules/mu/{clouds → providers}/google/folder.rb +20 -17
- data/modules/mu/{clouds → providers}/google/function.rb +140 -168
- data/modules/mu/{clouds → providers}/google/group.rb +29 -34
- data/modules/mu/{clouds → providers}/google/habitat.rb +21 -22
- data/modules/mu/{clouds → providers}/google/loadbalancer.rb +19 -21
- data/modules/mu/{clouds → providers}/google/role.rb +94 -58
- data/modules/mu/{clouds → providers}/google/server.rb +243 -156
- data/modules/mu/{clouds → providers}/google/server_pool.rb +26 -45
- data/modules/mu/{clouds → providers}/google/user.rb +95 -31
- data/modules/mu/{clouds → providers}/google/userdata/README.md +0 -0
- data/modules/mu/{clouds → providers}/google/userdata/linux.erb +0 -0
- data/modules/mu/{clouds → providers}/google/userdata/windows.erb +0 -0
- data/modules/mu/{clouds → providers}/google/vpc.rb +103 -79
- data/modules/tests/aws-jobs-functions.yaml +46 -0
- data/modules/tests/bucket.yml +4 -0
- data/modules/tests/centos6.yaml +15 -0
- data/modules/tests/centos7.yaml +15 -0
- data/modules/tests/centos8.yaml +12 -0
- data/modules/tests/ecs.yaml +23 -0
- data/modules/tests/eks.yaml +1 -1
- data/modules/tests/functions/node-function/lambda_function.js +10 -0
- data/modules/tests/functions/python-function/lambda_function.py +12 -0
- data/modules/tests/includes-and-params.yaml +2 -1
- data/modules/tests/microservice_app.yaml +288 -0
- data/modules/tests/rds.yaml +108 -0
- data/modules/tests/regrooms/aws-iam.yaml +201 -0
- data/modules/tests/regrooms/bucket.yml +19 -0
- data/modules/tests/regrooms/rds.yaml +123 -0
- data/modules/tests/server-with-scrub-muisms.yaml +2 -1
- data/modules/tests/super_complex_bok.yml +2 -2
- data/modules/tests/super_simple_bok.yml +3 -5
- data/modules/tests/win2k12.yaml +17 -5
- data/modules/tests/win2k16.yaml +25 -0
- data/modules/tests/win2k19.yaml +25 -0
- data/requirements.txt +1 -0
- data/spec/mu/clouds/azure_spec.rb +2 -2
- metadata +240 -154
- data/extras/image-generators/AWS/windows.yaml +0 -18
- data/modules/mu/clouds/aws/database.rb +0 -1985
- data/modules/mu/clouds/aws/endpoint.rb +0 -592
data/modules/mu/config/user.rb
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
module MU
|
|
16
16
|
class Config
|
|
17
|
-
# Basket of Kittens config schema and parser logic. See modules/mu/
|
|
17
|
+
# Basket of Kittens config schema and parser logic. See modules/mu/providers/*/user.rb
|
|
18
18
|
class User
|
|
19
19
|
|
|
20
20
|
# Base configuration schema for a User
|
|
@@ -68,10 +68,10 @@ module MU
|
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
# Generic pre-processing of {MU::Config::BasketofKittens::user}, bare and unvalidated.
|
|
71
|
-
# @param
|
|
72
|
-
# @param
|
|
71
|
+
# @param _user [Hash]: The resource to process and validate
|
|
72
|
+
# @param _configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
73
73
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
74
|
-
def self.validate(
|
|
74
|
+
def self.validate(_user, _configurator)
|
|
75
75
|
ok = true
|
|
76
76
|
|
|
77
77
|
ok
|
data/modules/mu/config/vpc.rb
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
module MU
|
|
16
16
|
class Config
|
|
17
|
-
# Basket of Kittens config schema and parser logic. See modules/mu/
|
|
17
|
+
# Basket of Kittens config schema and parser logic. See modules/mu/providers/*/vpc.rb
|
|
18
18
|
class VPC
|
|
19
19
|
|
|
20
20
|
# Base configuration schema for a VPC
|
|
@@ -417,10 +417,10 @@ module MU
|
|
|
417
417
|
using_default_cidr = false
|
|
418
418
|
if !vpc['ip_block']
|
|
419
419
|
if configurator.updating and configurator.existing_deploy and
|
|
420
|
+
configurator.existing_deploy.original_config and
|
|
420
421
|
configurator.existing_deploy.original_config['vpcs']
|
|
421
|
-
pieces = []
|
|
422
422
|
configurator.existing_deploy.original_config['vpcs'].each { |v|
|
|
423
|
-
if v['name'] == vpc['name']
|
|
423
|
+
if v['name'].to_s == vpc['name'].to_s
|
|
424
424
|
vpc['ip_block'] = v['ip_block']
|
|
425
425
|
vpc['peers'] ||= []
|
|
426
426
|
vpc['peers'].concat(v['peers'])
|
|
@@ -432,6 +432,10 @@ module MU
|
|
|
432
432
|
break
|
|
433
433
|
end
|
|
434
434
|
}
|
|
435
|
+
if !vpc['ip_block']
|
|
436
|
+
MU.log "Loading existing deploy but can't find IP block of VPC #{vpc['name']}", MU::ERR
|
|
437
|
+
ok = false
|
|
438
|
+
end
|
|
435
439
|
else
|
|
436
440
|
using_default_cidr = true
|
|
437
441
|
vpc['ip_block'] = "10.0.0.0/16"
|
|
@@ -494,6 +498,7 @@ module MU
|
|
|
494
498
|
# See if we'll be able to create peering connections
|
|
495
499
|
can_peer = false
|
|
496
500
|
already_peered = false
|
|
501
|
+
|
|
497
502
|
if MU.myCloud == vpc["cloud"] and MU.myVPCObj
|
|
498
503
|
if vpc['peers']
|
|
499
504
|
vpc['peers'].each { |peer|
|
|
@@ -539,7 +544,7 @@ module MU
|
|
|
539
544
|
# Clouds that don't have some kind of native NAT gateway can also
|
|
540
545
|
# leverage this host to honor "gateway" => "#NAT" situations.
|
|
541
546
|
if !can_peer and !already_peered and have_public and vpc["create_bastion"]
|
|
542
|
-
serverclass =
|
|
547
|
+
serverclass = MU::Cloud.resourceClass(vpc["cloud"], "Server")
|
|
543
548
|
bastion = serverclass.genericNAT.dup
|
|
544
549
|
bastion["groomer_variables"] = {
|
|
545
550
|
"nat_ip_block" => vpc["ip_block"].to_s
|
|
@@ -558,10 +563,7 @@ module MU
|
|
|
558
563
|
"name" => vpc["name"],
|
|
559
564
|
"subnet_pref" => "public"
|
|
560
565
|
}
|
|
561
|
-
vpc["
|
|
562
|
-
"type" => "server",
|
|
563
|
-
"name" => bastion['name'],
|
|
564
|
-
}
|
|
566
|
+
MU::Config.addDependency(vpc, bastion['name'], "server", no_create_wait: true)
|
|
565
567
|
vpc["bastion"] = MU::Config::Ref.get(
|
|
566
568
|
name: bastion['name'],
|
|
567
569
|
cloud: vpc['cloud'],
|
|
@@ -596,7 +598,7 @@ module MU
|
|
|
596
598
|
MU.log "Skipping malformed VPC peer in #{vpc['name']}", MU::ERR, details: peer
|
|
597
599
|
next
|
|
598
600
|
end
|
|
599
|
-
peer["#MU_CLOUDCLASS"] =
|
|
601
|
+
peer["#MU_CLOUDCLASS"] = MU::Cloud.loadBaseType("VPC")
|
|
600
602
|
# We check for multiple siblings because some implementations
|
|
601
603
|
# (Google) can split declared VPCs into parts to get the mimic the
|
|
602
604
|
# routing behaviors we expect.
|
|
@@ -613,17 +615,11 @@ module MU
|
|
|
613
615
|
append_me = { "vpc" => peer["vpc"].dup }
|
|
614
616
|
append_me['vpc']['name'] = sib['name']
|
|
615
617
|
append << append_me
|
|
616
|
-
vpc["
|
|
617
|
-
"type" => "vpc",
|
|
618
|
-
"name" => sib['name']
|
|
619
|
-
}
|
|
618
|
+
MU::Config.addDependency(vpc, sib['name'], "vpc", phase: "groom", no_create_wait: true)
|
|
620
619
|
end
|
|
621
620
|
delete << peer
|
|
622
621
|
else
|
|
623
|
-
vpc["
|
|
624
|
-
"type" => "vpc",
|
|
625
|
-
"name" => peer['vpc']["name"]
|
|
626
|
-
}
|
|
622
|
+
MU::Config.addDependency(vpc, peer['vpc']['name'], "vpc", phase: "groom", no_create_wait: true)
|
|
627
623
|
end
|
|
628
624
|
delete << peer if sib['name'] == vpc['name']
|
|
629
625
|
}
|
|
@@ -637,7 +633,7 @@ module MU
|
|
|
637
633
|
MU.log "VPC peering connections to non-local accounts must specify the vpc_id of the peer.", MU::ERR
|
|
638
634
|
ok = false
|
|
639
635
|
end
|
|
640
|
-
elsif !processReference(peer['vpc'], "vpcs",
|
|
636
|
+
elsif !processReference(peer['vpc'], "vpcs", vpc, configurator, dflt_region: peer["vpc"]['region'])
|
|
641
637
|
ok = false
|
|
642
638
|
end
|
|
643
639
|
end
|
|
@@ -736,8 +732,8 @@ module MU
|
|
|
736
732
|
vpc_block["subnet_pref"] = "all_private" if vpc_block["subnet_pref"] == "private"
|
|
737
733
|
end
|
|
738
734
|
|
|
739
|
-
flags = {}
|
|
740
|
-
flags["subnet_pref"] = vpc_block["subnet_pref"] if !vpc_block["subnet_pref"].nil?
|
|
735
|
+
# flags = {}
|
|
736
|
+
# flags["subnet_pref"] = vpc_block["subnet_pref"] if !vpc_block["subnet_pref"].nil?
|
|
741
737
|
hab_arg = if vpc_block['habitat']
|
|
742
738
|
if vpc_block['habitat'].is_a?(MU::Config::Ref)
|
|
743
739
|
[vpc_block['habitat'].id] # XXX actually, findStray it
|
|
@@ -771,9 +767,9 @@ MU.log "VPC lookup cache hit", MU::WARN, details: vpc_block
|
|
|
771
767
|
tag_key: tag_key,
|
|
772
768
|
tag_value: tag_value,
|
|
773
769
|
region: vpc_block["region"],
|
|
774
|
-
flags: flags,
|
|
775
770
|
habitats: hab_arg,
|
|
776
|
-
dummy_ok: true
|
|
771
|
+
dummy_ok: true,
|
|
772
|
+
subnet_pref: vpc_block["subnet_pref"]
|
|
777
773
|
)
|
|
778
774
|
|
|
779
775
|
found.first if found and found.size == 1
|
|
@@ -799,8 +795,8 @@ MU.log "VPC lookup cache hit", MU::WARN, details: vpc_block
|
|
|
799
795
|
end
|
|
800
796
|
@@reference_cache[vpc_block] ||= ext_vpc if ok
|
|
801
797
|
end
|
|
802
|
-
rescue
|
|
803
|
-
raise MuError
|
|
798
|
+
rescue StandardError => e
|
|
799
|
+
raise MuError.new e.inspect, details: { "my call stack" => caller, "exception call stack" => e.backtrace }
|
|
804
800
|
ensure
|
|
805
801
|
if !ext_vpc and vpc_block['cloud'] != "CloudFormation"
|
|
806
802
|
MU.log "Couldn't resolve VPC reference to a unique live VPC in #{parent_type} #{parent['name']} (called by #{caller[0]})", MU::ERR, details: vpc_block
|
|
@@ -877,7 +873,7 @@ MU.log "VPC lookup cache hit", MU::WARN, details: vpc_block
|
|
|
877
873
|
tag_key, tag_value = vpc_block['tag'].split(/=/, 2) if !vpc_block['tag'].nil?
|
|
878
874
|
begin
|
|
879
875
|
ext_subnet = ext_vpc.getSubnet(cloud_id: vpc_block['subnet_id'], name: vpc_block['subnet_name'], tag_key: tag_key, tag_value: tag_value)
|
|
880
|
-
rescue MuError
|
|
876
|
+
rescue MuError
|
|
881
877
|
end
|
|
882
878
|
|
|
883
879
|
if ext_subnet.nil?
|
|
@@ -918,14 +914,20 @@ MU.log "VPC lookup cache hit", MU::WARN, details: vpc_block
|
|
|
918
914
|
public_subnets = []
|
|
919
915
|
public_subnets_map = {}
|
|
920
916
|
subnet_ptr = "subnet_id"
|
|
921
|
-
all_subnets = []
|
|
922
917
|
if !is_sibling
|
|
923
918
|
pub = priv = 0
|
|
924
919
|
raise MuError, "No subnets found in #{ext_vpc}" if ext_vpc.subnets.nil?
|
|
925
920
|
ext_vpc.subnets.each { |subnet|
|
|
926
921
|
next if dflt_region and vpc_block["cloud"] == "Google" and subnet.az != dflt_region
|
|
927
922
|
if subnet.private? and (vpc_block['subnet_pref'] != "all_public" and vpc_block['subnet_pref'] != "public")
|
|
928
|
-
private_subnets << {
|
|
923
|
+
private_subnets << {
|
|
924
|
+
"subnet_id" => configurator.getTail(
|
|
925
|
+
"#{parent['name']} Private Subnet #{priv}",
|
|
926
|
+
value: subnet.cloud_id,
|
|
927
|
+
prettyname: "#{parent['name']} Private Subnet #{priv}",
|
|
928
|
+
cloudtype: "AWS::EC2::Subnet::Id"),
|
|
929
|
+
"az" => subnet.az
|
|
930
|
+
}
|
|
929
931
|
private_subnets_map[subnet.cloud_id] = subnet
|
|
930
932
|
priv = priv + 1
|
|
931
933
|
elsif !subnet.private? and vpc_block['subnet_pref'] != "all_private" and vpc_block['subnet_pref'] != "private"
|
|
@@ -1068,5 +1070,47 @@ MU.log "VPC lookup cache hit", MU::WARN, details: vpc_block
|
|
|
1068
1070
|
end
|
|
1069
1071
|
|
|
1070
1072
|
end
|
|
1073
|
+
|
|
1074
|
+
# Take an IP block and split it into a more-or-less arbitrary number of
|
|
1075
|
+
# subnets.
|
|
1076
|
+
# @param ip_block [String]: CIDR of the network to subdivide
|
|
1077
|
+
# @param subnets_desired [Integer]: Number of subnets we want back
|
|
1078
|
+
# @param max_mask [Integer]: The highest netmask we're allowed to use for a subnet (various by cloud provider)
|
|
1079
|
+
# @return [MU::Config::Tail]: Resulting subnet tails, or nil if an error occurred.
|
|
1080
|
+
def divideNetwork(ip_block, subnets_desired, max_mask = 28)
|
|
1081
|
+
cidr = NetAddr::IPv4Net.parse(ip_block.to_s)
|
|
1082
|
+
|
|
1083
|
+
# Ugly but reliable method of landing on the right subnet size
|
|
1084
|
+
subnet_bits = cidr.netmask.prefix_len
|
|
1085
|
+
begin
|
|
1086
|
+
subnet_bits += 1
|
|
1087
|
+
if subnet_bits > max_mask
|
|
1088
|
+
MU.log "Can't subdivide #{cidr.to_s} into #{subnets_desired.to_s}", MU::ERR
|
|
1089
|
+
raise MuError, "Subnets smaller than /#{max_mask} not permitted"
|
|
1090
|
+
end
|
|
1091
|
+
end while cidr.subnet_count(subnet_bits) < subnets_desired
|
|
1092
|
+
|
|
1093
|
+
if cidr.subnet_count(subnet_bits) > subnets_desired
|
|
1094
|
+
MU.log "Requested #{subnets_desired.to_s} subnets from #{cidr.to_s}, leaving #{(cidr.subnet_count(subnet_bits)-subnets_desired).to_s} unused /#{subnet_bits.to_s}s available", MU::NOTICE
|
|
1095
|
+
end
|
|
1096
|
+
|
|
1097
|
+
begin
|
|
1098
|
+
subnets = []
|
|
1099
|
+
(0..subnets_desired).each { |x|
|
|
1100
|
+
subnets << cidr.nth_subnet(subnet_bits, x).to_s
|
|
1101
|
+
}
|
|
1102
|
+
rescue RuntimeError => e
|
|
1103
|
+
if e.message.match(/exceeds subnets available for allocation/)
|
|
1104
|
+
MU.log e.message, MU::ERR
|
|
1105
|
+
MU.log "I'm attempting to create #{subnets_desired} subnets (one public and one private for each Availability Zone), of #{subnet_size} addresses each, but that's too many for a /#{cidr.netmask.prefix_len} network. Either declare a larger network, or explicitly declare a list of subnets with few enough entries to fit.", MU::ERR
|
|
1106
|
+
return nil
|
|
1107
|
+
else
|
|
1108
|
+
raise e
|
|
1109
|
+
end
|
|
1110
|
+
end
|
|
1111
|
+
|
|
1112
|
+
subnets = getTail("subnetblocks", value: subnets.join(","), cloudtype: "CommaDelimitedList", description: "IP Address ranges to be used for VPC subnets", prettyname: "SubnetIpBlocks", list_of: "ip_block").map { |tail| tail["ip_block"] }
|
|
1113
|
+
subnets
|
|
1114
|
+
end
|
|
1071
1115
|
end
|
|
1072
1116
|
end
|
data/modules/mu/config/vpc.yml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
rhel71: &
|
|
2
|
+
rhel71: &5
|
|
3
3
|
us-east-1: ami-0f05fce24aa75ba9f
|
|
4
4
|
ap-northeast-1: ami-0c0ec19eb19055763
|
|
5
5
|
ap-northeast-2: ami-0717ac5c67c99f745
|
|
@@ -16,41 +16,41 @@ rhel71: &4
|
|
|
16
16
|
us-east-2: ami-02f6682c7816b3cfc
|
|
17
17
|
us-west-1: ami-04898e596c06e802b
|
|
18
18
|
us-west-2: ami-02db5457189a8a8c2
|
|
19
|
-
centos6: &
|
|
20
|
-
us-east-1: ami-
|
|
21
|
-
|
|
22
|
-
ap-northeast-
|
|
23
|
-
ap-
|
|
24
|
-
ap-
|
|
25
|
-
ap-southeast-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
eu-
|
|
29
|
-
eu-
|
|
30
|
-
eu-west-
|
|
31
|
-
eu-west-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
us-west-1: ami-
|
|
35
|
-
us-west-2: ami-
|
|
19
|
+
centos6: &4
|
|
20
|
+
us-east-1: ami-009723c5c7f8fbc75
|
|
21
|
+
us-east-2: ami-0781f11395714cd39
|
|
22
|
+
ap-northeast-1: ami-07fa5a8795da2b6bc
|
|
23
|
+
ap-northeast-2: ami-0219f0a7c979ff63f
|
|
24
|
+
ap-south-1: ami-0f24817242c401740
|
|
25
|
+
ap-southeast-1: ami-042ef2e0643e8e207
|
|
26
|
+
ap-southeast-2: ami-09fc51de648afa168
|
|
27
|
+
ca-central-1: ami-0dc643db74edc5aa5
|
|
28
|
+
eu-central-1: ami-0628759cb297569d5
|
|
29
|
+
eu-north-1: ami-0aed023791f886315
|
|
30
|
+
eu-west-1: ami-0f87f0f252ff03622
|
|
31
|
+
eu-west-2: ami-00abb555d5a460afe
|
|
32
|
+
eu-west-3: ami-0ccd93d454c2418a2
|
|
33
|
+
sa-east-1: ami-01e10ea6ea72534ae
|
|
34
|
+
us-west-1: ami-01fee56b9ee690ffe
|
|
35
|
+
us-west-2: ami-08bcdb944f185e2a8
|
|
36
36
|
centos7:
|
|
37
|
-
us-east-1: ami-
|
|
38
|
-
ap-northeast-1: ami-
|
|
39
|
-
ap-northeast-2: ami-
|
|
40
|
-
ap-south-1: ami-
|
|
41
|
-
ap-southeast-1: ami-
|
|
42
|
-
ap-southeast-2: ami-
|
|
43
|
-
ca-central-1: ami-
|
|
44
|
-
eu-central-1: ami-
|
|
45
|
-
eu-north-1: ami-
|
|
46
|
-
eu-west-1: ami-
|
|
47
|
-
eu-west-2: ami-
|
|
48
|
-
eu-west-3: ami-
|
|
49
|
-
sa-east-1: ami-
|
|
50
|
-
us-east-2: ami-
|
|
51
|
-
us-west-1: ami-
|
|
52
|
-
us-west-2: ami-
|
|
53
|
-
ubuntu16: &
|
|
37
|
+
us-east-1: ami-067256ca1497c924d
|
|
38
|
+
ap-northeast-1: ami-07c1e51354fdfd362
|
|
39
|
+
ap-northeast-2: ami-042b761c93d6df2f1
|
|
40
|
+
ap-south-1: ami-02e879f52322e7c98
|
|
41
|
+
ap-southeast-1: ami-0487e9f84d0ffde89
|
|
42
|
+
ap-southeast-2: ami-0e854dab39fd6a427
|
|
43
|
+
ca-central-1: ami-05a27d311b585a70b
|
|
44
|
+
eu-central-1: ami-0e396d00c787b4f47
|
|
45
|
+
eu-north-1: ami-087763a2ba60b2bfe
|
|
46
|
+
eu-west-1: ami-04e3bd9335a14e635
|
|
47
|
+
eu-west-2: ami-0efd34a8d1fc2b104
|
|
48
|
+
eu-west-3: ami-08d0bcbc780448cf8
|
|
49
|
+
sa-east-1: ami-0284f4a0968263cf0
|
|
50
|
+
us-east-2: ami-0292786917d1e3015
|
|
51
|
+
us-west-1: ami-0ba622529dcdff2bb
|
|
52
|
+
us-west-2: ami-079a309ca6261d7f6
|
|
53
|
+
ubuntu16: &3
|
|
54
54
|
us-east-1: ami-bcdc16c6
|
|
55
55
|
us-west-1: ami-1b17257b
|
|
56
56
|
us-west-2: ami-19e92861
|
|
@@ -73,33 +73,56 @@ ubuntu14:
|
|
|
73
73
|
ap-southeast-1: ami-2855964b
|
|
74
74
|
ap-southeast-2: ami-d19fc4b2
|
|
75
75
|
win2k12r2: &1
|
|
76
|
-
us-east-1: ami-
|
|
77
|
-
us-east-2: ami-
|
|
78
|
-
|
|
79
|
-
us-west-2: ami-
|
|
80
|
-
|
|
81
|
-
eu-west-1: ami-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
ap-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
us-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
76
|
+
us-east-1: ami-003aea65bc2e7136a
|
|
77
|
+
us-east-2: ami-0163293e39ba504c2
|
|
78
|
+
ca-central-1: ami-055689dd92f29d2aa
|
|
79
|
+
us-west-2: ami-0ce87dda2c9244e57
|
|
80
|
+
us-west-1: ami-00d9cf64bd2fafa44
|
|
81
|
+
eu-west-1: ami-026d7427b9fadad40
|
|
82
|
+
eu-west-2: ami-036a22c0780551794
|
|
83
|
+
eu-west-3: ami-05e3d9b79bdc10861
|
|
84
|
+
eu-north-1: ami-063eb48504c7d73f1
|
|
85
|
+
sa-east-1: ami-0a8c1829a5e650bc5
|
|
86
|
+
eu-central-1: ami-0ea20cef52335b008
|
|
87
|
+
ap-northeast-1: ami-08db2dc67228dbb90
|
|
88
|
+
ap-south-1: ami-012241411db3f09c3
|
|
89
|
+
ap-northeast-2: ami-0368c224de1d20502
|
|
90
|
+
ap-southeast-1: ami-028ef74e1edc3943a
|
|
91
|
+
ap-southeast-2: ami-09e03eab1b1bc151b
|
|
92
|
+
win2k16: &2
|
|
93
|
+
us-east-1: ami-02801a2c8dcbfb883
|
|
94
|
+
us-east-2: ami-0ca4f779a2a58a7ea
|
|
95
|
+
ca-central-1: ami-05d3854d9d6e9bcc5
|
|
96
|
+
us-west-2: ami-091f4a88ce32d28b6
|
|
97
|
+
eu-west-1: ami-0b938c9b23ed7d18c
|
|
98
|
+
us-west-1: ami-0fd744c3fbe8260f2
|
|
99
|
+
eu-west-2: ami-071a89b959c5eda27
|
|
100
|
+
eu-west-3: ami-0b206e3dbda9ff9eb
|
|
101
|
+
eu-central-1: ami-0dd9bdad31dd0d3ce
|
|
102
|
+
sa-east-1: ami-0d69b8d6c0f9a7bae
|
|
103
|
+
ap-northeast-1: ami-02eb4a6f519bc3190
|
|
104
|
+
ap-south-1: ami-0666fd543ac8b5501
|
|
105
|
+
ap-northeast-2: ami-01277c81f9b91cf77
|
|
106
|
+
ap-southeast-2: ami-0426a246f9b0ccadd
|
|
107
|
+
ap-southeast-1: ami-07ecb0d55c2eb7247
|
|
108
|
+
eu-north-1: ami-047811530583b6d08
|
|
109
|
+
win2k19:
|
|
110
|
+
us-east-1: ami-00820419bf212df7e
|
|
111
|
+
us-east-2: ami-0a7916b90aa4629d5
|
|
112
|
+
ca-central-1: ami-0d704529661e19185
|
|
113
|
+
us-west-2: ami-0ee6a198d7ac35eb1
|
|
114
|
+
eu-west-2: ami-0f6ac1634bd7add92
|
|
115
|
+
us-west-1: ami-039e3816b4cac1e27
|
|
116
|
+
eu-west-1: ami-03a771d99091199b7
|
|
117
|
+
eu-central-1: ami-03b648d5b45f51a4f
|
|
118
|
+
eu-west-3: ami-068839907c18c3a6e
|
|
119
|
+
eu-north-1: ami-0db851ee76f7deefb
|
|
120
|
+
sa-east-1: ami-0c2cc60c62159f87c
|
|
121
|
+
ap-northeast-2: ami-06bdf8ae9ae9add92
|
|
122
|
+
ap-northeast-1: ami-02306d959c7f175b9
|
|
123
|
+
ap-southeast-1: ami-0d5b4a3d73e0f471f
|
|
124
|
+
ap-southeast-2: ami-00fa88caff4f64937
|
|
125
|
+
ap-south-1: ami-0b44feae4bb9f497a
|
|
103
126
|
amazon:
|
|
104
127
|
us-east-1: ami-b73b63a0
|
|
105
128
|
us-east-2: ami-58277d3d
|
|
@@ -114,9 +137,9 @@ amazon:
|
|
|
114
137
|
ap-southeast-1: ami-b953f2da
|
|
115
138
|
ap-southeast-2: ami-db704cb8
|
|
116
139
|
win2k12: *1
|
|
117
|
-
windows: *
|
|
118
|
-
ubuntu: *
|
|
119
|
-
centos: *
|
|
120
|
-
rhel7: *
|
|
121
|
-
rhel: *
|
|
122
|
-
linux: *
|
|
140
|
+
windows: *2
|
|
141
|
+
ubuntu: *3
|
|
142
|
+
centos: *4
|
|
143
|
+
rhel7: *5
|
|
144
|
+
rhel: *5
|
|
145
|
+
linux: *4
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
centos6: ¢os6 OpenLogic/CentOS/6
|
|
3
3
|
#centos7: ¢os7 westernoceansoftwaresprivatelimited/centos-7-6/centos-7-6-server
|
|
4
4
|
centos7: ¢os7 OpenLogic/CentOS/7
|
|
5
|
+
centos8: ¢os7 OpenLogic/CentOS/8
|
|
5
6
|
rhel8: &rhel8 RedHat/RHEL/8
|
|
6
7
|
rhel7: &rhel7 RedHat/RHEL/7
|
|
7
8
|
rhel6: &rhel6 RedHat/RHEL/6
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
centos6: ¢os6
|
|
3
|
-
centos7: ¢os7
|
|
2
|
+
centos6: ¢os6 egt-labs-admin/mu-centos-6
|
|
3
|
+
centos7: ¢os7 egt-labs-admin/mu-centos-7
|
|
4
|
+
centos8: ¢os8 centos-cloud/centos-8
|
|
4
5
|
rhel71: &rhel71 rhel-cloud/rhel-7
|
|
5
6
|
rhel6: &rhel6 rhel-cloud/rhel-6
|
|
6
7
|
debian10: &debian10 debian-cloud/debian-10
|
data/modules/mu/deploy.rb
CHANGED
|
@@ -126,7 +126,7 @@ module MU
|
|
|
126
126
|
seedsize = 1 + (retries/10).abs
|
|
127
127
|
seed = (0...seedsize+1).map { ('a'..'z').to_a[rand(26)] }.join
|
|
128
128
|
deploy_id = @appname.upcase + "-" + @environment.upcase + "-" + @timestamp + "-" + seed.upcase
|
|
129
|
-
end while MU::MommaCat.deploy_exists?(deploy_id) or seed == "mu"
|
|
129
|
+
end while MU::MommaCat.deploy_exists?(deploy_id) or seed == "mu"
|
|
130
130
|
MU.setVar("deploy_id", deploy_id)
|
|
131
131
|
MU.setVar("appname", @appname.upcase)
|
|
132
132
|
MU.setVar("environment", @environment.upcase)
|
|
@@ -140,7 +140,7 @@ module MU
|
|
|
140
140
|
|
|
141
141
|
@fromName = MU.muCfg['mu_admin_email']
|
|
142
142
|
|
|
143
|
-
MU::Cloud.resource_types.each { |
|
|
143
|
+
MU::Cloud.resource_types.values.each { |data|
|
|
144
144
|
if !@main_config[data[:cfg_plural]].nil? and @main_config[data[:cfg_plural]].size > 0
|
|
145
145
|
@main_config[data[:cfg_plural]].each { |resource|
|
|
146
146
|
if force_cloudformation
|
|
@@ -154,9 +154,10 @@ module MU
|
|
|
154
154
|
end
|
|
155
155
|
end
|
|
156
156
|
}
|
|
157
|
-
|
|
157
|
+
_shortclass, _cfg_name, _cfg_plural, classname = MU::Cloud.getResourceNames(data[:cfg_plural])
|
|
158
158
|
@main_config[data[:cfg_plural]].each { |resource|
|
|
159
159
|
resource["#MU_CLOUDCLASS"] = classname
|
|
160
|
+
# resource["#MU_CLOUDCLASS"] = MU::Cloud.resourceClass(resource['cloud'], data[:cfg_plural])
|
|
160
161
|
}
|
|
161
162
|
setThreadDependencies(@main_config[data[:cfg_plural]])
|
|
162
163
|
end
|
|
@@ -265,7 +266,7 @@ module MU
|
|
|
265
266
|
# Run cloud provider-specific deploy meta-artifact creation (ssh keys,
|
|
266
267
|
# resource groups, etc)
|
|
267
268
|
@mommacat.cloudsUsed.each { |cloud|
|
|
268
|
-
cloudclass =
|
|
269
|
+
cloudclass = MU::Cloud.cloudClass(cloud)
|
|
269
270
|
cloudclass.initDeploy(@mommacat)
|
|
270
271
|
}
|
|
271
272
|
|
|
@@ -274,7 +275,7 @@ module MU
|
|
|
274
275
|
MU.dupGlobals(parent_thread_id)
|
|
275
276
|
Thread.current.thread_variable_set("name", "mu_create_container")
|
|
276
277
|
# Thread.abort_on_exception = false
|
|
277
|
-
MU::Cloud.resource_types.each { |
|
|
278
|
+
MU::Cloud.resource_types.values.each { |data|
|
|
278
279
|
if !@main_config[data[:cfg_plural]].nil? and
|
|
279
280
|
@main_config[data[:cfg_plural]].size > 0 and
|
|
280
281
|
data[:instance].include?(:create)
|
|
@@ -288,7 +289,7 @@ module MU
|
|
|
288
289
|
MU.dupGlobals(parent_thread_id)
|
|
289
290
|
Thread.current.thread_variable_set("name", "mu_groom_container")
|
|
290
291
|
# Thread.abort_on_exception = false
|
|
291
|
-
MU::Cloud.resource_types.each { |
|
|
292
|
+
MU::Cloud.resource_types.values.each { |data|
|
|
292
293
|
if !@main_config[data[:cfg_plural]].nil? and
|
|
293
294
|
@main_config[data[:cfg_plural]].size > 0 and
|
|
294
295
|
data[:instance].include?(:groom)
|
|
@@ -311,7 +312,20 @@ module MU
|
|
|
311
312
|
|
|
312
313
|
@mommacat.save!
|
|
313
314
|
|
|
314
|
-
|
|
315
|
+
# XXX Functions have a special behavior where we re-invoke their groom
|
|
316
|
+
# methods one more time at the end, so we can guarantee their
|
|
317
|
+
# environments are fully populated with all sibling resource idents
|
|
318
|
+
# regardless of dependency order. This is, obviously, a disgusting
|
|
319
|
+
# hack, and we should revisit our dependency language in the next big
|
|
320
|
+
# release.
|
|
321
|
+
if !@main_config["functions"].nil? and
|
|
322
|
+
@main_config["functions"].size > 0
|
|
323
|
+
createResources(@main_config["functions"], "groom")
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
rescue StandardError => e
|
|
327
|
+
MU.log e.class.name, MU::ERR, details: caller
|
|
328
|
+
|
|
315
329
|
@my_threads.each do |t|
|
|
316
330
|
if t.object_id != Thread.current.object_id and
|
|
317
331
|
t.thread_variable_get("name") != "main_thread" and
|
|
@@ -338,6 +352,8 @@ module MU
|
|
|
338
352
|
@nocleanup = true # so we don't run this again later
|
|
339
353
|
end
|
|
340
354
|
end
|
|
355
|
+
|
|
356
|
+
|
|
341
357
|
@reraise_thread.raise MuError, e.inspect, e.backtrace if @reraise_thread
|
|
342
358
|
Thread.current.exit
|
|
343
359
|
ensure
|
|
@@ -390,7 +406,7 @@ module MU
|
|
|
390
406
|
Thread.handle_interrupt(MU::Cloud::MuCloudResourceNotImplemented => :never) {
|
|
391
407
|
begin
|
|
392
408
|
Thread.handle_interrupt(MU::Cloud::MuCloudResourceNotImplemented => :immediate) {
|
|
393
|
-
MU.log "Cost calculator not available for this stack, as it uses a resource not implemented in Mu's CloudFormation layer.", MU::
|
|
409
|
+
MU.log "Cost calculator not available for this stack, as it uses a resource not implemented in Mu's CloudFormation layer.", MU::DEBUG, verbosity: MU::Logger::NORMAL
|
|
394
410
|
Thread.current.exit
|
|
395
411
|
}
|
|
396
412
|
ensure
|
|
@@ -550,16 +566,9 @@ MESSAGE_END
|
|
|
550
566
|
@dependency_threads["#{name}_groom"]=["#{name}_create", "mu_groom_container"]
|
|
551
567
|
|
|
552
568
|
MU.log "Setting dependencies for #{name}", MU::DEBUG, details: resource["dependencies"]
|
|
553
|
-
if resource["dependencies"]
|
|
569
|
+
if !resource["dependencies"].nil? then
|
|
554
570
|
resource["dependencies"].each { |dependency|
|
|
555
|
-
parent_class =
|
|
556
|
-
MU::Cloud.resource_types.each_pair { |res_class, attrs|
|
|
557
|
-
if attrs[:cfg_name] == dependency['type'] or
|
|
558
|
-
attrs[:cfg_plural] == dependency['type']
|
|
559
|
-
parent_class = Object.const_get("MU").const_get("Cloud").const_get(res_class)
|
|
560
|
-
break
|
|
561
|
-
end
|
|
562
|
-
}
|
|
571
|
+
parent_class = MU::Cloud.loadBaseType(dependency['type'])
|
|
563
572
|
|
|
564
573
|
parent_type = parent_class.cfg_name
|
|
565
574
|
|
|
@@ -568,10 +577,10 @@ MESSAGE_END
|
|
|
568
577
|
addDependentThread(parent, "#{name}_groom")
|
|
569
578
|
|
|
570
579
|
# should our creation thread also wait on our parent's create?
|
|
571
|
-
if !
|
|
580
|
+
if !dependency["no_create_wait"] and
|
|
572
581
|
(resource["#MU_CLOUDCLASS"].waits_on_parent_completion or
|
|
573
582
|
dependency['phase'] == "create" or
|
|
574
|
-
|
|
583
|
+
parent_class.deps_wait_on_my_creation)
|
|
575
584
|
addDependentThread(parent, "#{name}_create")
|
|
576
585
|
end
|
|
577
586
|
|
|
@@ -580,12 +589,18 @@ MESSAGE_END
|
|
|
580
589
|
if (dependency['phase'] == "groom" or resource["#MU_CLOUDCLASS"].waits_on_parent_completion) and parent_class.instance_methods(false).include?(:groom)
|
|
581
590
|
parent = parent_type+"_"+dependency["name"]+"_groom"
|
|
582
591
|
addDependentThread(parent, "#{name}_groom")
|
|
583
|
-
if
|
|
592
|
+
if !dependency["no_create_wait"] and (
|
|
593
|
+
parent_class.deps_wait_on_my_creation or
|
|
594
|
+
resource["#MU_CLOUDCLASS"].waits_on_parent_completion or
|
|
595
|
+
dependency['phase'] == "groom"
|
|
596
|
+
)
|
|
584
597
|
addDependentThread(parent, "#{name}_create")
|
|
585
598
|
end
|
|
586
599
|
end
|
|
587
600
|
}
|
|
588
601
|
end
|
|
602
|
+
MU.log "Thread dependencies #{res_type}[#{name}]", MU::DEBUG, details: { "create" => @dependency_threads["#{name}_create"], "groom" => @dependency_threads["#{name}_groom"] }
|
|
603
|
+
@dependency_threads["#{name}_groom"]=["#{name}_create", "mu_groom_container"]
|
|
589
604
|
}
|
|
590
605
|
end
|
|
591
606
|
|
|
@@ -596,7 +611,6 @@ MESSAGE_END
|
|
|
596
611
|
return if services.nil?
|
|
597
612
|
|
|
598
613
|
parent_thread_id = Thread.current.object_id
|
|
599
|
-
parent_thread = Thread.current
|
|
600
614
|
services.uniq!
|
|
601
615
|
services.each do |service|
|
|
602
616
|
begin
|
|
@@ -639,17 +653,18 @@ MESSAGE_END
|
|
|
639
653
|
else
|
|
640
654
|
raise e
|
|
641
655
|
end
|
|
642
|
-
rescue
|
|
656
|
+
rescue StandardError => e
|
|
643
657
|
MU::MommaCat.unlockAll
|
|
644
658
|
@main_thread.raise MuError, "Error instantiating object from #{myservice["#MU_CLOUDCLASS"]} (#{e.inspect})", e.backtrace
|
|
645
659
|
raise e
|
|
646
660
|
end
|
|
647
661
|
begin
|
|
648
662
|
run_this_method = myservice['#MUOBJECT'].method(mode)
|
|
649
|
-
rescue
|
|
663
|
+
rescue StandardError => e
|
|
650
664
|
MU::MommaCat.unlockAll
|
|
651
|
-
@main_thread.raise MuError, "Error invoking #{myservice["#
|
|
652
|
-
|
|
665
|
+
@main_thread.raise MuError, "Error invoking #{myservice["#MUOBJECT"].class.name}.#{mode} for #{myservice['name']} (#{e.inspect})", e.backtrace
|
|
666
|
+
return
|
|
667
|
+
# raise e
|
|
653
668
|
end
|
|
654
669
|
begin
|
|
655
670
|
MU.log "Checking whether to run #{myservice['#MUOBJECT']}.#{mode} (updating: #{@updating})", MU::DEBUG
|
|
@@ -703,7 +718,7 @@ MESSAGE_END
|
|
|
703
718
|
@my_threads.reject! { |thr| !thr.alive? }
|
|
704
719
|
sleep 10+Random.rand(20)
|
|
705
720
|
retry
|
|
706
|
-
rescue
|
|
721
|
+
rescue StandardError => e
|
|
707
722
|
MU.log e.inspect, MU::ERR, details: e.backtrace if @verbosity != MU::Logger::SILENT
|
|
708
723
|
MU::MommaCat.unlockAll
|
|
709
724
|
Thread.list.each do |t|
|
|
@@ -729,7 +744,9 @@ MESSAGE_END
|
|
|
729
744
|
sleep 10+Random.rand(20)
|
|
730
745
|
retry
|
|
731
746
|
end
|
|
747
|
+
|
|
732
748
|
end
|
|
749
|
+
|
|
733
750
|
end
|
|
734
751
|
|
|
735
752
|
end #class
|