cloud-mu 3.1.5 → 3.1.6

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.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +5 -1
  3. data/ansible/roles/mu-windows/files/LaunchConfig.json +9 -0
  4. data/ansible/roles/mu-windows/files/config.xml +76 -0
  5. data/ansible/roles/mu-windows/tasks/main.yml +16 -0
  6. data/bin/mu-adopt +2 -1
  7. data/bin/mu-configure +16 -0
  8. data/bin/mu-node-manage +15 -16
  9. data/cloud-mu.gemspec +2 -2
  10. data/cookbooks/mu-activedirectory/resources/domain.rb +4 -4
  11. data/cookbooks/mu-activedirectory/resources/domain_controller.rb +4 -4
  12. data/cookbooks/mu-tools/recipes/eks.rb +2 -2
  13. data/cookbooks/mu-tools/recipes/windows-client.rb +25 -22
  14. data/extras/clean-stock-amis +25 -19
  15. data/extras/image-generators/AWS/win2k12.yaml +2 -0
  16. data/extras/image-generators/AWS/win2k16.yaml +2 -0
  17. data/extras/image-generators/AWS/win2k19.yaml +2 -0
  18. data/modules/mommacat.ru +1 -1
  19. data/modules/mu.rb +6 -5
  20. data/modules/mu/adoption.rb +19 -4
  21. data/modules/mu/cleanup.rb +181 -293
  22. data/modules/mu/cloud.rb +58 -17
  23. data/modules/mu/clouds/aws.rb +36 -1
  24. data/modules/mu/clouds/aws/container_cluster.rb +30 -21
  25. data/modules/mu/clouds/aws/role.rb +1 -1
  26. data/modules/mu/clouds/aws/vpc.rb +5 -1
  27. data/modules/mu/clouds/azure.rb +10 -0
  28. data/modules/mu/clouds/cloudformation.rb +10 -0
  29. data/modules/mu/clouds/google.rb +18 -4
  30. data/modules/mu/clouds/google/bucket.rb +2 -2
  31. data/modules/mu/clouds/google/container_cluster.rb +10 -7
  32. data/modules/mu/clouds/google/database.rb +3 -3
  33. data/modules/mu/clouds/google/firewall_rule.rb +3 -3
  34. data/modules/mu/clouds/google/function.rb +3 -3
  35. data/modules/mu/clouds/google/loadbalancer.rb +4 -4
  36. data/modules/mu/clouds/google/role.rb +18 -9
  37. data/modules/mu/clouds/google/server.rb +16 -14
  38. data/modules/mu/clouds/google/server_pool.rb +4 -4
  39. data/modules/mu/clouds/google/user.rb +2 -2
  40. data/modules/mu/clouds/google/vpc.rb +9 -13
  41. data/modules/mu/config.rb +1 -1
  42. data/modules/mu/config/container_cluster.rb +5 -0
  43. data/modules/mu/config/doc_helpers.rb +1 -1
  44. data/modules/mu/config/ref.rb +12 -6
  45. data/modules/mu/config/schema_helpers.rb +8 -3
  46. data/modules/mu/config/server.rb +7 -0
  47. data/modules/mu/config/tail.rb +1 -0
  48. data/modules/mu/config/vpc.rb +15 -7
  49. data/modules/mu/config/vpc.yml +0 -1
  50. data/modules/mu/defaults/AWS.yaml +48 -48
  51. data/modules/mu/deploy.rb +1 -1
  52. data/modules/mu/groomer.rb +1 -1
  53. data/modules/mu/groomers/ansible.rb +69 -4
  54. data/modules/mu/groomers/chef.rb +48 -4
  55. data/modules/mu/master.rb +75 -3
  56. data/modules/mu/mommacat.rb +104 -855
  57. data/modules/mu/mommacat/naming.rb +28 -0
  58. data/modules/mu/mommacat/search.rb +463 -0
  59. data/modules/mu/mommacat/storage.rb +185 -183
  60. data/modules/tests/super_simple_bok.yml +1 -3
  61. metadata +8 -5
@@ -332,32 +332,17 @@ module MU
332
332
  Dir.mkdir(deploy_dir, 0700)
333
333
  end
334
334
 
335
- if !origin.nil?
336
- o_file = File.new("#{deploy_dir}/origin.json", File::CREAT|File::TRUNC|File::RDWR, 0600)
337
- o_file.puts JSON.pretty_generate(origin)
338
- o_file.close
339
- end
340
-
341
- if !@private_key.nil?
342
- privkey = File.new("#{deploy_dir}/private_key", File::CREAT|File::TRUNC|File::RDWR, 0600)
343
- privkey.puts @private_key
344
- privkey.close
345
- end
346
-
347
- if !@public_key.nil?
348
- pubkey = File.new("#{deploy_dir}/public_key", File::CREAT|File::TRUNC|File::RDWR, 0600)
349
- pubkey.puts @public_key
350
- pubkey.close
351
- end
335
+ writeFile("origin.json", JSON.pretty_generate(origin)) if !origin.nil?
336
+ writeFile("private_key", @private_key) if !@private_key.nil?
337
+ writeFile("public_key", @public_key) if !@public_key.nil?
352
338
 
353
339
  if !@deployment.nil? and @deployment.size > 0
354
340
  @deployment['handle'] = MU.handle if @deployment['handle'].nil? and !MU.handle.nil?
355
- @deployment['public_key'] = @public_key
356
- @deployment['timestamp'] ||= @timestamp
357
- @deployment['seed'] ||= @seed
358
- @deployment['appname'] ||= @appname
359
- @deployment['handle'] ||= @handle
360
- @deployment['ssh_public_key'] ||= @ssh_public_key if @ssh_public_key
341
+ [:public_key, :timestamp, :seed, :appname, :handle, :ssh_public_key].each { |var|
342
+ value = instance_variable_get(("@"+var.to_s).to_sym)
343
+ @deployment[var.to_s] = value if value
344
+ }
345
+
361
346
  begin
362
347
  # XXX doing this to trigger JSON errors before stomping the stored
363
348
  # file...
@@ -380,36 +365,15 @@ module MU
380
365
  end
381
366
 
382
367
  if !@original_config.nil? and @original_config.is_a?(Hash)
383
- config = File.new("#{deploy_dir}/basket_of_kittens.json", File::CREAT|File::TRUNC|File::RDWR, 0600)
384
- config.puts JSON.pretty_generate(MU::Config.manxify(@original_config))
385
- config.close
368
+ writeFile("basket_of_kittens.json", JSON.pretty_generate(MU::Config.manxify(@original_config)))
386
369
  end
387
370
 
388
- if !@ssh_private_key.nil?
389
- key = File.new("#{deploy_dir}/node_ssh.key", File::CREAT|File::TRUNC|File::RDWR, 0600)
390
- key.puts @ssh_private_key
391
- key.close
392
- end
393
- if !@ssh_public_key.nil?
394
- key = File.new("#{deploy_dir}/node_ssh.pub", File::CREAT|File::TRUNC|File::RDWR, 0600)
395
- key.puts @ssh_public_key
396
- key.close
397
- end
398
- if !@ssh_key_name.nil?
399
- key = File.new("#{deploy_dir}/ssh_key_name", File::CREAT|File::TRUNC|File::RDWR, 0600)
400
- key.puts @ssh_key_name
401
- key.close
402
- end
403
- if !@environment.nil?
404
- env = File.new("#{deploy_dir}/environment_name", File::CREAT|File::TRUNC|File::RDWR, 0600)
405
- env.puts @environment
406
- env.close
407
- end
408
- if !@deploy_secret.nil?
409
- secret = File.new("#{deploy_dir}/deploy_secret", File::CREAT|File::TRUNC|File::RDWR, 0600)
410
- secret.print @deploy_secret
411
- secret.close
412
- end
371
+ writeFile("node_ssh.key", @ssh_private_key) if !@ssh_private_key.nil?
372
+ writeFile("node_ssh.pub", @ssh_public_key) if !@ssh_public_key.nil?
373
+ writeFile("ssh_key_name", @ssh_key_name) if !@ssh_key_name.nil?
374
+ writeFile("environment_name", @environment) if !@environment.nil?
375
+ writeFile("deploy_secret", @deploy_secret) if !@deploy_secret.nil?
376
+
413
377
  if !@secrets.nil?
414
378
  secretdir = "#{deploy_dir}/secrets"
415
379
  if !Dir.exist?(secretdir)
@@ -418,9 +382,7 @@ module MU
418
382
  end
419
383
  @secrets.each_pair { |type, servers|
420
384
  servers.each_pair { |server, svr_secret|
421
- key = File.new("#{secretdir}/#{type}.#{server}", File::CREAT|File::TRUNC|File::RDWR, 0600)
422
- key.puts svr_secret
423
- key.close
385
+ writeFile("secrets/#{type}.#{server}", svr_secret)
424
386
  }
425
387
  }
426
388
  end
@@ -430,146 +392,64 @@ module MU
430
392
  syncLitter(@deployment['servers'].keys, triggering_node: triggering_node, save_only: true) if @deployment.has_key?("servers")
431
393
  end
432
394
 
433
- # Find one or more resources by their Mu resource name, and return
434
- # MommaCat objects for their containing deploys, their BoK config data,
435
- # and their deployment data.
436
- #
437
- # @param type [String]: The type of resource, e.g. "vpc" or "server."
438
- # @param name [String]: The Mu resource class, typically the name field of a Basket of Kittens resource declaration.
439
- # @param mu_name [String]: The fully-expanded Mu resource name, e.g. MGMT-PROD-2015040115-FR-ADMGMT2
440
- # @param deploy_id [String]: The deployment to search. Will search all deployments if not specified.
441
- # @return [Hash,Array<Hash>]
442
- def self.getResourceMetadata(type, name: nil, deploy_id: nil, use_cache: true, mu_name: nil)
443
- if type.nil?
444
- raise MuError, "Can't call getResourceMetadata without a type argument"
445
- end
446
- _shortclass, _cfg_name, type, _classname = MU::Cloud.getResourceNames(type)
447
-
448
- # first, check our in-memory deploys, which may or may not have been
449
- # written to disk yet.
450
- littercache = nil
451
- begin
452
- @@litter_semaphore.synchronize {
453
- littercache = @@litters.dup
454
- }
455
- rescue ThreadError => e
456
- # already locked by a parent caller and this is a read op, so this is ok
457
- raise e if !e.message.match(/recursive locking/)
458
- littercache = @@litters.dup
459
- end
460
- littercache.each_pair { |deploy, momma|
461
- @@deploy_struct_semaphore.synchronize {
462
- @deploy_cache[deploy] = {
463
- "mtime" => Time.now,
464
- "data" => momma.deployment
465
- }
466
- }
467
- }
468
-
395
+ # Read all of our +deployment.json+ files in and stick them in a hash. Used
396
+ # by search routines that just need to skim this data without loading
397
+ # entire {MU::MommaCat} objects.
398
+ def self.cacheDeployMetadata(deploy_id = nil, use_cache: false)
469
399
  deploy_root = File.expand_path(MU.dataDir+"/deployments")
470
400
  MU::MommaCat.deploy_struct_semaphore.synchronize {
471
- if Dir.exist?(deploy_root)
472
- Dir.entries(deploy_root).each { |deploy|
473
- this_deploy_dir = deploy_root+"/"+deploy
474
- next if deploy == "." or deploy == ".." or !Dir.exist?(this_deploy_dir)
475
- next if deploy_id and deploy_id != deploy
476
-
477
- if !File.size?(this_deploy_dir+"/deployment.json")
478
- MU.log "#{this_deploy_dir}/deployment.json doesn't exist, skipping when loading cache", MU::DEBUG
479
- next
480
- end
481
- if @deploy_cache[deploy].nil? or !use_cache
482
- @deploy_cache[deploy] = Hash.new
483
- elsif @deploy_cache[deploy]['mtime'] == File.mtime("#{this_deploy_dir}/deployment.json")
484
- MU.log "Using cached copy of deploy #{deploy} from #{@deploy_cache[deploy]['mtime']}", MU::DEBUG
401
+ @@deploy_cache ||= {}
402
+ return if !Dir.exist?(deploy_root)
485
403
 
486
- next
487
- end
404
+ Dir.entries(deploy_root).each { |deploy|
405
+ this_deploy_dir = deploy_root+"/"+deploy
406
+ this_deploy_file = this_deploy_dir+"/deployment.json"
488
407
 
489
- @deploy_cache[deploy] = Hash.new if !@deploy_cache.has_key?(deploy)
490
- MU.log "Caching deploy #{deploy}", MU::DEBUG
491
- lock = File.open("#{this_deploy_dir}/deployment.json", File::RDONLY)
492
- lock.flock(File::LOCK_EX)
493
- @deploy_cache[deploy]['mtime'] = File.mtime("#{this_deploy_dir}/deployment.json")
408
+ if deploy == "." or deploy == ".." or !Dir.exist?(this_deploy_dir) or
409
+ (deploy_id and deploy_id != deploy) or
410
+ !File.size?(this_deploy_file) or
411
+ (use_cache and @@deploy_cache[deploy] and @@deploy_cache[deploy]['mtime'] == File.mtime(this_deploy_file))
412
+ next
413
+ end
494
414
 
495
- begin
496
- @deploy_cache[deploy]['data'] = JSON.parse(File.read("#{this_deploy_dir}/deployment.json"))
497
- lock.flock(File::LOCK_UN)
498
-
499
- next if @deploy_cache[deploy].nil? or @deploy_cache[deploy]['data'].nil?
500
- # Populate some generable entries that should be in the deploy
501
- # data. Also, bounce out if we realize we've found exactly what
502
- # we needed already.
503
- MU::Cloud.resource_types.values.each { |attrs|
504
-
505
- next if @deploy_cache[deploy]['data'][attrs[:cfg_plural]].nil?
506
- if !attrs[:has_multiples]
507
- @deploy_cache[deploy]['data'][attrs[:cfg_plural]].each_pair { |nodename, data|
508
- # XXX we don't actually store node names for some resources, need to farm them
509
- # and fix metadata
510
- # if !mu_name.nil? and nodename == mu_name
511
- # return { deploy => [data] }
512
- # end
513
- }
514
- else
515
- @deploy_cache[deploy]['data'][attrs[:cfg_plural]].each_pair { |node_class, nodes|
516
- next if nodes.nil? or !nodes.is_a?(Hash)
517
- nodes.each_pair { |nodename, data|
518
- next if !data.is_a?(Hash)
519
- data['#MU_NODE_CLASS'] = node_class
520
- if !data.has_key?("cloud") # XXX kludge until old metadata gets fixed
521
- data["cloud"] = MU::Config.defaultCloud
522
- end
523
- data['#MU_NAME'] = nodename
524
- if !mu_name.nil? and nodename == mu_name
525
- return {deploy => [data]} if deploy_id && deploy == deploy_id
526
- end
527
- }
415
+ @@deploy_cache[deploy] ||= {}
416
+
417
+ MU.log "Caching deploy #{deploy}", MU::DEBUG
418
+ lock = File.open(this_deploy_file, File::RDONLY)
419
+ lock.flock(File::LOCK_EX)
420
+ @@deploy_cache[deploy]['mtime'] = File.mtime(this_deploy_file)
421
+
422
+ begin
423
+ @@deploy_cache[deploy]['data'] = JSON.parse(File.read(this_deploy_file))
424
+ next if @@deploy_cache[deploy]['data'].nil?
425
+ # Populate some generable entries that should be in the deploy
426
+ # data. Also, bounce out if we realize we've found exactly what
427
+ # we needed already.
428
+ MU::Cloud.resource_types.values.each { |attrs|
429
+
430
+ next if @@deploy_cache[deploy]['data'][attrs[:cfg_plural]].nil?
431
+ if attrs[:has_multiples]
432
+ @@deploy_cache[deploy]['data'][attrs[:cfg_plural]].each_pair { |node_class, nodes|
433
+ next if nodes.nil? or !nodes.is_a?(Hash)
434
+ nodes.each_pair { |nodename, data|
435
+ next if !data.is_a?(Hash)
436
+ data['#MU_NODE_CLASS'] ||= node_class
437
+ data['#MU_NAME'] ||= nodename
438
+ data["cloud"] ||= MU::Config.defaultCloud
528
439
  }
529
- end
530
- }
531
- rescue JSON::ParserError => e
532
- raise MuError, "JSON parse failed on #{this_deploy_dir}/deployment.json\n\n"+File.read("#{this_deploy_dir}/deployment.json")
533
- end
440
+ }
441
+ end
442
+ }
443
+ rescue JSON::ParserError
444
+ raise MuError, "JSON parse failed on #{this_deploy_file}\n\n"+File.read(this_deploy_file)
445
+ ensure
534
446
  lock.flock(File::LOCK_UN)
535
447
  lock.close
536
- }
537
- end
538
- }
539
-
540
- matches = {}
541
-
542
- if deploy_id.nil?
543
- @deploy_cache.each_key { |deploy|
544
- next if !@deploy_cache[deploy].has_key?('data')
545
- next if !@deploy_cache[deploy]['data'].has_key?(type)
546
- if !name.nil?
547
- next if @deploy_cache[deploy]['data'][type][name].nil?
548
- matches[deploy] ||= []
549
- matches[deploy] << @deploy_cache[deploy]['data'][type][name].dup
550
- else
551
- matches[deploy] ||= []
552
- matches[deploy].concat(@deploy_cache[deploy]['data'][type].values)
553
448
  end
554
449
  }
555
- return matches
556
- elsif !@deploy_cache[deploy_id].nil?
557
- if !@deploy_cache[deploy_id]['data'].nil? and
558
- !@deploy_cache[deploy_id]['data'][type].nil?
559
- if !name.nil?
560
- if !@deploy_cache[deploy_id]['data'][type][name].nil?
561
- matches[deploy_id] ||= []
562
- matches[deploy_id] << @deploy_cache[deploy_id]['data'][type][name].dup
563
- else
564
- return matches # nothing, actually
565
- end
566
- else
567
- matches[deploy_id] = @deploy_cache[deploy_id]['data'][type].values
568
- end
569
- end
570
- end
450
+ }
571
451
 
572
- return matches
452
+ @@deploy_cache
573
453
  end
574
454
 
575
455
  # Get the deploy directory
@@ -604,6 +484,128 @@ module MU
604
484
  end
605
485
 
606
486
  private
487
+
488
+ def writeFile(filename, contents)
489
+ file = File.new("#{deploy_dir}/#{filename}", File::CREAT|File::TRUNC|File::RDWR, 0600)
490
+ file.puts contents
491
+ file.close
492
+ end
493
+
494
+ # Helper for +initialize+
495
+ def setDeploySecret
496
+ credsets = {}
497
+ MU::Cloud.resource_types.values.each { |attrs|
498
+ if !@original_config[attrs[:cfg_plural]].nil? and @original_config[attrs[:cfg_plural]].size > 0
499
+ @original_config[attrs[:cfg_plural]].each { |resource|
500
+
501
+ credsets[resource['cloud']] ||= []
502
+ credsets[resource['cloud']] << resource['credentials']
503
+ @clouds[resource['cloud']] = 0 if !@clouds.has_key?(resource['cloud'])
504
+ @clouds[resource['cloud']] = @clouds[resource['cloud']] + 1
505
+
506
+ }
507
+ end
508
+ }
509
+
510
+ MU.log "Creating deploy secret for #{MU.deploy_id}"
511
+ @deploy_secret = Password.random(256)
512
+ if !@original_config['scrub_mu_isms'] and !@no_artifacts
513
+ credsets.each_pair { |cloud, creds|
514
+ creds.uniq!
515
+ cloudclass = Object.const_get("MU").const_get("Cloud").const_get(cloud)
516
+ creds.each { |credentials|
517
+ cloudclass.writeDeploySecret(@deploy_id, @deploy_secret, credentials: credentials)
518
+ }
519
+ }
520
+ end
521
+ end
522
+
523
+ def loadObjects(delay_descriptor_load)
524
+ MU::Cloud.resource_types.each_pair { |res_type, attrs|
525
+ type = attrs[:cfg_plural]
526
+ next if !@deployment.has_key?(type)
527
+
528
+ @deployment[type].each_pair { |res_name, data|
529
+ orig_cfg = nil
530
+ if @original_config.has_key?(type)
531
+ @original_config[type].each { |resource|
532
+ if resource["name"] == res_name
533
+ orig_cfg = resource
534
+ break
535
+ end
536
+ }
537
+ end
538
+
539
+ # Some Server objects originated from ServerPools, get their
540
+ # configs from there
541
+ if type == "servers" and orig_cfg.nil? and
542
+ @original_config.has_key?("server_pools")
543
+ @original_config["server_pools"].each { |resource|
544
+ if resource["name"] == res_name
545
+ orig_cfg = resource
546
+ break
547
+ end
548
+ }
549
+ end
550
+
551
+ if orig_cfg.nil?
552
+ MU.log "Failed to locate original config for #{attrs[:cfg_name]} #{res_name} in #{@deploy_id}", MU::WARN if !["firewall_rules", "databases", "storage_pools", "cache_clusters", "alarms"].include?(type) # XXX shaddap
553
+ next
554
+ end
555
+
556
+ if orig_cfg['vpc'] and orig_cfg['vpc'].is_a?(Hash)
557
+ ref = if orig_cfg['vpc']['id'] and orig_cfg['vpc']['id'].is_a?(Hash)
558
+ orig_cfg['vpc']['id']['mommacat'] = self
559
+ MU::Config::Ref.get(orig_cfg['vpc']['id'])
560
+ else
561
+ orig_cfg['vpc']['mommacat'] = self
562
+ MU::Config::Ref.get(orig_cfg['vpc'])
563
+ end
564
+ orig_cfg['vpc'].delete('mommacat')
565
+ orig_cfg['vpc'] = ref if ref.kitten(shallow: true)
566
+ end
567
+
568
+ begin
569
+ # Load up MU::Cloud objects for all our kittens in this deploy
570
+ orig_cfg['environment'] = @environment # not always set in old deploys
571
+ if attrs[:has_multiples]
572
+ data.keys.each { |mu_name|
573
+ attrs[:interface].new(mommacat: self, kitten_cfg: orig_cfg, mu_name: mu_name, delay_descriptor_load: delay_descriptor_load)
574
+ }
575
+ else
576
+ # XXX hack for old deployments, this can go away some day
577
+ if data['mu_name'].nil?
578
+ raise MuError, "Unable to find or guess a Mu name for #{res_type}: #{res_name} in #{@deploy_id}"
579
+ end
580
+ attrs[:interface].new(mommacat: self, kitten_cfg: orig_cfg, mu_name: data['mu_name'], cloud_id: data['cloud_id'])
581
+ end
582
+ rescue StandardError => e
583
+ if e.class != MU::Cloud::MuCloudResourceNotImplemented
584
+ MU.log "Failed to load an existing resource of type '#{type}' in #{@deploy_id}: #{e.inspect}", MU::WARN, details: e.backtrace
585
+ end
586
+ end
587
+ }
588
+ }
589
+ end
590
+
591
+ # Helper for +initialize+
592
+ def initDeployDirectory
593
+ if !Dir.exist?(MU.dataDir+"/deployments")
594
+ MU.log "Creating #{MU.dataDir}/deployments", MU::DEBUG
595
+ Dir.mkdir(MU.dataDir+"/deployments", 0700)
596
+ end
597
+ path = File.expand_path(MU.dataDir+"/deployments")+"/"+@deploy_id
598
+ if !Dir.exist?(path)
599
+ MU.log "Creating #{path}", MU::DEBUG
600
+ Dir.mkdir(path, 0700)
601
+ end
602
+
603
+ @ssh_key_name, @ssh_private_key, @ssh_public_key = self.SSHKey
604
+ if !File.exist?(deploy_dir+"/private_key")
605
+ @private_key, @public_key = createDeployKey
606
+ end
607
+
608
+ end
607
609
 
608
610
  ###########################################################################
609
611
  ###########################################################################
@@ -4,7 +4,7 @@
4
4
  appname: smoketest
5
5
  parameters:
6
6
  - name: complexity
7
- default: complex
7
+ default: simple
8
8
  - name: vpc_name
9
9
  required: false
10
10
  - name: instance_type
@@ -20,8 +20,6 @@ parameters:
20
20
  - name: server_pools_name
21
21
  default: superBoK_ServerPool
22
22
 
23
- <% $complexity = 'complex' %>
24
-
25
23
  vpcs:
26
24
  -
27
25
  <%= include("../mu/config/vpc.yml") %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloud-mu
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.5
4
+ version: 3.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Stange
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2020-03-03 00:00:00.000000000 Z
14
+ date: 2020-03-20 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: addressable
@@ -444,12 +444,11 @@ executables:
444
444
  - mu-self-update
445
445
  - mu-ssh
446
446
  - mu-upload-chef-artifacts
447
+ - mu-configure
447
448
  - mu-aws-setup
448
449
  - mu-gcp-setup
449
- - mu-node-manage
450
- - mu-adopt
451
- - mu-configure
452
450
  - mu-load-config.rb
451
+ - mu-node-manage
453
452
  - mu-ansible-secret
454
453
  - mu-momma-cat
455
454
  - mu-azure-setup
@@ -458,6 +457,7 @@ executables:
458
457
  - mu-cleanup
459
458
  - mu-deploy
460
459
  - mu-run-tests
460
+ - mu-adopt
461
461
  extensions: []
462
462
  extra_rdoc_files: []
463
463
  files:
@@ -498,6 +498,8 @@ files:
498
498
  - ansible/roles/mu-nat/vars/main.yml
499
499
  - ansible/roles/mu-windows/README.md
500
500
  - ansible/roles/mu-windows/defaults/main.yml
501
+ - ansible/roles/mu-windows/files/LaunchConfig.json
502
+ - ansible/roles/mu-windows/files/config.xml
501
503
  - ansible/roles/mu-windows/handlers/main.yml
502
504
  - ansible/roles/mu-windows/meta/main.yml
503
505
  - ansible/roles/mu-windows/tasks/main.yml
@@ -1086,6 +1088,7 @@ files:
1086
1088
  - modules/mu/mommacat.rb
1087
1089
  - modules/mu/mommacat/daemon.rb
1088
1090
  - modules/mu/mommacat/naming.rb
1091
+ - modules/mu/mommacat/search.rb
1089
1092
  - modules/mu/mommacat/storage.rb
1090
1093
  - modules/mu/monkey_patches/chef_knife_ssh.rb
1091
1094
  - modules/tests/README.md