cloud-mu 1.9.0.pre.beta

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 (618) hide show
  1. checksums.yaml +7 -0
  2. data/Berksfile +56 -0
  3. data/Berksfile.lock +250 -0
  4. data/Jenkinsfile +184 -0
  5. data/LICENSE.md +37 -0
  6. data/README.md +26 -0
  7. data/bin/mu-aws-setup +376 -0
  8. data/bin/mu-cleanup +68 -0
  9. data/bin/mu-configure +1133 -0
  10. data/bin/mu-deploy +166 -0
  11. data/bin/mu-firewall-allow-clients +30 -0
  12. data/bin/mu-gcp-setup +200 -0
  13. data/bin/mu-gen-docs +34 -0
  14. data/bin/mu-gen-env +42 -0
  15. data/bin/mu-load-config.rb +158 -0
  16. data/bin/mu-node-manage +683 -0
  17. data/bin/mu-self-update +228 -0
  18. data/bin/mu-ssh +23 -0
  19. data/bin/mu-tunnel-nagios +144 -0
  20. data/bin/mu-upload-chef-artifacts +757 -0
  21. data/bin/mu-user-manage +275 -0
  22. data/cookbooks/awscli/LICENSE +37 -0
  23. data/cookbooks/awscli/README.md +58 -0
  24. data/cookbooks/awscli/attributes/default.rb +1 -0
  25. data/cookbooks/awscli/libraries/instance_metadata.rb +21 -0
  26. data/cookbooks/awscli/metadata.rb +20 -0
  27. data/cookbooks/awscli/recipes/default.rb +56 -0
  28. data/cookbooks/awscli/templates/default/config.erb +18 -0
  29. data/cookbooks/mu-activedirectory/CHANGELOG.md +13 -0
  30. data/cookbooks/mu-activedirectory/LICENSE +37 -0
  31. data/cookbooks/mu-activedirectory/README.md +6 -0
  32. data/cookbooks/mu-activedirectory/attributes/default.rb +98 -0
  33. data/cookbooks/mu-activedirectory/files/default/password-auth +32 -0
  34. data/cookbooks/mu-activedirectory/files/default/sshd_pol.pp +0 -0
  35. data/cookbooks/mu-activedirectory/files/default/sshd_pol.te +32 -0
  36. data/cookbooks/mu-activedirectory/files/default/syslogd_oddjobd.pp +0 -0
  37. data/cookbooks/mu-activedirectory/files/default/syslogd_oddjobd.te +10 -0
  38. data/cookbooks/mu-activedirectory/files/default/system-auth +34 -0
  39. data/cookbooks/mu-activedirectory/files/default/winbindpol.pp +0 -0
  40. data/cookbooks/mu-activedirectory/files/default/winbindpol.te +37 -0
  41. data/cookbooks/mu-activedirectory/libraries/config.rb +106 -0
  42. data/cookbooks/mu-activedirectory/libraries/helper.rb +86 -0
  43. data/cookbooks/mu-activedirectory/metadata.rb +17 -0
  44. data/cookbooks/mu-activedirectory/providers/domain.rb +152 -0
  45. data/cookbooks/mu-activedirectory/providers/domain_controller.rb +89 -0
  46. data/cookbooks/mu-activedirectory/providers/domain_node.rb +275 -0
  47. data/cookbooks/mu-activedirectory/recipes/default.rb +8 -0
  48. data/cookbooks/mu-activedirectory/recipes/domain-controller.rb +44 -0
  49. data/cookbooks/mu-activedirectory/recipes/domain-node.rb +50 -0
  50. data/cookbooks/mu-activedirectory/recipes/domain.rb +43 -0
  51. data/cookbooks/mu-activedirectory/recipes/sssd.rb +185 -0
  52. data/cookbooks/mu-activedirectory/resources/domain.rb +25 -0
  53. data/cookbooks/mu-activedirectory/resources/domain_controller.rb +25 -0
  54. data/cookbooks/mu-activedirectory/resources/domain_node.rb +20 -0
  55. data/cookbooks/mu-activedirectory/templates/default/dhclient-eth0.conf.erb +4 -0
  56. data/cookbooks/mu-activedirectory/templates/default/interface +0 -0
  57. data/cookbooks/mu-activedirectory/templates/default/krb5.conf.erb +23 -0
  58. data/cookbooks/mu-activedirectory/templates/default/ntp.conf.erb +56 -0
  59. data/cookbooks/mu-activedirectory/templates/default/smb.conf.erb +33 -0
  60. data/cookbooks/mu-activedirectory/templates/default/sssd.conf.erb +60 -0
  61. data/cookbooks/mu-activedirectory/templates/windows/Backup.xml.erb +20 -0
  62. data/cookbooks/mu-activedirectory/templates/windows/bkupInfo.xml.erb +1 -0
  63. data/cookbooks/mu-activedirectory/templates/windows/gpreprt.xml.erb +198 -0
  64. data/cookbooks/mu-activedirectory/templates/windows/gptmpl.inf.erb +12 -0
  65. data/cookbooks/mu-activedirectory/templates/windows/manifest.xml.erb +1 -0
  66. data/cookbooks/mu-firewall/CHANGELOG.md +11 -0
  67. data/cookbooks/mu-firewall/LICENSE +37 -0
  68. data/cookbooks/mu-firewall/README.md +5 -0
  69. data/cookbooks/mu-firewall/attributes/default.rb +3 -0
  70. data/cookbooks/mu-firewall/metadata.rb +16 -0
  71. data/cookbooks/mu-firewall/recipes/default.rb +10 -0
  72. data/cookbooks/mu-glusterfs/CHANGELOG.md +13 -0
  73. data/cookbooks/mu-glusterfs/LICENSE +37 -0
  74. data/cookbooks/mu-glusterfs/README.md +5 -0
  75. data/cookbooks/mu-glusterfs/attributes/default.rb +34 -0
  76. data/cookbooks/mu-glusterfs/metadata.rb +17 -0
  77. data/cookbooks/mu-glusterfs/recipes/client.rb +62 -0
  78. data/cookbooks/mu-glusterfs/recipes/default.rb +16 -0
  79. data/cookbooks/mu-glusterfs/recipes/samba.rb +57 -0
  80. data/cookbooks/mu-glusterfs/recipes/server.rb +200 -0
  81. data/cookbooks/mu-glusterfs/templates/default/mu-gluster-client.erb +71 -0
  82. data/cookbooks/mu-glusterfs/templates/default/smb.conf.erb +14 -0
  83. data/cookbooks/mu-jenkins/CHANGELOG.md +13 -0
  84. data/cookbooks/mu-jenkins/LICENSE +37 -0
  85. data/cookbooks/mu-jenkins/README.md +105 -0
  86. data/cookbooks/mu-jenkins/attributes/default.rb +42 -0
  87. data/cookbooks/mu-jenkins/files/default/cleanup_deploy_config.xml +73 -0
  88. data/cookbooks/mu-jenkins/files/default/deploy_config.xml +44 -0
  89. data/cookbooks/mu-jenkins/metadata.rb +21 -0
  90. data/cookbooks/mu-jenkins/recipes/default.rb +195 -0
  91. data/cookbooks/mu-jenkins/recipes/node-ssh-config.rb +54 -0
  92. data/cookbooks/mu-jenkins/recipes/public_key.rb +24 -0
  93. data/cookbooks/mu-jenkins/templates/default/example_job.config.xml.erb +24 -0
  94. data/cookbooks/mu-jenkins/templates/default/org.jvnet.hudson.plugins.SSHBuildWrapper.xml.erb +14 -0
  95. data/cookbooks/mu-jenkins/templates/default/ssh_config.erb +6 -0
  96. data/cookbooks/mu-master/CHANGELOG.md +13 -0
  97. data/cookbooks/mu-master/LICENSE +37 -0
  98. data/cookbooks/mu-master/README.md +6 -0
  99. data/cookbooks/mu-master/attributes/default.rb +95 -0
  100. data/cookbooks/mu-master/files/default/0-mu-log-server.conf +19 -0
  101. data/cookbooks/mu-master/files/default/addRSA.ldif +8 -0
  102. data/cookbooks/mu-master/files/default/check_mem.pl +197 -0
  103. data/cookbooks/mu-master/files/default/cloudamatic.png +0 -0
  104. data/cookbooks/mu-master/files/default/dirsrv_admin.pp +0 -0
  105. data/cookbooks/mu-master/files/default/dirsrv_admin.te +13 -0
  106. data/cookbooks/mu-master/files/default/nagios_selinux.pp +0 -0
  107. data/cookbooks/mu-master/files/default/nagios_selinux.te +51 -0
  108. data/cookbooks/mu-master/files/default/nagios_selinux_7.pp +0 -0
  109. data/cookbooks/mu-master/files/default/nagios_selinux_7.te +17 -0
  110. data/cookbooks/mu-master/files/default/pam_sshd +18 -0
  111. data/cookbooks/mu-master/files/default/ssl_enable.ldif +18 -0
  112. data/cookbooks/mu-master/files/default/syslogd_oddjobd.pp +0 -0
  113. data/cookbooks/mu-master/files/default/syslogd_oddjobd.te +10 -0
  114. data/cookbooks/mu-master/files/default/vimrc +19 -0
  115. data/cookbooks/mu-master/libraries/mu.rb +29 -0
  116. data/cookbooks/mu-master/metadata.rb +30 -0
  117. data/cookbooks/mu-master/providers/user.rb +41 -0
  118. data/cookbooks/mu-master/recipes/389ds.rb +164 -0
  119. data/cookbooks/mu-master/recipes/basepackages.rb +58 -0
  120. data/cookbooks/mu-master/recipes/caching_nameserver.rb +37 -0
  121. data/cookbooks/mu-master/recipes/default.rb +451 -0
  122. data/cookbooks/mu-master/recipes/eks-kubectl.rb +41 -0
  123. data/cookbooks/mu-master/recipes/firewall-holes.rb +70 -0
  124. data/cookbooks/mu-master/recipes/init.rb +542 -0
  125. data/cookbooks/mu-master/recipes/ssl-certs.rb +109 -0
  126. data/cookbooks/mu-master/recipes/sssd.rb +89 -0
  127. data/cookbooks/mu-master/recipes/update_nagios_only.rb +242 -0
  128. data/cookbooks/mu-master/recipes/vault.rb +111 -0
  129. data/cookbooks/mu-master/resources/user.rb +19 -0
  130. data/cookbooks/mu-master/templates/default/389-directory-setup.inf.erb +28 -0
  131. data/cookbooks/mu-master/templates/default/chef-server.rb.erb +18 -0
  132. data/cookbooks/mu-master/templates/default/dhclient-eth0.conf.erb +9 -0
  133. data/cookbooks/mu-master/templates/default/mu-momma-cat.erb +149 -0
  134. data/cookbooks/mu-master/templates/default/mu.rc.erb +9 -0
  135. data/cookbooks/mu-master/templates/default/openssl.cnf.erb +354 -0
  136. data/cookbooks/mu-master/templates/default/sssd.conf.erb +44 -0
  137. data/cookbooks/mu-master/templates/default/web_app.conf.erb +90 -0
  138. data/cookbooks/mu-mongo/CHANGELOG.md +13 -0
  139. data/cookbooks/mu-mongo/LICENSE +37 -0
  140. data/cookbooks/mu-mongo/README.md +5 -0
  141. data/cookbooks/mu-mongo/attributes/default.rb +22 -0
  142. data/cookbooks/mu-mongo/files/default/keyfile +16 -0
  143. data/cookbooks/mu-mongo/files/default/remove_nodes.js +5 -0
  144. data/cookbooks/mu-mongo/metadata.rb +17 -0
  145. data/cookbooks/mu-mongo/recipes/default.rb +149 -0
  146. data/cookbooks/mu-mongo/recipes/yum-update-rule.rb +18 -0
  147. data/cookbooks/mu-mongo/templates/default/mongo_create_openfema_db.js.erb +2 -0
  148. data/cookbooks/mu-mongo/templates/default/mongo_init.js.erb +1 -0
  149. data/cookbooks/mu-mongo/templates/default/mongo_logrotate.erb +14 -0
  150. data/cookbooks/mu-mongo/templates/default/mongo_replset_addnodes.js.erb +6 -0
  151. data/cookbooks/mu-mongo/templates/default/replset_init.js.erb +2 -0
  152. data/cookbooks/mu-openvpn/CHANGELOG.md +13 -0
  153. data/cookbooks/mu-openvpn/LICENSE +37 -0
  154. data/cookbooks/mu-openvpn/README.md +6 -0
  155. data/cookbooks/mu-openvpn/attributes/default.rb +119 -0
  156. data/cookbooks/mu-openvpn/metadata.rb +18 -0
  157. data/cookbooks/mu-openvpn/recipes/default.rb +108 -0
  158. data/cookbooks/mu-openvpn/templates/default/users.json.erb +42 -0
  159. data/cookbooks/mu-php54/CHANGELOG.md +12 -0
  160. data/cookbooks/mu-php54/LICENSE +37 -0
  161. data/cookbooks/mu-php54/README.md +0 -0
  162. data/cookbooks/mu-php54/files/centos/php.ini +1802 -0
  163. data/cookbooks/mu-php54/files/ubuntu/php.ini +1870 -0
  164. data/cookbooks/mu-php54/metadata.rb +21 -0
  165. data/cookbooks/mu-php54/recipes/default.rb +97 -0
  166. data/cookbooks/mu-splunk/CHANGELOG.md +37 -0
  167. data/cookbooks/mu-splunk/LICENSE +37 -0
  168. data/cookbooks/mu-splunk/README.md +451 -0
  169. data/cookbooks/mu-splunk/attributes/default.rb +95 -0
  170. data/cookbooks/mu-splunk/attributes/upgrade.rb +49 -0
  171. data/cookbooks/mu-splunk/definitions/splunk_installer.rb +103 -0
  172. data/cookbooks/mu-splunk/files/default/splunk-nocheck +10 -0
  173. data/cookbooks/mu-splunk/libraries/helpers.rb +72 -0
  174. data/cookbooks/mu-splunk/libraries/splunk_app_provider.rb +156 -0
  175. data/cookbooks/mu-splunk/libraries/splunk_app_resource.rb +43 -0
  176. data/cookbooks/mu-splunk/metadata.json +30 -0
  177. data/cookbooks/mu-splunk/metadata.rb +17 -0
  178. data/cookbooks/mu-splunk/recipes/client.rb +143 -0
  179. data/cookbooks/mu-splunk/recipes/default.rb +31 -0
  180. data/cookbooks/mu-splunk/recipes/disabled.rb +41 -0
  181. data/cookbooks/mu-splunk/recipes/install_forwarder.rb +23 -0
  182. data/cookbooks/mu-splunk/recipes/install_server.rb +23 -0
  183. data/cookbooks/mu-splunk/recipes/server.rb +53 -0
  184. data/cookbooks/mu-splunk/recipes/service.rb +95 -0
  185. data/cookbooks/mu-splunk/recipes/setup_auth.rb +49 -0
  186. data/cookbooks/mu-splunk/recipes/setup_ssl.rb +63 -0
  187. data/cookbooks/mu-splunk/recipes/upgrade.rb +94 -0
  188. data/cookbooks/mu-splunk/recipes/user.rb +34 -0
  189. data/cookbooks/mu-splunk/templates/default/base_logs_unix_inputs.conf.erb +26 -0
  190. data/cookbooks/mu-splunk/templates/default/inputs.conf.erb +13 -0
  191. data/cookbooks/mu-splunk/templates/default/outputs.conf.erb +9 -0
  192. data/cookbooks/mu-splunk/templates/default/splunk-init.erb +74 -0
  193. data/cookbooks/mu-splunk/templates/default/system-web.conf.erb +7 -0
  194. data/cookbooks/mu-tools/CHANGELOG.md +12 -0
  195. data/cookbooks/mu-tools/LICENSE +37 -0
  196. data/cookbooks/mu-tools/README.md +188 -0
  197. data/cookbooks/mu-tools/attributes/default.rb +142 -0
  198. data/cookbooks/mu-tools/attributes/ebs_rolling_snapshots.rb +3 -0
  199. data/cookbooks/mu-tools/files/amazon/etc/freshclam.conf +235 -0
  200. data/cookbooks/mu-tools/files/centos/CentOS-Base.repo +52 -0
  201. data/cookbooks/mu-tools/files/centos/etc/bashrc +93 -0
  202. data/cookbooks/mu-tools/files/centos/etc/freshclam.conf +235 -0
  203. data/cookbooks/mu-tools/files/centos/etc/login.defs +72 -0
  204. data/cookbooks/mu-tools/files/centos/etc/profile +77 -0
  205. data/cookbooks/mu-tools/files/centos/etc/security/limits.conf +57 -0
  206. data/cookbooks/mu-tools/files/centos/etc/sysconfig/init +19 -0
  207. data/cookbooks/mu-tools/files/centos/etc/sysctl.conf +82 -0
  208. data/cookbooks/mu-tools/files/centos-6/README_MU +0 -0
  209. data/cookbooks/mu-tools/files/centos-6/etc/audit/stig.rules +173 -0
  210. data/cookbooks/mu-tools/files/centos-6/etc/bashrc +90 -0
  211. data/cookbooks/mu-tools/files/centos-6/etc/login.defs +70 -0
  212. data/cookbooks/mu-tools/files/centos-6/etc/pam.d/su +12 -0
  213. data/cookbooks/mu-tools/files/centos-6/etc/profile +83 -0
  214. data/cookbooks/mu-tools/files/centos-6/etc/securetty +12 -0
  215. data/cookbooks/mu-tools/files/centos-6/etc/sysconfig/init +30 -0
  216. data/cookbooks/mu-tools/files/centos-6/etc/sysctl.conf +40 -0
  217. data/cookbooks/mu-tools/files/default/Mu_CA.pem +34 -0
  218. data/cookbooks/mu-tools/files/default/PSWindowsUpdate.zip +0 -0
  219. data/cookbooks/mu-tools/files/default/ebs_snapshots.py +123 -0
  220. data/cookbooks/mu-tools/files/default/etc/BANNER +0 -0
  221. data/cookbooks/mu-tools/files/default/etc/BANNER-FEDERAL +19 -0
  222. data/cookbooks/mu-tools/files/default/gpo_no_uac.zip +0 -0
  223. data/cookbooks/mu-tools/files/default/mypol.pp +0 -0
  224. data/cookbooks/mu-tools/files/default/mypol.te +37 -0
  225. data/cookbooks/mu-tools/files/default/nrpe_c7.pp +0 -0
  226. data/cookbooks/mu-tools/files/default/nrpe_c7.te +31 -0
  227. data/cookbooks/mu-tools/files/default/nrpe_check_disk.pp +0 -0
  228. data/cookbooks/mu-tools/files/default/nrpe_check_disk.te +11 -0
  229. data/cookbooks/mu-tools/files/default/nrpe_disk.pp +0 -0
  230. data/cookbooks/mu-tools/files/default/nrpe_disk.te +10 -0
  231. data/cookbooks/mu-tools/files/default/nrpe_file.pp +0 -0
  232. data/cookbooks/mu-tools/files/default/nrpe_file.te +31 -0
  233. data/cookbooks/mu-tools/files/default/ntrights +0 -0
  234. data/cookbooks/mu-tools/files/default/serverclass.conf +18 -0
  235. data/cookbooks/mu-tools/files/default/splunk-apps/base_logs_unix/local/app.conf +1 -0
  236. data/cookbooks/mu-tools/files/default/splunk-apps/base_logs_unix/local/inputs.conf +13 -0
  237. data/cookbooks/mu-tools/files/default/splunk-apps/base_logs_windows/local/app.conf +1 -0
  238. data/cookbooks/mu-tools/files/default/splunk-apps/base_logs_windows/local/inputs.conf +8 -0
  239. data/cookbooks/mu-tools/files/default/sshd_pol.pp +0 -0
  240. data/cookbooks/mu-tools/files/default/sshd_pol.te +32 -0
  241. data/cookbooks/mu-tools/files/redhat/etc/bashrc +93 -0
  242. data/cookbooks/mu-tools/files/redhat/etc/freshclam.conf +235 -0
  243. data/cookbooks/mu-tools/files/redhat/etc/login.defs +72 -0
  244. data/cookbooks/mu-tools/files/redhat/etc/profile +77 -0
  245. data/cookbooks/mu-tools/files/redhat/etc/security/limits.conf +57 -0
  246. data/cookbooks/mu-tools/files/redhat/etc/sysconfig/init +19 -0
  247. data/cookbooks/mu-tools/files/redhat/etc/sysctl.conf +82 -0
  248. data/cookbooks/mu-tools/files/redhat-6/README_MU +0 -0
  249. data/cookbooks/mu-tools/files/redhat-6/etc/audit/stig.rules +173 -0
  250. data/cookbooks/mu-tools/files/redhat-6/etc/bashrc +90 -0
  251. data/cookbooks/mu-tools/files/redhat-6/etc/login.defs +70 -0
  252. data/cookbooks/mu-tools/files/redhat-6/etc/pam.d/su +12 -0
  253. data/cookbooks/mu-tools/files/redhat-6/etc/profile +83 -0
  254. data/cookbooks/mu-tools/files/redhat-6/etc/securetty +12 -0
  255. data/cookbooks/mu-tools/files/redhat-6/etc/sysconfig/init +30 -0
  256. data/cookbooks/mu-tools/files/redhat-6/etc/sysctl.conf +40 -0
  257. data/cookbooks/mu-tools/files/redhat-7.1/etc/freshclam.conf +235 -0
  258. data/cookbooks/mu-tools/files/ubuntu-12.04/etc/bash.bashrc +64 -0
  259. data/cookbooks/mu-tools/files/ubuntu-12.04/etc/common-session +30 -0
  260. data/cookbooks/mu-tools/files/ubuntu-12.04/etc/login.defs +338 -0
  261. data/cookbooks/mu-tools/files/ubuntu-12.04/etc/profile +30 -0
  262. data/cookbooks/mu-tools/files/ubuntu-12.04/etc/security/limits.conf +56 -0
  263. data/cookbooks/mu-tools/files/ubuntu-12.04/etc/sysctl.conf +60 -0
  264. data/cookbooks/mu-tools/libraries/helper.rb +292 -0
  265. data/cookbooks/mu-tools/metadata.rb +28 -0
  266. data/cookbooks/mu-tools/recipes/add_admin_ssh_keys.rb +35 -0
  267. data/cookbooks/mu-tools/recipes/apply_security.rb +440 -0
  268. data/cookbooks/mu-tools/recipes/aws_api.rb +23 -0
  269. data/cookbooks/mu-tools/recipes/base_repositories.rb +31 -0
  270. data/cookbooks/mu-tools/recipes/cisbenchmark.rb +59 -0
  271. data/cookbooks/mu-tools/recipes/clamav.rb +53 -0
  272. data/cookbooks/mu-tools/recipes/cloudinit.rb +58 -0
  273. data/cookbooks/mu-tools/recipes/configure_oracle_tools.rb +81 -0
  274. data/cookbooks/mu-tools/recipes/disable-requiretty.rb +22 -0
  275. data/cookbooks/mu-tools/recipes/ebs_rolling_snapshots.rb +75 -0
  276. data/cookbooks/mu-tools/recipes/efs.rb +70 -0
  277. data/cookbooks/mu-tools/recipes/eks.rb +160 -0
  278. data/cookbooks/mu-tools/recipes/gcloud.rb +98 -0
  279. data/cookbooks/mu-tools/recipes/google_api.rb +25 -0
  280. data/cookbooks/mu-tools/recipes/maldet.rb +67 -0
  281. data/cookbooks/mu-tools/recipes/nagios.rb +19 -0
  282. data/cookbooks/mu-tools/recipes/newclient.rb +23 -0
  283. data/cookbooks/mu-tools/recipes/nrpe.rb +115 -0
  284. data/cookbooks/mu-tools/recipes/python_pip.rb +35 -0
  285. data/cookbooks/mu-tools/recipes/retrieve_application.rb +51 -0
  286. data/cookbooks/mu-tools/recipes/rsyslog.rb +65 -0
  287. data/cookbooks/mu-tools/recipes/set_local_fw.rb +57 -0
  288. data/cookbooks/mu-tools/recipes/set_mu_hostname.rb +81 -0
  289. data/cookbooks/mu-tools/recipes/split_var_partitions.rb +86 -0
  290. data/cookbooks/mu-tools/recipes/splunk-client.rb +69 -0
  291. data/cookbooks/mu-tools/recipes/splunk-server.rb +104 -0
  292. data/cookbooks/mu-tools/recipes/store_inspec_attr.rb +8 -0
  293. data/cookbooks/mu-tools/recipes/updates.rb +96 -0
  294. data/cookbooks/mu-tools/recipes/windows-client.rb +202 -0
  295. data/cookbooks/mu-tools/resources/aws_windows.rb +33 -0
  296. data/cookbooks/mu-tools/resources/disk.rb +88 -0
  297. data/cookbooks/mu-tools/resources/mommacat_request.rb +11 -0
  298. data/cookbooks/mu-tools/resources/scheduled_tasks.rb +29 -0
  299. data/cookbooks/mu-tools/resources/sshd_service.rb +45 -0
  300. data/cookbooks/mu-tools/resources/windows_users.rb +242 -0
  301. data/cookbooks/mu-tools/templates/amazon/sshd_config.erb +168 -0
  302. data/cookbooks/mu-tools/templates/centos-6/sshd_config.erb +212 -0
  303. data/cookbooks/mu-tools/templates/centos-7/sshd_config.erb +215 -0
  304. data/cookbooks/mu-tools/templates/default/0-mu-log-client.conf.erb +13 -0
  305. data/cookbooks/mu-tools/templates/default/conf.maldet.erb +137 -0
  306. data/cookbooks/mu-tools/templates/default/etc_hosts.erb +30 -0
  307. data/cookbooks/mu-tools/templates/default/etc_pamd_password-auth.erb +14 -0
  308. data/cookbooks/mu-tools/templates/default/etc_pamd_system-auth.erb +14 -0
  309. data/cookbooks/mu-tools/templates/default/etc_sysconfig_network.erb +12 -0
  310. data/cookbooks/mu-tools/templates/default/kubeconfig.erb +29 -0
  311. data/cookbooks/mu-tools/templates/default/kubelet.service.erb +35 -0
  312. data/cookbooks/mu-tools/templates/default/maldet_scanall.sh.erb +15 -0
  313. data/cookbooks/mu-tools/templates/default/nrpe.cfg.erb +233 -0
  314. data/cookbooks/mu-tools/templates/redhat-6/sshd_config.erb +213 -0
  315. data/cookbooks/mu-tools/templates/redhat-7/sshd_config.erb +215 -0
  316. data/cookbooks/mu-tools/templates/ubuntu-12.04/sshd_config.erb +146 -0
  317. data/cookbooks/mu-tools/templates/ubuntu-14.04/sshd_config.erb +145 -0
  318. data/cookbooks/mu-tools/templates/windows/Backup.xml.erb +20 -0
  319. data/cookbooks/mu-tools/templates/windows/bkupInfo.xml.erb +1 -0
  320. data/cookbooks/mu-tools/templates/windows/gpreprt.xml.erb +214 -0
  321. data/cookbooks/mu-tools/templates/windows/gptmpl.inf.erb +12 -0
  322. data/cookbooks/mu-tools/templates/windows/manifest.xml.erb +1 -0
  323. data/cookbooks/mu-tools/templates/windows/set_ad_dns_scheduled_task.ps1.erb +6 -0
  324. data/cookbooks/mu-tools/templates/windows/sshd_config.erb +136 -0
  325. data/cookbooks/mu-utility/CHANGELOG.md +12 -0
  326. data/cookbooks/mu-utility/LICENSE +37 -0
  327. data/cookbooks/mu-utility/README.md +6 -0
  328. data/cookbooks/mu-utility/attributes/default.rb +1 -0
  329. data/cookbooks/mu-utility/libraries/matchers.rb +21 -0
  330. data/cookbooks/mu-utility/metadata.rb +16 -0
  331. data/cookbooks/mu-utility/recipes/apt.rb +23 -0
  332. data/cookbooks/mu-utility/recipes/cleanup_image_helper.rb +118 -0
  333. data/cookbooks/mu-utility/recipes/iptables.rb +26 -0
  334. data/cookbooks/mu-utility/recipes/luks.rb +18 -0
  335. data/cookbooks/mu-utility/recipes/nat.rb +104 -0
  336. data/cookbooks/mu-utility/recipes/php.rb +33 -0
  337. data/cookbooks/mu-utility/recipes/rdp_gateway.rb +83 -0
  338. data/cookbooks/mu-utility/recipes/remi.rb +44 -0
  339. data/cookbooks/mu-utility/recipes/vim.rb +26 -0
  340. data/cookbooks/mu-utility/recipes/windows_basics.rb +37 -0
  341. data/cookbooks/mu-utility/recipes/zip.rb +26 -0
  342. data/cookbooks/mu-utility/templates/default/BundleConfig.xml.erb +34 -0
  343. data/cookbooks/mu-utility/templates/default/config.xml.erb +60 -0
  344. data/cookbooks/nagios/Berksfile +8 -0
  345. data/cookbooks/nagios/CHANGELOG.md +589 -0
  346. data/cookbooks/nagios/CONTRIBUTING.md +11 -0
  347. data/cookbooks/nagios/LICENSE +37 -0
  348. data/cookbooks/nagios/README.md +328 -0
  349. data/cookbooks/nagios/TESTING.md +2 -0
  350. data/cookbooks/nagios/attributes/config.rb +171 -0
  351. data/cookbooks/nagios/attributes/default.rb +228 -0
  352. data/cookbooks/nagios/chefignore +102 -0
  353. data/cookbooks/nagios/definitions/command.rb +33 -0
  354. data/cookbooks/nagios/definitions/contact.rb +33 -0
  355. data/cookbooks/nagios/definitions/contactgroup.rb +33 -0
  356. data/cookbooks/nagios/definitions/host.rb +33 -0
  357. data/cookbooks/nagios/definitions/hostdependency.rb +33 -0
  358. data/cookbooks/nagios/definitions/hostescalation.rb +34 -0
  359. data/cookbooks/nagios/definitions/hostgroup.rb +33 -0
  360. data/cookbooks/nagios/definitions/nagios_conf.rb +38 -0
  361. data/cookbooks/nagios/definitions/resource.rb +33 -0
  362. data/cookbooks/nagios/definitions/service.rb +33 -0
  363. data/cookbooks/nagios/definitions/servicedependency.rb +33 -0
  364. data/cookbooks/nagios/definitions/serviceescalation.rb +34 -0
  365. data/cookbooks/nagios/definitions/servicegroup.rb +33 -0
  366. data/cookbooks/nagios/definitions/timeperiod.rb +33 -0
  367. data/cookbooks/nagios/libraries/base.rb +314 -0
  368. data/cookbooks/nagios/libraries/command.rb +91 -0
  369. data/cookbooks/nagios/libraries/contact.rb +230 -0
  370. data/cookbooks/nagios/libraries/contactgroup.rb +112 -0
  371. data/cookbooks/nagios/libraries/custom_option.rb +36 -0
  372. data/cookbooks/nagios/libraries/data_bag_helper.rb +23 -0
  373. data/cookbooks/nagios/libraries/default.rb +90 -0
  374. data/cookbooks/nagios/libraries/host.rb +412 -0
  375. data/cookbooks/nagios/libraries/hostdependency.rb +181 -0
  376. data/cookbooks/nagios/libraries/hostescalation.rb +173 -0
  377. data/cookbooks/nagios/libraries/hostgroup.rb +119 -0
  378. data/cookbooks/nagios/libraries/nagios.rb +282 -0
  379. data/cookbooks/nagios/libraries/resource.rb +59 -0
  380. data/cookbooks/nagios/libraries/service.rb +455 -0
  381. data/cookbooks/nagios/libraries/servicedependency.rb +215 -0
  382. data/cookbooks/nagios/libraries/serviceescalation.rb +195 -0
  383. data/cookbooks/nagios/libraries/servicegroup.rb +144 -0
  384. data/cookbooks/nagios/libraries/timeperiod.rb +160 -0
  385. data/cookbooks/nagios/libraries/users_helper.rb +54 -0
  386. data/cookbooks/nagios/metadata.rb +25 -0
  387. data/cookbooks/nagios/recipes/_load_databag_config.rb +153 -0
  388. data/cookbooks/nagios/recipes/_load_default_config.rb +241 -0
  389. data/cookbooks/nagios/recipes/apache.rb +48 -0
  390. data/cookbooks/nagios/recipes/default.rb +204 -0
  391. data/cookbooks/nagios/recipes/nginx.rb +82 -0
  392. data/cookbooks/nagios/recipes/pagerduty.rb +143 -0
  393. data/cookbooks/nagios/recipes/server_package.rb +40 -0
  394. data/cookbooks/nagios/recipes/server_source.rb +164 -0
  395. data/cookbooks/nagios/templates/default/apache2.conf.erb +96 -0
  396. data/cookbooks/nagios/templates/default/cgi.cfg.erb +266 -0
  397. data/cookbooks/nagios/templates/default/commands.cfg.erb +13 -0
  398. data/cookbooks/nagios/templates/default/contacts.cfg.erb +37 -0
  399. data/cookbooks/nagios/templates/default/hostgroups.cfg.erb +25 -0
  400. data/cookbooks/nagios/templates/default/hosts.cfg.erb +15 -0
  401. data/cookbooks/nagios/templates/default/htpasswd.users.erb +6 -0
  402. data/cookbooks/nagios/templates/default/nagios.cfg.erb +22 -0
  403. data/cookbooks/nagios/templates/default/nginx.conf.erb +62 -0
  404. data/cookbooks/nagios/templates/default/pagerduty.cgi.erb +185 -0
  405. data/cookbooks/nagios/templates/default/resource.cfg.erb +27 -0
  406. data/cookbooks/nagios/templates/default/servicedependencies.cfg.erb +15 -0
  407. data/cookbooks/nagios/templates/default/servicegroups.cfg.erb +14 -0
  408. data/cookbooks/nagios/templates/default/services.cfg.erb +14 -0
  409. data/cookbooks/nagios/templates/default/templates.cfg.erb +31 -0
  410. data/cookbooks/nagios/templates/default/timeperiods.cfg.erb +13 -0
  411. data/cookbooks/s3fs/CHANGELOG.md +13 -0
  412. data/cookbooks/s3fs/LICENSE +37 -0
  413. data/cookbooks/s3fs/README.md +6 -0
  414. data/cookbooks/s3fs/attributes/default.rb +15 -0
  415. data/cookbooks/s3fs/files/default/fuse-2.9.3.zip +0 -0
  416. data/cookbooks/s3fs/metadata.rb +16 -0
  417. data/cookbooks/s3fs/recipes/default.rb +91 -0
  418. data/data_bags/demo/app.json +7 -0
  419. data/data_bags/nagios_services/chef.json +6 -0
  420. data/data_bags/nagios_services/linux_diskspace.json +5 -0
  421. data/data_bags/nagios_services/momma_cat.json +6 -0
  422. data/data_bags/nagios_services/mu-master-memory.json +5 -0
  423. data/data_bags/nagios_services/nagios_ui.json +6 -0
  424. data/data_bags/nagios_services/node_ssh.json +6 -0
  425. data/data_bags/nagios_services/ssh.json +6 -0
  426. data/demo/lambda_test.yaml +29 -0
  427. data/environments/DEV.json +8 -0
  428. data/environments/PROD.json +8 -0
  429. data/environments/dev.json +8 -0
  430. data/environments/development.json +8 -0
  431. data/environments/prod.json +8 -0
  432. data/extras/README.md +1 -0
  433. data/extras/admin-role-binding.yaml +16 -0
  434. data/extras/admin-user.yaml +6 -0
  435. data/extras/aws-auth-cm.yaml.erb +12 -0
  436. data/extras/clean-stock-amis +48 -0
  437. data/extras/git-fix-permissions-hook +12 -0
  438. data/extras/gitlab-eks-helper.sh.erb +20 -0
  439. data/extras/image-generators/README.md +2 -0
  440. data/extras/image-generators/aws/centos6.yaml +18 -0
  441. data/extras/image-generators/aws/centos7-govcloud.yaml +24 -0
  442. data/extras/image-generators/aws/centos7.yaml +17 -0
  443. data/extras/image-generators/aws/rhel7.yaml +17 -0
  444. data/extras/image-generators/aws/win2k12.yaml +16 -0
  445. data/extras/image-generators/aws/win2k16.yaml +16 -0
  446. data/extras/image-generators/aws/windows.yaml +18 -0
  447. data/extras/image-generators/gcp/centos6.yaml +17 -0
  448. data/extras/lambda_waf_domain_blacklist.py +103 -0
  449. data/extras/platform_berksfile_base +50 -0
  450. data/extras/ruby_rpm/build.sh +17 -0
  451. data/extras/ruby_rpm/muby.spec +44 -0
  452. data/extras/vault_tools/README.md +6 -0
  453. data/extras/vault_tools/export_vaults.sh +3 -0
  454. data/extras/vault_tools/recreate_vaults.sh +5 -0
  455. data/extras/vault_tools/test_vaults.sh +5 -0
  456. data/install/README.md +8 -0
  457. data/install/cfn_create_mu_master.json +1034 -0
  458. data/install/chef-server.rb.erb +19 -0
  459. data/install/deprecated-bash-library.sh +1891 -0
  460. data/install/images/Usage.png +0 -0
  461. data/install/installer +71 -0
  462. data/install/jenkinskeys.rb +8 -0
  463. data/install/user-dot-murc.erb +14 -0
  464. data/modules/html.erb +19 -0
  465. data/modules/mommacat.ru +426 -0
  466. data/modules/mu/cleanup.rb +339 -0
  467. data/modules/mu/cloud.rb +1446 -0
  468. data/modules/mu/clouds/README.md +201 -0
  469. data/modules/mu/clouds/aws/alarm.rb +319 -0
  470. data/modules/mu/clouds/aws/cache_cluster.rb +1010 -0
  471. data/modules/mu/clouds/aws/collection.rb +373 -0
  472. data/modules/mu/clouds/aws/container_cluster.rb +667 -0
  473. data/modules/mu/clouds/aws/database.rb +1836 -0
  474. data/modules/mu/clouds/aws/dnszone.rb +911 -0
  475. data/modules/mu/clouds/aws/firewall_rule.rb +641 -0
  476. data/modules/mu/clouds/aws/folder.rb +92 -0
  477. data/modules/mu/clouds/aws/function.rb +349 -0
  478. data/modules/mu/clouds/aws/group.rb +251 -0
  479. data/modules/mu/clouds/aws/loadbalancer.rb +888 -0
  480. data/modules/mu/clouds/aws/log.rb +363 -0
  481. data/modules/mu/clouds/aws/msg_queue.rb +480 -0
  482. data/modules/mu/clouds/aws/notification.rb +139 -0
  483. data/modules/mu/clouds/aws/role.rb +656 -0
  484. data/modules/mu/clouds/aws/search_domain.rb +646 -0
  485. data/modules/mu/clouds/aws/server.rb +2294 -0
  486. data/modules/mu/clouds/aws/server_pool.rb +1388 -0
  487. data/modules/mu/clouds/aws/storage_pool.rb +495 -0
  488. data/modules/mu/clouds/aws/user.rb +382 -0
  489. data/modules/mu/clouds/aws/userdata/README.md +4 -0
  490. data/modules/mu/clouds/aws/userdata/linux.erb +179 -0
  491. data/modules/mu/clouds/aws/userdata/windows.erb +278 -0
  492. data/modules/mu/clouds/aws/vpc.rb +1943 -0
  493. data/modules/mu/clouds/aws.rb +1009 -0
  494. data/modules/mu/clouds/cloudformation/alarm.rb +146 -0
  495. data/modules/mu/clouds/cloudformation/cache_cluster.rb +167 -0
  496. data/modules/mu/clouds/cloudformation/collection.rb +117 -0
  497. data/modules/mu/clouds/cloudformation/database.rb +278 -0
  498. data/modules/mu/clouds/cloudformation/dnszone.rb +274 -0
  499. data/modules/mu/clouds/cloudformation/firewall_rule.rb +308 -0
  500. data/modules/mu/clouds/cloudformation/loadbalancer.rb +193 -0
  501. data/modules/mu/clouds/cloudformation/log.rb +170 -0
  502. data/modules/mu/clouds/cloudformation/server.rb +370 -0
  503. data/modules/mu/clouds/cloudformation/server_pool.rb +279 -0
  504. data/modules/mu/clouds/cloudformation/vpc.rb +322 -0
  505. data/modules/mu/clouds/cloudformation.rb +733 -0
  506. data/modules/mu/clouds/docker.rb +30 -0
  507. data/modules/mu/clouds/google/container_cluster.rb +290 -0
  508. data/modules/mu/clouds/google/database.rb +152 -0
  509. data/modules/mu/clouds/google/firewall_rule.rb +267 -0
  510. data/modules/mu/clouds/google/group.rb +164 -0
  511. data/modules/mu/clouds/google/loadbalancer.rb +479 -0
  512. data/modules/mu/clouds/google/server.rb +1510 -0
  513. data/modules/mu/clouds/google/server_pool.rb +274 -0
  514. data/modules/mu/clouds/google/user.rb +266 -0
  515. data/modules/mu/clouds/google/userdata/README.md +4 -0
  516. data/modules/mu/clouds/google/userdata/linux.erb +137 -0
  517. data/modules/mu/clouds/google/userdata/windows.erb +275 -0
  518. data/modules/mu/clouds/google/vpc.rb +890 -0
  519. data/modules/mu/clouds/google.rb +811 -0
  520. data/modules/mu/config/README.md +11 -0
  521. data/modules/mu/config/alarm.rb +271 -0
  522. data/modules/mu/config/cache_cluster.rb +172 -0
  523. data/modules/mu/config/collection.rb +87 -0
  524. data/modules/mu/config/container_cluster.rb +103 -0
  525. data/modules/mu/config/container_cluster.yml +36 -0
  526. data/modules/mu/config/database.rb +458 -0
  527. data/modules/mu/config/database.yml +26 -0
  528. data/modules/mu/config/dnszone.rb +327 -0
  529. data/modules/mu/config/firewall_rule.rb +118 -0
  530. data/modules/mu/config/folder.rb +70 -0
  531. data/modules/mu/config/function.rb +140 -0
  532. data/modules/mu/config/group.rb +64 -0
  533. data/modules/mu/config/loadbalancer.rb +482 -0
  534. data/modules/mu/config/log.rb +47 -0
  535. data/modules/mu/config/log.yml +6 -0
  536. data/modules/mu/config/msg_queue.rb +47 -0
  537. data/modules/mu/config/msg_queue.yml +9 -0
  538. data/modules/mu/config/notification.rb +44 -0
  539. data/modules/mu/config/project.rb +71 -0
  540. data/modules/mu/config/role.rb +102 -0
  541. data/modules/mu/config/search_domain.rb +61 -0
  542. data/modules/mu/config/search_domain.yml +25 -0
  543. data/modules/mu/config/server.rb +587 -0
  544. data/modules/mu/config/server.yml +8 -0
  545. data/modules/mu/config/server_pool.rb +216 -0
  546. data/modules/mu/config/server_pool.yml +71 -0
  547. data/modules/mu/config/storage_pool.rb +145 -0
  548. data/modules/mu/config/user.rb +78 -0
  549. data/modules/mu/config/vpc.rb +743 -0
  550. data/modules/mu/config/vpc.yml +6 -0
  551. data/modules/mu/config.rb +2000 -0
  552. data/modules/mu/defaults/README.md +2 -0
  553. data/modules/mu/defaults/amazon_images.yaml +121 -0
  554. data/modules/mu/defaults/google_images.yaml +16 -0
  555. data/modules/mu/deploy.rb +686 -0
  556. data/modules/mu/groomer.rb +123 -0
  557. data/modules/mu/groomers/README.md +58 -0
  558. data/modules/mu/groomers/chef.rb +1024 -0
  559. data/modules/mu/kittens.rb +11319 -0
  560. data/modules/mu/logger.rb +208 -0
  561. data/modules/mu/master/README.md +27 -0
  562. data/modules/mu/master/chef.rb +471 -0
  563. data/modules/mu/master/ldap.rb +1005 -0
  564. data/modules/mu/master.rb +415 -0
  565. data/modules/mu/mommacat.rb +2703 -0
  566. data/modules/mu-load-config.rb +1 -0
  567. data/modules/mu.rb +724 -0
  568. data/modules/scratchpad.erb +1 -0
  569. data/modules/tests/super_complex_bok.yml +41 -0
  570. data/modules/tests/super_simple_bok.yml +40 -0
  571. data/mu.gemspec +62 -0
  572. data/roles/demo-dbservice-configure.json +19 -0
  573. data/roles/demo-portal-configure.json +19 -0
  574. data/roles/mu-master-jenkins.json +24 -0
  575. data/roles/mu-master-nagios-only.json +13 -0
  576. data/roles/mu-master.json +12 -0
  577. data/roles/mu-node.json +19 -0
  578. data/roles/mu-splunk-server.json +13 -0
  579. data/roles/mu-splunk.json +13 -0
  580. data/test/clean_up.py +25 -0
  581. data/test/demo-test-profile/README.md +3 -0
  582. data/test/demo-test-profile/controls/flask.rb +84 -0
  583. data/test/demo-test-profile/inspec.lock +7 -0
  584. data/test/demo-test-profile/inspec.yml +11 -0
  585. data/test/etco-test-profile/README.md +3 -0
  586. data/test/etco-test-profile/controls/all-in-one.rb +182 -0
  587. data/test/etco-test-profile/inspec.lock +7 -0
  588. data/test/etco-test-profile/inspec.yml +11 -0
  589. data/test/exec_inspec.py +246 -0
  590. data/test/exec_mu_install.py +241 -0
  591. data/test/exec_retry.py +44 -0
  592. data/test/mu-master-test/README.md +3 -0
  593. data/test/mu-master-test/controls/all_in_one.rb +557 -0
  594. data/test/mu-master-test/inspec.lock +3 -0
  595. data/test/mu-master-test/inspec.yml +11 -0
  596. data/test/mu-tools-test/README.md +3 -0
  597. data/test/mu-tools-test/controls/base.rb +265 -0
  598. data/test/mu-tools-test/inspec.lock +3 -0
  599. data/test/mu-tools-test/inspec.yml +8 -0
  600. data/test/simple-server-php-test/README.md +3 -0
  601. data/test/simple-server-php-test/controls/apachephp.rb +25 -0
  602. data/test/simple-server-php-test/controls/example.rb +19 -0
  603. data/test/simple-server-php-test/inspec.lock +7 -0
  604. data/test/simple-server-php-test/inspec.yml +12 -0
  605. data/test/simple-server-rails-test/README.md +3 -0
  606. data/test/simple-server-rails-test/controls/rails.rb +188 -0
  607. data/test/simple-server-rails-test/inspec.lock +7 -0
  608. data/test/simple-server-rails-test/inspec.yml +11 -0
  609. data/test/simple-windows-test/README.md +3 -0
  610. data/test/simple-windows-test/controls/windows.rb +20 -0
  611. data/test/simple-windows-test/inspec.lock +7 -0
  612. data/test/simple-windows-test/inspec.yml +11 -0
  613. data/test/smoke_test.rb +75 -0
  614. data/test/wordpress-test/README.md +3 -0
  615. data/test/wordpress-test/controls/wordpress.rb +97 -0
  616. data/test/wordpress-test/inspec.lock +7 -0
  617. data/test/wordpress-test/inspec.yml +11 -0
  618. metadata +979 -0
@@ -0,0 +1,683 @@
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
+ require 'optimist'
17
+ require 'json'
18
+ require File.realpath(File.expand_path(File.dirname(__FILE__)+"/mu-load-config.rb"))
19
+ require 'mu'
20
+
21
+ $opts = Optimist::options do
22
+ banner <<-EOS
23
+ Usage:
24
+ #{$0} [-c] [-w] [-l] [-d] [-a] [-e <environment>] [-p <platform>] [-m <mode>] [-o <chefopts>] [-x <command>] [ deploy_id|node_name [ ... ] ]
25
+ EOS
26
+ opt :concurrent, "Max number of processes to run concurrently when invoking Chef or MommaCat on multiple nodes.", :require => false, :default => 10, :type => :integer
27
+ opt :list, "Perform no action, but instead return a list of matching hosts. Default behavior with no other flags.", :require => false, :default => false, :type => :boolean
28
+ opt :deploys, "Operate on matching deploy IDs instead of node names.", :require => false, :default => false, :type => :boolean
29
+ opt :all, "Operate on all nodes/deploys. Use with caution.", :require => false, :default => false, :type => :boolean
30
+ opt :platform, "Operate exclusively on one nodes of a particular operating system. Can be used in conjunction with -a or -d. Valid platforms: linux, windows", :require => false, :type => :string
31
+ opt :environment, "Operate exclusively on one nodes with a particular environment (e.g. dev, prod). Can be used in conjunction with -a or -d.", :require => false, :type => :string
32
+ opt :override_chef_runlist, "An alternate runlist to pass to Chef, in chefrun mode.", :require => false, :type => :string
33
+ opt :xecute, "Run a shell command on matching nodes. Overrides --mode and suppresses some informational output in favor of scriptability.", :require => false, :type => :string
34
+ opt :mode, "Action to perform on matching nodes. Valid actions: groom, chefrun, awsmeta, vaults, certs, chefupgrade", :require => false, :default => "chefrun", :type => :string
35
+ opt :verbose, "Show output from Chef runs, etc", :require => false, :default => false, :type => :boolean
36
+ opt :winrm, "Force WinRM connection. Disable SSH fallback", :require => false, :default => false, :type => :boolean
37
+ opt :info, "List a particular node attribute", :require => false, :default => 'nodename', :type => :string
38
+ end
39
+
40
+ MU.setLogging(MU::Logger::LOUD) if $opts[:verbose]
41
+
42
+ if !["groom", "chefrun", "vaults", "userdata", "awsmeta", "certs", "chefupgrade"].include?($opts[:mode])
43
+ Optimist::die(:mode, "--mode must be one of: groom, chefrun, awsmeta, vaults, certs, chefupgrade")
44
+ end
45
+ if $opts[:platform] and !["linux", "windows"].include?($opts[:platform])
46
+ Optimist::die(:platform, "--platform must be one of: linux, windows")
47
+ end
48
+ if !$opts[:xecute] and !$opts[:override_chef_runlist] and !$opts[:mode_given]
49
+ $opts[:list] = true
50
+ end
51
+ if $opts[:override_chef_runlist] and !$opts[:mode_given]
52
+ $opts[:mode_given] = true
53
+ end
54
+ if ARGV.empty? and !$opts[:all] and !$opts[:platform] and !$opts[:environment] and !$opts[:list]
55
+ Optimist::educate
56
+ exit 1
57
+ end
58
+
59
+ Thread.abort_on_exception = true
60
+ master_pid = Process.pid
61
+ $children = {}
62
+ signals = Signal.list
63
+ signals.keys.each { |sig|
64
+ # Ruby 2.3 doesn't want to trap these
65
+ next if ["ILL", "FPE", "KILL", "BUS", "SEGV", "STOP", "VTALRM"].include?(sig)
66
+ Signal.trap(signals[sig]) do
67
+ if Process.pid == master_pid
68
+ $children.each_pair { |pid, node|
69
+ if ["INT", "TERM", "EXIT", "ABRT"].include?(sig)
70
+ Process.kill("KILL", pid) # aka --dammit
71
+ else
72
+ begin
73
+ Process.kill(sig, pid)
74
+ rescue Errno::ESRCH
75
+ end
76
+ end
77
+ }
78
+ if ["INT", "TERM", "EXIT"].include?(sig)
79
+ Process.waitall
80
+ end
81
+ end
82
+ end
83
+ }
84
+
85
+ # Run through our filters so we can pass flat lists into our methods that
86
+ # actually do things.
87
+ avail_deploys = MU::MommaCat.listDeploys
88
+ do_deploys = []
89
+ do_nodes = []
90
+ ok = true
91
+ if $opts[:all]
92
+ do_deploys = avail_deploys
93
+ else
94
+ if $opts[:deploys] and !$opts[:all]
95
+ ARGV.each { |arg|
96
+ matched = avail_deploys.select { |deploy| deploy.match(/#{Regexp.quote(arg)}/i) }
97
+ if matched.size == 0
98
+ MU.log "Deploy pattern '#{arg}' doesn't appear to match anything", MU::ERR
99
+ end
100
+ do_deploys = do_deploys.concat(matched).uniq
101
+ }
102
+ else
103
+ do_nodes = ARGV
104
+ do_deploys = []
105
+ if do_nodes.size > 0
106
+ # Just load the deploys we need
107
+ do_nodes.each { |node|
108
+ if node.match(/^(.*?-[^\-]+?-\d{10}-[A-Z]{2})-.*/)
109
+ do_deploys << node.sub(/^(.*?-[^\-]+?-\d{10}-[A-Z]{2})-.*/, '\1')
110
+ end
111
+ }
112
+ do_deploys.uniq!
113
+ end
114
+ do_deploys = avail_deploys if do_deploys.size == 0
115
+ end
116
+ end
117
+
118
+ avail_nodes = []
119
+ @avail_node_attributes = []
120
+
121
+ do_deploys.each { |muid|
122
+ mommacat = MU::MommaCat.new(muid, skip_resource_objects: true)
123
+ mommacat.listNodes.each_pair { |nodename, server|
124
+ next if server.nil? or server['conf'].nil?
125
+ id = server['instance_id']
126
+ server['conf']["platform"] = "linux" if !server['conf'].has_key?("platform") or %w{centos centos6 centos7 ubuntu ubuntu14 rhel rhel7 rhel71 linux amazon}.include?(server['conf']["platform"])
127
+ server['conf']["platform"] = "windows" if %w{win2k12r2 win2k12 win2k8 win2k8r2}.include?(server['conf']["platform"])
128
+ next if !$opts[:platform].nil? and server['conf']["platform"] != $opts[:platform]
129
+ next if !$opts[:environment].nil? and MU.environment.upcase != $opts[:environment].upcase
130
+ avail_nodes << nodename
131
+ @avail_node_attributes << server
132
+ }
133
+ }
134
+
135
+ if do_nodes.size > 0
136
+ matching = avail_nodes.select { |node|
137
+ matched = false
138
+ do_nodes.each { |pattern|
139
+ if node.match(/#{Regexp.quote(pattern)}/i)
140
+ matched = true
141
+ break
142
+ end
143
+ }
144
+ matched
145
+ }
146
+ do_nodes = matching
147
+ else
148
+ do_nodes = avail_nodes
149
+ end
150
+ do_nodes.sort!
151
+
152
+ #do_nodes.sort!{ |x,y| (x[$opts[:info]] <=> y[$opts[:info]]) }
153
+
154
+ #puts node_attributes[0]
155
+
156
+ if $opts[:list]
157
+ if $opts[:info].eql? 'nodename'
158
+ puts do_nodes
159
+ else
160
+ do_nodes.each do |node|
161
+ @avail_node_attributes.each do |attr|
162
+ if attr['nodename'].eql? node
163
+ puts "#{attr['nodename']}: #{attr[$opts[:info]]}"
164
+ end
165
+ end
166
+ end
167
+ end
168
+ exit
169
+
170
+ end
171
+
172
+ exit 1 if !ok
173
+
174
+
175
+ def reGroom(deploys = MU::MommaCat.listDeploys, nodes = [], vaults_only: false)
176
+ badnodes = []
177
+ count = 0
178
+ deploys.each { |muid|
179
+ mommacat = MU::MommaCat.new(muid)
180
+ next if mommacat.kittens.nil? or mommacat.kittens['servers'].nil?
181
+ mommacat.kittens['servers'].each_pair { |nodeclass, servers|
182
+ servers.each_pair { |mu_name, server|
183
+ next if nodes.size > 0 and !nodes.include?(mu_name)
184
+ count = count + 1
185
+ child = Process.fork {
186
+ begin
187
+ type = "server"
188
+ type = "server_pool" if server.config.has_key?("basis")
189
+ if vaults_only
190
+ next if !server.config.has_key?("vault_access")
191
+ server.config["vault_access"].each { |v|
192
+ MU::Groomer::Chef.grantSecretAccess(mu_name, v['vault'], v['item'])
193
+ }
194
+ else
195
+ mommacat.groomNode(server.cloud_id, nodeclass, type, mu_name: mu_name)
196
+ end
197
+ rescue Exception => e
198
+ MU.log e.inspect, MU::ERR, details: e.backtrace
199
+ exit 1
200
+ end
201
+ }
202
+ $children[child] = mu_name
203
+ }
204
+ while $children.size >= $opts[:concurrent]-1
205
+ child = Process.wait
206
+ if !$?.success?
207
+ badnodes << $children[child]
208
+ end
209
+ $children.delete(child)
210
+ end
211
+ }
212
+ }
213
+ Process.waitall.each { |child|
214
+ if !child[1].success?
215
+ badnodes << $children[child[0]]
216
+ end
217
+ }
218
+
219
+ if badnodes.size > 0
220
+ MU.log "Not all Momma Cat runs exited cleanly", MU::WARN, details: badnodes
221
+ end
222
+ end
223
+
224
+ def runCommand(deploys = MU::MommaCat.listDeploys, nodes = [], cmd = nil, print_output: $opts[:verbose], noop: false, chefrun: false, chef_runlist: nil)
225
+ badnodes = []
226
+ count = 0
227
+ deploys.each { |muid|
228
+ mommacat = MU::MommaCat.new(muid)
229
+ mommacat.listNodes.each_pair { |nodename, server|
230
+ next if server['conf'].nil?
231
+ server['conf']["platform"] = "linux" if !server['conf'].has_key?("platform")
232
+ next if nodes.size > 0 and !nodes.include?(nodename)
233
+
234
+ count = count + 1
235
+ child = Process.fork {
236
+ done = false
237
+ begin
238
+ serverobj = mommacat.findLitterMate(type: "server", mu_name: nodename)
239
+
240
+ # Generate the command if attemting a chef run
241
+ if chefrun
242
+ cmd = serverobj.windows? ? "powershell -Command chef-client" : "chef-client || sudo chef-client"
243
+ cmd += " -o '#{chef_runlist}'" if chef_runlist
244
+ end
245
+
246
+ MU.log "Running '#{cmd}' on #{nodename} (##{count})" if !print_output
247
+
248
+ # Set Variables to catch the output and exit code of the execution
249
+ output = nil
250
+ exitcode = -1
251
+
252
+ # Determine which protocols to attempt
253
+ if serverobj.windows?
254
+ attempt_winrm = true
255
+ if $opts[:winrm]
256
+ attempt_ssh = false
257
+ else
258
+ attempt_ssh = true
259
+ end
260
+ else
261
+ attempt_winrm = false
262
+ attempt_ssh = true
263
+ end
264
+
265
+ # Attempt WinRM Connection, and Fall back to SSH
266
+ if attempt_winrm
267
+ exec_protocol = 'WinRM'
268
+
269
+ # Attempt to make a connection and exec the command
270
+ resp = nil
271
+ begin
272
+ shell = serverobj.getWinRMSession(0, timeout: 10, winrm_retries: 1)
273
+ resp = shell.run(cmd)
274
+ rescue MU::MuError => e
275
+ end
276
+
277
+ if resp
278
+ # WINRM CONNECTION AND EXECUTION SUCCESS
279
+ output = resp.stdout if resp.stdout
280
+ exitcode = resp.exitcode if resp.exitcode
281
+
282
+ if exitcode.eql? 0
283
+ attempt_ssh = false
284
+ else
285
+ puts resp.stderr if resp.stderr
286
+ puts output
287
+ end
288
+ end
289
+
290
+ if exitcode != 0
291
+ if attempt_ssh
292
+ MU.log "#{nodename} WinRM exec failed, trying SSH", MU::NOTICE
293
+ else
294
+ MU.log "#{nodename} WinRM exec failed, NOT trying SSH", MU::WARN
295
+ end
296
+ end
297
+ end
298
+
299
+ if attempt_ssh
300
+ exec_protocol = 'SSH'
301
+
302
+ # this should use getSSHSession, for the sake of symmetry
303
+ output = `ssh -q #{nodename} "#{cmd}" 2>&1 < /dev/null`
304
+ exitcode = $?.exitstatus
305
+ end
306
+
307
+ if exitcode != 0
308
+
309
+ if output
310
+
311
+ if serverobj.windows? and output.match(/NoMethodError: unknown property or method: `ConnectServer'/)
312
+ MU.log "#{nodename} encountered transient Windows/Chef ConnectServer error, retrying", MU::WARN
313
+ elsif print_output
314
+ done = true
315
+ puts "#{nodename} - #{output}" if output.match(/[^\s]/)
316
+ MU.log "#{nodename} did not exit cleanly", MU::WARN
317
+ else
318
+ done = true
319
+ MU.log "#{nodename} did not exit cleanly", MU::WARN, details: output.slice(-2000, 2000)
320
+ end
321
+
322
+ else
323
+ done = true
324
+ MU.log "#{nodename} did not exit cleanly", MU::WARN
325
+ end
326
+
327
+ exit exitcode if done
328
+
329
+ else
330
+ MU.log "#{nodename} complete via #{exec_protocol}"
331
+ done = true
332
+ end
333
+
334
+ end until done
335
+
336
+ puts "#{nodename} - #{output}" if print_output and output.match(/[^\s]/)
337
+
338
+ }
339
+ $children[child] = nodename
340
+ while $children.size >= $opts[:concurrent] - 1
341
+ child = Process.wait
342
+ if !$?.success?
343
+ badnodes << $children[child]
344
+ end
345
+ $children.delete(child)
346
+ end
347
+ }
348
+ }
349
+ Process.waitall.each { |child|
350
+ if !child[1].success?
351
+ badnodes << $children[child[0]]
352
+ end
353
+ }
354
+
355
+ if badnodes.size > 0
356
+ cmd = "Chef" if $opts[:mode] == "chefrun"
357
+ if !print_output
358
+ MU.log "Not all `#{cmd}` runs exited cleanly", MU::WARN, details: badnodes
359
+ else
360
+ MU.log "Not all `#{cmd}` runs exited cleanly", MU::WARN
361
+ end
362
+ end
363
+ end
364
+
365
+ def updateAWSMetaData(deploys = MU::MommaCat.listDeploys, nodes = [])
366
+ deploys.each { |muid|
367
+ mommacat = MU::MommaCat.new(muid)
368
+
369
+ if mommacat.original_config.nil?
370
+ MU.log "Failed to locate original config data for #{muid}", MU::WARN
371
+ next
372
+ end
373
+
374
+ # Clean up the userdata of matching Autoscale groups by replacing their
375
+ # Launch Configurations with new ones,
376
+ if mommacat.original_config.has_key?("server_pools")
377
+ mommacat.original_config['server_pools'].each { |server|
378
+ svr_class = server['name']
379
+ server["platform"] = "linux" if !server.has_key?("platform")
380
+
381
+ pool_name = mommacat.getResourceName(svr_class)
382
+ if nodes.size > 0
383
+ matched = false
384
+ nodes.each { |n|
385
+ if n.match(/^#{Regexp.quote(pool_name)}-[a-z0-9]{3}$/i)
386
+ matched = true
387
+ end
388
+ }
389
+ next if !matched
390
+ end
391
+
392
+ MU::Cloud::AWS::Server.createIAMProfile(pool_name, base_profile: server['iam_role'], extra_policies: server['iam_policies'])
393
+
394
+ resp = MU::Cloud::AWS.autoscale.describe_auto_scaling_groups(
395
+ auto_scaling_group_names: [pool_name]
396
+ )
397
+
398
+ if resp.nil?
399
+ MU.log "Failed to locate any Autoscale Groups named #{pool_name}", MU::WARN
400
+ next
401
+ end
402
+ resp.auto_scaling_groups.each { |asg|
403
+ launch = MU::Cloud::AWS.autoscale.describe_launch_configurations(
404
+ launch_configuration_names: [asg.launch_configuration_name]
405
+ ).launch_configurations.first
406
+
407
+ olduserdata = Base64.decode64(launch.user_data)
408
+
409
+ userdata = MU::Cloud::AWS::Server.fetchUserdata(
410
+ platform: server["platform"],
411
+ template_variables: {
412
+ "deployKey" => Base64.urlsafe_encode64(mommacat.public_key),
413
+ "deploySSHKey" => mommacat.ssh_public_key,
414
+ "muID" => muid,
415
+ "muUser" => MU.chef_user,
416
+ "publicIP" => MU.mu_public_ip,
417
+ "resourceName" => svr_class,
418
+ "windowsAdminName" => server['windows_admin_username'],
419
+ "skipApplyUpdates" => server['skipinitialupdates'],
420
+ "resourceType" => "server_pool"
421
+ },
422
+ custom_append: server['userdata_script']
423
+ )
424
+
425
+ # Figure out which devices are embedded in the AMI already.
426
+ image = MU::Cloud::AWS.ec2.describe_images(image_ids: [server["basis"]["launch_config"]["ami_id"]]).images.first
427
+
428
+ if image.nil?
429
+ MU.log "#{server["basis"]["launch_config"]["ami_id"]} does not exist, skipping launch config #{asg.launch_configuration_name}", MU::ERR
430
+ next
431
+ end
432
+
433
+ ext_disks = {}
434
+ if !image.block_device_mappings.nil?
435
+ image.block_device_mappings.each { |disk|
436
+ if !disk.device_name.nil? and !disk.device_name.empty? and !disk.ebs.nil? and !disk.ebs.empty?
437
+ ext_disks[disk.device_name] = MU.structToHash(disk.ebs)
438
+ if ext_disks[disk.device_name].has_key?(:snapshot_id)
439
+ ext_disks[disk.device_name].delete(:encrypted)
440
+ end
441
+ end
442
+ }
443
+ end
444
+
445
+ storage = []
446
+ if !server["basis"]["launch_config"]["storage"].nil?
447
+ server["basis"]["launch_config"]["storage"].each { |vol|
448
+ if ext_disks.has_key?(vol["device"])
449
+ if ext_disks[vol["device"]].has_key?(:snapshot_id)
450
+ vol.delete("encrypted")
451
+ end
452
+ end
453
+ mapping, cfm_mapping = MU::Cloud::AWS::Server.convertBlockDeviceMapping(vol)
454
+ storage << mapping
455
+ }
456
+ end
457
+
458
+ storage.concat(MU::Cloud::AWS::Server.ephemeral_mappings)
459
+ if userdata != olduserdata or
460
+ launch.image_id != server["basis"]["launch_config"]["ami_id"] or
461
+ launch.ebs_optimized != server["basis"]["launch_config"]["ebs_optimized"] or
462
+ launch.instance_type != server["basis"]["launch_config"]["size"] or
463
+ launch.instance_monitoring.enabled != server["basis"]["launch_config"]["monitoring"]
464
+ # launch.block_device_mappings != storage
465
+ # XXX block device comparison isn't this simple
466
+ need_update = true
467
+ end
468
+ next if !need_update
469
+
470
+ # Put our Autoscale group onto a temporary launch config
471
+ begin
472
+ MU::Cloud::AWS.autoscale.create_launch_configuration(
473
+ launch_configuration_name: pool_name+"-TMP",
474
+ user_data: Base64.encode64(userdata),
475
+ image_id: server["basis"]["launch_config"]["ami_id"],
476
+ key_name: launch.key_name,
477
+ security_groups: launch.security_groups,
478
+ instance_type: server["basis"]["launch_config"]["size"],
479
+ block_device_mappings: storage,
480
+ instance_monitoring: {:enabled => server["basis"]["launch_config"]["monitoring"]},
481
+ iam_instance_profile: launch.iam_instance_profile,
482
+ ebs_optimized: server["basis"]["launch_config"]["ebs_optimized"],
483
+ associate_public_ip_address: launch.associate_public_ip_address
484
+ )
485
+ rescue ::Aws::AutoScaling::Errors::ValidationError => e
486
+ if e.message.match(/Member must have length less than or equal to (\d+)/)
487
+ MU.log "Userdata script too long updating #{pool_name} Launch Config (#{Base64.encode64(userdata).size.to_s}/#{Regexp.last_match[1]} bytes)", MU::ERR
488
+ else
489
+ MU.log "Error updating #{pool_name} Launch Config", MU::ERR, details: e.message
490
+ end
491
+ next
492
+ end
493
+
494
+ MU::Cloud::AWS.autoscale.update_auto_scaling_group(
495
+ auto_scaling_group_name: pool_name,
496
+ launch_configuration_name: pool_name+"-TMP"
497
+ )
498
+
499
+ # ...now back to an identical one with the "real" name
500
+ MU::Cloud::AWS.autoscale.delete_launch_configuration(
501
+ launch_configuration_name: pool_name
502
+ )
503
+ MU::Cloud::AWS.autoscale.create_launch_configuration(
504
+ launch_configuration_name: pool_name,
505
+ user_data: Base64.encode64(userdata),
506
+ image_id: server["basis"]["launch_config"]["ami_id"],
507
+ key_name: launch.key_name,
508
+ security_groups: launch.security_groups,
509
+ instance_type: server["basis"]["launch_config"]["size"],
510
+ block_device_mappings: storage,
511
+ instance_monitoring: {:enabled => server["basis"]["launch_config"]["monitoring"]},
512
+ iam_instance_profile: launch.iam_instance_profile,
513
+ ebs_optimized: server["basis"]["launch_config"]["ebs_optimized"],
514
+ associate_public_ip_address: launch.associate_public_ip_address
515
+ )
516
+ MU::Cloud::AWS.autoscale.update_auto_scaling_group(
517
+ auto_scaling_group_name: pool_name,
518
+ launch_configuration_name: pool_name
519
+ )
520
+ MU::Cloud::AWS.autoscale.delete_launch_configuration(
521
+ launch_configuration_name: pool_name+"-TMP"
522
+ )
523
+
524
+ MU.log "Launch Configuration #{asg.launch_configuration_name} replaced"
525
+ }
526
+ }
527
+ end
528
+
529
+ # Update the userdata of live nodes. They must be in the Stopped state for
530
+ # us to do so.
531
+ mommacat.listNodes.each_pair { |nodename, server|
532
+ if server['conf'].nil?
533
+ MU.log "Failed to find config data for server #{nodename}", MU::WARN
534
+ next
535
+ end
536
+ id = server['cloud_id']
537
+ id = server['instance_id'] if id.nil?
538
+ desc = MU::Cloud::AWS.ec2(server['region']).describe_instances(instance_ids: [id]).reservations.first.instances.first
539
+
540
+ server['conf']["platform"] = "linux" if !server['conf'].has_key?("platform")
541
+ next if nodes.size > 0 and !nodes.include?(nodename)
542
+
543
+ rolename, cfm_role_name, cfm_prof_name, arn = MU::Cloud::AWS::Server.createIAMProfile(nodename, base_profile: server["conf"]['iam_role'], extra_policies: server["conf"]['iam_policies'])
544
+ MU::Cloud::AWS::Server.addStdPoliciesToIAMProfile(rolename)
545
+
546
+ mytype = "server"
547
+ mytype = "server_pool" if server['conf'].has_key?("basis") or server['conf']['#TYPENAME'] == "ServerPool" or server['conf']["#MU_CLASS"] == "MU::Cloud::AWS::ServerPool"
548
+ olduserdata = Base64.decode64(MU::Cloud::AWS.ec2(server['region']).describe_instance_attribute(
549
+ instance_id: id,
550
+ attribute: "userData"
551
+ ).user_data.value)
552
+
553
+ userdata = MU::Cloud::AWS::Server.fetchUserdata(
554
+ platform: server['conf']["platform"],
555
+ template_variables: {
556
+ "deployKey" => Base64.urlsafe_encode64(mommacat.public_key),
557
+ "deploySSHKey" => mommacat.ssh_public_key,
558
+ "muID" => muid,
559
+ "muUser" => MU.chef_user,
560
+ "publicIP" => MU.mu_public_ip,
561
+ "resourceName" => server['conf']['name'],
562
+ "windowsAdminName" => server['conf']['windows_admin_username'],
563
+ "skipApplyUpdates" => server['conf']['skipinitialupdates'],
564
+ "resourceType" => mytype
565
+ },
566
+ custom_append: server['userdata_script']
567
+ )
568
+
569
+ if userdata == olduserdata
570
+ MU.log "#{nodename} has up-to-date userdata, skipping", MU::DEBUG
571
+ next
572
+ end
573
+
574
+ if desc.state.name != "stopped"
575
+ MU.log "#{nodename} needs a userdata update, but is not in Stopped state", MU::NOTICE
576
+ if mytype == "server_pool"
577
+ pool_name = mommacat.getResourceName(server['conf']['name'])
578
+ MU.log "Note: Be sure to pause Autoscaling for this group before stopping this instance, e.g. with: aws autoscaling suspend-processes --auto-scaling-group-name #{pool_name}", MU::WARN
579
+ end
580
+ next
581
+ end
582
+
583
+ MU.log "Updating #{nodename} userdata (#{server["conf"]["platform"]})"
584
+ begin
585
+ MU::Cloud::AWS.ec2(server['region']).modify_instance_attribute(
586
+ instance_id: id,
587
+ attribute: "userData",
588
+ value: Base64.encode64(userdata)
589
+ )
590
+ rescue ::Aws::EC2::Errors::InvalidParameterValue => e
591
+ if e.message.match(/User data is limited to (\d+)/)
592
+ MU.log "Userdata script too long updating #{nodename} (#{userdata.size.to_s}/#{Regexp.last_match[1]} bytes)", MU::ERR
593
+ else
594
+ MU.log "Error replacing userData on #{nodename}", MU::ERR, details: e.message
595
+ end
596
+ end
597
+ }
598
+ }
599
+ end
600
+
601
+ def sslCerts(deploys = MU::MommaCat.listDeploys, nodes = [], vaults_only: false)
602
+ badnodes = []
603
+ count = 0
604
+ deploys.each { |muid|
605
+ mommacat = MU::MommaCat.new(muid)
606
+ mommacat.listNodes.each_pair { |nodename, server|
607
+ next if server['conf'].nil?
608
+ server['conf']["platform"] = "linux" if !server['conf'].has_key?("platform")
609
+ next if nodes.size > 0 and !nodes.include?(nodename)
610
+ if server['conf'].nil?
611
+ MU.log "Failed to find config data for server #{nodename}", MU::WARN
612
+ next
613
+ end
614
+
615
+ server_obj = mommacat.findLitterMate(type: "server", mu_name: nodename)
616
+ mommacat.nodeSSLCerts(server_obj)
617
+ }
618
+ }
619
+ end
620
+
621
+ def chefUpgrade(deploys = MU::MommaCat.listDeploys, nodes = [])
622
+ badnodes = []
623
+ deploys.each { |muid|
624
+ mommacat = MU::MommaCat.new(muid)
625
+ mommacat.listNodes.each_pair { |nodename, server|
626
+ next if server['conf'].nil?
627
+ server['conf']["platform"] = "linux" if !server['conf'].has_key?("platform")
628
+ next if nodes.size > 0 and !nodes.include?(nodename)
629
+ if server['conf'].nil?
630
+ MU.log "Failed to find config data for server #{nodename}", MU::WARN
631
+ next
632
+ end
633
+
634
+ child = Process.fork {
635
+ server_obj = mommacat.findLitterMate(type: "server", mu_name: nodename)
636
+ begin
637
+ server_obj.groomer.reinstall
638
+ rescue Exception
639
+ end
640
+ }
641
+ $children[child] = nodename
642
+ while $children.size >= $opts[:concurrent]-1
643
+ child = Process.wait
644
+ if !$?.success?
645
+ badnodes << $children[child]
646
+ end
647
+ $children.delete(child)
648
+ end
649
+ }
650
+ }
651
+
652
+ Process.waitall.each { |child|
653
+ if !child[1].success?
654
+ badnodes << $children[child[0]]
655
+ end
656
+ }
657
+
658
+ if badnodes.size > 0
659
+ MU.log "Not all Chef upgrades exited cleanly", MU::WARN, details: badnodes
660
+ end
661
+ end
662
+
663
+ if $opts[:xecute]
664
+ runCommand(do_deploys, do_nodes, $opts[:xecute], print_output: true)
665
+ elsif $opts[:mode] == "certs"
666
+ sslCerts(do_deploys, do_nodes)
667
+ elsif $opts[:mode] == "groom"
668
+ reGroom(do_deploys, do_nodes)
669
+ elsif $opts[:mode] == "vaults"
670
+ reGroom(do_deploys, do_nodes, vaults_only: true)
671
+ elsif $opts[:mode] == "chefupgrade"
672
+ chefUpgrade(do_deploys, do_nodes)
673
+ elsif $opts[:mode] == "chefrun"
674
+ print_output = $opts[:verbose] || do_nodes.size == 1
675
+ if $opts[:override_chef_runlist]
676
+ runCommand(do_deploys, do_nodes, chef_runlist: $opts[:override_chef_runlist], chefrun: true, print_output: print_output)
677
+ else
678
+ runCommand(do_deploys, do_nodes, chefrun: true, print_output: print_output)
679
+ end
680
+ elsif $opts[:mode] == "userdata" or $opts[:mode] == "awsmeta"
681
+ # Need Google equiv and to select nodes correctly based on what cloud they're in
682
+ updateAWSMetaData(do_deploys, do_nodes)
683
+ end