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,641 @@
1
+ # Copyright:: Copyright (c) 2014 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
+
17
+ class Cloud
18
+ class AWS
19
+ # A firewall ruleset as configured in {MU::Config::BasketofKittens::firewall_rules}
20
+ class FirewallRule < MU::Cloud::FirewallRule
21
+
22
+ @deploy = nil
23
+ @config = nil
24
+ @admin_sgs = Hash.new
25
+ @admin_sg_semaphore = Mutex.new
26
+
27
+ attr_reader :mu_name
28
+ attr_reader :config
29
+ attr_reader :cloud_id
30
+
31
+ # @param mommacat [MU::MommaCat]: A {MU::Mommacat} object containing the deploy of which this resource is/will be a member.
32
+ # @param kitten_cfg [Hash]: The fully parsed and resolved {MU::Config} resource descriptor as defined in {MU::Config::BasketofKittens::firewall_rules}
33
+ def initialize(mommacat: nil, kitten_cfg: nil, mu_name: nil, cloud_id: nil)
34
+ @deploy = mommacat
35
+ @config = MU::Config.manxify(kitten_cfg)
36
+ @cloud_id ||= cloud_id
37
+ if !mu_name.nil?
38
+ @mu_name = mu_name
39
+ else
40
+ if !@vpc.nil?
41
+ @mu_name = @deploy.getResourceName(@config['name'], need_unique_string: true)
42
+ else
43
+ @mu_name = @deploy.getResourceName(@config['name'])
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ # Called by {MU::Deploy#createResources}
50
+ def create
51
+ vpc_id = @vpc.cloud_id if !@vpc.nil?
52
+ groupname = @mu_name
53
+ description = groupname
54
+ MU.log "Creating EC2 Security Group #{groupname}"
55
+
56
+ sg_struct = {
57
+ :group_name => groupname,
58
+ :description => description
59
+ }
60
+ if !vpc_id.nil?
61
+ sg_struct[:vpc_id] = vpc_id
62
+ end
63
+
64
+ begin
65
+ secgroup = MU::Cloud::AWS.ec2(@config['region']).create_security_group(sg_struct)
66
+ @cloud_id = secgroup.group_id
67
+ rescue Aws::EC2::Errors::InvalidGroupDuplicate => e
68
+ MU.log "EC2 Security Group #{groupname} already exists, using it", MU::NOTICE
69
+ filters = [{name: "group-name", values: [groupname]}]
70
+ filters << {name: "vpc-id", values: [vpc_id]} if !vpc_id.nil?
71
+
72
+ secgroup = MU::Cloud::AWS.ec2(@config['region']).describe_security_groups(filters: filters).security_groups.first
73
+ deploy_id = @deploy.deploy_id if !@deploy_id.nil?
74
+ if secgroup.nil?
75
+ raise MuError, "Failed to locate security group named #{groupname}, even though EC2 says it already exists", caller
76
+ end
77
+ @cloud_id = secgroup.group_id
78
+ end
79
+
80
+ begin
81
+ MU::Cloud::AWS.ec2(@config['region']).describe_security_groups(group_ids: [secgroup.group_id])
82
+ rescue Aws::EC2::Errors::InvalidGroupNotFound => e
83
+ MU.log "#{secgroup.group_id} not yet ready, waiting...", MU::NOTICE
84
+ sleep 10
85
+ retry
86
+ end
87
+
88
+ MU::MommaCat.createStandardTags(secgroup.group_id, region: @config['region'])
89
+ MU::MommaCat.createTag(secgroup.group_id, "Name", groupname, region: @config['region'])
90
+
91
+ if @config['optional_tags']
92
+ MU::MommaCat.listOptionalTags.each { |key, value|
93
+ MU::MommaCat.createTag(secgroup.group_id, key, value, region: @config['region'])
94
+ }
95
+ end
96
+
97
+ if @config['tags']
98
+ @config['tags'].each { |tag|
99
+ MU::MommaCat.createTag(secgroup.group_id, tag['key'], tag['value'], region: @config['region'])
100
+ }
101
+ end
102
+
103
+ egress = false
104
+ egress = true if !vpc_id.nil?
105
+ # XXX the egress logic here is a crude hack, this really needs to be
106
+ # done at config level
107
+ setRules(
108
+ [],
109
+ add_to_self: @config['self_referencing'],
110
+ ingress: true,
111
+ egress: egress
112
+ )
113
+
114
+ MU.log "EC2 Security Group #{groupname} is #{secgroup.group_id}", MU::DEBUG
115
+ return secgroup.group_id
116
+ end
117
+
118
+ # Called by {MU::Deploy#createResources}
119
+ def groom
120
+ if !@config['rules'].nil? and @config['rules'].size > 0
121
+ egress = false
122
+ egress = true if !@vpc.nil?
123
+ # XXX the egress logic here is a crude hack, this really needs to be
124
+ # done at config level
125
+ setRules(
126
+ @config['rules'],
127
+ add_to_self: @config['self_referencing'],
128
+ ingress: true,
129
+ egress: egress
130
+ )
131
+ end
132
+ end
133
+
134
+ # Log metadata about this ruleset to the currently running deployment
135
+ def notify
136
+ sg_data = MU.structToHash(
137
+ MU::Cloud::FirewallRule.find(cloud_id: @cloud_id, region: @config['region'])
138
+ )
139
+ sg_data["group_id"] = @cloud_id
140
+ sg_data["cloud_id"] = @cloud_id
141
+ return sg_data
142
+ end
143
+
144
+ # Insert a rule into an existing security group.
145
+ #
146
+ # @param hosts [Array<String>]: An array of CIDR network addresses to which this rule will apply.
147
+ # @param proto [String]: One of "tcp," "udp," or "icmp"
148
+ # @param port [Integer]: A port number. Only valid with udp or tcp.
149
+ # @param egress [Boolean]: Whether this is an egress ruleset, instead of ingress.
150
+ # @param port_range [String]: A port range descriptor (e.g. 0-65535). Only valid with udp or tcp.
151
+ # @return [void]
152
+ def addRule(hosts, proto: "tcp", port: nil, egress: false, port_range: "0-65535")
153
+ rule = Hash.new
154
+ rule["proto"] = proto
155
+ if hosts.is_a?(String)
156
+ rule["hosts"] = [hosts]
157
+ else
158
+ rule["hosts"] = hosts
159
+ end
160
+ if port != nil
161
+ port = port.to_s if !port.is_a?(String)
162
+ rule["port"] = port
163
+ else
164
+ rule["port_range"] = port_range
165
+ end
166
+ ec2_rule = convertToEc2([rule])
167
+
168
+ begin
169
+ if egress
170
+ MU::Cloud::AWS.ec2(@config['region']).authorize_security_group_egress(
171
+ group_id: @cloud_id,
172
+ ip_permissions: ec2_rule
173
+ )
174
+ else
175
+ MU::Cloud::AWS.ec2(@config['region']).authorize_security_group_ingress(
176
+ group_id: @cloud_id,
177
+ ip_permissions: ec2_rule
178
+ )
179
+ end
180
+ rescue Aws::EC2::Errors::InvalidPermissionDuplicate => e
181
+ MU.log "Attempt to add duplicate rule to #{@cloud_id}", MU::DEBUG, details: ec2_rule
182
+ end
183
+ end
184
+
185
+ # Canonical Amazon Resource Number for this resource
186
+ # @return [String]
187
+ def arn
188
+ "arn:"+(MU::Cloud::AWS.isGovCloud?(@config["region"]) ? "aws-us-gov" : "aws")+":ec2:"+@config['region']+":"+MU.account_number+":security-group/"+@cloud_id
189
+ end
190
+
191
+ # Locate an existing security group or groups and return an array containing matching AWS resource descriptors for those that match.
192
+ # @param cloud_id [String]: The cloud provider's identifier for this resource.
193
+ # @param region [String]: The cloud provider region
194
+ # @param tag_key [String]: A tag key to search.
195
+ # @param tag_value [String]: The value of the tag specified by tag_key to match when searching by tag.
196
+ # @param flags [Hash]: Optional flags
197
+ # @return [Array<Hash<String,OpenStruct>>]: The cloud provider's complete descriptions of matching FirewallRules
198
+ def self.find(cloud_id: nil, region: MU.curRegion, tag_key: "Name", tag_value: nil, flags: {})
199
+
200
+ if !cloud_id.nil? and !cloud_id.empty?
201
+ begin
202
+ resp = MU::Cloud::AWS.ec2(region).describe_security_groups(group_ids: [cloud_id])
203
+ return {cloud_id => resp.data.security_groups.first}
204
+ rescue ArgumentError => e
205
+ MU.log "Attempting to load #{cloud_id}: #{e.inspect}", MU::WARN, details: caller
206
+ return {}
207
+ rescue Aws::EC2::Errors::InvalidGroupNotFound => e
208
+ MU.log "Attempting to load #{cloud_id}: #{e.inspect}", MU::DEBUG, details: caller
209
+ return {}
210
+ end
211
+ end
212
+
213
+ map = {}
214
+ if !tag_key.nil? and !tag_value.nil?
215
+ resp = MU::Cloud::AWS.ec2(region).describe_security_groups(
216
+ filters: [
217
+ {name: "tag:#{tag_key}", values: [tag_value]}
218
+ ]
219
+ )
220
+ if !resp.nil?
221
+ resp.data.security_groups.each { |sg|
222
+ map[sg.group_id] = sg
223
+ }
224
+ end
225
+ end
226
+
227
+ map
228
+ end
229
+
230
+ # Remove all security groups (firewall rulesets) associated with the currently loaded deployment.
231
+ # @param noop [Boolean]: If true, will only print what would be done
232
+ # @param ignoremaster [Boolean]: If true, will remove resources not flagged as originating from this Mu server
233
+ # @param region [String]: The cloud provider region
234
+ # @return [void]
235
+ def self.cleanup(noop: false, ignoremaster: false, region: MU.curRegion, flags: {})
236
+ tagfilters = [
237
+ {name: "tag:MU-ID", values: [MU.deploy_id]}
238
+ ]
239
+ if !ignoremaster
240
+ tagfilters << {name: "tag:MU-MASTER-IP", values: [MU.mu_public_ip]}
241
+ end
242
+
243
+ resp = MU::Cloud::AWS.ec2(region).describe_security_groups(
244
+ filters: tagfilters
245
+ )
246
+
247
+ resp.data.security_groups.each { |sg|
248
+ MU.log "Revoking rules in EC2 Security Group #{sg.group_name} (#{sg.group_id})"
249
+
250
+ if !noop
251
+ ingress_to_revoke = Array.new
252
+ egress_to_revoke = Array.new
253
+ sg.ip_permissions.each { |hole|
254
+ ingress_to_revoke << MU.structToHash(hole)
255
+ ingress_to_revoke.each { |rule|
256
+ if !rule[:user_id_group_pairs].nil? and rule[:user_id_group_pairs] .size == 0
257
+ rule.delete(:user_id_group_pairs)
258
+ elsif !rule[:user_id_group_pairs].nil?
259
+ rule[:user_id_group_pairs].each { |group_ref|
260
+ group_ref = MU.structToHash(group_ref)
261
+ group_ref.delete(:group_name) if group_ref[:group_id]
262
+ }
263
+ end
264
+
265
+ if !rule[:ip_ranges].nil? and rule[:ip_ranges].size == 0
266
+ rule.delete(:ip_ranges)
267
+ end
268
+
269
+ if !rule[:prefix_list_ids].nil? and rule[:prefix_list_ids].size == 0
270
+ rule.delete(:prefix_list_ids)
271
+ end
272
+
273
+ if !rule[:ipv_6_ranges].nil? and rule[:ipv_6_ranges].size == 0
274
+ rule.delete(:ipv_6_ranges)
275
+ end
276
+ }
277
+ }
278
+ sg.ip_permissions_egress.each { |hole|
279
+ egress_to_revoke << MU.structToHash(hole)
280
+ egress_to_revoke.each { |rule|
281
+ if !rule[:user_id_group_pairs].nil? and rule[:user_id_group_pairs].size == 0
282
+ rule.delete(:user_id_group_pairs)
283
+ elsif !rule[:user_id_group_pairs].nil?
284
+ rule[:user_id_group_pairs].each { |group_ref|
285
+ group_ref = MU.structToHash(group_ref)
286
+ group_ref.delete(:group_name) if group_ref[:group_id]
287
+ }
288
+ end
289
+
290
+ if !rule[:ip_ranges].nil? and rule[:ip_ranges].size == 0
291
+ rule.delete(:ip_ranges)
292
+ end
293
+
294
+ if !rule[:prefix_list_ids].nil? and rule[:prefix_list_ids].size == 0
295
+ rule.delete(:prefix_list_ids)
296
+ end
297
+
298
+ if !rule[:ipv_6_ranges].nil? and rule[:ipv_6_ranges].size == 0
299
+ rule.delete(:ipv_6_ranges)
300
+ end
301
+ }
302
+ }
303
+ begin
304
+
305
+ if ingress_to_revoke.size > 0
306
+ MU::Cloud::AWS.ec2(region).revoke_security_group_ingress(
307
+ group_id: sg.group_id,
308
+ ip_permissions: ingress_to_revoke
309
+ )
310
+ end
311
+ if egress_to_revoke.size > 0
312
+ MU::Cloud::AWS.ec2(region).revoke_security_group_egress(
313
+ group_id: sg.group_id,
314
+ ip_permissions: egress_to_revoke
315
+ )
316
+ end
317
+ rescue Aws::EC2::Errors::InvalidPermissionNotFound
318
+ MU.log "Rule in #{sg.group_id} disappeared before I could remove it", MU::WARN
319
+ end
320
+ end
321
+ }
322
+
323
+ resp.data.security_groups.each { |sg|
324
+ MU.log "Removing EC2 Security Group #{sg.group_name}"
325
+
326
+ retries = 0
327
+ begin
328
+ MU::Cloud::AWS.ec2(region).delete_security_group(group_id: sg.group_id) if !noop
329
+ rescue Aws::EC2::Errors::InvalidGroupNotFound
330
+ MU.log "EC2 Security Group #{sg.group_name} disappeared before I could delete it!", MU::WARN
331
+ rescue Aws::EC2::Errors::DependencyViolation, Aws::EC2::Errors::InvalidGroupInUse
332
+ if retries < 10
333
+ MU.log "EC2 Security Group #{sg.group_name} is still in use, waiting...", MU::NOTICE
334
+ sleep 10
335
+ retries = retries + 1
336
+ retry
337
+ else
338
+ MU.log "Failed to delete #{sg.group_name}", MU::ERR
339
+ end
340
+ end
341
+ }
342
+ end
343
+
344
+ # Cloud-specific configuration properties.
345
+ # @param config [MU::Config]: The calling MU::Config object
346
+ # @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
347
+ def self.schema(config)
348
+ toplevel_required = []
349
+ schema = {
350
+ "rules" => {
351
+ "items" => {
352
+ "properties" => {
353
+ "sgs" => {
354
+ "type" => "array",
355
+ "items" => {
356
+ "description" => "Other AWS Security Groups; resources that are associated with this group will have this rule applied to their traffic",
357
+ "type" => "string"
358
+ }
359
+ },
360
+ "lbs" => {
361
+ "type" => "array",
362
+ "items" => {
363
+ "description" => "AWS Load Balancers which will have this rule applied to their traffic",
364
+ "type" => "string"
365
+ }
366
+ }
367
+ }
368
+ }
369
+ }
370
+ }
371
+ [toplevel_required, schema]
372
+ end
373
+
374
+ # Cloud-specific pre-processing of {MU::Config::BasketofKittens::firewall_rules}, bare and unvalidated.
375
+ # @param acl [Hash]: The resource to process and validate
376
+ # @param configurator [MU::Config]: The overall deployment config of which this resource is a member
377
+ # @return [Boolean]: True if validation succeeded, False otherwise
378
+ def self.validateConfig(acl, configurator)
379
+ ok = true
380
+ if !acl["vpc_name"].nil? or !acl["vpc_id"].nil?
381
+ acl['vpc'] = Hash.new
382
+ if acl["vpc_id"].nil?
383
+ acl['vpc']["vpc_id"] = config.getTail("vpc_id", value: acl["vpc_id"], prettyname: "Firewall Ruleset #{acl['name']} Target VPC", cloudtype: "AWS::EC2::VPC::Id") if acl["vpc_id"].is_a?(String)
384
+ elsif !acl["vpc_name"].nil?
385
+ acl['vpc']['vpc_name'] = acl["vpc_name"]
386
+ end
387
+ end
388
+ if !acl["vpc"].nil?
389
+ # Drop meaningless subnet references
390
+ acl['vpc'].delete("subnets")
391
+ acl['vpc'].delete("subnet_id")
392
+ acl['vpc'].delete("subnet_name")
393
+ acl['vpc'].delete("subnet_pref")
394
+ end
395
+ acl['rules'] ||= {}
396
+ acl['rules'].each { |rule|
397
+ if !rule['sgs'].nil?
398
+ rule['sgs'].each { |sg_name|
399
+ if configurator.haveLitterMate?(sg_name, "firewall_rules") and sg_name != acl['name']
400
+ acl["dependencies"] << {
401
+ "type" => "firewall_rule",
402
+ "name" => sg_name,
403
+ "no_create_wait" => true
404
+ }
405
+ elsif sg_name == acl['name']
406
+ acl['self_referencing'] = true
407
+ next
408
+ end
409
+ }
410
+ end
411
+ if !rule['lbs'].nil?
412
+ rule['lbs'].each { |lb_name|
413
+ acl["dependencies"] << {
414
+ "type" => "loadbalancer",
415
+ "name" => lb_name,
416
+ "phase" => "groom"
417
+ }
418
+ }
419
+ end
420
+ }
421
+ acl['dependencies'].uniq!
422
+ ok
423
+ end
424
+
425
+ private
426
+
427
+ #########################################################################
428
+ # Manufacture an EC2 security group. The second parameter, rules, is an
429
+ # "ingress_rules" structure parsed and validated by MU::Config.
430
+ #########################################################################
431
+ def setRules(rules, add_to_self: false, ingress: true, egress: false)
432
+ describe
433
+ # XXX warn about attempt to set rules before we exist
434
+ return if rules.nil? or rules.size == 0 or !@cloud_id
435
+
436
+ # add_to_self means that this security is a "member" of its own rules
437
+ # (which is to say, objects that have this SG are allowed in my these
438
+ # rules)
439
+ if add_to_self
440
+ rules.each { |rule|
441
+ if rule['sgs'].nil? or !rule['sgs'].include?(@cloud_id)
442
+ new_rule = rule.clone
443
+ new_rule.delete('hosts')
444
+ rule['sgs'] = Array.new if rule['sgs'].nil?
445
+ rule['sgs'] << @cloud_id
446
+ end
447
+ }
448
+ end
449
+
450
+ ec2_rules = convertToEc2(rules)
451
+
452
+ # Creating an empty security group is ok, so don't freak out if we get
453
+ # a null rule list.
454
+ if !ec2_rules.nil?
455
+ ec2_rules.uniq!
456
+ MU.log "Setting rules in Security Group #{@mu_name} (#{@cloud_id})", details: ec2_rules
457
+ retries = 0
458
+ if rules != nil
459
+ MU.log "Rules for EC2 Security Group #{@mu_name} (#{@cloud_id}): #{ec2_rules}", MU::DEBUG
460
+ begin
461
+ if ingress
462
+ MU::Cloud::AWS.ec2(@config['region']).authorize_security_group_ingress(
463
+ group_id: @cloud_id,
464
+ ip_permissions: ec2_rules
465
+ )
466
+ end
467
+ if egress
468
+ MU::Cloud::AWS.ec2(@config['region']).authorize_security_group_egress(
469
+ group_id: @cloud_id,
470
+ ip_permissions: ec2_rules
471
+ )
472
+ end
473
+ rescue Aws::EC2::Errors::InvalidGroupNotFound => e
474
+ MU.log "#{@mu_name} (#{@cloud_id}) does not yet exist", MU::WARN
475
+ retries = retries + 1
476
+ if retries < 10
477
+ sleep 10
478
+ retry
479
+ else
480
+ raise MuError, "#{@mu_name} does not exist", e.backtrace
481
+ end
482
+ rescue Aws::EC2::Errors::InvalidPermissionDuplicate => e
483
+ MU.log "Attempt to add duplicate rule to #{@mu_name}", MU::DEBUG, details: ec2_rules
484
+ end
485
+ end
486
+ end
487
+
488
+ end
489
+
490
+ #########################################################################
491
+ # Convert our config languages description of firewall rules into Amazon's.
492
+ # This rule structure is as defined in MU::Config.
493
+ #########################################################################
494
+ def convertToEc2(rules)
495
+ ec2_rules = []
496
+ if rules != nil
497
+ rules.uniq!
498
+
499
+ rules.each { |rule|
500
+ ec2_rule = {}
501
+
502
+ rule['proto'] ||= "tcp"
503
+ ec2_rule[:ip_protocol] = rule['proto']
504
+
505
+ p_start = nil
506
+ p_end = nil
507
+ if rule['port_range']
508
+ p_start, p_end = rule['port_range'].to_s.split(/\s*-\s*/)
509
+ elsif rule['port']
510
+ p_start = rule['port'].to_i
511
+ p_end = rule['port'].to_i
512
+ elsif rule['proto'] != "icmp"
513
+ raise MuError, "Can't create a TCP or UDP security group rule without specifying ports: #{rule}"
514
+ end
515
+ if rule['proto'] != "icmp"
516
+ if p_start.nil? or p_end.nil?
517
+ raise MuError, "Got nil ports out of rule #{rule}"
518
+ end
519
+ ec2_rule[:from_port] = p_start.to_i
520
+ ec2_rule[:to_port] = p_end.to_i
521
+ else
522
+ ec2_rule[:from_port] = -1
523
+ ec2_rule[:to_port] = -1
524
+ end
525
+
526
+ if (!defined? rule['hosts'] or !rule['hosts'].is_a?(Array)) and
527
+ (!defined? rule['sgs'] or !rule['sgs'].is_a?(Array)) and
528
+ (!defined? rule['lbs'] or !rule['lbs'].is_a?(Array))
529
+ raise MuError, "One of 'hosts', 'sgs', or 'lbs' in rules provided to createEc2SG must be an array."
530
+ end
531
+ ec2_rule[:ip_ranges] = []
532
+ ec2_rule[:user_id_group_pairs] = []
533
+
534
+ if !rule['hosts'].nil?
535
+ rule['hosts'].uniq!
536
+ rule['hosts'].each { |cidr|
537
+ next if cidr.nil? # XXX where is that coming from?
538
+ cidr = cidr + "/32" if cidr.match(/^\d+\.\d+\.\d+\.\d+$/)
539
+ ec2_rule[:ip_ranges] << {cidr_ip: cidr}
540
+ }
541
+ end
542
+
543
+ if !rule['lbs'].nil?
544
+ # XXX This is a dopey place for this, dependencies() should be doing our legwork
545
+ rule['lbs'].uniq!
546
+ rule['lbs'].each { |lb_name|
547
+ # XXX The language for addressing ELBs should be as flexible as VPCs. This sauce
548
+ # is weak.
549
+ # Try to find one by name in this deploy
550
+
551
+ found = MU::MommaCat.findStray(
552
+ "AWS",
553
+ "loadbalancers",
554
+ name: lb_name,
555
+ deploy_id: @deploy.deploy_id
556
+ )
557
+ # Ok, let's try it with the name being an AWS identifier
558
+ if found.nil? or found.size < 1
559
+ found = MU::MommaCat.findStray(
560
+ "AWS",
561
+ "loadbalancers",
562
+ cloud_id: lb_name,
563
+ dummy_ok: true
564
+ )
565
+ if found.nil? or found.size < 1
566
+ raise MuError, "Couldn't find a LoadBalancer with #{lb_name} for #{@mu_name}"
567
+ end
568
+ end
569
+ lb = found.first
570
+
571
+ if !lb.nil? and !lb.cloud_desc.nil?
572
+ lb.cloud_desc.security_groups.each { |lb_sg|
573
+ ec2_rule[:user_id_group_pairs] << {
574
+ user_id: MU.account_number,
575
+ group_id: lb_sg
576
+ }
577
+ }
578
+ end
579
+ }
580
+ end
581
+
582
+ if !rule['sgs'].nil?
583
+ rule['sgs'].uniq!
584
+ rule['sgs'].each { |sg_name|
585
+ dependencies # Make sure our cache is fresh
586
+ if sg_name == @config['name']
587
+ sg = self
588
+ elsif @dependencies.has_key?("firewall_rule") and
589
+ @dependencies["firewall_rule"].has_key?(sg_name)
590
+ sg = @dependencies["firewall_rule"][sg_name]
591
+ else
592
+ if sg_name.match(/^sg-/)
593
+ found_sgs = MU::MommaCat.findStray("AWS", "firewall_rule", cloud_id: sg_name, region: @config['region'], calling_deploy: @deploy, dummy_ok: true)
594
+ else
595
+ found_sgs = MU::MommaCat.findStray("AWS", "firewall_rule", name: sg_name, region: @config['region'], deploy_id: MU.deploy_id, calling_deploy: @deploy)
596
+ end
597
+ if found_sgs.nil? or found_sgs.size == 0
598
+ raise MuError, "Attempted to reference non-existent Security Group #{sg_name} while building #{@mu_name}"
599
+ end
600
+ sg = found_sgs.first
601
+ end
602
+ ec2_rule[:user_id_group_pairs] << {
603
+ user_id: MU.account_number,
604
+ group_id: sg.cloud_id
605
+ }
606
+ }
607
+ end
608
+
609
+ ec2_rule[:user_id_group_pairs].uniq!
610
+ ec2_rule[:ip_ranges].uniq!
611
+ ec2_rule.delete(:ip_ranges) if ec2_rule[:ip_ranges].empty?
612
+ ec2_rule.delete(:user_id_group_pairs) if ec2_rule[:user_id_group_pairs].empty?
613
+
614
+ # if !ec2_rule[:user_id_group_pairs].nil? and
615
+ # ec2_rule[:user_id_group_pairs].size > 0 and
616
+ # !ec2_rule[:ip_ranges].nil? and
617
+ # ec2_rule[:ip_ranges].size > 0
618
+ # MU.log "Cannot specify ip_ranges and user_id_group_pairs", MU::ERR
619
+ # raise MuError, "Cannot specify ip_ranges and user_id_group_pairs"
620
+ # end
621
+
622
+ # if !ec2_rule[:user_id_group_pairs].nil? and
623
+ # ec2_rule[:user_id_group_pairs].size > 0
624
+ # ec2_rule.delete(:ip_ranges)
625
+ # ec2_rule[:user_id_group_pairs].uniq!
626
+ # elsif !ec2_rule[:ip_ranges].nil? and
627
+ # ec2_rule[:ip_ranges].size > 0
628
+ # ec2_rule.delete(:user_id_group_pairs)
629
+ # ec2_rule[:ip_ranges].uniq!
630
+ # end
631
+ ec2_rules << ec2_rule
632
+ }
633
+ end
634
+ ec2_rules.uniq!
635
+ return ec2_rules
636
+ end
637
+
638
+ end #class
639
+ end #class
640
+ end
641
+ end #module