cloud-mu 3.1.2 → 3.2.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 +10 -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 +2 -3
- data/bin/mu-node-manage +15 -16
- data/bin/mu-run-tests +135 -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 +165 -111
- data/modules/mu/adoption.rb +401 -68
- data/modules/mu/cleanup.rb +199 -306
- data/modules/mu/cloud.rb +100 -1632
- data/modules/mu/cloud/database.rb +49 -0
- data/modules/mu/cloud/dnszone.rb +46 -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 +920 -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 +165 -0
- data/modules/mu/config.rb +171 -1767
- data/modules/mu/config/alarm.rb +2 -6
- data/modules/mu/config/bucket.rb +4 -4
- data/modules/mu/config/cache_cluster.rb +1 -1
- data/modules/mu/config/collection.rb +4 -4
- data/modules/mu/config/container_cluster.rb +9 -4
- data/modules/mu/config/database.rb +83 -104
- data/modules/mu/config/database.yml +1 -2
- data/modules/mu/config/dnszone.rb +6 -6
- data/modules/mu/config/doc_helpers.rb +516 -0
- data/modules/mu/config/endpoint.rb +4 -4
- data/modules/mu/config/firewall_rule.rb +103 -4
- data/modules/mu/config/folder.rb +4 -4
- data/modules/mu/config/function.rb +3 -3
- data/modules/mu/config/group.rb +4 -4
- data/modules/mu/config/habitat.rb +4 -4
- 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 +3 -3
- data/modules/mu/config/ref.rb +365 -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 +97 -70
- 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 +70 -27
- data/modules/mu/config/vpc.yml +0 -1
- data/modules/mu/defaults/AWS.yaml +83 -60
- data/modules/mu/defaults/Azure.yaml +1 -0
- data/modules/mu/defaults/Google.yaml +3 -2
- data/modules/mu/deploy.rb +30 -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 +389 -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 +217 -2612
- data/modules/mu/mommacat/daemon.rb +397 -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 +271 -112
- data/modules/mu/{clouds → providers}/aws/alarm.rb +5 -3
- data/modules/mu/{clouds → providers}/aws/bucket.rb +26 -22
- data/modules/mu/{clouds → providers}/aws/cache_cluster.rb +33 -67
- data/modules/mu/{clouds → providers}/aws/collection.rb +24 -23
- data/modules/mu/{clouds → providers}/aws/container_cluster.rb +681 -721
- data/modules/mu/providers/aws/database.rb +1744 -0
- data/modules/mu/{clouds → providers}/aws/dnszone.rb +64 -63
- data/modules/mu/{clouds → providers}/aws/endpoint.rb +22 -27
- data/modules/mu/{clouds → providers}/aws/firewall_rule.rb +214 -244
- data/modules/mu/{clouds → providers}/aws/folder.rb +7 -7
- data/modules/mu/{clouds → providers}/aws/function.rb +17 -22
- data/modules/mu/{clouds → providers}/aws/group.rb +23 -23
- data/modules/mu/{clouds → providers}/aws/habitat.rb +17 -14
- data/modules/mu/{clouds → providers}/aws/loadbalancer.rb +57 -48
- data/modules/mu/{clouds → providers}/aws/log.rb +15 -12
- data/modules/mu/{clouds → providers}/aws/msg_queue.rb +17 -16
- data/modules/mu/{clouds → providers}/aws/nosqldb.rb +18 -11
- data/modules/mu/{clouds → providers}/aws/notifier.rb +11 -6
- data/modules/mu/{clouds → providers}/aws/role.rb +112 -86
- data/modules/mu/{clouds → providers}/aws/search_domain.rb +39 -33
- data/modules/mu/{clouds → providers}/aws/server.rb +835 -1133
- data/modules/mu/{clouds → providers}/aws/server_pool.rb +56 -60
- data/modules/mu/{clouds → providers}/aws/storage_pool.rb +24 -42
- data/modules/mu/{clouds → providers}/aws/user.rb +21 -22
- data/modules/mu/{clouds → providers}/aws/userdata/README.md +0 -0
- data/modules/mu/{clouds → providers}/aws/userdata/linux.erb +0 -0
- data/modules/mu/{clouds → providers}/aws/userdata/windows.erb +2 -1
- data/modules/mu/{clouds → providers}/aws/vpc.rb +523 -929
- 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 +95 -48
- 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 +67 -30
- data/modules/mu/{clouds → providers}/google/bucket.rb +13 -15
- data/modules/mu/{clouds → providers}/google/container_cluster.rb +84 -77
- data/modules/mu/{clouds → providers}/google/database.rb +10 -20
- 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 +139 -167
- 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 +18 -20
- data/modules/mu/{clouds → providers}/google/role.rb +92 -58
- data/modules/mu/{clouds → providers}/google/server.rb +242 -155
- data/modules/mu/{clouds → providers}/google/server_pool.rb +25 -44
- 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/bucket.yml +4 -0
- data/modules/tests/centos6.yaml +11 -0
- data/modules/tests/centos7.yaml +11 -0
- data/modules/tests/centos8.yaml +12 -0
- data/modules/tests/ecs.yaml +23 -0
- data/modules/tests/includes-and-params.yaml +2 -1
- 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 +1 -0
- data/modules/tests/super_simple_bok.yml +1 -3
- 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 +232 -154
- data/extras/image-generators/AWS/windows.yaml +0 -18
- data/modules/mu/clouds/aws/database.rb +0 -1985
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -53,7 +53,6 @@ module MU
|
|
|
53
53
|
def groom
|
|
54
54
|
|
|
55
55
|
if @config['peers']
|
|
56
|
-
count = 0
|
|
57
56
|
@config['peers'].each { |peer|
|
|
58
57
|
if peer['vpc']['name']
|
|
59
58
|
peer_obj = @deploy.findLitterMate(name: peer['vpc']['name'], type: "vpcs", habitat: peer['vpc']['project'])
|
|
@@ -113,17 +112,16 @@ module MU
|
|
|
113
112
|
# Describe this VPC
|
|
114
113
|
# @return [Hash]
|
|
115
114
|
def notify
|
|
116
|
-
base = {}
|
|
117
115
|
base = MU.structToHash(cloud_desc)
|
|
118
116
|
base["cloud_id"] = @cloud_id.name
|
|
119
117
|
base.merge!(@config.to_h)
|
|
120
118
|
base
|
|
121
119
|
end
|
|
122
|
-
|
|
120
|
+
|
|
123
121
|
# Describe this VPC from the cloud platform's perspective
|
|
124
122
|
# @return [Hash]
|
|
125
|
-
def cloud_desc
|
|
126
|
-
if @cloud_desc_cache
|
|
123
|
+
def cloud_desc(use_cache: true)
|
|
124
|
+
if @cloud_desc_cache and use_cache
|
|
127
125
|
return @cloud_desc_cache
|
|
128
126
|
end
|
|
129
127
|
@cloud_desc_cache = MU::Cloud::Azure::VPC.find(cloud_id: @cloud_id, resource_group: @resource_group).values.first
|
|
@@ -192,10 +190,9 @@ module MU
|
|
|
192
190
|
# @param use_cache [Boolean]: If available, use saved deployment metadata to describe subnets, instead of querying the cloud API
|
|
193
191
|
# @return [Array<Hash>]: A list of cloud provider identifiers of subnets associated with this VPC.
|
|
194
192
|
def loadSubnets(use_cache: false)
|
|
195
|
-
desc = cloud_desc
|
|
196
193
|
@subnets = []
|
|
197
194
|
|
|
198
|
-
MU::Cloud::Azure.network(credentials: @credentials).subnets.list(@resource_group, cloud_desc.name).each { |subnet|
|
|
195
|
+
MU::Cloud::Azure.network(credentials: @credentials).subnets.list(@resource_group, cloud_desc(use_cache: use_cache).name).each { |subnet|
|
|
199
196
|
subnet_cfg = {
|
|
200
197
|
"cloud_id" => subnet.name,
|
|
201
198
|
"mu_name" => subnet.name,
|
|
@@ -334,21 +331,23 @@ module MU
|
|
|
334
331
|
# We assume that any values we have in +@config+ are placeholders, and
|
|
335
332
|
# calculate our own accordingly based on what's live in the cloud.
|
|
336
333
|
# XXX add flag to return the diff between @config and live cloud
|
|
337
|
-
def toKitten(
|
|
334
|
+
def toKitten(**_args)
|
|
338
335
|
return nil if cloud_desc.name == "default" # parent project builds these
|
|
339
336
|
bok = {
|
|
340
337
|
"cloud" => "Azure",
|
|
338
|
+
"name" => cloud_desc.name,
|
|
341
339
|
"project" => @config['project'],
|
|
342
|
-
"credentials" => @config['credentials']
|
|
340
|
+
"credentials" => @config['credentials'],
|
|
341
|
+
"cloud_id" => @cloud_id.to_s
|
|
343
342
|
}
|
|
344
343
|
|
|
345
344
|
bok
|
|
346
345
|
end
|
|
347
346
|
|
|
348
347
|
# Cloud-specific configuration properties.
|
|
349
|
-
# @param
|
|
348
|
+
# @param _config [MU::Config]: The calling MU::Config object
|
|
350
349
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
351
|
-
def self.schema(
|
|
350
|
+
def self.schema(_config = nil)
|
|
352
351
|
toplevel_required = []
|
|
353
352
|
schema = {
|
|
354
353
|
"peers" => {
|
|
@@ -427,11 +426,7 @@ module MU
|
|
|
427
426
|
}
|
|
428
427
|
]
|
|
429
428
|
}
|
|
430
|
-
vpc["
|
|
431
|
-
vpc["dependencies"] << {
|
|
432
|
-
"type" => "firewall_rule",
|
|
433
|
-
"name" => vpc['name']+"-defaultfw"
|
|
434
|
-
}
|
|
429
|
+
MU::Config.addDependency(vpc, vpc['name']+"-defaultfw", "firewall_rule")
|
|
435
430
|
|
|
436
431
|
if !configurator.insertKitten(default_acl, "firewall_rules", true)
|
|
437
432
|
ok = false
|
|
@@ -522,7 +517,6 @@ MU.structToHash(ext_vpc).diff(MU.structToHash(vpc_obj))
|
|
|
522
517
|
# this is slow, so maybe thread it
|
|
523
518
|
rtb_map = {}
|
|
524
519
|
routethreads = []
|
|
525
|
-
create_nat_gateway = false
|
|
526
520
|
@config['route_tables'].each { |rtb_cfg|
|
|
527
521
|
routethreads << Thread.new(rtb_cfg) { |rtb|
|
|
528
522
|
rtb_name = @mu_name+"-"+rtb['name'].upcase
|
|
@@ -573,6 +567,9 @@ MU.structToHash(ext_vpc).diff(MU.structToHash(vpc_obj))
|
|
|
573
567
|
routename = rtb_name+"-"+route['destination_network'].gsub(/[^a-z0-9]/i, "_")
|
|
574
568
|
route_obj.next_hop_type = if route['gateway'] == "#NAT" and @config['bastion']
|
|
575
569
|
routename = rtb_name+"-NAT"
|
|
570
|
+
if @config['bastion'].is_a?(Hash) and !@config['bastion']['id'] and !@config['bastion']['deploy_id']
|
|
571
|
+
@config['bastion']['deploy_id'] = @deploy.deploy_id
|
|
572
|
+
end
|
|
576
573
|
bastion_ref = MU::Config::Ref.get(@config['bastion'])
|
|
577
574
|
if bastion_ref.kitten and bastion_ref.kitten.cloud_desc
|
|
578
575
|
iface_id = Id.new(bastion_ref.kitten.cloud_desc.network_profile.network_interfaces.first.id)
|
|
@@ -718,8 +715,6 @@ MU.structToHash(ext_subnet).diff(MU.structToHash(subnet_obj))
|
|
|
718
715
|
loadSubnets
|
|
719
716
|
end
|
|
720
717
|
|
|
721
|
-
protected
|
|
722
|
-
|
|
723
718
|
# Subnets are almost a first-class resource. So let's kinda sorta treat
|
|
724
719
|
# them like one. This should only be invoked on objects that already
|
|
725
720
|
# exists in the cloud layer.
|
|
@@ -772,8 +767,8 @@ MU.structToHash(ext_subnet).diff(MU.structToHash(subnet_obj))
|
|
|
772
767
|
end
|
|
773
768
|
|
|
774
769
|
# Describe this VPC Subnet from the cloud platform's perspective
|
|
775
|
-
def cloud_desc
|
|
776
|
-
return @cloud_desc_cache if
|
|
770
|
+
def cloud_desc(use_cache: true)
|
|
771
|
+
return @cloud_desc_cache if @cloud_desc_cache and use_cache
|
|
777
772
|
@cloud_desc_cache = MU::Cloud::Azure.network(credentials: @parent.credentials).subnets.get(@parent.resource_group, @parent.cloud_desc.name, @cloud_id.to_s)
|
|
778
773
|
@cloud_desc_cache
|
|
779
774
|
end
|
|
@@ -28,6 +28,16 @@ module MU
|
|
|
28
28
|
|
|
29
29
|
@@cloudformation_mode = false
|
|
30
30
|
|
|
31
|
+
# Is this a "real" cloud provider, or a stub like CloudFormation?
|
|
32
|
+
def self.virtual?
|
|
33
|
+
true
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# List all AWS projects available to our credentials
|
|
37
|
+
def self.listHabitats(credentials = nil, use_cache: true)
|
|
38
|
+
MU::Cloud::AWS.listHabitats(credentials)
|
|
39
|
+
end
|
|
40
|
+
|
|
31
41
|
# Return what we think of as a cloud object's habitat. In AWS, this means
|
|
32
42
|
# the +account_number+ in which it's resident. If this is not applicable,
|
|
33
43
|
# such as for a {Habitat} or {Folder}, returns nil.
|
|
@@ -73,8 +83,8 @@ module MU
|
|
|
73
83
|
# Stub method- there's no such thing as being "hosted" in a CloudFormation
|
|
74
84
|
# environment. Calls {MU::Cloud::AWS.listAZs} to return sensible
|
|
75
85
|
# values, if we happen to have AWS credentials configured.
|
|
76
|
-
def self.listAZs(region: MU.curRegion,
|
|
77
|
-
MU::Cloud::AWS.listAZs(region: region,
|
|
86
|
+
def self.listAZs(region: MU.curRegion, credentials: nil)
|
|
87
|
+
MU::Cloud::AWS.listAZs(region: region, credentials: credentials)
|
|
78
88
|
end
|
|
79
89
|
|
|
80
90
|
# Stub method- there's no such thing as being "hosted" in a CloudFormation
|
|
@@ -466,7 +476,7 @@ module MU
|
|
|
466
476
|
desc["DependsOn"] = []
|
|
467
477
|
if !cloudobj.nil? and cloudobj.respond_to?(:dependencies) and type != "subnet"
|
|
468
478
|
cloudobj.dependencies(use_cache: true).first.each_pair { |resource_classname, resources|
|
|
469
|
-
resources.each_pair { |
|
|
479
|
+
resources.each_pair { |_sibling_name, sibling_obj|
|
|
470
480
|
next if sibling_obj == cloudobj
|
|
471
481
|
# desc["DependsOn"] << (resource_classname+sibling_obj.cloudobj.mu_name).gsub!(/[^a-z0-9]/i, "")
|
|
472
482
|
desc["DependsOn"] << sibling_obj.cloudobj.cfm_name
|
|
@@ -498,7 +508,6 @@ module MU
|
|
|
498
508
|
# @param name [String]: The name of key we're creating/appending
|
|
499
509
|
# @param value [MU::Config::Tail|String]: The value to set. If it's a {MU::Config::Tail} object, we'll treat it as a reference to a parameter.
|
|
500
510
|
def self.setCloudFormationProp(resource, name, value)
|
|
501
|
-
realvalue = value
|
|
502
511
|
is_list_element = false
|
|
503
512
|
|
|
504
513
|
# Recursively resolve MU::Config::Tail references
|
|
@@ -508,9 +517,11 @@ module MU
|
|
|
508
517
|
tree[key] = self.resolveTails(val)
|
|
509
518
|
}
|
|
510
519
|
elsif tree.is_a?(Array)
|
|
520
|
+
newtree = []
|
|
511
521
|
tree.each { |elt|
|
|
512
|
-
|
|
522
|
+
newtree << self.resolveTails(elt)
|
|
513
523
|
}
|
|
524
|
+
tree = newtree
|
|
514
525
|
elsif tree.class.to_s == "MU::Config::Tail"
|
|
515
526
|
if tree.is_list_element
|
|
516
527
|
return { "Fn::Select" => [tree.index, { "Ref" => "#{tree.getPrettyName}" }] }
|
|
@@ -584,7 +595,7 @@ module MU
|
|
|
584
595
|
cfm_template["Conditions"][cond['name']] = JSON.parse(cond['cloudcode'])
|
|
585
596
|
}
|
|
586
597
|
end
|
|
587
|
-
tails.each_pair { |
|
|
598
|
+
tails.each_pair { |_param, data|
|
|
588
599
|
tail = data
|
|
589
600
|
next if tail.is_a?(MU::Config::Tail) and (tail.pseudo or !tail.runtimecode.nil?)
|
|
590
601
|
default = ""
|
|
@@ -638,7 +649,7 @@ module MU
|
|
|
638
649
|
}
|
|
639
650
|
end
|
|
640
651
|
}
|
|
641
|
-
MU::Cloud.resource_types.each { |
|
|
652
|
+
MU::Cloud.resource_types.values.each { |data|
|
|
642
653
|
if !config[data[:cfg_plural]].nil? and
|
|
643
654
|
config[data[:cfg_plural]].size > 0
|
|
644
655
|
config[data[:cfg_plural]].each { |resource|
|
|
@@ -129,7 +129,7 @@ module MU
|
|
|
129
129
|
# @param config [MU::Config]: The calling MU::Config object
|
|
130
130
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
131
131
|
def self.schema(config)
|
|
132
|
-
MU::Cloud
|
|
132
|
+
MU::Cloud.resourceClass("AWS", "Alarm").schema(config)
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
@@ -137,14 +137,14 @@ module MU
|
|
|
137
137
|
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
138
138
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
139
139
|
def self.validateConfig(server, configurator)
|
|
140
|
-
MU::Cloud
|
|
140
|
+
MU::Cloud.resourceClass("AWS", "Alarm").validateConfig(server, configurator)
|
|
141
141
|
end
|
|
142
142
|
|
|
143
143
|
# Does this resource type exist as a global (cloud-wide) artifact, or
|
|
144
144
|
# is it localized to a region/zone?
|
|
145
145
|
# @return [Boolean]
|
|
146
146
|
def self.isGlobal?
|
|
147
|
-
MU::Cloud
|
|
147
|
+
MU::Cloud.resourceClass("AWS", "Alarm").isGlobal?
|
|
148
148
|
end
|
|
149
149
|
|
|
150
150
|
|
|
@@ -150,7 +150,7 @@ module MU
|
|
|
150
150
|
# @param config [MU::Config]: The calling MU::Config object
|
|
151
151
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
152
152
|
def self.schema(config)
|
|
153
|
-
MU::Cloud
|
|
153
|
+
MU::Cloud.resourceClass("AWS", "CacheCluster").schema(config)
|
|
154
154
|
end
|
|
155
155
|
|
|
156
156
|
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
@@ -158,14 +158,14 @@ module MU
|
|
|
158
158
|
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
159
159
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
160
160
|
def self.validateConfig(server, configurator)
|
|
161
|
-
MU::Cloud
|
|
161
|
+
MU::Cloud.resourceClass("AWS", "CacheCluster").validateConfig(server, configurator)
|
|
162
162
|
end
|
|
163
163
|
|
|
164
164
|
# Does this resource type exist as a global (cloud-wide) artifact, or
|
|
165
165
|
# is it localized to a region/zone?
|
|
166
166
|
# @return [Boolean]
|
|
167
167
|
def self.isGlobal?
|
|
168
|
-
MU::Cloud
|
|
168
|
+
MU::Cloud.resourceClass("AWS", "CacheCluster").isGlobal?
|
|
169
169
|
end
|
|
170
170
|
|
|
171
171
|
end
|
|
@@ -100,7 +100,7 @@ module MU
|
|
|
100
100
|
# @param config [MU::Config]: The calling MU::Config object
|
|
101
101
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
102
102
|
def self.schema(config)
|
|
103
|
-
MU::Cloud
|
|
103
|
+
MU::Cloud.resourceClass("AWS", "Collection").schema(config)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
@@ -108,14 +108,14 @@ module MU
|
|
|
108
108
|
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
109
109
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
110
110
|
def self.validateConfig(server, configurator)
|
|
111
|
-
MU::Cloud
|
|
111
|
+
MU::Cloud.resourceClass("AWS", "Collection").validateConfig(server, configurator)
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
# Does this resource type exist as a global (cloud-wide) artifact, or
|
|
115
115
|
# is it localized to a region/zone?
|
|
116
116
|
# @return [Boolean]
|
|
117
117
|
def self.isGlobal?
|
|
118
|
-
MU::Cloud
|
|
118
|
+
MU::Cloud.resourceClass("AWS", "Collection").isGlobal?
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
end
|
|
@@ -64,8 +64,8 @@ module MU
|
|
|
64
64
|
basename = @config["name"].to_s
|
|
65
65
|
basename = basename+@deploy.timestamp+MU.seed.downcase if !@config['scrub_mu_isms']
|
|
66
66
|
basename.gsub!(/[^a-z0-9]/i, "")
|
|
67
|
-
@config["db_name"] = MU::Cloud
|
|
68
|
-
@config['master_user'] = MU::Cloud
|
|
67
|
+
@config["db_name"] = MU::Cloud.resourceClass("AWS", "Database").getName(basename, type: "dbname", config: @config)
|
|
68
|
+
@config['master_user'] = MU::Cloud.resourceClass("AWS", "Database").getName(basename, type: "dbuser", config: @config)
|
|
69
69
|
|
|
70
70
|
if @config["create_cluster"]
|
|
71
71
|
@cfm_name, @cfm_template = MU::Cloud::CloudFormation.cloudFormationBase("dbcluster", self, tags: @config['tags'], scrub_mu_isms: @config['scrub_mu_isms']) if @cfm_template.nil?
|
|
@@ -214,18 +214,7 @@ module MU
|
|
|
214
214
|
elsif @config['db_name']
|
|
215
215
|
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "DBName", @config['db_name'])
|
|
216
216
|
end
|
|
217
|
-
|
|
218
|
-
if @config['auth_vault'] && !@config['auth_vault'].empty?
|
|
219
|
-
@config['password'] = @groomclass.getSecret(
|
|
220
|
-
vault: @config['auth_vault']['vault'],
|
|
221
|
-
item: @config['auth_vault']['item'],
|
|
222
|
-
field: @config['auth_vault']['password_field']
|
|
223
|
-
)
|
|
224
|
-
else
|
|
225
|
-
# Should we use random instead?
|
|
226
|
-
@config['password'] = Password.pronounceable(10..12)
|
|
227
|
-
end
|
|
228
|
-
end
|
|
217
|
+
getPassword
|
|
229
218
|
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "MasterUserPassword", @config['password'])
|
|
230
219
|
end
|
|
231
220
|
end
|
|
@@ -260,7 +249,7 @@ module MU
|
|
|
260
249
|
# @param config [MU::Config]: The calling MU::Config object
|
|
261
250
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
262
251
|
def self.schema(config)
|
|
263
|
-
MU::Cloud
|
|
252
|
+
MU::Cloud.resourceClass("AWS", "Database").schema(config)
|
|
264
253
|
end
|
|
265
254
|
|
|
266
255
|
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
@@ -268,14 +257,14 @@ module MU
|
|
|
268
257
|
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
269
258
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
270
259
|
def self.validateConfig(server, configurator)
|
|
271
|
-
MU::Cloud
|
|
260
|
+
MU::Cloud.resourceClass("AWS", "Database").validateConfig(server, configurator)
|
|
272
261
|
end
|
|
273
262
|
|
|
274
263
|
# Does this resource type exist as a global (cloud-wide) artifact, or
|
|
275
264
|
# is it localized to a region/zone?
|
|
276
265
|
# @return [Boolean]
|
|
277
266
|
def self.isGlobal?
|
|
278
|
-
MU::Cloud
|
|
267
|
+
MU::Cloud.resourceClass("AWS", "Database").isGlobal?
|
|
279
268
|
end
|
|
280
269
|
|
|
281
270
|
|
|
@@ -257,7 +257,7 @@ module MU
|
|
|
257
257
|
# @param config [MU::Config]: The calling MU::Config object
|
|
258
258
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
259
259
|
def self.schema(config)
|
|
260
|
-
MU::Cloud
|
|
260
|
+
MU::Cloud.resourceClass("AWS", "DNSZone").schema(config)
|
|
261
261
|
end
|
|
262
262
|
|
|
263
263
|
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
@@ -265,14 +265,14 @@ module MU
|
|
|
265
265
|
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
266
266
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
267
267
|
def self.validateConfig(server, configurator)
|
|
268
|
-
MU::Cloud
|
|
268
|
+
MU::Cloud.resourceClass("AWS", "DNSZone").validateConfig(server, configurator)
|
|
269
269
|
end
|
|
270
270
|
|
|
271
271
|
# Does this resource type exist as a global (cloud-wide) artifact, or
|
|
272
272
|
# is it localized to a region/zone?
|
|
273
273
|
# @return [Boolean]
|
|
274
274
|
def self.isGlobal?
|
|
275
|
-
MU::Cloud
|
|
275
|
+
MU::Cloud.resourceClass("AWS", "DNSZone").isGlobal?
|
|
276
276
|
end
|
|
277
277
|
|
|
278
278
|
end
|
|
@@ -137,7 +137,7 @@ module MU
|
|
|
137
137
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
138
138
|
def self.validateConfig(acl, config)
|
|
139
139
|
# Just use the AWS implemention
|
|
140
|
-
MU::Cloud
|
|
140
|
+
MU::Cloud.resourceClass("AWS", "FirewallRule").validateConfig(acl, config)
|
|
141
141
|
end
|
|
142
142
|
|
|
143
143
|
private
|
|
@@ -291,14 +291,14 @@ module MU
|
|
|
291
291
|
# @param config [MU::Config]: The calling MU::Config object
|
|
292
292
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
293
293
|
def self.schema(config)
|
|
294
|
-
MU::Cloud
|
|
294
|
+
MU::Cloud.resourceClass("AWS", "FirewallRule").schema(config)
|
|
295
295
|
end
|
|
296
296
|
|
|
297
297
|
# Does this resource type exist as a global (cloud-wide) artifact, or
|
|
298
298
|
# is it localized to a region/zone?
|
|
299
299
|
# @return [Boolean]
|
|
300
300
|
def self.isGlobal?
|
|
301
|
-
MU::Cloud
|
|
301
|
+
MU::Cloud.resourceClass("AWS", "FirewallRule").isGlobal?
|
|
302
302
|
end
|
|
303
303
|
|
|
304
304
|
end #class
|
|
@@ -176,7 +176,7 @@ module MU
|
|
|
176
176
|
# @param config [MU::Config]: The calling MU::Config object
|
|
177
177
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
178
178
|
def self.schema(config)
|
|
179
|
-
MU::Cloud
|
|
179
|
+
MU::Cloud.resourceClass("AWS", "LoadBalancer").schema(config)
|
|
180
180
|
end
|
|
181
181
|
|
|
182
182
|
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
@@ -184,14 +184,14 @@ module MU
|
|
|
184
184
|
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
185
185
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
186
186
|
def self.validateConfig(server, configurator)
|
|
187
|
-
MU::Cloud
|
|
187
|
+
MU::Cloud.resourceClass("AWS", "LoadBalancer").validateConfig(server, configurator)
|
|
188
188
|
end
|
|
189
189
|
|
|
190
190
|
# Does this resource type exist as a global (cloud-wide) artifact, or
|
|
191
191
|
# is it localized to a region/zone?
|
|
192
192
|
# @return [Boolean]
|
|
193
193
|
def self.isGlobal?
|
|
194
|
-
MU::Cloud
|
|
194
|
+
MU::Cloud.resourceClass("AWS", "LoadBalancer").isGlobal?
|
|
195
195
|
end
|
|
196
196
|
|
|
197
197
|
end
|
|
@@ -153,7 +153,7 @@ module MU
|
|
|
153
153
|
# @param config [MU::Config]: The calling MU::Config object
|
|
154
154
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
155
155
|
def self.schema(config)
|
|
156
|
-
MU::Cloud
|
|
156
|
+
MU::Cloud.resourceClass("AWS", "Log").schema(config)
|
|
157
157
|
end
|
|
158
158
|
|
|
159
159
|
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
@@ -161,14 +161,14 @@ module MU
|
|
|
161
161
|
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
162
162
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
163
163
|
def self.validateConfig(server, configurator)
|
|
164
|
-
MU::Cloud
|
|
164
|
+
MU::Cloud.resourceClass("AWS", "Log").validateConfig(server, configurator)
|
|
165
165
|
end
|
|
166
166
|
|
|
167
167
|
# Does this resource type exist as a global (cloud-wide) artifact, or
|
|
168
168
|
# is it localized to a region/zone?
|
|
169
169
|
# @return [Boolean]
|
|
170
170
|
def self.isGlobal?
|
|
171
|
-
MU::Cloud
|
|
171
|
+
MU::Cloud.resourceClass("AWS", "Log").isGlobal?
|
|
172
172
|
end
|
|
173
173
|
|
|
174
174
|
end
|
|
@@ -55,8 +55,8 @@ module MU
|
|
|
55
55
|
scrub_mu_isms: @config['scrub_mu_isms']
|
|
56
56
|
)
|
|
57
57
|
|
|
58
|
-
@disk_devices = MU::Cloud
|
|
59
|
-
@ephemeral_mappings = MU::Cloud
|
|
58
|
+
@disk_devices = MU::Cloud.resourceClass("AWS", "Server").disk_devices
|
|
59
|
+
@ephemeral_mappings = MU::Cloud.resourceClass("AWS", "Server").ephemeral_mappings
|
|
60
60
|
|
|
61
61
|
if !mu_name.nil?
|
|
62
62
|
@mu_name = mu_name
|
|
@@ -190,7 +190,7 @@ module MU
|
|
|
190
190
|
cfm_volume_map = {}
|
|
191
191
|
if @config["storage"]
|
|
192
192
|
@config["storage"].each { |vol|
|
|
193
|
-
mapping, cfm_mapping = MU::Cloud
|
|
193
|
+
mapping, cfm_mapping = MU::Cloud.resourceClass("AWS", "Server").convertBlockDeviceMapping(vol)
|
|
194
194
|
configured_storage << mapping
|
|
195
195
|
# vol_name, vol_template = MU::Cloud::CloudFormation.cloudFormationBase("volume", name: "volume"+@cfm_name+mapping[:device_name])
|
|
196
196
|
# MU::Cloud::CloudFormation.setCloudFormationProp(vol_template[vol_name], "Size", mapping[:ebs][:volume_size].to_s)
|
|
@@ -353,7 +353,7 @@ module MU
|
|
|
353
353
|
# @param config [MU::Config]: The calling MU::Config object
|
|
354
354
|
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
355
355
|
def self.schema(config)
|
|
356
|
-
MU::Cloud
|
|
356
|
+
MU::Cloud.resourceClass("AWS", "Server").schema(config)
|
|
357
357
|
end
|
|
358
358
|
|
|
359
359
|
# Confirm that the given instance size is valid for the given region.
|
|
@@ -362,7 +362,7 @@ module MU
|
|
|
362
362
|
# @param region [String]: Region to check against
|
|
363
363
|
# @return [String,nil]
|
|
364
364
|
def self.validateInstanceType(size, region)
|
|
365
|
-
MU::Cloud
|
|
365
|
+
MU::Cloud.resourceClass("AWS", "Server").validateInstanceType(size, region)
|
|
366
366
|
end
|
|
367
367
|
|
|
368
368
|
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
@@ -370,14 +370,14 @@ module MU
|
|
|
370
370
|
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
371
371
|
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
372
372
|
def self.validateConfig(server, configurator)
|
|
373
|
-
MU::Cloud
|
|
373
|
+
MU::Cloud.resourceClass("AWS", "Server").validateConfig(server, configurator)
|
|
374
374
|
end
|
|
375
375
|
|
|
376
376
|
# Does this resource type exist as a global (cloud-wide) artifact, or
|
|
377
377
|
# is it localized to a region/zone?
|
|
378
378
|
# @return [Boolean]
|
|
379
379
|
def self.isGlobal?
|
|
380
|
-
MU::Cloud
|
|
380
|
+
MU::Cloud.resourceClass("AWS", "Server").isGlobal?
|
|
381
381
|
end
|
|
382
382
|
|
|
383
383
|
end #class
|