cloud-mu 3.1.3 → 3.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|