cloud-mu 1.9.0.pre.beta

Sign up to get free protection for your applications and to get access to all the features.
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,646 @@
1
+ # Copyright:: Copyright (c) 2018 eGlobalTech, Inc., all rights reserved
2
+ #
3
+ # Licensed under the BSD-3 license (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License in the root of the project or at
6
+ #
7
+ # http://egt-labs.com/mu/LICENSE.html
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module MU
16
+ class Cloud
17
+ class AWS
18
+ # A search_domain as configured in {MU::Config::BasketofKittens::search_domains}
19
+ class SearchDomain < MU::Cloud::SearchDomain
20
+ @deploy = nil
21
+ @config = nil
22
+ attr_reader :mu_name
23
+ attr_reader :config
24
+ attr_reader :cloud_id
25
+
26
+ @cloudformation_data = {}
27
+ attr_reader :cloudformation_data
28
+
29
+ # @param mommacat [MU::MommaCat]: A {MU::Mommacat} object containing the deploy of which this resource is/will be a member.
30
+ # @param kitten_cfg [Hash]: The fully parsed and resolved {MU::Config} resource descriptor as defined in {MU::Config::BasketofKittens::search_domains}
31
+ def initialize(mommacat: nil, kitten_cfg: nil, mu_name: nil, cloud_id: nil)
32
+ @deploy = mommacat
33
+ @config = MU::Config.manxify(kitten_cfg)
34
+ @cloud_id ||= cloud_id
35
+ @mu_name ||= @deploy.getResourceName(@config["name"])
36
+ end
37
+
38
+ # Called automatically by {MU::Deploy#createResources}
39
+ def create
40
+ @config['domain_name'] = @deploy.getResourceName(@config["name"], max_length: 28, need_unique_string: true).downcase
41
+
42
+ params = genParams
43
+
44
+ MU.log "Creating ElasticSearch domain #{@config['domain_name']}", details: params
45
+ resp = MU::Cloud::AWS.elasticsearch(@config['region']).create_elasticsearch_domain(params).domain_status
46
+
47
+ tagDomain
48
+
49
+ end
50
+
51
+ # Called automatically by {MU::Deploy#createResources}
52
+ def groom
53
+ tagDomain
54
+ @config['domain_name'] ||= @deploydata['domain_name']
55
+ params = genParams(cloud_desc) # get parameters that would change only
56
+
57
+ if params.size > 1
58
+ waitWhileProcessing # wait until the create finishes, if still going
59
+
60
+ MU.log "Updating ElasticSearch domain #{@config['domain_name']}", MU::NOTICE, details: params
61
+ MU::Cloud::AWS.elasticsearch(@config['region']).update_elasticsearch_domain_config(params)
62
+ end
63
+
64
+ waitWhileProcessing # don't return until creation/updating is complete
65
+ end
66
+
67
+ # Wrapper for cloud_desc method that deals with finding the AWS
68
+ # domain_name parameter, which isn't what we'd call ourselves if we had
69
+ # our druthers.
70
+ def cloud_desc
71
+ if @config['domain_name']
72
+ MU::Cloud::AWS.elasticsearch(@config['region']).describe_elasticsearch_domain(
73
+ domain_name: @config['domain_name']
74
+ ).domain_status
75
+ elsif @deploydata['domain_name']
76
+ MU::Cloud::AWS.elasticsearch(@config['region']).describe_elasticsearch_domain(
77
+ domain_name: @deploydata['domain_name']
78
+ ).domain_status
79
+ else
80
+ raise MU::MuError "#{@mu_name} can't find its official Elasticsearch domain name!"
81
+ end
82
+ end
83
+
84
+ # Canonical Amazon Resource Number for this resource
85
+ # @return [String]
86
+ def arn
87
+ cloud_desc.arn
88
+ end
89
+
90
+ # Return the metadata for this SearchDomain rule
91
+ # @return [Hash]
92
+ def notify
93
+ deploy_struct = MU.structToHash(cloud_desc)
94
+ tags = MU::Cloud::AWS.elasticsearch(@config['region']).list_tags(arn: deploy_struct[:arn]).tag_list
95
+ deploy_struct['tags'] = tags.map { |t| { t.key => t.value } }
96
+ if deploy_struct['endpoint']
97
+ deploy_struct['kibana'] = deploy_struct['endpoint']+"/_plugin/kibana/"
98
+ end
99
+ deploy_struct['domain_name'] ||= @config['domain_name'] if @config['domain_name']
100
+ deploy_struct
101
+ end
102
+
103
+ # Remove all search_domains associated with the currently loaded deployment.
104
+ # @param noop [Boolean]: If true, will only print what would be done
105
+ # @param ignoremaster [Boolean]: If true, will remove resources not flagged as originating from this Mu server
106
+ # @param region [String]: The cloud provider region
107
+ # @return [void]
108
+ def self.cleanup(noop: false, ignoremaster: false, region: MU.curRegion, flags: {})
109
+ list = MU::Cloud::AWS.elasticsearch(region).list_domain_names
110
+ if list and list.domain_names and list.domain_names.size > 0
111
+ descs = MU::Cloud::AWS.elasticsearch(region).describe_elasticsearch_domains(domain_names: list.domain_names.map { |d| d.domain_name } )
112
+
113
+ descs.domain_status_list.each { |domain|
114
+ tags = MU::Cloud::AWS.elasticsearch(region).list_tags(arn: domain.arn)
115
+ tags.tag_list.each { |tag|
116
+ if tag.key == "MU-ID" and tag.value == MU.deploy_id
117
+ MU.log "Deleting ElasticSearch Domain #{domain.domain_name}"
118
+ if !noop
119
+ MU::Cloud::AWS.elasticsearch(region).delete_elasticsearch_domain(domain_name: domain.domain_name)
120
+ end
121
+ break
122
+ end
123
+ }
124
+ }
125
+ end
126
+
127
+ unless noop
128
+ marker = nil
129
+ begin
130
+ resp = MU::Cloud::AWS.iam.list_roles(marker: marker)
131
+ resp.roles.each{ |role|
132
+ # XXX Maybe we should have a more generic way to delete IAM profiles and policies. The call itself should be moved from MU::Cloud::AWS::Server.
133
+ # MU::Cloud::AWS::Server.removeIAMProfile(role.role_name) if role.role_name.match(/^#{Regexp.quote(MU.deploy_id)}/)
134
+ }
135
+ marker = resp.marker
136
+ end while resp.is_truncated
137
+ end
138
+ end
139
+
140
+ # Locate an existing search_domain.
141
+ # @param cloud_id [String]: The cloud provider's identifier for this resource.
142
+ # @param region [String]: The cloud provider region.
143
+ # @param flags [Hash]: Optional flags
144
+ # @return [OpenStruct]: The cloud provider's complete descriptions of matching search_domain.
145
+ def self.find(cloud_id: nil, region: MU.curRegion, flags: {})
146
+ if cloud_id
147
+ # Annoyingly, we might expect one of several possible artifacts,
148
+ # since AWS couldn't decide what the real identifier of these
149
+ # things should be
150
+ list = MU::Cloud::AWS.elasticsearch(region).list_domain_names
151
+ if list and list.domain_names and list.domain_names.size > 0
152
+ descs = MU::Cloud::AWS.elasticsearch(region).describe_elasticsearch_domains(domain_names: list.domain_names.map { |d| d.domain_name } )
153
+ descs.domain_status_list.each { |domain|
154
+ return domain if domain.arn == cloud_id
155
+ return domain if domain.domain_name == cloud_id
156
+ return domain if domain.domain_id == cloud_id
157
+ }
158
+ end
159
+ end
160
+ # TODO consider a search by tags
161
+ nil
162
+ end
163
+
164
+ # Cloud-specific configuration properties.
165
+ # @param config [MU::Config]: The calling MU::Config object
166
+ # @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
167
+ def self.schema(config)
168
+ toplevel_required = ["elasticsearch_version", "instance_type"]
169
+ versions = MU::Cloud::AWS.elasticsearch.list_elasticsearch_versions.elasticsearch_versions
170
+ instance_types = nil
171
+ begin
172
+ instance_types = MU::Cloud::AWS.elasticsearch.list_elasticsearch_instance_types(
173
+ elasticsearch_version: "6.3"
174
+ ).elasticsearch_instance_types
175
+ rescue Aws::ElasticsearchService::Errors::ValidationException
176
+ # Some regions (GovCloud) lag
177
+ instance_types = MU::Cloud::AWS.elasticsearch.list_elasticsearch_instance_types(
178
+ elasticsearch_version: "6.2"
179
+ ).elasticsearch_instance_types
180
+ end
181
+
182
+ schema = {
183
+ "elasticsearch_version" => {
184
+ "type" => "string",
185
+ "default" => versions.first,
186
+ "description" => "A supported ElasticSearch version for the region of this SearchDomain. Known versions from #{MU.myRegion}: "+versions.join(", ")
187
+ },
188
+ "instance_type" => {
189
+ "type" => "string",
190
+ "default" => instance_types.first,
191
+ "description" => "A supported ElasticSearch instance type for the region of this SearchDomain. Known types from #{MU.myRegion}: "+instance_types.join(", ")+"."
192
+ },
193
+ "dedicated_masters" => {
194
+ "type" => "integer",
195
+ "default" => 0,
196
+ "description" => "Separate, dedicated master node(s), over and above the search instances specified in instance_count."
197
+ },
198
+ "access_policies" => {
199
+ "type" => "object",
200
+ "description" => "An IAM policy document for access to ElasticSearch. Our parser expects this to be defined inline like the rest of your YAML/JSON Basket of Kittens, not as raw JSON. For guidance on ElasticSearch IAM capabilities, see: https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-ac.html"
201
+ },
202
+ "master_instance_type" => {
203
+ "type" => "string",
204
+ "description" => "Instance type for dedicated master nodes, if any were requested. Will default to match instance_type."
205
+ },
206
+ "ebs_type" => {
207
+ "type" => "string",
208
+ "default" => "standard",
209
+ "description" => "Type of EBS storage to use for cluster nodes. If 'none' is specified, EBS storage will not be used, but this is only valid for certain instance types.",
210
+ "enum" => ["standard", "gp2", "io1", "none"]
211
+ },
212
+ "ebs_iops" => {
213
+ "type" => "integer",
214
+ "description" => "Specifies the IOPD for a Provisioned IOPS EBS volume (SSD). Must specify ebs_type for this to take effect."
215
+ },
216
+ "ebs_size" => {
217
+ "type" => "integer",
218
+ "default" => 20,
219
+ "description" => "Specifies the size (GB) of EBS storage. Must specify ebs_type for this to take effect."
220
+ },
221
+ "snapshot_hour" => {
222
+ "type" => "integer",
223
+ "default" => 23,
224
+ "description" => "Clock hour (UTC) to begin daily snapshots"
225
+ },
226
+ "kms_encryption_key_id" => {
227
+ "type" => "string",
228
+ "description" => "If specified, will attempt to enable encryption at rest with this KMS Key ID"
229
+ },
230
+ "zone_aware" => {
231
+ "type" => "boolean",
232
+ "default" => false,
233
+ "description" => "Spread search instances across Availability Zones to facilitate replica index sharding for greater resilience. Note that you also must use the native Elasticsearch API to create replica shards for your cluster. Zone awareness requires an even number of instances in the instance count."
234
+ },
235
+ "slow_logs" => {
236
+ "type" => "string",
237
+ "description" => "The ARN of a CloudWatch Log Group to which we we'll send slow index and search logs. If not specified, a log group will be generated."
238
+ },
239
+ "advanced_options" => {
240
+ "type" => "object",
241
+ "description" => "Key => Value strings pairs that pass certain configuration options to Elasticsearch. For a list of supported values, see https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createupdatedomains.html#es-createdomain-configure-advanced-options",
242
+ },
243
+ "cognito" => {
244
+ "type" => "object",
245
+ "description" => "Options to specify the Cognito user and identity pools for Kibana authentication. For more information, see http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-cognito-auth.html",
246
+ "required" => ["user_pool_id", "identity_pool_id"],
247
+ "properties" => {
248
+ "user_pool_id" => {
249
+ "type" => "string",
250
+ "description" => "Amazon Cognito user pool. Looks like 'us-east-1:69e2223c-2c74-42ca-9b27-1037fcb60b91'. See https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html"
251
+ },
252
+ "identity_pool_id" => {
253
+ "type" => "string",
254
+ "description" => "Amazon Cognito identity pool. Looks like 'us-east-1_eSwWA1VGY'. See https://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html"
255
+ },
256
+ "role_arn" => {
257
+ "type" => "string",
258
+ "description" => "An IAM role that has the AmazonESCognitoAccess policy attached. If not specified, one will be generated automatically."
259
+ }
260
+ }
261
+ }
262
+ }
263
+ [toplevel_required, schema]
264
+ end
265
+
266
+ # Cloud-specific pre-processing of {MU::Config::BasketofKittens::search_domains}, bare and unvalidated.
267
+ # @param dom [Hash]: The resource to process and validate
268
+ # @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
269
+ # @return [Boolean]: True if validation succeeded, False otherwise
270
+ def self.validateConfig(dom, configurator)
271
+ ok = true
272
+ versions = MU::Cloud::AWS.elasticsearch(dom['region']).list_elasticsearch_versions.elasticsearch_versions
273
+ if !versions.include?(dom["elasticsearch_version"])
274
+ MU.log "Invalid ElasticSearch version '#{dom["elasticsearch_version"]}' in SearchDomain '#{dom['name']}'", MU::ERR, details: versions
275
+ ok = false
276
+ else
277
+ resp = MU::Cloud::AWS.elasticsearch(dom['region']).list_elasticsearch_instance_types(
278
+ elasticsearch_version: dom["elasticsearch_version"]
279
+ )
280
+
281
+ if resp.nil? or resp.elasticsearch_instance_types.nil?
282
+ MU.log "Failed to list valid ElasticSearch instance types in #{dom['region']}", MU::WARN
283
+ end
284
+
285
+ if !resp.elasticsearch_instance_types.include?(dom["instance_type"])
286
+ MU.log "Invalid instance_type '#{dom["instance_type"]}' in SearchDomain '#{dom['name']}'", MU::ERR, details: resp.elasticsearch_instance_types
287
+ ok = false
288
+ end
289
+ end
290
+
291
+ if dom["dedicated_masters"] > 0 and dom["master_instance_type"].nil?
292
+ dom["master_instance_type"] = dom["instance_type"]
293
+ end
294
+
295
+ if dom["instance_count"] < 1
296
+ MU.log "Must have at least one search node in SearchDomain '#{dom['name']}'", MU::ERR
297
+ ok = false
298
+ end
299
+
300
+ if dom["zone_aware"] and (dom["instance_count"] % 2) != 0
301
+ MU.log "Must set an even number for instance_count when enabling Zone Awareness in SearchDomain '#{dom['name']}'", MU::ERR
302
+ ok = false
303
+ end
304
+
305
+ if !dom["vpc"]
306
+ MU.log "No VPC specified for SearchDomain '#{dom['name']},' endpoints will be public", MU::NOTICE
307
+ if (dom['ingress_rules'] and dom['ingress_rules'].size > 0) or
308
+ (dom['add_firewall_rules'] and dom['add_firewall_rules'].size > 0)
309
+ MU.log "You must deploy SearchDomain '#{dom['name']}' into a VPC in order to use ingress_rules", MU::ERR
310
+ ok = false
311
+ end
312
+ else
313
+ if dom['ingress_rules']
314
+ fwname = "searchdomain-#{dom['name']}"
315
+ acl = {"name" => fwname, "rules" => dom['ingress_rules'], "region" => dom['region'], "optional_tags" => dom['optional_tags']}
316
+ acl["tags"] = dom['tags'] if dom['tags'] && !dom['tags'].empty?
317
+ acl["vpc"] = dom['vpc'].dup if dom['vpc']
318
+ ok = false if !configurator.insertKitten(acl, "firewall_rules")
319
+ dom["add_firewall_rules"] = [] if dom["add_firewall_rules"].nil?
320
+ dom["add_firewall_rules"] << {"rule_name" => fwname}
321
+ end
322
+ end
323
+
324
+ if dom['snapshot_hour'] < 0 or dom['snapshot_hour'] > 23
325
+ MU.log "Invalid snapshot_hour in SearchDomain '#{dom['name']}', must be in the range 0..23", MU::ERR
326
+ ok = false
327
+ end
328
+
329
+ if dom['slow_logs']
330
+ if configurator.haveLitterMate?(dom['slow_logs'], "log")
331
+ dom['dependencies'] << { "name" => dom['slow_logs'], "type" => "log" }
332
+ else
333
+ log_group = MU::Cloud::AWS::Log.find(cloud_id: dom['slow_logs'], region: dom['region'])
334
+ if !log_group
335
+ MU.log "Specified slow_logs CloudWatch log group '#{dom['slow_logs']}' in SearchDomain '#{dom['name']}' doesn't appear to exist", MU::ERR
336
+ ok = false
337
+ else
338
+ dom['slow_logs'] = log_group.arn
339
+ end
340
+ end
341
+ else
342
+ dom['slow_logs'] = dom['name']+"-slowlog"
343
+ log_group = { "name" => dom['slow_logs'] }
344
+ ok = false if !configurator.insertKitten(log_group, "logs")
345
+ dom['dependencies'] << { "name" => dom['slow_logs'], "type" => "log" }
346
+ end
347
+
348
+ if dom['advanced_options']
349
+ dom['advanced_options'].each_pair { |key, val|
350
+ dom['advanced_options'][key] = val.to_s
351
+ }
352
+ end
353
+
354
+ if dom['cognito']
355
+ begin
356
+ MU::Cloud::AWS.cognito_ident(dom['region']).describe_identity_pool(
357
+ identity_pool_id: dom['cognito']['identity_pool_id']
358
+ )
359
+ rescue ::Aws::CognitoIdentity::Errors::ValidationException, Aws::CognitoIdentity::Errors::ResourceNotFoundException => e
360
+ MU.log "Cognito identity pool #{dom['cognito']['identity_pool_id']} malformed or does not exist in SearchDomain '#{dom['name']}'", MU::ERR
361
+ ok = false
362
+ end
363
+ begin
364
+ MU::Cloud::AWS.cognito_user(dom['region']).describe_user_pool(
365
+ user_pool_id: dom['cognito']['user_pool_id']
366
+ )
367
+ rescue ::Aws::CognitoIdentityProvider::Errors::InvalidParameterException, Aws::CognitoIdentityProvider::Errors::ResourceNotFoundException => e
368
+ MU.log "Cognito identity pool #{dom['cognito']['user_pool_id']} malformed or does not exist in SearchDomain '#{dom['name']}'", MU::ERR
369
+ ok = false
370
+ end
371
+
372
+ if dom['cognito']['role_arn']
373
+ rolename = dom['cognito']['role_arn'].sub(/.*?:role\/([a-z0-9-]+)$/, '\1')
374
+ begin
375
+ if !dom['cognito']['role_arn'].match(/^arn:/)
376
+ role = MU::Cloud::AWS.iam(dom['region']).get_role(role_name: rolename)
377
+ dom['cognito']['role_arn'] = role.role.arn
378
+ end
379
+ pols = MU::Cloud::AWS.iam(dom['region']).list_attached_role_policies(role_name: rolename).attached_policies
380
+ found = false
381
+ pols.each { |policy|
382
+ found = true if policy.policy_name == "AmazonESCognitoAccess"
383
+ }
384
+ if !found
385
+ MU.log "IAM role #{dom['cognito']['role_arn']} exists, but not does have the AmazonESCognitoAccess policy attached. SearchDomain '#{dom['name']}' may not have necessary Cognito permissions.", MU::WARN
386
+ end
387
+ rescue Aws::IAM::Errors::NoSuchEntity => e
388
+ MU.log "IAM role #{dom['cognito']['role_arn']} malformed or does not exist in SearchDomain '#{dom['name']}'", MU::ERR
389
+ ok = false
390
+ end
391
+ else
392
+ roledesc = {
393
+ "name" => dom['name']+"cognitorole",
394
+ "can_assume" => [
395
+ {
396
+ "entity_id" => "es.amazonaws.com",
397
+ "entity_type" => "service"
398
+ }
399
+ ],
400
+ "import" => [
401
+ "AmazonESCognitoAccess"
402
+ ]
403
+ }
404
+ configurator.insertKitten(roledesc, "roles")
405
+
406
+ dom['dependencies'] ||= []
407
+ dom['dependencies'] << {
408
+ "type" => "role",
409
+ "name" => dom['name']+"cognitorole"
410
+ }
411
+ end
412
+
413
+ end
414
+
415
+ # TODO queue['access_policies'] should generate a policy blob via MU::Cloud::AWS::Role
416
+
417
+ ok
418
+ end
419
+
420
+ private
421
+
422
+ # create_elasticsearch_domain and update_elasticsearch_domain_config
423
+ # take almost the same set of parameters, so our create and groom
424
+ # methods do nearly the same things. Factor it. If we're operating on
425
+ # an existing domain, only return things that would be changed.
426
+ def genParams(ext = nil)
427
+ params = {
428
+ :domain_name => @config['domain_name'] || @deploydata['domain_name']
429
+ }
430
+
431
+ if ext.nil?
432
+ params[:elasticsearch_version] = @config['elasticsearch_version']
433
+ elsif ext.elasticsearch_version != @config['elasticsearch_version']
434
+
435
+ raise MU::MuError, "Can't change ElasticSearch version of an existing cluster"
436
+ end
437
+
438
+ if ext.nil? or
439
+ ext.elasticsearch_cluster_config.instance_type != @config['instance_type'] or
440
+ ext.elasticsearch_cluster_config.instance_count != @config['instance_count'] or
441
+ ext.elasticsearch_cluster_config.zone_awareness_enabled != @config['zone_aware']
442
+ params[:elasticsearch_cluster_config] = {}
443
+ params[:elasticsearch_cluster_config][:instance_type] = @config['instance_type']
444
+ params[:elasticsearch_cluster_config][:instance_count] = @config['instance_count']
445
+ params[:elasticsearch_cluster_config][:zone_awareness_enabled] = @config['zone_aware']
446
+ end
447
+
448
+ if @config['dedicated_masters'] > 0
449
+ if ext.nil? or !ext.elasticsearch_cluster_config.dedicated_master_enabled or
450
+ ext.elasticsearch_cluster_config.dedicated_master_count != @config['dedicated_masters'] or
451
+ ext.elasticsearch_cluster_config.dedicated_master_type != @config['master_instance_type']
452
+ params[:elasticsearch_cluster_config][:dedicated_master_enabled] = true
453
+ params[:elasticsearch_cluster_config][:dedicated_master_count] = @config['dedicated_masters']
454
+ params[:elasticsearch_cluster_config][:dedicated_master_type] = @config['master_instance_type']
455
+ end
456
+ end
457
+
458
+ if ext.nil? or ext.snapshot_options.automated_snapshot_start_hour != @config['snapshot_hour']
459
+ params[:snapshot_options] = {}
460
+ params[:snapshot_options][:automated_snapshot_start_hour] = @config['snapshot_hour']
461
+ end
462
+
463
+ if @config['access_policies']
464
+ # TODO check against ext.access_policies.options
465
+ params[:access_policies] = JSON.generate(@config['access_policies'])
466
+ end
467
+
468
+ if @config['slow_logs']
469
+ arn = nil
470
+ if @config['slow_logs'].match(/^arn:/i)
471
+ arn = @config['slow_logs']
472
+ else
473
+ log_group = @deploy.findLitterMate(type: "log", name: @config['slow_logs'])
474
+ log_group = MU::Cloud::AWS::Log.find(cloud_id: log_group.mu_name, region: log_group.cloudobj.config['region'])
475
+ if log_group.nil? or log_group.arn.nil?
476
+ raise MuError, "Failed to retrieve ARN of sibling LogGroup '#{@config['slow_logs']}'"
477
+ end
478
+ arn = log_group.arn
479
+ end
480
+
481
+ if arn
482
+ @config['slow_logs'] = arn
483
+ end
484
+
485
+ if ext.nil? or
486
+ ext.log_publishing_options.nil? or
487
+ ext.log_publishing_options["INDEX_SLOW_LOGS"].nil? or
488
+ !ext.log_publishing_options["INDEX_SLOW_LOGS"][:enabled] or
489
+ ext.log_publishing_options["INDEX_SLOW_LOGS"][:cloud_watch_logs_log_group_arn] != arn or
490
+ ext.log_publishing_options["SEARCH_SLOW_LOGS"].nil? or
491
+ !ext.log_publishing_options["SEARCH_SLOW_LOGS"][:enabled] or
492
+ ext.log_publishing_options["SEARCH_SLOW_LOGS"][:cloud_watch_logs_log_group_arn] != arn
493
+ params[:log_publishing_options] = {}
494
+ params[:log_publishing_options]["INDEX_SLOW_LOGS"] = {}
495
+ params[:log_publishing_options]["INDEX_SLOW_LOGS"][:enabled] = true
496
+ params[:log_publishing_options]["INDEX_SLOW_LOGS"][:cloud_watch_logs_log_group_arn] = arn
497
+
498
+ params[:log_publishing_options]["SEARCH_SLOW_LOGS"] = {}
499
+ params[:log_publishing_options]["SEARCH_SLOW_LOGS"][:enabled] = true
500
+ params[:log_publishing_options]["SEARCH_SLOW_LOGS"][:cloud_watch_logs_log_group_arn] = arn
501
+ MU::Cloud::AWS::Log.allowService("es.amazonaws.com", arn, @config['region'])
502
+ end
503
+ end
504
+
505
+ if @config['advanced_options'] and (ext.nil? or
506
+ ext.advanced_options != @config['advanced_options'])
507
+ params[:advanced_options] = {}
508
+ @config['advanced_options'].each_pair { |key, value|
509
+ params[:advanced_options][key] = value
510
+ }
511
+ end
512
+
513
+ if @config['vpc']
514
+ subnet_ids = []
515
+ sgs = []
516
+ if !@config["vpc"]["subnets"].nil? and @config["vpc"]["subnets"].size > 0
517
+ @config["vpc"]["subnets"].each { |subnet|
518
+ subnet_obj = @vpc.getSubnet(cloud_id: subnet["subnet_id"], name: subnet["subnet_name"])
519
+ subnet_ids << subnet_obj.cloud_id
520
+ }
521
+ else
522
+ @vpc.subnets.each { |subnet_obj|
523
+ next if subnet_obj.private? and ["all_public", "public"].include?(@config["vpc"]["subnet_pref"])
524
+ next if !subnet_obj.private? and ["all_private", "private"].include?(@config["vpc"]["subnet_pref"])
525
+ subnet_ids << subnet_obj.cloud_id
526
+ }
527
+ end
528
+ if subnet_ids.size == 0
529
+ raise MuError, "No valid subnets found for #{@mu_name} from #{@config["vpc"]}"
530
+ end
531
+
532
+ if @dependencies.has_key?("firewall_rule")
533
+ @dependencies['firewall_rule'].values.each { |sg|
534
+ sgs << sg.cloud_id
535
+ }
536
+ end
537
+
538
+ if ext.nil? or
539
+ ext.vpc_options.subnet_ids != subnet_ids or
540
+ ext.vpc_options.security_group_ids != sgs
541
+ params[:vpc_options] = {}
542
+ params[:vpc_options][:subnet_ids] = subnet_ids
543
+ params[:vpc_options][:security_group_ids] = sgs
544
+ end
545
+ end
546
+
547
+ if @config['ebs_type']
548
+ if ext.nil? or ext.ebs_options.nil? or !ext.ebs_options.ebs_enabled or
549
+ ext.ebs_options.volume_type != @config['ebs_type'] or
550
+ ext.ebs_options.volume_size != @config['ebs_size'] or
551
+ ext.ebs_options.iops != @config['ebs_iops']
552
+ params[:ebs_options] = {}
553
+ params[:ebs_options][:ebs_enabled] = true
554
+ params[:ebs_options][:volume_type] = @config['ebs_type']
555
+ params[:ebs_options][:volume_size] = @config['ebs_size']
556
+ if @config['ebs_iops']
557
+ params[:ebs_options][:iops] = @config['ebs_iops']
558
+ end
559
+ end
560
+ end
561
+
562
+ if @config['kms_encryption_key_id']
563
+ if ext.nil? or !ext.encryption_at_rest_options.enabled or
564
+ ext.kms_key_id != @config['kms_encryption_key_id']
565
+ params[:encryption_at_rest_options] = {}
566
+ params[:encryption_at_rest_options][:enabled] = true
567
+ params[:encryption_at_rest_options][:kms_key_id] = @config['kms_encryption_key_id']
568
+ end
569
+ end
570
+
571
+
572
+ # XXX API fails with "Amazon Elasticsearch must be allowed to use the
573
+ # passed role" when we do this on creation, but it works fine if we
574
+ # modify an existing group. AWS bug, workaround is to just apply
575
+ # this in groom phase exclusively.
576
+ if @config['cognito'] and !ext.nil?
577
+ myrole = setIAMPolicies
578
+
579
+ if ext.nil? or !ext.cognito_options.enabled or
580
+ ext.cognito_options.user_pool_id != @config['cognito']['user_pool_id'] or
581
+ ext.cognito_options.identity_pool_id != @config['cognito']['identity_pool_id'] or
582
+ (@config['cognito']['role_arn'] and ext.cognito_options.role_arn != @config['cognito']['role_arn'])
583
+ params[:cognito_options] = {}
584
+ params[:cognito_options][:enabled] = true
585
+ params[:cognito_options][:user_pool_id] = @config['cognito']['user_pool_id']
586
+ params[:cognito_options][:identity_pool_id] = @config['cognito']['identity_pool_id']
587
+ if @config['cognito']['role_arn']
588
+ params[:cognito_options][:role_arn] = @config['cognito']['role_arn']
589
+ else
590
+ myrole = @deploy.findLitterMate(name: @config['name']+"cognitorole", type: "roles")
591
+ params[:cognito_options][:role_arn] = myrole.cloudobj.arn
592
+ end
593
+ end
594
+ end
595
+
596
+ params
597
+ end
598
+
599
+ def tagDomain
600
+ tags = [{ key: "Name", value: @mu_name }]
601
+
602
+ MU::MommaCat.listStandardTags.each_pair { |name, value|
603
+ tags << {key: name, value: value }
604
+ }
605
+
606
+ if @config['optional_tags']
607
+ MU::MommaCat.listOptionalTags.each_pair { |name, value|
608
+ tags << {key: name, value: value }
609
+ }
610
+ end
611
+
612
+ if @config['tags']
613
+ @config['tags'].each { |tag|
614
+ tags << {key: tag['key'], value: tag['value'] }
615
+ }
616
+ end
617
+ domain = cloud_desc
618
+ if !domain or !domain.arn
619
+ raise MU::MuError, "Can't tag ElasticSearch domain, cloud descriptor came back without an ARN"
620
+ end
621
+
622
+ MU::Cloud::AWS.elasticsearch(@config['region']).add_tags(
623
+ arn: domain.arn,
624
+ tag_list: tags
625
+ )
626
+ end
627
+
628
+ def waitWhileProcessing
629
+ retries = 0
630
+ interval = 60
631
+
632
+ begin
633
+ resp = cloud_desc
634
+ if (resp.endpoint.nil? or resp.endpoint.empty?) and !resp.deleted
635
+ loglevel = (retries > 0 and retries % 3 == 0) ? MU::NOTICE : MU::DEBUG
636
+ MU.log "Waiting for Elasticsearch domain #{@mu_name} (#{@config['domain_name']}) to finish creating", loglevel
637
+ sleep interval
638
+ end
639
+ retries += 1
640
+ end while (resp.endpoint.nil? or resp.endpoint.empty?) and !resp.deleted
641
+ end
642
+
643
+ end
644
+ end
645
+ end
646
+ end