cloud-mu 3.4.0 → 3.5.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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/ansible/roles/mu-nat/tasks/main.yml +3 -0
  3. data/bin/mu-aws-setup +41 -7
  4. data/bin/mu-azure-setup +34 -0
  5. data/bin/mu-configure +214 -119
  6. data/bin/mu-gcp-setup +37 -2
  7. data/bin/mu-node-manage +3 -0
  8. data/bin/mu-refresh-ssl +67 -0
  9. data/bin/mu-run-tests +14 -4
  10. data/bin/mu-self-update +30 -10
  11. data/bin/mu-upload-chef-artifacts +30 -26
  12. data/cloud-mu.gemspec +8 -6
  13. data/cookbooks/mu-master/attributes/default.rb +5 -1
  14. data/cookbooks/mu-master/metadata.rb +2 -2
  15. data/cookbooks/mu-master/recipes/default.rb +81 -26
  16. data/cookbooks/mu-master/recipes/init.rb +197 -62
  17. data/cookbooks/mu-master/recipes/update_nagios_only.rb +1 -1
  18. data/cookbooks/mu-master/recipes/vault.rb +78 -77
  19. data/cookbooks/mu-master/templates/default/mods/rewrite.conf.erb +1 -0
  20. data/cookbooks/mu-master/templates/default/nagios.conf.erb +103 -0
  21. data/cookbooks/mu-master/templates/default/web_app.conf.erb +14 -30
  22. data/cookbooks/mu-tools/attributes/default.rb +5 -0
  23. data/cookbooks/mu-tools/files/centos-6/CentOS-Base.repo +47 -0
  24. data/cookbooks/mu-tools/libraries/helper.rb +12 -2
  25. data/cookbooks/mu-tools/libraries/monkey.rb +1 -1
  26. data/cookbooks/mu-tools/recipes/apply_security.rb +6 -0
  27. data/cookbooks/mu-tools/recipes/aws_api.rb +6 -4
  28. data/cookbooks/mu-tools/recipes/base_repositories.rb +1 -1
  29. data/cookbooks/mu-tools/recipes/gcloud.rb +2 -9
  30. data/cookbooks/mu-tools/recipes/google_api.rb +5 -2
  31. data/cookbooks/mu-tools/resources/disk.rb +108 -58
  32. data/extras/Gemfile.lock.bootstrap +394 -0
  33. data/extras/bucketstubs/error.html +0 -0
  34. data/extras/bucketstubs/index.html +0 -0
  35. data/extras/clean-stock-amis +9 -9
  36. data/extras/git_rpm/build.sh +20 -0
  37. data/extras/git_rpm/mugit.spec +53 -0
  38. data/extras/image-generators/VMWare/centos8.yaml +15 -0
  39. data/extras/openssl_rpm/build.sh +19 -0
  40. data/extras/openssl_rpm/mussl.spec +46 -0
  41. data/extras/python_rpm/muthon.spec +14 -4
  42. data/extras/ruby_rpm/muby.spec +9 -5
  43. data/extras/sqlite_rpm/build.sh +19 -0
  44. data/extras/sqlite_rpm/muqlite.spec +47 -0
  45. data/install/installer +7 -5
  46. data/modules/mu.rb +12 -5
  47. data/modules/mu/cloud/machine_images.rb +1 -1
  48. data/modules/mu/cloud/providers.rb +6 -1
  49. data/modules/mu/cloud/resource_base.rb +1 -1
  50. data/modules/mu/cloud/ssh_sessions.rb +4 -0
  51. data/modules/mu/config.rb +28 -12
  52. data/modules/mu/config/database.rb +2 -2
  53. data/modules/mu/config/firewall_rule.rb +1 -1
  54. data/modules/mu/config/ref.rb +2 -2
  55. data/modules/mu/config/schema_helpers.rb +12 -3
  56. data/modules/mu/config/server.rb +10 -4
  57. data/modules/mu/config/server_pool.rb +2 -2
  58. data/modules/mu/config/vpc.rb +10 -10
  59. data/modules/mu/defaults/AWS.yaml +32 -32
  60. data/modules/mu/deploy.rb +23 -10
  61. data/modules/mu/groomers/chef.rb +2 -2
  62. data/modules/mu/master.rb +49 -3
  63. data/modules/mu/mommacat.rb +8 -5
  64. data/modules/mu/mommacat/naming.rb +2 -2
  65. data/modules/mu/mommacat/storage.rb +22 -27
  66. data/modules/mu/providers/aws.rb +142 -48
  67. data/modules/mu/providers/aws/alarm.rb +3 -3
  68. data/modules/mu/providers/aws/bucket.rb +19 -19
  69. data/modules/mu/providers/aws/cache_cluster.rb +22 -22
  70. data/modules/mu/providers/aws/cdn.rb +2 -2
  71. data/modules/mu/providers/aws/collection.rb +14 -14
  72. data/modules/mu/providers/aws/container_cluster.rb +27 -27
  73. data/modules/mu/providers/aws/database.rb +40 -39
  74. data/modules/mu/providers/aws/dnszone.rb +5 -5
  75. data/modules/mu/providers/aws/endpoint.rb +35 -35
  76. data/modules/mu/providers/aws/firewall_rule.rb +26 -23
  77. data/modules/mu/providers/aws/function.rb +28 -28
  78. data/modules/mu/providers/aws/group.rb +7 -7
  79. data/modules/mu/providers/aws/habitat.rb +2 -2
  80. data/modules/mu/providers/aws/job.rb +6 -6
  81. data/modules/mu/providers/aws/loadbalancer.rb +34 -34
  82. data/modules/mu/providers/aws/log.rb +14 -14
  83. data/modules/mu/providers/aws/msg_queue.rb +10 -10
  84. data/modules/mu/providers/aws/nosqldb.rb +8 -8
  85. data/modules/mu/providers/aws/notifier.rb +7 -7
  86. data/modules/mu/providers/aws/role.rb +17 -15
  87. data/modules/mu/providers/aws/search_domain.rb +10 -10
  88. data/modules/mu/providers/aws/server.rb +176 -95
  89. data/modules/mu/providers/aws/server_pool.rb +65 -105
  90. data/modules/mu/providers/aws/storage_pool.rb +17 -9
  91. data/modules/mu/providers/aws/user.rb +1 -1
  92. data/modules/mu/providers/aws/vpc.rb +103 -51
  93. data/modules/mu/providers/aws/vpc_subnet.rb +43 -39
  94. data/modules/mu/providers/azure.rb +78 -12
  95. data/modules/mu/providers/azure/server.rb +18 -3
  96. data/modules/mu/providers/cloudformation/server.rb +1 -1
  97. data/modules/mu/providers/google.rb +19 -4
  98. data/modules/mu/providers/google/folder.rb +6 -2
  99. data/modules/mu/providers/google/function.rb +65 -30
  100. data/modules/mu/providers/google/role.rb +1 -1
  101. data/modules/mu/providers/google/vpc.rb +27 -2
  102. data/modules/tests/aws-servers-with-handrolled-iam.yaml +37 -0
  103. data/modules/tests/k8s.yaml +1 -1
  104. metadata +24 -8
data/bin/mu-gcp-setup CHANGED
@@ -44,6 +44,7 @@ Usage:
44
44
  opt :logs, "Ensure the presence of an Cloud Storage bucket prefixed with 'Mu_Logs' for use with CloudTrails, syslog, etc.", :require => false, :default => false, :type => :boolean
45
45
  # opt :dns, "Ensure the presence of a private DNS Zone called for internal amongst Mu resources.", :require => false, :default => false, :type => :boolean
46
46
  opt :uploadlogs, "Push today's log files to the Cloud Storage bucket created by the -l option.", :require => false, :default => false, :type => :boolean
47
+ opt :optdisk, "Create a block volume for /opt and slide our installation onto it", :require => false, :default => false, :type => :boolean
47
48
  end
48
49
 
49
50
  if MU::Cloud::Google.hosted? and !$MU_CFG['google']
@@ -135,6 +136,38 @@ if $opts[:sg]
135
136
 
136
137
  end
137
138
 
139
+ if $opts[:optdisk] and !File.open("/etc/mtab").read.match(/ \/opt[\s\/]/)
140
+ myname = MU::Cloud::Google.getGoogleMetaData("instance/name")
141
+ wd = Dir.getwd
142
+ Dir.chdir("/")
143
+ if File.exists?("/opt/opscode/bin/chef-server-ctl")
144
+ system("/opt/opscode/bin/chef-server-ctl stop")
145
+ end
146
+ if !File.exists?("/sbin/mkfs.xfs")
147
+ system("/usr/bin/yum -y install xfsprogs")
148
+ end
149
+ MU::Master.disk(myname+"-mu-opt", "/opt_tmp", 30)
150
+ uuid = MU::Master.diskUUID(myname+"-mu-opt")
151
+ if !uuid or uuid.empty?
152
+ MU.log "Failed to retrieve UUID of block device #{myname}-mu-opt", MU::ERR, details: MU::Cloud::AWS.realDevicePath(myname+"-mu-opt")
153
+ exit 1
154
+ end
155
+ MU.log "Moving contents of /opt to /opt_tmp", MU::NOTICE
156
+ system("/bin/mv /opt/* /opt_tmp/")
157
+ exit 1 if $?.exitstatus != 0
158
+ MU.log "Remounting /opt_tmp /opt", MU::NOTICE
159
+ system("/bin/umount /opt_tmp")
160
+ exit 1 if $?.exitstatus != 0
161
+ system("echo '#{uuid} /opt xfs defaults 0 0' >> /etc/fstab")
162
+ system("/bin/mount -a")
163
+ exit 1 if $?.exitstatus != 0
164
+ if File.exists?("/opt/opscode/bin/chef-server-ctl")
165
+ system("/opt/opscode/bin/chef-server-ctl start")
166
+ end
167
+ Dir.chdir(wd)
168
+ end
169
+
170
+
138
171
  $bucketname = MU::Cloud::Google.adminBucketName
139
172
 
140
173
  if $opts[:logs]
@@ -204,8 +237,10 @@ if $opts[:logs]
204
237
  raise MuError, e.inspect
205
238
  end
206
239
  end
207
- # XXX stop doing this per-bucket, chowderhead
208
- MU::Master.disk("/dev/xvdl", "/Mu_Logs", 50, "log_vol_ebs_key", "ram7")
240
+
241
+ myname = MU::Cloud::Google.getGoogleMetaData("instance/name")
242
+ MU::Master.disk("/dev/"+myname+"-mu-logs", "/Mu_Logs", 50, "log_vol_ebs_key", "ram7")
243
+
209
244
  }
210
245
 
211
246
  end
data/bin/mu-node-manage CHANGED
@@ -188,6 +188,9 @@ def reGroom(deploys = MU::MommaCat.listDeploys, nodes = [], vaults_only: false,
188
188
  nodeclasses.each_pair { |nodeclass, servers|
189
189
  servers.each_pair { |mu_name, server|
190
190
  next if nodes.size > 0 and !nodes.include?(mu_name)
191
+ server.myFirewallRules.each { |fw|
192
+ fw.groom
193
+ }
191
194
  count = count + 1
192
195
  child = Process.fork {
193
196
  begin
@@ -0,0 +1,67 @@
1
+ #!/usr/local/ruby-current/bin/ruby
2
+ # Copyright:: Copyright (c) 2014 eGlobalTech, Inc., all rights reserved
3
+ #
4
+ # Licensed under the BSD-3 license (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License in the root of the project or at
7
+ #
8
+ # http://egt-labs.com/mu/LICENSE.html
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ if ARGV.size > 0
17
+ puts "#{$0}: Freshen the Mu Master's API and configuration documentation"
18
+ exit 1
19
+ end
20
+
21
+ require 'rubygems'
22
+ require 'bundler/setup'
23
+ require 'erb'
24
+ require 'tempfile'
25
+ require 'fileutils'
26
+ require File.realpath(File.expand_path(File.dirname(__FILE__)+"/mu-load-config.rb"))
27
+ require 'mu'
28
+
29
+ # XXX need special handling if Mu_CA.pem is expired
30
+
31
+ ca = %w{Mu_CA}
32
+ services = %w{rsyslog mommacat ldap consul vault}
33
+ chef_server = %w{Mu_CA mommacat}
34
+
35
+ certfiles = Dir.glob(MU.dataDir+"/ssl/*.pem")
36
+ certfiles.concat(Dir.glob(MU.dataDir+"/ssl/*.crt"))
37
+
38
+ now= Time.now
39
+
40
+ need_chef_ssl_run = false
41
+ need_chef_reconfigure = false
42
+
43
+ certfiles.each { |filename|
44
+ shortname = filename.gsub(/.*?\/|\.(pem|crt)$/, '')
45
+ cert = OpenSSL::X509::Certificate.new(File.read(filename))
46
+ if cert.not_after < now
47
+ need_chef_ssl_run = true if services.include?(shortname)
48
+ need_chef_reconfigure = true if chef_server.include?(shortname)
49
+ newpath = filename+"."+now.strftime("%Y%m%d%H").to_s
50
+ MU.log filename+" is expired, archiving to #{newpath} and regenerating", MU::WARN
51
+ File.rename(filename, newpath)
52
+ end
53
+ }
54
+
55
+
56
+ if need_chef_ssl_run
57
+ # XXX need to temporarily disable ssl checks in knife.rb and client.rb for this, maybe?
58
+ if !system("/opt/chef/bin/chef-client -o 'recipe[mu-master::ssl-certs]'")
59
+ MU.log "Got bad exit code trying to run recipe[mu-master::ssl-certs]'", MU::ERR
60
+ exit 1
61
+ end
62
+ end
63
+
64
+ if need_chef_reconfigure
65
+ system("CHEF_LICENSE=\"accept\" /opt/opscode/bin/chef-server-ctl reconfigure")
66
+ system("CHEF_LICENSE=\"accept\" /opt/opscode/bin/chef-server-ctl restart")
67
+ end
data/bin/mu-run-tests CHANGED
@@ -37,13 +37,23 @@ Usage:
37
37
  opt :max_retries, "Number of times to retry failed tests in --dryrun mode.", :require => false, :default => 2, :type => :integer
38
38
  opt :full, "Actually run deploys, instead of --dryrun", :require => false, :default => false
39
39
  opt :verbose, "Show more information while running", :require => false, :default => false
40
+ opt :clouds, "Select a subset of support cloud providers on which to test", :required => false, :type => :strings, :default => MU::Cloud.availableClouds.reject { |c| c == "CloudFormation" }
40
41
  end
41
42
 
42
43
  only = ARGV
43
44
 
44
45
  files = Dir.glob("*.yaml", base: dir)
45
46
  files.concat(Dir.glob("*.yml", base: dir))
46
- baseclouds = MU::Cloud.availableClouds.reject { |c| c == "CloudFormation" }
47
+ valid_clouds = MU::Cloud.availableClouds.reject { |c| c == "CloudFormation" }
48
+ baseclouds = []
49
+ $opts[:clouds].each { |cloud|
50
+ if !valid_clouds.include?(cloud)
51
+ MU.log "'#{cloud}' isn't one of my available cloud providers", MU::ERR, details: valid_clouds
52
+ else
53
+ baseclouds << cloud
54
+ end
55
+ }
56
+
47
57
 
48
58
  commands = {}
49
59
  failures = []
@@ -96,7 +106,7 @@ files.each { |f|
96
106
  conf_engine = MU::Config.new(f, cloud: cloud)
97
107
  rescue StandardError => e
98
108
  MU.log e.message+" parsing "+f+" with cloud "+cloud, MU::WARN, details: e.backtrace
99
- failures << f+" ("+commands[cmd]["cloud"]+")"
109
+ failures << f+" ["+commands[cmd]["cloud"]+"] - "+e.class.name+"\n\t"+e.message.gsub(/\n/, "\t\n")
100
110
  next
101
111
  end
102
112
  parsed = MU::Config.stripConfig(conf_engine.config)
@@ -175,7 +185,7 @@ commands.keys.each { |cmd|
175
185
  results[cmd_thr]["failed"] << "main"
176
186
  end
177
187
 
178
- if $opts[:full] and results[cmd_thr]["output"].match(/deploy - Deployment id: .*? \((.*?)\)/)
188
+ if $opts[:full] and results[cmd_thr]["output"].to_s.match(/deploy - Deployment id: .*? \((.*?)\)/)
179
189
  deploy_id = Regexp.last_match[1]
180
190
  adoptdir = Dir.mktmpdir(commands[cmd_thr]["file"].gsub(/[^a-z0-9]|yaml$/i, ""))
181
191
  if commands[cmd_thr]["types"] and commands[cmd_thr]["types"].size > 0
@@ -227,6 +237,6 @@ results.keys.sort { |a, b|
227
237
  }
228
238
 
229
239
  if failures.size > 0
230
- puts "\n#{failures.size.to_s.bold} failure#{failures.size == 1 ? "" : "s"} in "+failures.uniq.map { |f| f.light_red }.join(", ")
240
+ puts "\n#{failures.size.to_s.bold} failure#{failures.size == 1 ? "" : "s"} in:\n"+failures.uniq.map { |f| f.light_red }.join("\n")
231
241
  exit 1
232
242
  end
data/bin/mu-self-update CHANGED
@@ -156,6 +156,15 @@ fi
156
156
  git config branch.${branch}.remote origin
157
157
  git config branch.${branch}.merge refs/heads/$branch
158
158
 
159
+ CHEF_CLIENT_VERSION=`grep '^CHEF_CLIENT_VERSION=' /opt/mu/lib/install/installer |cut -d\" -f2`
160
+
161
+ # Make sure any new bootstrappy stuff has been applied
162
+ chef-apply /opt/mu/lib/cookbooks/mu-master/recipes/init.rb
163
+
164
+ # Make sure bundler will use a recent git binary
165
+ if [ -d /usr/local/git-current ];then
166
+ export PATH="/usr/local/git-current/bin:${PATH}"
167
+ fi
159
168
 
160
169
  if [ "`diff -r $MU_LIBDIR/cookbooks $MU_DATADIR/tmp/cookbook_changes.$$`" != "" ];then
161
170
  rebuild_chef_artifacts=1
@@ -177,20 +186,31 @@ set -e
177
186
  echo "${GREEN}Cleaning gems in ${BOLD}/usr/local/ruby-current${NORM}${GREEN}${NORM}"
178
187
  cd $MU_LIBDIR/modules
179
188
  /usr/local/ruby-current/bin/bundle update
189
+ set +e
180
190
  /usr/local/ruby-current/bin/bundle clean --force
191
+ set -e
181
192
  cd
182
193
 
183
- chef_major="`/opt/chef/bin/chef-apply --version | awk '{print $2}' | cut -d\. -f1`"
184
- if [ "$chef_major" == "12" ];then
185
- DIST_VERSION=`rpm -qa \*-release\* | grep -Ei "redhat|^centos" | cut -d"-" -f3`
186
- # IS_AMAZON=0
187
- if [ "$DIST_VERSION" == "" ];then # funny package name in Amazon Linux
188
- DIST_VERSION=6
189
- # IS_AMAZON=1
190
- elif [ "$DIST_VERSION" == "server" ];then # funny package name in RHEL6
191
- DIST_VERSION="6"
194
+ DIST_VERSION=`rpm -qa \*-release\* | grep -Ei "redhat|^centos" | cut -d"-" -f3`
195
+ # IS_AMAZON=0
196
+ if [ "$DIST_VERSION" == "" ];then # funny package name in Amazon Linux
197
+ DIST_VERSION=6
198
+ # IS_AMAZON=1
199
+ elif [ "$DIST_VERSION" == "server" ];then # funny package name in RHEL6
200
+ DIST_VERSION="6"
201
+ else
202
+ DIST_VERSION="7"
203
+ fi
204
+
205
+ grep ^chef_license /etc/chef/client.rb || echo "chef_license 'accept'" >> /etc/chef/client.rb
206
+
207
+ if ! rpm -q chef;then
208
+ yes | rpm -ivh https://packages.chef.io/files/stable/chef/${CHEF_CLIENT_VERSION}/el/${DIST_VERSION}/chef-${CHEF_CLIENT_VERSION}-1.el${DIST_VERSION}.x86_64.rpm
209
+ else
210
+ cur_chef_ver="`rpm -q chef | cut -d\- -f2`"
211
+ if [ "${cur_chef_ver}" != "${CHEF_CLIENT_VERSION}" ];then
212
+ yes | rpm -Uvh https://packages.chef.io/files/stable/chef/${CHEF_CLIENT_VERSION}/el/${DIST_VERSION}/chef-${CHEF_CLIENT_VERSION}-1.el${DIST_VERSION}.x86_64.rpm
192
213
  fi
193
- rpm -Uvh https://packages.chef.io/files/stable/chef/14.13.11/el/${DIST_VERSION}/chef-14.13.11-1.el${DIST_VERSION}.x86_64.rpm
194
214
  fi
195
215
 
196
216
  /opt/chef/bin/chef-apply $MU_LIBDIR/cookbooks/mu-master/recipes/init.rb
@@ -30,6 +30,10 @@ if [ -z $MU_CHEF_CACHE ];then
30
30
  fi
31
31
  manifest="$MU_CHEF_CACHE/mu_manifest"
32
32
  berksdir="$HOMEDIR/.berkshelf"
33
+ knife_cfg=""
34
+ if [ -f "$HOMEDIR/.chef/knife.rb" ];then
35
+ knife_cfg="-c $HOMEDIR/.chef/knife.rb"
36
+ fi
33
37
 
34
38
  rm -rf "${berksdir}/" # Just... don't trust it to check cache correctly
35
39
 
@@ -190,7 +194,7 @@ add_berkshelf_cookbooks()
190
194
  cd $repodir
191
195
  set +e
192
196
  for name in $berkshelf_cookbooks;do
193
- $knife cookbook delete $name --yes -a
197
+ $knife cookbook $knife_cfg delete $name --yes -a
194
198
  done
195
199
  set -e
196
200
  fi
@@ -361,24 +365,24 @@ fi
361
365
  if [ "$nopurge" == "" -a "$all" == "1" ];then
362
366
  if [ "$use_on_disk" == "1" -o "$all" == "1" ];then
363
367
  if [ "$cookbooks_only" == "1" ];then
364
- $knife cookbook bulk delete --purge '.+' --yes 2>/dev/null
368
+ $knife cookbook $knife_cfg bulk delete --purge '.+' --yes 2>/dev/null
365
369
  /bin/rm -rf $MU_CHEF_CACHE/cookbooks $MU_CHEF_CACHE/site_cookbooks
366
370
  elif [ "$bags_only" == "1" ];then
367
371
  # Nowadays we have data bags that are persistent and node-related. Leave
368
372
  # them be, and only delete our automatic ones.
369
373
  for bag in nagios_users nagios_servers demo;do
370
- $knife data bag delete $bag --yes 2>/dev/null
374
+ $knife data bag $knife_cfg delete $bag --yes 2>/dev/null
371
375
  done
372
376
  else
373
- $knife cookbook bulk delete --purge '.+' --yes 2>/dev/null
377
+ $knife cookbook $knife_cfg bulk delete --purge '.+' --yes 2>/dev/null
374
378
  /bin/rm -rf $MU_CHEF_CACHE/cookbooks $MU_CHEF_CACHE/site_cookbooks
375
379
  /bin/rm -rf $MU_CHEF_CACHE/roles $MU_CHEF_CACHE/environments $MU_CHEF_CACHE/data_bags
376
- $knife role bulk delete '.*' --yes 2>/dev/null
377
- for env in `$knife environment list | grep -v '_default$'`;do
378
- $knife environment delete $env --yes 2>/dev/null
380
+ $knife role $knife_cfg bulk delete '.*' --yes 2>/dev/null
381
+ for env in `$knife environment $knife_cfg list | grep -v '_default$'`;do
382
+ $knife environment $knife_cfg delete $env --yes 2>/dev/null
379
383
  done
380
384
  for bag in nagios_users nagios_servers demo;do
381
- $knife data bag delete $bag --yes 2>/dev/null
385
+ $knife data bag $knife_cfg delete $bag --yes 2>/dev/null
382
386
  done
383
387
  fi
384
388
  fi
@@ -411,16 +415,16 @@ for repo in $REPOS;do
411
415
  set +e
412
416
  if [ "$type" == "cookbooks" -o "$type" == "site_cookbooks" ];then
413
417
  /bin/rm -rf $MU_CHEF_CACHE/$type/$name
414
- $knife cookbook delete $name --yes --all
418
+ $knife cookbook $knife_cfg delete $name --yes --all
415
419
  elif [ "$type" == "roles" -a "$cookbooks_only" == "" ];then
416
420
  /bin/rm -rf $MU_CHEF_CACHE/$type/$name.json
417
- $knife role delete $name --yes
421
+ $knife role $knife_cfg delete $name --yes
418
422
  elif [ "$type" == "environments" -a "$cookbooks_only" == "" ];then
419
423
  /bin/rm -rf $MU_CHEF_CACHE/$type/$name.json
420
- $knife environment delete $name --yes
424
+ $knife environment $knife_cfg delete $name --yes
421
425
  elif [ "$type" == "data_bags" -a "$cookbooks_only" == "" ];then
422
426
  /bin/rm -rf $MU_CHEF_CACHE/$type/$name
423
- $knife data bag delete $name --yes
427
+ $knife data bag $knife_cfg delete $name --yes
424
428
  fi
425
429
  set -e
426
430
  done
@@ -621,9 +625,9 @@ if [ -d "$MU_DATADIR/users" -a "$USER" == "root" ];then
621
625
  if [ -f "$bagdir/$admin.json" ];then
622
626
  if [ "$bagcreated" == "0" ];then
623
627
  bagcreated=1
624
- $knife data bag create nagios_users
628
+ $knife data bag $knife_cfg create nagios_users
625
629
  fi
626
- $knife data bag from file nagios_users $bagdir/$admin.json
630
+ $knife data bag $knife_cfg from file nagios_users $bagdir/$admin.json
627
631
  fi
628
632
  if [ ! -f "$bagdir/$admin.json" ];then
629
633
  id="`echo $admin | sed -e 's/@/_/'`"
@@ -657,21 +661,21 @@ if [ "$all" != "1" ];then
657
661
  if [ "$match" == "" -o "$match" == "$itemname" ];then
658
662
  if [ "$bagcreated" == "0" ];then
659
663
  bagcreated=1
660
- $knife data bag create $bag
664
+ $knife data bag $knife_cfg create $bag
661
665
  fi
662
- $knife data bag from file $bag $file
666
+ $knife data bag $knife_cfg from file $bag $file
663
667
  fi
664
668
  done
665
669
  done
666
670
  else
667
671
  for role in $upload_roles;do
668
672
  if [ "$match" == "" -o "$match" == "$role" ];then
669
- $knife role from file $MU_CHEF_CACHE/roles/$role.json
673
+ $knife role $knife_cfg from file $MU_CHEF_CACHE/roles/$role.json
670
674
  fi
671
675
  done
672
676
  for env in $upload_environments;do
673
677
  if [ "$match" == "" -o "$match" == "$env" ];then
674
- $knife environment from file $MU_CHEF_CACHE/environments/$env.json
678
+ $knife environment $knife_cfg from file $MU_CHEF_CACHE/environments/$env.json
675
679
  fi
676
680
  done
677
681
  set +e
@@ -682,9 +686,9 @@ if [ "$all" != "1" ];then
682
686
  if [ "$match" == "" -o "$match" == "$itemname" ];then
683
687
  if [ "$bagcreated" == "0" ];then
684
688
  bagcreated=1
685
- $knife data bag create $bag
689
+ $knife data bag $knife_cfg create $bag
686
690
  fi
687
- $knife data bag from file $bag $file
691
+ $knife data bag $knife_cfg from file $bag $file
688
692
  fi
689
693
  done
690
694
  done
@@ -713,9 +717,9 @@ else
713
717
  if [ "$match" == "" -o "$match" == "$itemname" ];then
714
718
  if [ "$bagcreated" == "0" ];then
715
719
  bagcreated=1
716
- $knife data bag create $folder
720
+ $knife data bag $knife_cfg create $folder
717
721
  fi
718
- $knife data bag from file $folder $file
722
+ $knife data bag $knife_cfg from file $folder $file
719
723
  fi
720
724
  done
721
725
  done
@@ -729,7 +733,7 @@ else
729
733
  for file in $_files;do
730
734
  role="`echo $file | sed -r 's/.*\/([^\\]+).json$/\1/'`"
731
735
  if [ "$match" == "" -o "$match" == "$role" ];then
732
- $knife role from file $file
736
+ $knife role $knife_cfg from file $file
733
737
  fi
734
738
  done
735
739
 
@@ -737,7 +741,7 @@ else
737
741
  for file in $_files;do
738
742
  env="`echo $file | sed -r 's/.*\/([^\\]+).json$/\1/'`"
739
743
  if [ "$match" == "" -o "$match" == "$env" ];then
740
- $knife environment from file $file
744
+ $knife environment $knife_cfg from file $file
741
745
  fi
742
746
  done
743
747
 
@@ -751,9 +755,9 @@ else
751
755
  if [ "$match" == "" -o "$match" == "$itemname" ];then
752
756
  if [ "$bagcreated" == "0" ];then
753
757
  bagcreated=1
754
- $knife data bag create $folder
758
+ $knife data bag $knife_cfg create $folder
755
759
  fi
756
- $knife data bag from file $folder $file
760
+ $knife data bag $knife_cfg from file $folder $file
757
761
  fi
758
762
  done
759
763
  set -e
data/cloud-mu.gemspec CHANGED
@@ -17,8 +17,8 @@ end
17
17
 
18
18
  Gem::Specification.new do |s|
19
19
  s.name = 'cloud-mu'
20
- s.version = '3.4.0'
21
- s.date = '2020-10-22'
20
+ s.version = '3.5.0'
21
+ s.date = '2021-01-18'
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"
@@ -31,19 +31,21 @@ EOF
31
31
  s.authors = ["John Stange", "Robert Patt-Corner", "Ryan Bolyard", "Zach Rowe"]
32
32
  s.email = 'eGTLabs@eglobaltech.com'
33
33
  s.files = build_file_list(whereami)
34
- s.executables = Dir.entries(whereami+"/bin").reject { |f| File.directory?(f) }
34
+ if Dir.exists?(whereami+"/bin")
35
+ s.executables = Dir.entries(whereami+"/bin").reject { |f| File.directory?(f) }
36
+ end
35
37
  s.homepage =
36
38
  'https://github.com/cloudamatic/mu'
37
39
  s.license = 'BSD-3-Clause-Attribution'
38
40
  s.add_runtime_dependency 'addressable', '~> 2.5'
39
41
  s.add_runtime_dependency "aws-sdk", "~> 3.0"
40
- s.add_runtime_dependency 'azure_sdk', "~> 0.52"
41
- s.add_runtime_dependency 'bundler', "~> 1.17"
42
+ s.add_runtime_dependency 'azure_sdk', '~> 0.65'
43
+ s.add_runtime_dependency 'bundler', "~> 2.1.4"
42
44
  s.add_runtime_dependency 'chronic_duration', "~> 0.10"
43
45
  s.add_runtime_dependency 'color', "~> 1.8"
44
46
  s.add_runtime_dependency 'colorize', "~> 0.8"
45
47
  s.add_runtime_dependency 'erubis', "~> 2.7"
46
- s.add_runtime_dependency 'google-api-client', "~> 0.36.4"
48
+ s.add_runtime_dependency 'google-api-client', "~> 0.50.0"
47
49
  s.add_runtime_dependency 'googleauth', "~> 0.6"
48
50
  s.add_runtime_dependency 'inifile', "~> 3.0"
49
51
  s.add_runtime_dependency 'json-schema', "~> 2.8"
@@ -22,6 +22,9 @@ default['apache']['contact'] = $MU_CFG['mu_admin_email']
22
22
  default['apache']['traceenable'] = 'Off'
23
23
 
24
24
  default["apache"]["listen"] = ["*:80", "*:443", "*:8443"]
25
+ default['apache']['user'] = "apache"
26
+ default['apache']['group'] = "apache"
27
+
25
28
 
26
29
  override["nagios"]["http_port"] = 8443
27
30
  default['nagios']['enable_ssl'] = true
@@ -47,6 +50,7 @@ default["nagios"]["log_dir"] = "/var/log/httpd"
47
50
  default['nagios']['cgi-bin'] = "/usr/lib/cgi-bin/"
48
51
  default['nagios']['cgi-path'] = "/nagios/cgi-bin/"
49
52
  default['nagios']['server_role'] = "mu-master"
53
+ default['nagios']['group'] = "nagios"
50
54
  default['nagios']['server']['install_method'] = 'source'
51
55
  default['nagios']['multi_environment_monitoring'] = true
52
56
  default['nagios']['users_databag'] = "nagios_users"
@@ -94,7 +98,7 @@ case node['platform']
94
98
  ssh_user = "ec2-user"
95
99
  end
96
100
 
97
- default['application_attributes']['sshd_allow_groups'] = "#{ssh_user} mu-users"
101
+ default['application_attributes']['sshd_allow_groups'] = "#{ssh_user} mu-users adm google-sudoers"
98
102
  default['application_attributes']['sshd_allow_password_auth'] = true
99
103
  default['update_nagios_only'] = false
100
104
  default['apache']['listen'] = [80, 443, 8443]