cloud-mu 3.5.0 → 3.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/Berksfile +5 -2
  3. data/Berksfile.lock +135 -0
  4. data/ansible/roles/mu-base/README.md +33 -0
  5. data/ansible/roles/mu-base/defaults/main.yml +2 -0
  6. data/ansible/roles/mu-base/files/check_apm.cfg +1 -0
  7. data/ansible/roles/mu-base/files/check_apm.sh +18 -0
  8. data/ansible/roles/mu-base/files/check_disk.cfg +1 -0
  9. data/ansible/roles/mu-base/files/check_elastic_shards.cfg +1 -0
  10. data/ansible/roles/mu-base/files/check_elastic_shards.sh +12 -0
  11. data/ansible/roles/mu-base/files/check_logstash.cfg +1 -0
  12. data/ansible/roles/mu-base/files/check_logstash.sh +14 -0
  13. data/ansible/roles/mu-base/files/check_mem.cfg +1 -0
  14. data/ansible/roles/mu-base/files/check_updates.cfg +1 -0
  15. data/ansible/roles/mu-base/files/logrotate.conf +35 -0
  16. data/ansible/roles/mu-base/files/nrpe-apm-sudo +1 -0
  17. data/ansible/roles/mu-base/files/nrpe-elasticshards-sudo +2 -0
  18. data/ansible/roles/mu-base/handlers/main.yml +5 -0
  19. data/ansible/roles/mu-base/meta/main.yml +53 -0
  20. data/ansible/roles/mu-base/tasks/main.yml +113 -0
  21. data/ansible/roles/mu-base/templates/nrpe.cfg.j2 +231 -0
  22. data/ansible/roles/mu-base/tests/inventory +2 -0
  23. data/ansible/roles/mu-base/tests/test.yml +5 -0
  24. data/ansible/roles/mu-base/vars/main.yml +1 -0
  25. data/ansible/roles/mu-compliance/README.md +33 -0
  26. data/ansible/roles/mu-compliance/defaults/main.yml +2 -0
  27. data/ansible/roles/mu-compliance/files/U_MS_Windows_Server_2016_V2R1_STIG_SCAP_1-2_Benchmark.xml +15674 -0
  28. data/ansible/roles/mu-compliance/files/U_MS_Windows_Server_2019_V2R1_STIG_SCAP_1-2_Benchmark.xml +17553 -0
  29. data/ansible/roles/mu-compliance/handlers/main.yml +2 -0
  30. data/ansible/roles/mu-compliance/meta/main.yml +53 -0
  31. data/ansible/roles/mu-compliance/tasks/main.yml +45 -0
  32. data/ansible/roles/mu-compliance/tests/inventory +2 -0
  33. data/ansible/roles/mu-compliance/tests/test.yml +5 -0
  34. data/ansible/roles/mu-compliance/vars/main.yml +4 -0
  35. data/ansible/roles/mu-elastic/README.md +51 -0
  36. data/ansible/roles/mu-elastic/defaults/main.yml +2 -0
  37. data/ansible/roles/mu-elastic/files/jvm.options +93 -0
  38. data/ansible/roles/mu-elastic/handlers/main.yml +10 -0
  39. data/ansible/roles/mu-elastic/meta/main.yml +52 -0
  40. data/ansible/roles/mu-elastic/tasks/main.yml +186 -0
  41. data/ansible/roles/mu-elastic/templates/elasticsearch.yml.j2 +110 -0
  42. data/ansible/roles/mu-elastic/templates/kibana.yml.j2 +131 -0
  43. data/ansible/roles/mu-elastic/templates/password_set.expect.j2 +19 -0
  44. data/ansible/roles/mu-elastic/tests/inventory +2 -0
  45. data/ansible/roles/mu-elastic/tests/test.yml +5 -0
  46. data/ansible/roles/mu-elastic/vars/main.yml +2 -0
  47. data/ansible/roles/mu-logstash/README.md +51 -0
  48. data/ansible/roles/mu-logstash/defaults/main.yml +2 -0
  49. data/ansible/roles/mu-logstash/files/02-beats-input.conf +5 -0
  50. data/ansible/roles/mu-logstash/files/10-rails-filter.conf +16 -0
  51. data/ansible/roles/mu-logstash/files/jvm.options +84 -0
  52. data/ansible/roles/mu-logstash/files/logstash.yml +304 -0
  53. data/ansible/roles/mu-logstash/handlers/main.yml +20 -0
  54. data/ansible/roles/mu-logstash/meta/main.yml +52 -0
  55. data/ansible/roles/mu-logstash/tasks/main.yml +254 -0
  56. data/ansible/roles/mu-logstash/templates/20-cloudtrail.conf.j2 +28 -0
  57. data/ansible/roles/mu-logstash/templates/30-elasticsearch-output.conf.j2 +19 -0
  58. data/ansible/roles/mu-logstash/templates/apm-server.yml.j2 +33 -0
  59. data/ansible/roles/mu-logstash/templates/heartbeat.yml.j2 +29 -0
  60. data/ansible/roles/mu-logstash/templates/nginx/apm.conf.j2 +25 -0
  61. data/ansible/roles/mu-logstash/templates/nginx/default.conf.j2 +56 -0
  62. data/ansible/roles/mu-logstash/templates/nginx/elastic.conf.j2 +27 -0
  63. data/ansible/roles/mu-logstash/tests/inventory +2 -0
  64. data/ansible/roles/mu-logstash/tests/test.yml +5 -0
  65. data/ansible/roles/mu-logstash/vars/main.yml +2 -0
  66. data/ansible/roles/mu-rdp/README.md +33 -0
  67. data/ansible/roles/mu-rdp/meta/main.yml +53 -0
  68. data/ansible/roles/mu-rdp/tasks/main.yml +9 -0
  69. data/ansible/roles/mu-rdp/tests/inventory +2 -0
  70. data/ansible/roles/mu-rdp/tests/test.yml +5 -0
  71. data/ansible/roles/mu-windows/tasks/main.yml +3 -0
  72. data/bin/mu-ansible-secret +1 -1
  73. data/bin/mu-aws-setup +4 -3
  74. data/bin/mu-azure-setup +5 -5
  75. data/bin/mu-configure +25 -17
  76. data/bin/mu-firewall-allow-clients +1 -0
  77. data/bin/mu-gcp-setup +3 -3
  78. data/bin/mu-load-config.rb +1 -0
  79. data/bin/mu-node-manage +66 -33
  80. data/bin/mu-self-update +2 -2
  81. data/bin/mu-upload-chef-artifacts +6 -1
  82. data/bin/mu-user-manage +1 -1
  83. data/cloud-mu.gemspec +25 -23
  84. data/cookbooks/firewall/CHANGELOG.md +417 -224
  85. data/cookbooks/firewall/LICENSE +202 -0
  86. data/cookbooks/firewall/README.md +153 -126
  87. data/cookbooks/firewall/TODO.md +6 -0
  88. data/cookbooks/firewall/attributes/firewalld.rb +7 -0
  89. data/cookbooks/firewall/attributes/iptables.rb +3 -3
  90. data/cookbooks/firewall/chefignore +115 -0
  91. data/cookbooks/firewall/libraries/helpers.rb +5 -0
  92. data/cookbooks/firewall/libraries/helpers_firewalld.rb +1 -1
  93. data/cookbooks/firewall/libraries/helpers_firewalld_dbus.rb +72 -0
  94. data/cookbooks/firewall/libraries/helpers_iptables.rb +3 -3
  95. data/cookbooks/firewall/libraries/helpers_nftables.rb +170 -0
  96. data/cookbooks/firewall/libraries/helpers_ufw.rb +7 -0
  97. data/cookbooks/firewall/libraries/helpers_windows.rb +8 -9
  98. data/cookbooks/firewall/libraries/provider_firewall_firewalld.rb +9 -9
  99. data/cookbooks/firewall/libraries/provider_firewall_iptables.rb +7 -7
  100. data/cookbooks/firewall/libraries/provider_firewall_iptables_ubuntu.rb +12 -8
  101. data/cookbooks/firewall/libraries/provider_firewall_iptables_ubuntu1404.rb +13 -9
  102. data/cookbooks/firewall/libraries/provider_firewall_rule.rb +1 -1
  103. data/cookbooks/firewall/libraries/provider_firewall_ufw.rb +5 -5
  104. data/cookbooks/firewall/libraries/provider_firewall_windows.rb +4 -4
  105. data/cookbooks/firewall/libraries/resource_firewall_rule.rb +3 -3
  106. data/cookbooks/firewall/metadata.json +40 -1
  107. data/cookbooks/firewall/metadata.rb +15 -0
  108. data/cookbooks/firewall/recipes/default.rb +7 -7
  109. data/cookbooks/firewall/recipes/disable_firewall.rb +1 -1
  110. data/cookbooks/firewall/recipes/firewalld.rb +87 -0
  111. data/cookbooks/firewall/renovate.json +18 -0
  112. data/cookbooks/firewall/resources/firewalld.rb +28 -0
  113. data/cookbooks/firewall/resources/firewalld_config.rb +39 -0
  114. data/cookbooks/firewall/resources/firewalld_helpers.rb +106 -0
  115. data/cookbooks/firewall/resources/firewalld_icmptype.rb +88 -0
  116. data/cookbooks/firewall/resources/firewalld_ipset.rb +104 -0
  117. data/cookbooks/firewall/resources/firewalld_policy.rb +115 -0
  118. data/cookbooks/firewall/resources/firewalld_service.rb +98 -0
  119. data/cookbooks/firewall/resources/firewalld_zone.rb +118 -0
  120. data/cookbooks/firewall/resources/nftables.rb +71 -0
  121. data/cookbooks/firewall/resources/nftables_rule.rb +113 -0
  122. data/cookbooks/mu-activedirectory/Berksfile +1 -1
  123. data/cookbooks/mu-activedirectory/metadata.rb +1 -1
  124. data/cookbooks/mu-firewall/metadata.rb +2 -2
  125. data/cookbooks/mu-master/Berksfile +4 -3
  126. data/cookbooks/mu-master/attributes/default.rb +5 -2
  127. data/cookbooks/mu-master/files/default/check_elastic.sh +761 -0
  128. data/cookbooks/mu-master/files/default/check_kibana.rb +45 -0
  129. data/cookbooks/mu-master/libraries/mu.rb +24 -0
  130. data/cookbooks/mu-master/metadata.rb +5 -5
  131. data/cookbooks/mu-master/recipes/default.rb +31 -20
  132. data/cookbooks/mu-master/recipes/firewall-holes.rb +5 -0
  133. data/cookbooks/mu-master/recipes/init.rb +58 -19
  134. data/cookbooks/mu-master/recipes/update_nagios_only.rb +251 -178
  135. data/cookbooks/mu-master/templates/default/nagios.conf.erb +5 -11
  136. data/cookbooks/mu-master/templates/default/web_app.conf.erb +3 -0
  137. data/cookbooks/mu-php54/Berksfile +1 -1
  138. data/cookbooks/mu-php54/metadata.rb +2 -2
  139. data/cookbooks/mu-tools/Berksfile +2 -3
  140. data/cookbooks/mu-tools/attributes/default.rb +3 -4
  141. data/cookbooks/mu-tools/files/amazon/etc/bashrc +90 -0
  142. data/cookbooks/mu-tools/files/amazon/etc/login.defs +292 -0
  143. data/cookbooks/mu-tools/files/amazon/etc/profile +77 -0
  144. data/cookbooks/mu-tools/files/amazon/etc/security/limits.conf +63 -0
  145. data/cookbooks/mu-tools/files/amazon/etc/sysconfig/init +19 -0
  146. data/cookbooks/mu-tools/files/amazon/etc/sysctl.conf +82 -0
  147. data/cookbooks/mu-tools/files/amazon-2023/etc/login.defs +294 -0
  148. data/cookbooks/mu-tools/files/default/logrotate.conf +35 -0
  149. data/cookbooks/mu-tools/files/default/nrpe_conf_d.pp +0 -0
  150. data/cookbooks/mu-tools/libraries/helper.rb +21 -9
  151. data/cookbooks/mu-tools/metadata.rb +4 -4
  152. data/cookbooks/mu-tools/recipes/apply_security.rb +3 -2
  153. data/cookbooks/mu-tools/recipes/aws_api.rb +23 -5
  154. data/cookbooks/mu-tools/recipes/base_repositories.rb +4 -1
  155. data/cookbooks/mu-tools/recipes/gcloud.rb +56 -56
  156. data/cookbooks/mu-tools/recipes/nagios.rb +1 -1
  157. data/cookbooks/mu-tools/recipes/nrpe.rb +20 -2
  158. data/cookbooks/mu-tools/recipes/rsyslog.rb +12 -1
  159. data/cookbooks/mu-tools/recipes/set_local_fw.rb +1 -1
  160. data/data_bags/nagios_services/apm_backend_connect.json +5 -0
  161. data/data_bags/nagios_services/apm_listen.json +5 -0
  162. data/data_bags/nagios_services/elastic_shards.json +5 -0
  163. data/data_bags/nagios_services/logstash.json +5 -0
  164. data/data_bags/nagios_services/rhel7_updates.json +8 -0
  165. data/extras/image-generators/AWS/centos7.yaml +1 -0
  166. data/extras/image-generators/AWS/rhel7.yaml +21 -0
  167. data/extras/image-generators/AWS/win2k12r2.yaml +1 -0
  168. data/extras/image-generators/AWS/win2k16.yaml +1 -0
  169. data/extras/image-generators/AWS/win2k19.yaml +1 -0
  170. data/extras/list-stock-amis +0 -0
  171. data/extras/ruby_rpm/muby.spec +8 -5
  172. data/extras/vault_tools/export_vaults.sh +1 -1
  173. data/extras/vault_tools/recreate_vaults.sh +0 -0
  174. data/extras/vault_tools/test_vaults.sh +0 -0
  175. data/install/deprecated-bash-library.sh +1 -1
  176. data/install/installer +4 -2
  177. data/modules/mommacat.ru +3 -1
  178. data/modules/mu/adoption.rb +1 -1
  179. data/modules/mu/cloud/dnszone.rb +2 -2
  180. data/modules/mu/cloud/machine_images.rb +26 -25
  181. data/modules/mu/cloud/resource_base.rb +213 -182
  182. data/modules/mu/cloud/server_pool.rb +1 -1
  183. data/modules/mu/cloud/ssh_sessions.rb +7 -5
  184. data/modules/mu/cloud/wrappers.rb +2 -2
  185. data/modules/mu/cloud.rb +1 -1
  186. data/modules/mu/config/bucket.rb +1 -1
  187. data/modules/mu/config/function.rb +6 -1
  188. data/modules/mu/config/loadbalancer.rb +24 -2
  189. data/modules/mu/config/ref.rb +12 -0
  190. data/modules/mu/config/role.rb +1 -1
  191. data/modules/mu/config/schema_helpers.rb +42 -9
  192. data/modules/mu/config/server.rb +43 -27
  193. data/modules/mu/config/tail.rb +19 -10
  194. data/modules/mu/config.rb +6 -5
  195. data/modules/mu/defaults/AWS.yaml +78 -114
  196. data/modules/mu/deploy.rb +9 -2
  197. data/modules/mu/groomer.rb +12 -4
  198. data/modules/mu/groomers/ansible.rb +104 -20
  199. data/modules/mu/groomers/chef.rb +15 -6
  200. data/modules/mu/master.rb +9 -4
  201. data/modules/mu/mommacat/daemon.rb +4 -2
  202. data/modules/mu/mommacat/naming.rb +1 -2
  203. data/modules/mu/mommacat/storage.rb +7 -2
  204. data/modules/mu/mommacat.rb +33 -6
  205. data/modules/mu/providers/aws/database.rb +161 -8
  206. data/modules/mu/providers/aws/dnszone.rb +11 -6
  207. data/modules/mu/providers/aws/endpoint.rb +81 -6
  208. data/modules/mu/providers/aws/firewall_rule.rb +254 -172
  209. data/modules/mu/providers/aws/function.rb +65 -3
  210. data/modules/mu/providers/aws/loadbalancer.rb +39 -28
  211. data/modules/mu/providers/aws/log.rb +2 -1
  212. data/modules/mu/providers/aws/role.rb +25 -7
  213. data/modules/mu/providers/aws/server.rb +36 -12
  214. data/modules/mu/providers/aws/server_pool.rb +237 -127
  215. data/modules/mu/providers/aws/storage_pool.rb +7 -1
  216. data/modules/mu/providers/aws/user.rb +1 -1
  217. data/modules/mu/providers/aws/userdata/linux.erb +6 -2
  218. data/modules/mu/providers/aws/userdata/windows.erb +7 -5
  219. data/modules/mu/providers/aws/vpc.rb +49 -25
  220. data/modules/mu/providers/aws.rb +13 -8
  221. data/modules/mu/providers/azure/container_cluster.rb +1 -1
  222. data/modules/mu/providers/azure/loadbalancer.rb +2 -2
  223. data/modules/mu/providers/azure/server.rb +5 -2
  224. data/modules/mu/providers/azure/userdata/linux.erb +1 -1
  225. data/modules/mu/providers/azure.rb +11 -8
  226. data/modules/mu/providers/cloudformation/dnszone.rb +1 -1
  227. data/modules/mu/providers/google/container_cluster.rb +15 -2
  228. data/modules/mu/providers/google/folder.rb +2 -1
  229. data/modules/mu/providers/google/function.rb +130 -4
  230. data/modules/mu/providers/google/habitat.rb +2 -1
  231. data/modules/mu/providers/google/loadbalancer.rb +407 -160
  232. data/modules/mu/providers/google/role.rb +16 -3
  233. data/modules/mu/providers/google/server.rb +5 -1
  234. data/modules/mu/providers/google/user.rb +25 -18
  235. data/modules/mu/providers/google/userdata/linux.erb +1 -1
  236. data/modules/mu/providers/google/vpc.rb +53 -7
  237. data/modules/mu/providers/google.rb +39 -39
  238. data/modules/mu.rb +8 -8
  239. data/modules/tests/elk.yaml +46 -0
  240. data/test/mu-master-test/controls/all_in_one.rb +1 -1
  241. metadata +207 -112
  242. data/cookbooks/firewall/CONTRIBUTING.md +0 -2
  243. data/cookbooks/firewall/MAINTAINERS.md +0 -19
  244. data/cookbooks/firewall/libraries/matchers.rb +0 -30
  245. data/extras/image-generators/AWS/rhel71.yaml +0 -17
data/bin/mu-aws-setup CHANGED
@@ -239,10 +239,10 @@ end
239
239
  if $opts[:optdisk] and !File.open("/etc/mtab").read.match(/ \/opt[\s\/]/)
240
240
  wd = Dir.getwd
241
241
  Dir.chdir("/")
242
- if File.exists?("/opt/opscode/bin/chef-server-ctl")
242
+ if File.exist?("/opt/opscode/bin/chef-server-ctl")
243
243
  system("/opt/opscode/bin/chef-server-ctl stop")
244
244
  end
245
- if !File.exists?("/sbin/mkfs.xfs")
245
+ if !File.exist?("/sbin/mkfs.xfs")
246
246
  system("/usr/bin/yum -y install xfsprogs")
247
247
  end
248
248
  MU::Master.disk("/dev/xvdj", "/opt_tmp", 30)
@@ -251,6 +251,7 @@ if $opts[:optdisk] and !File.open("/etc/mtab").read.match(/ \/opt[\s\/]/)
251
251
  MU.log "Failed to retrieve UUID of block device xvdj", MU::ERR, details: MU::Cloud::AWS.realDevicePath("/dev/xvdj")
252
252
  exit 1
253
253
  end
254
+
254
255
  MU.log "Moving contents of /opt to /opt_tmp", MU::NOTICE
255
256
  system("/bin/mv /opt/* /opt_tmp/")
256
257
  exit 1 if $?.exitstatus != 0
@@ -260,7 +261,7 @@ if $opts[:optdisk] and !File.open("/etc/mtab").read.match(/ \/opt[\s\/]/)
260
261
  system("echo '#{uuid} /opt xfs defaults 0 0' >> /etc/fstab")
261
262
  system("/bin/mount -a")
262
263
  exit 1 if $?.exitstatus != 0
263
- if File.exists?("/opt/opscode/bin/chef-server-ctl")
264
+ if File.exist?("/opt/opscode/bin/chef-server-ctl")
264
265
  system("/opt/opscode/bin/chef-server-ctl start")
265
266
  end
266
267
  Dir.chdir(wd)
data/bin/mu-azure-setup CHANGED
@@ -47,12 +47,12 @@ Usage:
47
47
  opt :optdisk, "Create a block volume for /opt and slide our installation onto it", :require => false, :default => false, :type => :boolean
48
48
  end
49
49
 
50
- if MU::Cloud::Azure.hosted? and !$MU_CFG['google']
50
+ if MU::Cloud::Azure.hosted? and !$MU_CFG['azure']
51
51
  new_cfg = $MU_CFG.dup
52
52
  cfg_blob = MU::Cloud::Azure.hosted_config
53
53
  if cfg_blob
54
54
  cfg_blob['log_bucket_name'] ||= $MU_CFG['hostname']
55
- new_cfg["google"] = { "default" => cfg_blob }
55
+ new_cfg["azure"] = { "default" => cfg_blob }
56
56
  MU.log "Adding auto-detected Azure stanza to #{cfgPath}", MU::NOTICE
57
57
  if new_cfg != $MU_CFG or !cfgExists?
58
58
  MU.log "Generating #{cfgPath}"
@@ -251,10 +251,10 @@ if $opts[:optdisk] and !File.open("/etc/mtab").read.match(/ \/opt[\s\/]/)
251
251
  # myname = MU::Cloud::Google.getGoogleMetaData("instance/name")
252
252
  # wd = Dir.getwd
253
253
  # Dir.chdir("/")
254
- # if File.exists?("/opt/opscode/bin/chef-server-ctl")
254
+ # if File.exist?("/opt/opscode/bin/chef-server-ctl")
255
255
  # system("/opt/opscode/bin/chef-server-ctl stop")
256
256
  # end
257
- # if !File.exists?("/sbin/mkfs.xfs")
257
+ # if !File.exist?("/sbin/mkfs.xfs")
258
258
  # system("/usr/bin/yum -y install xfsprogs")
259
259
  # end
260
260
  # MU::Master.disk(myname+"-mu-opt", "/opt_tmp", 30)
@@ -272,7 +272,7 @@ if $opts[:optdisk] and !File.open("/etc/mtab").read.match(/ \/opt[\s\/]/)
272
272
  # system("echo '#{uuid} /opt xfs defaults 0 0' >> /etc/fstab")
273
273
  # system("/bin/mount -a")
274
274
  # exit 1 if $?.exitstatus != 0
275
- # if File.exists?("/opt/opscode/bin/chef-server-ctl")
275
+ # if File.exist?("/opt/opscode/bin/chef-server-ctl")
276
276
  # system("/opt/opscode/bin/chef-server-ctl start")
277
277
  # end
278
278
  # Dir.chdir(wd)
data/bin/mu-configure CHANGED
@@ -49,6 +49,9 @@ GIT_PATTERN = /(((git|ssh|http(s)?)|(git@[\w\.]+))(:(\/\/)?))?([\w\.@\:\/\-~]+)(
49
49
  def _system(cmd)
50
50
  puts cmd.bold
51
51
  system(CLEAN_ENV, cmd)
52
+ if $? != 0
53
+ exit 1
54
+ end
52
55
  end
53
56
 
54
57
  $IN_GEM = false
@@ -103,30 +106,29 @@ $possible_addresses = []
103
106
  $impossible_addresses = ['127.0.0.1', 'localhost']
104
107
  begin
105
108
  sys_name = Socket.gethostname
106
- official, aliases = Socket.gethostbyname(sys_name)
107
109
  $possible_addresses << sys_name
108
- $possible_addresses << official
109
- $possible_addresses.concat(aliases)
110
- rescue SocketError
111
- # don't let them use the default hostname if it doesn't resolve
112
- $impossible_addresses << sys_name
110
+
111
+ addrinfo = Addrinfo.ip(sys_name)
112
+ official = addrinfo.getnameinfo.first
113
+ $possible_addresses << official if official and official != sys_name
114
+
113
115
  end
114
116
  Socket.getifaddrs.each { |iface|
115
117
  if iface.addr and iface.addr.ipv4?
116
118
  $possible_addresses << iface.addr.ip_address
117
- begin
118
- addrinfo = Socket.gethostbyaddr(iface.addr.ip_address.split(/\./).map { |o| o.to_i }.pack("CCCC"))
119
- $possible_addresses << addrinfo.first if !addrinfo.first.nil?
120
- rescue SocketError
121
- # usually no name to look up; that's ok
122
- end
119
+ addrinfo = Addrinfo.ip(iface.addr.ip_address)
120
+ $possible_addresses << addrinfo.getnameinfo.first if addrinfo.getnameinfo.first
123
121
  end
124
122
  }
125
123
 
126
124
  if $IN_AWS
127
125
  ["local-ipv4", "public-ipv4"].each { |addr|
128
126
  ip = URI.open("http://169.254.169.254/latest/meta-data/#{addr}").read.chomp
129
- $possible_addresses.unshift(ip) if ip and ip =~ /^\d+\.\d+\.\d+\.\d+/
127
+ if ip and ip =~ /^\d+\.\d+\.\d+\.\d+/
128
+ $possible_addresses.unshift(ip)
129
+ addrinfo = Addrinfo.ip(ip)
130
+ $possible_addresses << addrinfo.getnameinfo.first if addrinfo.getnameinfo.first
131
+ end
130
132
  }
131
133
  elsif $IN_GOOGLE
132
134
  ["ip", "access-configs/0/external-ip"].each { |addr|
@@ -184,6 +186,12 @@ $CONFIGURABLES = {
184
186
  "desc" => "Disable the Momma Cat grooming daemon. Nodes which require asynchronous Ansible/Chef bootstraps will not function. This option is only honored in gem-based installations.",
185
187
  "boolean" => true
186
188
  },
189
+ "disable_nagios" => {
190
+ "title" => "Disable Nagios",
191
+ "default" => false,
192
+ "desc" => "Disable Nagios monitoring",
193
+ "boolean" => true
194
+ },
187
195
  "adopt_change_notify" => {
188
196
  "title" => "Adoption Change Notifications",
189
197
  "subtree" => {
@@ -557,8 +565,8 @@ if !$NOOP
557
565
  end
558
566
  exit 1 if $?.exitstatus != 0
559
567
  end
560
- _system("cd #{MU_BASE}/lib/modules && umask 0022 && /usr/local/ruby-current/bin/bundle install")
561
- _system("cd #{MU_BASE}/lib/modules && umask 0022 && /opt/chef/embedded/bin/bundle install")
568
+ _system("cd #{MU_BASE}/lib/modules && umask 0022 && env -i PATH=/usr/local/ruby-current/bin:/bin:/usr/bin /usr/local/ruby-current/bin/bundle install")
569
+ _system("cd #{MU_BASE}/lib/modules && umask 0022 && env -i PATH=/opt/chef/embedded/bin:/bin:/usr/bin /opt/chef/embedded/bin/bundle install")
562
570
 
563
571
  KNIFE_TEMPLATE = "log_level :info
564
572
  log_location STDOUT
@@ -1377,7 +1385,7 @@ ssl_verify_mode :verify_none
1377
1385
  if AMROOT and ($INITIALIZE or $CHANGES.include?("chefartifacts"))
1378
1386
  MU.log "Purging and re-uploading all Chef artifacts", MU::NOTICE
1379
1387
  %x{/sbin/service iptables stop} if $INITIALIZE
1380
- if File.exists?("#{CHEF_CTL}")
1388
+ if File.exist?("#{CHEF_CTL}")
1381
1389
  _system("#{CHEF_CTL} start")
1382
1390
  end
1383
1391
  output = %x{MU_INSTALLDIR=#{MU_BASE} MU_LIBDIR=#{MU_BASE}/lib MU_DATADIR=#{MU_BASE}/var #{MU_BASE}/lib/bin/mu-upload-chef-artifacts}
@@ -1498,7 +1506,7 @@ ssl_verify_mode :verify_none
1498
1506
  end
1499
1507
 
1500
1508
  begin
1501
- if File.exists?("#{CHEF_CTL}")
1509
+ if File.exist?("#{CHEF_CTL}")
1502
1510
  _system("#{CHEF_CTL} start")
1503
1511
  end
1504
1512
  MU::Groomer::Chef.getSecret(vault: "secrets", item: "consul")
@@ -23,6 +23,7 @@ end
23
23
 
24
24
  require 'rubygems'
25
25
  require 'bundler/setup'
26
+ require File.expand_path(File.dirname(__FILE__))+"/mu-load-config.rb"
26
27
  require 'mu'
27
28
 
28
29
  # XXX this should be rolled into mu-aws-setup
data/bin/mu-gcp-setup CHANGED
@@ -140,10 +140,10 @@ if $opts[:optdisk] and !File.open("/etc/mtab").read.match(/ \/opt[\s\/]/)
140
140
  myname = MU::Cloud::Google.getGoogleMetaData("instance/name")
141
141
  wd = Dir.getwd
142
142
  Dir.chdir("/")
143
- if File.exists?("/opt/opscode/bin/chef-server-ctl")
143
+ if File.exist?("/opt/opscode/bin/chef-server-ctl")
144
144
  system("/opt/opscode/bin/chef-server-ctl stop")
145
145
  end
146
- if !File.exists?("/sbin/mkfs.xfs")
146
+ if !File.exist?("/sbin/mkfs.xfs")
147
147
  system("/usr/bin/yum -y install xfsprogs")
148
148
  end
149
149
  MU::Master.disk(myname+"-mu-opt", "/opt_tmp", 30)
@@ -161,7 +161,7 @@ if $opts[:optdisk] and !File.open("/etc/mtab").read.match(/ \/opt[\s\/]/)
161
161
  system("echo '#{uuid} /opt xfs defaults 0 0' >> /etc/fstab")
162
162
  system("/bin/mount -a")
163
163
  exit 1 if $?.exitstatus != 0
164
- if File.exists?("/opt/opscode/bin/chef-server-ctl")
164
+ if File.exist?("/opt/opscode/bin/chef-server-ctl")
165
165
  system("/opt/opscode/bin/chef-server-ctl start")
166
166
  end
167
167
  Dir.chdir(wd)
@@ -75,6 +75,7 @@ def loadMuConfig(default_cfg_overrides = nil)
75
75
  "chain" => "/opt/mu/var/ssl/Mu_CA.pem"
76
76
  },
77
77
  "mu_admin_email" => "root@localhost",
78
+ "disable_nagios" => false,
78
79
  "allow_invade_foreign_vpcs" => false,
79
80
  "mu_repo" => "cloudamatic/mu.git",
80
81
  "public_address" => Socket.gethostname || "localhost",
data/bin/mu-node-manage CHANGED
@@ -60,14 +60,15 @@ end
60
60
 
61
61
  Thread.abort_on_exception = true
62
62
  master_pid = Process.pid
63
- $children = {}
63
+ CHILDREN = {}
64
+ SUMMARIES = []
64
65
  signals = Signal.list
65
66
  signals.keys.each { |sig|
66
67
  # Ruby 2.3 doesn't want to trap these
67
68
  next if ["ILL", "FPE", "KILL", "BUS", "SEGV", "STOP", "VTALRM"].include?(sig)
68
69
  Signal.trap(signals[sig]) do
69
70
  if Process.pid == master_pid
70
- $children.each_pair { |pid, node|
71
+ CHILDREN.each_pair { |pid, node|
71
72
  if ["INT", "TERM", "EXIT", "ABRT"].include?(sig)
72
73
  Process.kill("KILL", pid) # aka --dammit
73
74
  else
@@ -153,7 +154,11 @@ if do_nodes.size > 0
153
154
  else
154
155
  do_nodes = avail_nodes
155
156
  end
156
- do_nodes.sort!
157
+
158
+ if do_nodes
159
+ do_nodes.uniq!
160
+ do_nodes.sort!
161
+ end
157
162
 
158
163
  #do_nodes.sort!{ |x,y| (x[$opts[:info]] <=> y[$opts[:info]]) }
159
164
 
@@ -181,6 +186,7 @@ exit 1 if !ok
181
186
  def reGroom(deploys = MU::MommaCat.listDeploys, nodes = [], vaults_only: false, groomeronly: false)
182
187
  badnodes = []
183
188
  count = 0
189
+ pipes = {}
184
190
  deploys.each { |muid|
185
191
  mommacat = MU::MommaCat.new(muid)
186
192
  next if mommacat.kittens.nil? or mommacat.kittens['servers'].nil?
@@ -192,7 +198,10 @@ def reGroom(deploys = MU::MommaCat.listDeploys, nodes = [], vaults_only: false,
192
198
  fw.groom
193
199
  }
194
200
  count = count + 1
201
+ # pipe to get our MU::SUMMARY messages across process boundaries
202
+ reader, writer = IO.pipe
195
203
  child = Process.fork {
204
+ reader.close
196
205
  begin
197
206
  type = "server"
198
207
  type = "server_pool" if server.config.has_key?("basis")
@@ -206,28 +215,41 @@ def reGroom(deploys = MU::MommaCat.listDeploys, nodes = [], vaults_only: false,
206
215
  else
207
216
  mommacat.groomNode(server.cloud_id, nodeclass, type, mu_name: mu_name)
208
217
  end
218
+ if MU.summary
219
+ MU.summary.each { |msg|
220
+ writer.puts msg
221
+ }
222
+ end
223
+ writer.close
209
224
  rescue Exception => e
225
+ writer.close
210
226
  MU.log e.inspect, MU::ERR, details: e.backtrace
211
227
  exit 1
212
228
  end
213
229
  }
214
- $children[child] = mu_name
230
+ writer.close
231
+ CHILDREN[child] = mu_name
232
+ pipes[child] = reader
215
233
  }
216
- while $children.size >= $opts[:concurrent]-1
234
+ while CHILDREN.size >= $opts[:concurrent]-1
217
235
  child = Process.wait
236
+ SUMMARIES.concat(pipes[child].readlines)
237
+ pipes[child].close
218
238
  if !$?.success?
219
- badnodes << $children[child]
239
+ badnodes << CHILDREN[child]
220
240
  end
221
- $children.delete(child)
241
+ CHILDREN.delete(child)
222
242
  end
223
243
  }
224
244
  }
225
245
  }
226
246
  Process.waitall.each { |child|
247
+ SUMMARIES.concat(pipes[child[0]].readlines)
248
+ pipes[child[0]].close
227
249
  if !child[1].success?
228
- badnodes << $children[child[0]]
250
+ badnodes << CHILDREN[child[0]]
229
251
  end
230
- }
252
+ }
231
253
 
232
254
  if badnodes.size > 0
233
255
  MU.log "Not all Momma Cat runs exited cleanly", MU::WARN, details: badnodes
@@ -347,19 +369,19 @@ def runCommand(deploys = MU::MommaCat.listDeploys, nodes = [], cmd = nil, print_
347
369
  puts "#{nodename} - #{output}" if print_output and output.match(/[^\s]/)
348
370
 
349
371
  }
350
- $children[child] = nodename
351
- while $children.size >= $opts[:concurrent] - 1
372
+ CHILDREN[child] = nodename
373
+ while CHILDREN.size >= $opts[:concurrent] - 1
352
374
  child = Process.wait
353
375
  if !$?.success?
354
- badnodes << $children[child]
376
+ badnodes << CHILDREN[child]
355
377
  end
356
- $children.delete(child)
378
+ CHILDREN.delete(child)
357
379
  end
358
380
  }
359
381
  }
360
382
  Process.waitall.each { |child|
361
383
  if !child[1].success?
362
- badnodes << $children[child[0]]
384
+ badnodes << CHILDREN[child[0]]
363
385
  end
364
386
  }
365
387
 
@@ -401,10 +423,10 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
401
423
  end
402
424
 
403
425
  # MU::Cloud::AWS::Server.createIAMProfile(pool_name, base_profile: server['iam_role'], extra_policies: server['iam_policies'])
404
- pool_obj = mommacat.findLitterMate(type: "server_pool", mu_name: pool_name)
405
- pool_obj.groom
426
+ pool_obj = mommacat.findLitterMate(type: "server_pool", mu_name: pool_name, credentials: server['credentials'], debug: true)
427
+ pool_obj.groom if pool_obj
406
428
 
407
- resp = MU::Cloud::AWS.autoscale.describe_auto_scaling_groups(
429
+ resp = MU::Cloud::AWS.autoscale(credentials: server['credentials'], region: server['region']).describe_auto_scaling_groups(
408
430
  auto_scaling_group_names: [pool_name]
409
431
  )
410
432
 
@@ -413,7 +435,7 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
413
435
  next
414
436
  end
415
437
  resp.auto_scaling_groups.each { |asg|
416
- launch = MU::Cloud::AWS.autoscale.describe_launch_configurations(
438
+ launch = MU::Cloud::AWS.autoscale(credentials: server['credentials'], region: server['region']).describe_launch_configurations(
417
439
  launch_configuration_names: [asg.launch_configuration_name]
418
440
  ).launch_configurations.first
419
441
 
@@ -430,14 +452,16 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
430
452
  "publicIP" => MU.mu_public_ip,
431
453
  "resourceName" => svr_class,
432
454
  "windowsAdminName" => server['windows_admin_username'],
455
+ "adminBucketName" => MU::Cloud::AWS.adminBucketName(server['credentials']),
433
456
  "skipApplyUpdates" => server['skipinitialupdates'],
457
+ "chefVersion" => MU.chefVersion,
434
458
  "resourceType" => "server_pool"
435
459
  },
436
460
  custom_append: server['userdata_script']
437
461
  )
438
462
 
439
463
  # Figure out which devices are embedded in the AMI already.
440
- image = MU::Cloud::AWS.ec2.describe_images(image_ids: [server["basis"]["launch_config"]["ami_id"]]).images.first
464
+ image = MU::Cloud::AWS.ec2(credentials: server['credentials'], region: server['region']).describe_images(image_ids: [server["basis"]["launch_config"]["ami_id"]]).images.first
441
465
 
442
466
  if image.nil?
443
467
  MU.log "#{server["basis"]["launch_config"]["ami_id"]} does not exist, skipping launch config #{asg.launch_configuration_name}", MU::ERR
@@ -483,7 +507,7 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
483
507
 
484
508
  # Put our Autoscale group onto a temporary launch config
485
509
  begin
486
- MU::Cloud::AWS.autoscale.create_launch_configuration(
510
+ MU::Cloud::AWS.autoscale(credentials: server['credentials'], region: server['region']).create_launch_configuration(
487
511
  launch_configuration_name: pool_name+"-TMP",
488
512
  user_data: Base64.encode64(userdata),
489
513
  image_id: server["basis"]["launch_config"]["ami_id"],
@@ -505,16 +529,16 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
505
529
  next
506
530
  end
507
531
 
508
- MU::Cloud::AWS.autoscale.update_auto_scaling_group(
532
+ MU::Cloud::AWS.autoscale(credentials: server['credentials'], region: server['region']).update_auto_scaling_group(
509
533
  auto_scaling_group_name: pool_name,
510
534
  launch_configuration_name: pool_name+"-TMP"
511
535
  )
512
536
 
513
537
  # ...now back to an identical one with the "real" name
514
- MU::Cloud::AWS.autoscale.delete_launch_configuration(
538
+ MU::Cloud::AWS.autoscale(credentials: server['credentials'], region: server['region']).delete_launch_configuration(
515
539
  launch_configuration_name: pool_name
516
540
  )
517
- MU::Cloud::AWS.autoscale.create_launch_configuration(
541
+ MU::Cloud::AWS.autoscale(credentials: server['credentials'], region: server['region']).create_launch_configuration(
518
542
  launch_configuration_name: pool_name,
519
543
  user_data: Base64.encode64(userdata),
520
544
  image_id: server["basis"]["launch_config"]["ami_id"],
@@ -527,11 +551,11 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
527
551
  ebs_optimized: server["basis"]["launch_config"]["ebs_optimized"],
528
552
  associate_public_ip_address: launch.associate_public_ip_address
529
553
  )
530
- MU::Cloud::AWS.autoscale.update_auto_scaling_group(
554
+ MU::Cloud::AWS.autoscale(credentials: server['credentials'], region: server['region']).update_auto_scaling_group(
531
555
  auto_scaling_group_name: pool_name,
532
556
  launch_configuration_name: pool_name
533
557
  )
534
- MU::Cloud::AWS.autoscale.delete_launch_configuration(
558
+ MU::Cloud::AWS.autoscale(credentials: server['credentials'], region: server['region']).delete_launch_configuration(
535
559
  launch_configuration_name: pool_name+"-TMP"
536
560
  )
537
561
 
@@ -549,7 +573,7 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
549
573
  end
550
574
  id = server['cloud_id']
551
575
  id = server['instance_id'] if id.nil?
552
- desc = MU::Cloud::AWS.ec2(region: server['region']).describe_instances(instance_ids: [id]).reservations.first.instances.first
576
+ desc = MU::Cloud::AWS.ec2(credentials: server['conf']['credentials'], region: server['region']).describe_instances(instance_ids: [id]).reservations.first.instances.first
553
577
 
554
578
  server['conf']["platform"] = "linux" if !server['conf'].has_key?("platform")
555
579
  next if nodes.size > 0 and !nodes.include?(nodename)
@@ -563,7 +587,7 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
563
587
  server_obj = mommacat.findLitterMate(type: "server", mu_name: nodename)
564
588
  server_obj.groom
565
589
  end
566
- olduserdata = Base64.decode64(MU::Cloud::AWS.ec2(region: server['region']).describe_instance_attribute(
590
+ olduserdata = Base64.decode64(MU::Cloud::AWS.ec2(credentials: server['conf']['credentials'], region: server['region']).describe_instance_attribute(
567
591
  instance_id: id,
568
592
  attribute: "userData"
569
593
  ).user_data.value)
@@ -576,9 +600,12 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
576
600
  "muID" => muid,
577
601
  "muUser" => MU.chef_user,
578
602
  "publicIP" => MU.mu_public_ip,
603
+ "mommaCatPort" => MU.mommaCatPort,
579
604
  "resourceName" => server['conf']['name'],
580
605
  "windowsAdminName" => server['conf']['windows_admin_username'],
606
+ "adminBucketName" => MU::Cloud::AWS.adminBucketName(server['conf']['credentials']),
581
607
  "skipApplyUpdates" => server['conf']['skipinitialupdates'],
608
+ "chefVersion" => MU.chefVersion,
582
609
  "resourceType" => mytype
583
610
  },
584
611
  custom_append: server['userdata_script']
@@ -600,7 +627,7 @@ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
600
627
 
601
628
  MU.log "Updating #{nodename} userdata (#{server["conf"]["platform"]})"
602
629
  begin
603
- MU::Cloud::AWS.ec2(region: server['region']).modify_instance_attribute(
630
+ MU::Cloud::AWS.ec2(credentials: server['conf']['credentials'], region: server['region']).modify_instance_attribute(
604
631
  instance_id: id,
605
632
  attribute: "userData",
606
633
  value: Base64.encode64(userdata)
@@ -656,20 +683,20 @@ def chefUpgrade(deploys = MU::MommaCat.listDeploys, nodes = [])
656
683
  rescue Exception
657
684
  end
658
685
  }
659
- $children[child] = nodename
660
- while $children.size >= $opts[:concurrent]-1
686
+ CHILDREN[child] = nodename
687
+ while CHILDREN.size >= $opts[:concurrent]-1
661
688
  child = Process.wait
662
689
  if !$?.success?
663
- badnodes << $children[child]
690
+ badnodes << CHILDREN[child]
664
691
  end
665
- $children.delete(child)
692
+ CHILDREN.delete(child)
666
693
  end
667
694
  }
668
695
  }
669
696
 
670
697
  Process.waitall.each { |child|
671
698
  if !child[1].success?
672
- badnodes << $children[child[0]]
699
+ badnodes << CHILDREN[child[0]]
673
700
  end
674
701
  }
675
702
 
@@ -700,3 +727,9 @@ elsif $opts[:mode] == "userdata" or $opts[:mode] == "awsmeta"
700
727
  # Need Google equiv and to select nodes correctly based on what cloud they're in
701
728
  updateAWSMetaData(do_deploys, do_nodes)
702
729
  end
730
+
731
+ if !SUMMARIES.empty?
732
+ SUMMARIES.sort.uniq.each { |msg|
733
+ puts msg
734
+ }
735
+ end
data/bin/mu-self-update CHANGED
@@ -159,7 +159,7 @@ git config branch.${branch}.merge refs/heads/$branch
159
159
  CHEF_CLIENT_VERSION=`grep '^CHEF_CLIENT_VERSION=' /opt/mu/lib/install/installer |cut -d\" -f2`
160
160
 
161
161
  # Make sure any new bootstrappy stuff has been applied
162
- chef-apply /opt/mu/lib/cookbooks/mu-master/recipes/init.rb
162
+ PATH="/opt/chef/embedded/bin:${PATH}" /opt/chef/bin/chef-apply /opt/mu/lib/cookbooks/mu-master/recipes/init.rb
163
163
 
164
164
  # Make sure bundler will use a recent git binary
165
165
  if [ -d /usr/local/git-current ];then
@@ -213,7 +213,7 @@ else
213
213
  fi
214
214
  fi
215
215
 
216
- /opt/chef/bin/chef-apply $MU_LIBDIR/cookbooks/mu-master/recipes/init.rb
216
+ PATH="/opt/chef/embedded/bin:${PATH}" /opt/chef/bin/chef-apply $MU_LIBDIR/cookbooks/mu-master/recipes/init.rb
217
217
 
218
218
  /bin/rm -rf $MU_DATADIR/tmp/cookbook_changes.$$
219
219
  /bin/rm -rf $MU_DATADIR/tmp/berks_changes.$$
@@ -20,7 +20,12 @@ set -e
20
20
  #################################################
21
21
 
22
22
  scriptpath="`dirname $0`"
23
- knife="/opt/chef/bin/knife"
23
+ # Chef can't pick a lane
24
+ if [ -x "/opt/chef/bin/knife" ];then
25
+ knife="/opt/chef/bin/knife"
26
+ elif [ -x "/opt/chef/embedded/bin/knife" ];then
27
+ knife="/opt/chef/embedded/bin/knife"
28
+ fi
24
29
 
25
30
  USER=`whoami`
26
31
  STARTDIR=`pwd`
data/bin/mu-user-manage CHANGED
@@ -120,7 +120,7 @@ end
120
120
 
121
121
  $password = nil
122
122
  if $opts[:generate_password]
123
- $password = MU.generateWindowsPassword
123
+ $password = MU.generatePassword
124
124
  elsif $opts[:password]
125
125
  $password = $opts[:password]
126
126
  elsif $opts[:interactive]
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.5.0'
21
- s.date = '2021-01-18'
20
+ s.version = '3.6.3'
21
+ s.date = '2024-11-26'
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,39 +31,41 @@ 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
- if Dir.exists?(whereami+"/bin")
34
+ if Dir.exist?(whereami+"/bin")
35
35
  s.executables = Dir.entries(whereami+"/bin").reject { |f| File.directory?(f) }
36
36
  end
37
37
  s.homepage =
38
38
  'https://github.com/cloudamatic/mu'
39
39
  s.license = 'BSD-3-Clause-Attribution'
40
- s.add_runtime_dependency 'addressable', '~> 2.5'
41
- s.add_runtime_dependency "aws-sdk", "~> 3.0"
42
- s.add_runtime_dependency 'azure_sdk', '~> 0.65'
43
- s.add_runtime_dependency 'bundler', "~> 2.1.4"
44
- s.add_runtime_dependency 'chronic_duration', "~> 0.10"
40
+ s.add_runtime_dependency 'addressable'#, '~> 2.5'
41
+ # s.add_runtime_dependency "aws-sdk-core", "< 3.132" # need to pin this so Chef doesn't twist itself in knots
42
+ s.add_runtime_dependency "aws-sdk", "~> 3"
43
+ # s.add_runtime_dependency 'azure_sdk', '~> 0.65'
44
+ s.add_runtime_dependency 'bundler'#, "~> 2.2"
45
+ s.add_runtime_dependency 'chronic_duration'#, "~> 0.10"
45
46
  s.add_runtime_dependency 'color', "~> 1.8"
46
47
  s.add_runtime_dependency 'colorize', "~> 0.8"
47
- s.add_runtime_dependency 'erubis', "~> 2.7"
48
- s.add_runtime_dependency 'google-api-client', "~> 0.50.0"
49
- s.add_runtime_dependency 'googleauth', "~> 0.6"
48
+ s.add_runtime_dependency 'erubis'#, "~> 2.7"
49
+ s.add_runtime_dependency 'faraday-multipart', "<= 1.0.4"
50
+ s.add_runtime_dependency 'google-api-client', "~> 0.53.0"
51
+ s.add_runtime_dependency 'googleauth', "~> 1.2.0"
50
52
  s.add_runtime_dependency 'inifile', "~> 3.0"
51
53
  s.add_runtime_dependency 'json-schema', "~> 2.8"
52
- s.add_runtime_dependency 'net-ldap', "~> 0.16"
53
- s.add_runtime_dependency 'net-ssh', "~> 4.2"
54
- s.add_runtime_dependency 'net-ssh-multi', '~> 1.2', '>= 1.2.1'
55
- s.add_runtime_dependency 'netaddr', '~> 2.0'
56
- s.add_runtime_dependency 'nokogiri', "~> 1.10"
54
+ s.add_runtime_dependency 'net-ldap'#, "~> 0.16"
55
+ s.add_runtime_dependency 'net-ssh', "~> 7.2"
56
+ s.add_runtime_dependency 'net-ssh-multi'#, '~> 1.2', '>= 1.2.1'
57
+ s.add_runtime_dependency 'netaddr'#, '~> 2.0'
58
+ s.add_runtime_dependency 'nokogiri'#, "~> 1.10"
57
59
  s.add_runtime_dependency 'openssl-oaep', "~> 0.1"
58
- s.add_runtime_dependency 'optimist', "~> 3.0"
59
- s.add_runtime_dependency 'rack', "~> 2.0"
60
+ s.add_runtime_dependency 'optimist'#, "~> 3.0"
61
+ s.add_runtime_dependency 'rack'#, "~> 2.0"
60
62
  s.add_runtime_dependency 'ruby-graphviz', "~> 1.2"
61
- s.add_runtime_dependency 'rubocop', '~> 0.58'
62
- s.add_runtime_dependency 'rubyzip', "~> 2.3"
63
+ s.add_runtime_dependency 'rubocop'#, '~> 0.58'
64
+ s.add_runtime_dependency 'rubyzip'#, "~> 2.3"
63
65
  s.add_runtime_dependency 'simple-password-gen', "~> 0.1"
64
66
  s.add_runtime_dependency 'slack-notifier', "~> 2.3"
65
- s.add_runtime_dependency 'solve', '~> 4.0'
66
- s.add_runtime_dependency 'thin', "~> 1.7"
67
+ s.add_runtime_dependency 'solve'#, '~> 4.0'
68
+ s.add_runtime_dependency 'thin'#, "~> 1.7"
67
69
  s.add_runtime_dependency 'winrm', "~> 2.3", ">= 2.3.4"
68
- s.add_runtime_dependency 'yard', "~> 0.9"
70
+ s.add_runtime_dependency 'yard'#, "~> 0.9"
69
71
  end