cloud-mu 3.1.3 → 3.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +10 -2
  3. data/bin/mu-adopt +5 -1
  4. data/bin/mu-load-config.rb +2 -3
  5. data/bin/mu-run-tests +112 -27
  6. data/cloud-mu.gemspec +20 -20
  7. data/cookbooks/mu-tools/libraries/helper.rb +2 -1
  8. data/cookbooks/mu-tools/libraries/monkey.rb +35 -0
  9. data/cookbooks/mu-tools/recipes/google_api.rb +2 -2
  10. data/cookbooks/mu-tools/resources/disk.rb +1 -1
  11. data/extras/image-generators/Google/centos6.yaml +1 -0
  12. data/extras/image-generators/Google/centos7.yaml +1 -1
  13. data/modules/mommacat.ru +5 -15
  14. data/modules/mu.rb +10 -14
  15. data/modules/mu/adoption.rb +20 -14
  16. data/modules/mu/cleanup.rb +13 -9
  17. data/modules/mu/cloud.rb +26 -26
  18. data/modules/mu/clouds/aws.rb +100 -59
  19. data/modules/mu/clouds/aws/alarm.rb +4 -2
  20. data/modules/mu/clouds/aws/bucket.rb +25 -21
  21. data/modules/mu/clouds/aws/cache_cluster.rb +25 -23
  22. data/modules/mu/clouds/aws/collection.rb +21 -20
  23. data/modules/mu/clouds/aws/container_cluster.rb +47 -26
  24. data/modules/mu/clouds/aws/database.rb +57 -68
  25. data/modules/mu/clouds/aws/dnszone.rb +14 -14
  26. data/modules/mu/clouds/aws/endpoint.rb +20 -16
  27. data/modules/mu/clouds/aws/firewall_rule.rb +19 -16
  28. data/modules/mu/clouds/aws/folder.rb +7 -7
  29. data/modules/mu/clouds/aws/function.rb +15 -12
  30. data/modules/mu/clouds/aws/group.rb +14 -10
  31. data/modules/mu/clouds/aws/habitat.rb +16 -13
  32. data/modules/mu/clouds/aws/loadbalancer.rb +16 -15
  33. data/modules/mu/clouds/aws/log.rb +13 -10
  34. data/modules/mu/clouds/aws/msg_queue.rb +15 -8
  35. data/modules/mu/clouds/aws/nosqldb.rb +18 -11
  36. data/modules/mu/clouds/aws/notifier.rb +11 -6
  37. data/modules/mu/clouds/aws/role.rb +87 -70
  38. data/modules/mu/clouds/aws/search_domain.rb +30 -19
  39. data/modules/mu/clouds/aws/server.rb +102 -72
  40. data/modules/mu/clouds/aws/server_pool.rb +47 -28
  41. data/modules/mu/clouds/aws/storage_pool.rb +5 -6
  42. data/modules/mu/clouds/aws/user.rb +13 -10
  43. data/modules/mu/clouds/aws/vpc.rb +135 -121
  44. data/modules/mu/clouds/azure.rb +16 -9
  45. data/modules/mu/clouds/azure/container_cluster.rb +2 -3
  46. data/modules/mu/clouds/azure/firewall_rule.rb +10 -10
  47. data/modules/mu/clouds/azure/habitat.rb +8 -6
  48. data/modules/mu/clouds/azure/loadbalancer.rb +5 -5
  49. data/modules/mu/clouds/azure/role.rb +8 -10
  50. data/modules/mu/clouds/azure/server.rb +65 -25
  51. data/modules/mu/clouds/azure/user.rb +5 -7
  52. data/modules/mu/clouds/azure/vpc.rb +12 -15
  53. data/modules/mu/clouds/cloudformation.rb +8 -7
  54. data/modules/mu/clouds/cloudformation/vpc.rb +2 -4
  55. data/modules/mu/clouds/google.rb +39 -24
  56. data/modules/mu/clouds/google/bucket.rb +9 -11
  57. data/modules/mu/clouds/google/container_cluster.rb +27 -42
  58. data/modules/mu/clouds/google/database.rb +6 -9
  59. data/modules/mu/clouds/google/firewall_rule.rb +11 -10
  60. data/modules/mu/clouds/google/folder.rb +16 -9
  61. data/modules/mu/clouds/google/function.rb +127 -161
  62. data/modules/mu/clouds/google/group.rb +21 -18
  63. data/modules/mu/clouds/google/habitat.rb +18 -15
  64. data/modules/mu/clouds/google/loadbalancer.rb +14 -16
  65. data/modules/mu/clouds/google/role.rb +48 -31
  66. data/modules/mu/clouds/google/server.rb +105 -105
  67. data/modules/mu/clouds/google/server_pool.rb +12 -31
  68. data/modules/mu/clouds/google/user.rb +67 -13
  69. data/modules/mu/clouds/google/vpc.rb +58 -65
  70. data/modules/mu/config.rb +89 -1738
  71. data/modules/mu/config/bucket.rb +3 -3
  72. data/modules/mu/config/collection.rb +3 -3
  73. data/modules/mu/config/container_cluster.rb +2 -2
  74. data/modules/mu/config/dnszone.rb +5 -5
  75. data/modules/mu/config/doc_helpers.rb +517 -0
  76. data/modules/mu/config/endpoint.rb +3 -3
  77. data/modules/mu/config/firewall_rule.rb +118 -3
  78. data/modules/mu/config/folder.rb +3 -3
  79. data/modules/mu/config/function.rb +2 -2
  80. data/modules/mu/config/group.rb +3 -3
  81. data/modules/mu/config/habitat.rb +3 -3
  82. data/modules/mu/config/loadbalancer.rb +3 -3
  83. data/modules/mu/config/log.rb +3 -3
  84. data/modules/mu/config/msg_queue.rb +3 -3
  85. data/modules/mu/config/nosqldb.rb +3 -3
  86. data/modules/mu/config/notifier.rb +2 -2
  87. data/modules/mu/config/ref.rb +333 -0
  88. data/modules/mu/config/role.rb +3 -3
  89. data/modules/mu/config/schema_helpers.rb +508 -0
  90. data/modules/mu/config/search_domain.rb +3 -3
  91. data/modules/mu/config/server.rb +86 -58
  92. data/modules/mu/config/server_pool.rb +2 -2
  93. data/modules/mu/config/tail.rb +189 -0
  94. data/modules/mu/config/user.rb +3 -3
  95. data/modules/mu/config/vpc.rb +44 -4
  96. data/modules/mu/defaults/Google.yaml +2 -2
  97. data/modules/mu/deploy.rb +13 -10
  98. data/modules/mu/groomer.rb +1 -1
  99. data/modules/mu/groomers/ansible.rb +69 -24
  100. data/modules/mu/groomers/chef.rb +52 -44
  101. data/modules/mu/logger.rb +17 -14
  102. data/modules/mu/master.rb +317 -2
  103. data/modules/mu/master/chef.rb +3 -4
  104. data/modules/mu/master/ldap.rb +3 -3
  105. data/modules/mu/master/ssl.rb +12 -2
  106. data/modules/mu/mommacat.rb +85 -1766
  107. data/modules/mu/mommacat/daemon.rb +394 -0
  108. data/modules/mu/mommacat/naming.rb +366 -0
  109. data/modules/mu/mommacat/storage.rb +689 -0
  110. data/modules/tests/bucket.yml +4 -0
  111. data/modules/tests/{win2k12.yaml → needwork/win2k12.yaml} +0 -0
  112. data/modules/tests/regrooms/aws-iam.yaml +201 -0
  113. data/modules/tests/regrooms/bucket.yml +19 -0
  114. metadata +112 -102
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c5db54ee8a4ea5ea9884c3f468e162e8b27d60de12a0ccc8cbb30006a30818eb
4
- data.tar.gz: e6fee0a6d491ebb38a13754d41c9d4df4b7d360f820769f49a07a93cd94ee042
3
+ metadata.gz: 63e9eb2d1b4db9fe4dc96bfdc81fc6ae47c6e0b6afa1113226ebf4d798a4990a
4
+ data.tar.gz: 60ea7c4c936d2f66e300705b1cbaaca178476581ad106d05f7f48dac310f2003
5
5
  SHA512:
6
- metadata.gz: 66ffb8861d10e000a7afda4d7047a32e89f7cd348a43c6058d7cee9fb4a218e7c0db7b97d25d38eb5e08a53ed9003d4916497bb103fec1edb8c45694eddd4add
7
- data.tar.gz: d843093658cb63138abc07290274c599f1e084cf39fd905699516bf2b0785a4b7859561084300762f63152fb3d240762032b65acd86ebc0a072b5809166497ab
6
+ metadata.gz: f7862eacf10e60e1ee974b7a518177baf4d16271724d4ad9b0fd02a27dd3a7a9b5de5caa04aa6ce5bfe171449ffcbebdafd0012c2299c4ac2e39442fbbd0fcfd
7
+ data.tar.gz: a72c384253bc6b1649060ca33ceaafb28a1f9fb9d5cd699af2bcc63f7b1bbad3efb9ca1b67fbcc08b4fed0efa2d7f533ef3556abb15ed977490912f09e6350de
data/Dockerfile CHANGED
@@ -4,17 +4,25 @@ RUN mkdir -p /opt/mu/etc/ /home/mu /usr/local/ruby-current/lib/ruby/gems/2.5.0/g
4
4
 
5
5
  WORKDIR /home/mu
6
6
 
7
+ RUN df -h
8
+
7
9
  RUN apt-get update
8
10
 
9
11
  RUN apt-get install -y ruby2.5-dev dnsutils ansible build-essential
10
12
 
11
13
  RUN apt-get upgrade -y
12
14
 
15
+ RUN df -h
16
+
13
17
  COPY ./cloud-mu-*.gem /home/mu
14
18
 
15
- RUN gem install ./cloud-mu-*.gem thin -N
19
+ RUN gem install ./cloud-mu-*.gem -N
20
+
21
+ RUN df -h
22
+
23
+ RUN ls -la
16
24
 
17
- RUN rm cloud-mu-*.gem
25
+ #RUN rm --verbose -f cloud-mu-*.gem
18
26
 
19
27
  RUN apt-get remove -y build-essential ruby2.5-dev
20
28
 
@@ -103,7 +103,11 @@ end
103
103
 
104
104
 
105
105
  adoption = MU::Adoption.new(clouds: clouds, types: types, parent: $opt[:parent], billing: $opt[:billing], sources: $opt[:sources], credentials: $opt[:credentials], group_by: $opt[:grouping].to_sym, savedeploys: $opt[:savedeploys], diff: $opt[:diff], habitats: $opt[:habitats])
106
- adoption.scrapeClouds
106
+ found = adoption.scrapeClouds
107
+ if found.nil? or found.empty?
108
+ MU.log "No resources found to adopt", MU::WARN, details: {"clouds" => clouds, "types" => types }
109
+ exit
110
+ end
107
111
  MU.log "Generating baskets", MU::DEBUG
108
112
  boks = adoption.generateBaskets(prefix: $opt[:appname])
109
113
 
@@ -36,8 +36,7 @@ def validateClouds(cfg)
36
36
  cfg[cloud]["default"]["default"] = true
37
37
  found_default = true
38
38
  else
39
- missing_alias = false
40
- cfg[cloud].each_pair { |acctalias, acct|
39
+ cfg[cloud].values.each { |acct|
41
40
  if acct["default"]
42
41
  if found_default
43
42
  puts "Multiple accounts have 'default' set in #{cloud}"
@@ -205,7 +204,7 @@ def cfgPath
205
204
  end
206
205
  end
207
206
  home = Etc.getpwuid(Process.uid).dir
208
- username = Etc.getpwuid(Process.uid).name
207
+ Etc.getpwuid(Process.uid).name # validates existence of a username
209
208
  if Process.uid == 0 and !in_gem
210
209
  if ENV.include?('MU_INSTALLDIR')
211
210
  ENV['MU_INSTALLDIR']+"/etc/mu.yaml"
@@ -13,29 +13,46 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
+ bindir = File.realpath(File.expand_path(File.dirname(__FILE__)))
17
+ dir = File.realpath(File.expand_path(bindir+"/../modules/tests"))
18
+ Dir.chdir(dir)
19
+
16
20
  require 'colorize'
17
21
  require 'optimist'
18
- bindir = File.realpath(File.expand_path(File.dirname(__FILE__)))
19
22
  require bindir+"/mu-load-config.rb"
20
23
  require 'mu'
21
24
 
25
+ require 'rubygems'
26
+ require 'bundler/setup'
27
+ require 'json'
28
+ require 'erb'
29
+ require 'json-schema'
30
+
22
31
  $opts = Optimist::options do
23
32
  banner <<-EOS
24
33
  Usage:
25
- #{$0} [-e <environment>] [-r region] [-v] [-d] [-w] [-c] [-n] [-s] [-j] [-p parameter=value] /path/to/stack/config.[json|yaml] [-u deploy_id [-l]] [-r deploy_id]
34
+ #{$0} [-m <#>] [-f] [-v] [specific test BoK to run [...]]
26
35
  EOS
27
36
  opt :max_threads, "Environment to set on creation.", :require => false, :default => 3, :type => :integer
28
37
  opt :full, "Actually run deploys, instead of --dryrun", :require => false, :default => false
38
+ opt :verbose, "Show more information while running", :require => false, :default => false
29
39
  end
30
40
 
31
- dir = File.realpath(File.expand_path(bindir+"/../modules/tests"))
32
- Dir.chdir(dir)
41
+ only = ARGV
33
42
 
34
43
  files = Dir.glob("*.yaml", base: dir)
35
44
  files.concat(Dir.glob("*.yml", base: dir))
36
45
  baseclouds = MU::Cloud.supportedClouds.reject { |c| c == "CloudFormation" }
37
46
 
38
47
  commands = {}
48
+ failures = []
49
+ if only and only.size > 0
50
+ files.reject! { |f| !only.include?(f) }
51
+ if files.size == 0
52
+ MU.log "No files in #{dir} matched requested list", MU::WARN, details: only
53
+ exit 1
54
+ end
55
+ end
39
56
 
40
57
  files.each { |f|
41
58
  clouds = baseclouds.dup
@@ -54,12 +71,68 @@ files.each { |f|
54
71
  break
55
72
  }
56
73
  clouds.each { |cloud|
57
- commands["mu-deploy #{f} --cloud #{cloud} #{$opts[:full] ? "" : "--dryrun"}"] = { "file" => f, "cloud" => cloud }
74
+ cmd = "mu-deploy #{f} --cloud #{cloud} #{$opts[:full] ? "" : "--dryrun"}"
75
+ commands[cmd] = {
76
+ "file" => f,
77
+ "cloud" => cloud,
78
+ }
79
+ if $opts[:full]
80
+ $environment = "dev"
81
+ begin
82
+ conf_engine = MU::Config.new(f, cloud: cloud)
83
+ rescue StandardError => e
84
+ MU.log e.message+" parsing "+f+" with cloud "+cloud, MU::WARN, details: e.backtrace
85
+ failures << f+" ("+commands[cmd]["cloud"]+")"
86
+ next
87
+ end
88
+ parsed = MU::Config.stripConfig(conf_engine.config)
89
+ types = []
90
+ MU::Cloud.resource_types.values.each { |attrs|
91
+ if parsed.has_key?(attrs[:cfg_plural])
92
+ types << attrs[:cfg_plural]
93
+ end
94
+ }
95
+ commands[cmd]["parsed"] = parsed
96
+ commands[cmd]["types"] = types
97
+ end
58
98
  }
59
99
  }
60
100
 
61
101
  puts "Running #{commands.size.to_s.bold} #{$opts[:full] ? "full deploy" : "parse"} tests from #{files.size.to_s.bold} Baskets of Kittens across #{baseclouds.size.to_s.bold} clouds"
62
102
 
103
+ @output_semaphore = Mutex.new
104
+
105
+ def execCommand(cmd, results_stash)
106
+ @output_semaphore.synchronize {
107
+ puts cmd if $opts[:verbose]
108
+ }
109
+
110
+ ok = true
111
+ output = %x{#{cmd} 2>&1}
112
+ ok = false if $?.exitstatus != 0
113
+
114
+ results_stash["output"] += output
115
+
116
+ @output_semaphore.synchronize {
117
+ if ok
118
+ if $opts[:verbose]
119
+ puts "#{cmd} SUCCEEDED".green
120
+ else
121
+ print ".".green
122
+ end
123
+ else
124
+ if $opts[:verbose]
125
+ puts "#{cmd} FAILED:".light_red
126
+ puts output
127
+ else
128
+ print ".".light_red
129
+ end
130
+ end
131
+ }
132
+
133
+ ok
134
+ end
135
+
63
136
  threads = []
64
137
  results = {}
65
138
  commands.keys.each { |cmd|
@@ -72,21 +145,40 @@ commands.keys.each { |cmd|
72
145
  end
73
146
 
74
147
  threads << Thread.new(cmd) { |cmd_thr|
75
- results[cmd_thr] = {}
76
- puts %Q{#{cmd_thr} 2>&1}
77
- results[cmd_thr]["output"] = %x{#{cmd_thr} 2>&1}
78
- if $?.exitstatus != 0
79
- results[cmd_thr]["status"] = false
80
- print ".".light_red
81
- else
82
- results[cmd_thr]["status"] = true
83
- print ".".green
148
+ results[cmd_thr] = { "output" => "", "failed" => [] }
149
+ if !execCommand(cmd_thr, results[cmd_thr])
150
+ results[cmd_thr]["failed"] << "main"
84
151
  end
152
+
85
153
  if $opts[:full] and results[cmd_thr]["output"].match(/deploy - Deployment id: .*? \((.*?)\)/)
86
154
  deploy_id = Regexp.last_match[1]
87
- results[cmd_thr]["output"] += %x{mu-cleanup #{deploy_id} --skipsnapshots}
88
- if $?.exitstatus != 0
89
- results[cmd_thr]["status"] = false
155
+ adoptdir = Dir.mktmpdir(commands[cmd_thr]["file"].gsub(/[^a-z0-9]|yaml$/i, ""))
156
+ if commands[cmd_thr]["types"] and commands[cmd_thr]["types"].size > 0
157
+ adopt = "cd #{adoptdir} && mu-adopt --appname adoptone --grouping omnibus --clouds #{commands[cmd_thr]["cloud"]} --types #{commands[cmd_thr]["types"].join(" ")} 2>&1"
158
+ if !execCommand(adopt, results[cmd_thr])
159
+ results[cmd_thr]["failed"] << "adopt"
160
+ end
161
+ end
162
+
163
+ if File.exist?(dir+"/regrooms/"+commands[cmd_thr]["file"])
164
+ regroom = "mu-deploy regrooms/#{commands[cmd_thr]["file"]} --cloud #{commands[cmd_thr]["cloud"]} --update #{deploy_id} 2>&1"
165
+ if !execCommand(regroom, results[cmd_thr])
166
+ results[cmd_thr]["failed"] << "regroom"
167
+ end
168
+ if commands[cmd_thr]["types"] and commands[cmd_thr]["types"].size > 0
169
+ re_adopt = "cd #{adoptdir} && mu-adopt --appname adopttwo --grouping omnibus --clouds #{commands[cmd_thr]["cloud"]} --types #{commands[cmd_thr]["types"].join(" ")} 2>&1"
170
+ if !execCommand(re_adopt, results[cmd_thr])
171
+ results[cmd_thr]["failed"] << "second adopt"
172
+ end
173
+ end
174
+ # TODO big flex is to read back both adopted BoKs and .diff them, but without
175
+ # all resources having implemented adoption this isn't much of a test yet
176
+ end
177
+
178
+ FileUtils.remove_entry(adoptdir)
179
+ cleanup = %Q{mu-cleanup #{deploy_id} --skipsnapshots}
180
+ if !execCommand(cleanup, results[cmd_thr])
181
+ results[cmd_thr]["failed"] << "cleanup"
90
182
  end
91
183
  end
92
184
  }
@@ -96,21 +188,14 @@ threads.each { |t|
96
188
  }
97
189
  puts ""
98
190
 
99
- failures = []
100
191
  results.keys.sort { |a, b|
101
- if results[b]["status"] and !results[a]["status"]
102
- 1
103
- elsif !results[b]["status"] and results[a]["status"]
104
- -1
105
- else
106
- 0
107
- end
192
+ results[b]["failed"].size <=> results[a]["failed"].size
108
193
  }.each { |cmd|
109
- if !results[cmd]["status"]
194
+ if results[cmd]["failed"].size > 0
110
195
  puts cmd+" failed:".light_red
111
196
  puts results[cmd]["output"].yellow
112
197
  puts "^ #{cmd}".light_red
113
- failures << commands[cmd]["file"]+" ("+commands[cmd]["cloud"]+")"
198
+ failures << commands[cmd]["file"]+" in "+commands[cmd]["cloud"]+" ("+results[cmd]["failed"].join(", ")+")"
114
199
  else
115
200
  puts cmd+" passed".green
116
201
  end
@@ -17,8 +17,8 @@ end
17
17
 
18
18
  Gem::Specification.new do |s|
19
19
  s.name = 'cloud-mu'
20
- s.version = '3.1.3'
21
- s.date = '2020-01-31'
20
+ s.version = '3.1.4'
21
+ s.date = '2020-02-14'
22
22
  s.require_paths = ['modules']
23
23
  s.required_ruby_version = '>= 2.4'
24
24
  s.summary = "The eGTLabs Mu toolkit for unified cloud deployments"
@@ -35,31 +35,31 @@ EOF
35
35
  s.homepage =
36
36
  'https://github.com/cloudamatic/mu'
37
37
  s.license = 'BSD-3-Clause-Attribution'
38
- s.add_runtime_dependency 'erubis', "~> 2.7"
39
- s.add_runtime_dependency 'inifile', "~> 3.0"
40
- s.add_runtime_dependency 'bundler', "~> 1.17"
41
- s.add_runtime_dependency 'yard', "~> 0.9"
42
- s.add_runtime_dependency 'ruby-graphviz', "~> 1.2"
38
+ s.add_runtime_dependency 'addressable', '~> 2.5'
43
39
  s.add_runtime_dependency "aws-sdk-core", "< 3"
40
+ s.add_runtime_dependency 'azure_sdk', "~> 0.52"
41
+ s.add_runtime_dependency 'bundler', "~> 1.17"
44
42
  s.add_runtime_dependency 'chronic_duration', "~> 0.10"
45
- s.add_runtime_dependency 'simple-password-gen', "~> 0.1"
46
- s.add_runtime_dependency 'optimist', "~> 3.0"
47
- s.add_runtime_dependency 'json-schema', "~> 2.8"
48
- s.add_runtime_dependency 'colorize', "~> 0.8"
49
43
  s.add_runtime_dependency 'color', "~> 1.8"
50
- s.add_runtime_dependency 'netaddr', '~> 2.0'
51
- s.add_runtime_dependency 'nokogiri', "~> 1.10"
52
- s.add_runtime_dependency 'solve', '~> 4.0'
44
+ s.add_runtime_dependency 'colorize', "~> 0.8"
45
+ s.add_runtime_dependency 'erubis', "~> 2.7"
46
+ s.add_runtime_dependency 'google-api-client', "~> 0.36.4"
47
+ s.add_runtime_dependency 'googleauth', "~> 0.6"
48
+ s.add_runtime_dependency 'inifile', "~> 3.0"
49
+ s.add_runtime_dependency 'json-schema', "~> 2.8"
53
50
  s.add_runtime_dependency 'net-ldap', "~> 0.16"
54
51
  s.add_runtime_dependency 'net-ssh', "~> 4.2"
55
52
  s.add_runtime_dependency 'net-ssh-multi', '~> 1.2', '>= 1.2.1'
56
- s.add_runtime_dependency 'googleauth', "~> 0.6"
57
- s.add_runtime_dependency 'google-api-client', "~> 0.36.4"
53
+ s.add_runtime_dependency 'netaddr', '~> 2.0'
54
+ s.add_runtime_dependency 'nokogiri', "~> 1.10"
55
+ s.add_runtime_dependency 'optimist', "~> 3.0"
56
+ s.add_runtime_dependency 'rack', "~> 2.0"
57
+ s.add_runtime_dependency 'ruby-graphviz', "~> 1.2"
58
58
  s.add_runtime_dependency 'rubocop', '~> 0.58'
59
- s.add_runtime_dependency 'addressable', '~> 2.5'
59
+ s.add_runtime_dependency 'rubyzip', "~> 2.0"
60
+ s.add_runtime_dependency 'simple-password-gen', "~> 0.1"
60
61
  s.add_runtime_dependency 'slack-notifier', "~> 2.3"
61
- s.add_runtime_dependency 'azure_sdk', "~> 0.37"
62
- s.add_runtime_dependency 'rack', "~> 2.0"
62
+ s.add_runtime_dependency 'solve', '~> 4.0'
63
63
  s.add_runtime_dependency 'thin', "~> 1.7"
64
- s.add_runtime_dependency 'rubyzip', "~> 2.0"
64
+ s.add_runtime_dependency 'yard', "~> 0.9"
65
65
  end
@@ -49,7 +49,6 @@ module Mutools
49
49
  @authorizer = nil
50
50
  def set_gcp_cfg_params
51
51
  begin
52
- require "google/cloud"
53
52
  require "googleauth"
54
53
  @project ||= get_google_metadata("project/project-id")
55
54
  @authorizer ||= ::Google::Auth.get_application_default(['https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/compute.readonly'])
@@ -202,6 +201,8 @@ module Mutools
202
201
  Chef::Log.info("Fetching deploy secret: #{gsutil} cp gs://#{bucket}/#{filename} -")
203
202
  cmd = if File.exist?("/usr/bin/python2.7")
204
203
  %Q{CLOUDSDK_PYTHON=/usr/bin/python2.7 #{gsutil} cp gs://#{bucket}/#{filename} -}
204
+ elsif File.exist?("/opt/rh/python27/root/usr/bin/python")
205
+ %Q{CLOUDSDK_PYTHON=/opt/rh/python27/root/usr/bin/python #{gsutil} cp gs://#{bucket}/#{filename} -}
205
206
  else
206
207
  %Q{#{gsutil} cp gs://#{bucket}/#{filename} -}
207
208
  end
@@ -0,0 +1,35 @@
1
+ class Chef
2
+ class Provider
3
+ class Package
4
+ class Rubygems < Chef::Provider::Package
5
+
6
+ def install_via_gem_command(name, version)
7
+ src = []
8
+ if new_resource.source.is_a?(String) && new_resource.source =~ /\.gem$/i
9
+ name = new_resource.source
10
+ else
11
+ src << "--clear-sources" if new_resource.clear_sources
12
+ src += gem_sources.map { |s| "--source=#{s}" }
13
+ end
14
+ src_str = src.empty? ? "" : " #{src.join(" ")}"
15
+ cmd = if !version.nil? && !version.empty?
16
+ "#{gem_binary_path} install #{name} -q --no-rdoc --no-ri -v \"#{version}\"#{src_str}#{opts}"
17
+ else
18
+ "#{gem_binary_path} install \"#{name}\" -q --no-rdoc --no-ri #{src_str}#{opts}"
19
+ end
20
+
21
+ begin
22
+ shell_out_with_timeout!(cmd, env: nil)
23
+ rescue StandardError => e
24
+ if cmd.match(/--no-rdoc|--no-ri/)
25
+ cmd.gsub!(/--no-rdoc --no-ri/, "--no-document")
26
+ retry
27
+ end
28
+ raise e
29
+ end
30
+ end
31
+
32
+ end
33
+ end
34
+ end
35
+ end
@@ -16,10 +16,10 @@
16
16
  # See the License for the specific language governing permissions and
17
17
  # limitations under the License.
18
18
 
19
- ["google-api-client", "google-cloud", "googleauth"].each { |gem|
19
+ ["google-api-client", "googleauth"].each { |gem|
20
20
  chef_gem gem do
21
21
  compile_time true
22
22
  action :install
23
- only_if { !get_google_metadata("name").nil? }
23
+ only_if { !get_google_metadata("instance/name").nil? }
24
24
  end
25
25
  }
@@ -15,7 +15,7 @@ action :create do
15
15
  devicename = device
16
16
 
17
17
  if set_gcp_cfg_params
18
- devicename.gsub!(/.*?\//, "")
18
+ devicename= devicename.gsub(/.*?\//, "")
19
19
  device = "/dev/disk/by-id/google-"+devicename
20
20
  end
21
21
 
@@ -16,3 +16,4 @@
16
16
  create_image:
17
17
  image_then_destroy: true
18
18
  public: true
19
+ family: mu-centos-6
@@ -4,7 +4,6 @@
4
4
  - name: centos7
5
5
  cloud: Google
6
6
  image_id: "centos-cloud/centos-7"
7
- platform: centos6
8
7
  ssh_user: centos
9
8
  size: g1-small
10
9
  associate_public_ip: true
@@ -16,3 +15,4 @@
16
15
  create_image:
17
16
  image_then_destroy: true
18
17
  public: true
18
+ family: mu-centos-7
@@ -16,7 +16,7 @@ require 'pp'
16
16
  require 'base64'
17
17
  require 'etc'
18
18
 
19
- home = Etc.getpwuid(Process.uid).dir
19
+ Etc.getpwuid(Process.uid).dir
20
20
 
21
21
  if !ENV.include?('MU_INSTALLDIR')
22
22
  ENV['MU_INSTALLDIR'] = "/opt/mu"
@@ -52,7 +52,7 @@ end
52
52
 
53
53
  begin
54
54
  MU::MommaCat.syncMonitoringConfig(false)
55
- rescue Exception => e
55
+ rescue StandardError => e
56
56
  MU.log e.inspect, MU::ERR, details: e.backtrace
57
57
  # ...but don't die!
58
58
  end
@@ -64,14 +64,12 @@ Thread.new {
64
64
  MU::MommaCat.cleanTerminatedInstances
65
65
  MU::Master.cleanExpiredScratchpads if $ENABLE_SCRATCHPAD
66
66
  sleep 60
67
- rescue Exception => e
67
+ rescue StandardError => e
68
68
  MU.log "Error in cleanTerminatedInstances thread: #{e.inspect}", MU::ERR, details: e.backtrace
69
69
  retry
70
70
  end while true
71
71
  }
72
72
 
73
- required_vars = ["mu_id", "mu_deploy_secret", "mu_resource_name", "mu_resource_type", "mu_instance_id"]
74
-
75
73
  # Use a template to generate a pleasant-looking HTML page for simple messages
76
74
  # and errors.
77
75
  def genHTMLMessage(title: "", headline: "", msg: "", template: $MU_CFG['html_template'], extra_vars: {})
@@ -193,7 +191,6 @@ def releaseKitten(mu_id)
193
191
  end
194
192
 
195
193
  app = proc do |env|
196
- ok = false
197
194
  returnval = [
198
195
  200,
199
196
  {
@@ -318,7 +315,7 @@ app = proc do |env|
318
315
  elsif !filter or !path
319
316
  returnval = throw404 env['REQUEST_PATH']
320
317
  else
321
- MU::MommaCat.addInstanceToEtcHosts(path, filter)
318
+ MU::Master.addInstanceToEtcHosts(path, filter)
322
319
  returnval = [
323
320
  200,
324
321
  {
@@ -356,7 +353,6 @@ app = proc do |env|
356
353
 
357
354
  elsif !env["rack.input"].nil?
358
355
  req = Rack::Utils.parse_nested_query(env["rack.input"].read)
359
- ok = true
360
356
 
361
357
  if req["mu_user"].nil?
362
358
  req["mu_user"] = "mu"
@@ -373,7 +369,6 @@ app = proc do |env|
373
369
  kittenpile = getKittenPile(req)
374
370
  if kittenpile.nil? or kittenpile.original_config.nil? or kittenpile.original_config[req["mu_resource_type"]+"s"].nil?
375
371
  returnval = throw500 "Couldn't find config data for #{req["mu_resource_type"]} in deploy_id #{req["mu_id"]}"
376
- ok = false
377
372
  next
378
373
  end
379
374
  server_cfg = nil
@@ -385,7 +380,6 @@ app = proc do |env|
385
380
  }
386
381
  if server_cfg.nil?
387
382
  returnval = throw500 "Couldn't find config data for #{req["mu_resource_type"]} name: #{req["mu_resource_name"]} deploy_id: #{req["mu_id"]}"
388
- ok = false
389
383
  next
390
384
  end
391
385
 
@@ -426,7 +420,6 @@ MU.log "ADDVOLUME REQUEST", MU::WARN, details: params
426
420
  instance.addVolume(params["dev"], params["size"], delete_on_termination: params["delete_on_termination"])
427
421
  else
428
422
  returnval = throw500 "I don't know how to add a volume for #{instance}"
429
- ok = false
430
423
  end
431
424
  elsif !instance.nil?
432
425
  if !req["mu_bootstrap"].nil?
@@ -434,16 +427,13 @@ MU.log "ADDVOLUME REQUEST", MU::WARN, details: params
434
427
  returnval[2] = ["Grooming asynchronously, check Momma Cat logs on the master for details."]
435
428
  else
436
429
  returnval = throw500 "Didn't get 'mu_bootstrap' parameter from instance id '#{req["mu_instance_id"]}'"
437
- ok = false
438
430
  end
439
431
  else
440
432
  returnval = throw500 "No such instance id '#{req["mu_instance_id"]}' nor was this an SSL signing request"
441
- ok = false
442
433
  end
443
434
  end
444
- rescue Exception => e
435
+ rescue StandardError => e
445
436
  returnval = throw500 "Invalid request: #{e.inspect} (#{req})", e.backtrace
446
- ok = false
447
437
  ensure
448
438
  if !req.nil?
449
439
  releaseKitten(req['mu_id'])