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.
- checksums.yaml +7 -0
- data/Berksfile +56 -0
- data/Berksfile.lock +250 -0
- data/Jenkinsfile +184 -0
- data/LICENSE.md +37 -0
- data/README.md +26 -0
- data/bin/mu-aws-setup +376 -0
- data/bin/mu-cleanup +68 -0
- data/bin/mu-configure +1133 -0
- data/bin/mu-deploy +166 -0
- data/bin/mu-firewall-allow-clients +30 -0
- data/bin/mu-gcp-setup +200 -0
- data/bin/mu-gen-docs +34 -0
- data/bin/mu-gen-env +42 -0
- data/bin/mu-load-config.rb +158 -0
- data/bin/mu-node-manage +683 -0
- data/bin/mu-self-update +228 -0
- data/bin/mu-ssh +23 -0
- data/bin/mu-tunnel-nagios +144 -0
- data/bin/mu-upload-chef-artifacts +757 -0
- data/bin/mu-user-manage +275 -0
- data/cookbooks/awscli/LICENSE +37 -0
- data/cookbooks/awscli/README.md +58 -0
- data/cookbooks/awscli/attributes/default.rb +1 -0
- data/cookbooks/awscli/libraries/instance_metadata.rb +21 -0
- data/cookbooks/awscli/metadata.rb +20 -0
- data/cookbooks/awscli/recipes/default.rb +56 -0
- data/cookbooks/awscli/templates/default/config.erb +18 -0
- data/cookbooks/mu-activedirectory/CHANGELOG.md +13 -0
- data/cookbooks/mu-activedirectory/LICENSE +37 -0
- data/cookbooks/mu-activedirectory/README.md +6 -0
- data/cookbooks/mu-activedirectory/attributes/default.rb +98 -0
- data/cookbooks/mu-activedirectory/files/default/password-auth +32 -0
- data/cookbooks/mu-activedirectory/files/default/sshd_pol.pp +0 -0
- data/cookbooks/mu-activedirectory/files/default/sshd_pol.te +32 -0
- data/cookbooks/mu-activedirectory/files/default/syslogd_oddjobd.pp +0 -0
- data/cookbooks/mu-activedirectory/files/default/syslogd_oddjobd.te +10 -0
- data/cookbooks/mu-activedirectory/files/default/system-auth +34 -0
- data/cookbooks/mu-activedirectory/files/default/winbindpol.pp +0 -0
- data/cookbooks/mu-activedirectory/files/default/winbindpol.te +37 -0
- data/cookbooks/mu-activedirectory/libraries/config.rb +106 -0
- data/cookbooks/mu-activedirectory/libraries/helper.rb +86 -0
- data/cookbooks/mu-activedirectory/metadata.rb +17 -0
- data/cookbooks/mu-activedirectory/providers/domain.rb +152 -0
- data/cookbooks/mu-activedirectory/providers/domain_controller.rb +89 -0
- data/cookbooks/mu-activedirectory/providers/domain_node.rb +275 -0
- data/cookbooks/mu-activedirectory/recipes/default.rb +8 -0
- data/cookbooks/mu-activedirectory/recipes/domain-controller.rb +44 -0
- data/cookbooks/mu-activedirectory/recipes/domain-node.rb +50 -0
- data/cookbooks/mu-activedirectory/recipes/domain.rb +43 -0
- data/cookbooks/mu-activedirectory/recipes/sssd.rb +185 -0
- data/cookbooks/mu-activedirectory/resources/domain.rb +25 -0
- data/cookbooks/mu-activedirectory/resources/domain_controller.rb +25 -0
- data/cookbooks/mu-activedirectory/resources/domain_node.rb +20 -0
- data/cookbooks/mu-activedirectory/templates/default/dhclient-eth0.conf.erb +4 -0
- data/cookbooks/mu-activedirectory/templates/default/interface +0 -0
- data/cookbooks/mu-activedirectory/templates/default/krb5.conf.erb +23 -0
- data/cookbooks/mu-activedirectory/templates/default/ntp.conf.erb +56 -0
- data/cookbooks/mu-activedirectory/templates/default/smb.conf.erb +33 -0
- data/cookbooks/mu-activedirectory/templates/default/sssd.conf.erb +60 -0
- data/cookbooks/mu-activedirectory/templates/windows/Backup.xml.erb +20 -0
- data/cookbooks/mu-activedirectory/templates/windows/bkupInfo.xml.erb +1 -0
- data/cookbooks/mu-activedirectory/templates/windows/gpreprt.xml.erb +198 -0
- data/cookbooks/mu-activedirectory/templates/windows/gptmpl.inf.erb +12 -0
- data/cookbooks/mu-activedirectory/templates/windows/manifest.xml.erb +1 -0
- data/cookbooks/mu-firewall/CHANGELOG.md +11 -0
- data/cookbooks/mu-firewall/LICENSE +37 -0
- data/cookbooks/mu-firewall/README.md +5 -0
- data/cookbooks/mu-firewall/attributes/default.rb +3 -0
- data/cookbooks/mu-firewall/metadata.rb +16 -0
- data/cookbooks/mu-firewall/recipes/default.rb +10 -0
- data/cookbooks/mu-glusterfs/CHANGELOG.md +13 -0
- data/cookbooks/mu-glusterfs/LICENSE +37 -0
- data/cookbooks/mu-glusterfs/README.md +5 -0
- data/cookbooks/mu-glusterfs/attributes/default.rb +34 -0
- data/cookbooks/mu-glusterfs/metadata.rb +17 -0
- data/cookbooks/mu-glusterfs/recipes/client.rb +62 -0
- data/cookbooks/mu-glusterfs/recipes/default.rb +16 -0
- data/cookbooks/mu-glusterfs/recipes/samba.rb +57 -0
- data/cookbooks/mu-glusterfs/recipes/server.rb +200 -0
- data/cookbooks/mu-glusterfs/templates/default/mu-gluster-client.erb +71 -0
- data/cookbooks/mu-glusterfs/templates/default/smb.conf.erb +14 -0
- data/cookbooks/mu-jenkins/CHANGELOG.md +13 -0
- data/cookbooks/mu-jenkins/LICENSE +37 -0
- data/cookbooks/mu-jenkins/README.md +105 -0
- data/cookbooks/mu-jenkins/attributes/default.rb +42 -0
- data/cookbooks/mu-jenkins/files/default/cleanup_deploy_config.xml +73 -0
- data/cookbooks/mu-jenkins/files/default/deploy_config.xml +44 -0
- data/cookbooks/mu-jenkins/metadata.rb +21 -0
- data/cookbooks/mu-jenkins/recipes/default.rb +195 -0
- data/cookbooks/mu-jenkins/recipes/node-ssh-config.rb +54 -0
- data/cookbooks/mu-jenkins/recipes/public_key.rb +24 -0
- data/cookbooks/mu-jenkins/templates/default/example_job.config.xml.erb +24 -0
- data/cookbooks/mu-jenkins/templates/default/org.jvnet.hudson.plugins.SSHBuildWrapper.xml.erb +14 -0
- data/cookbooks/mu-jenkins/templates/default/ssh_config.erb +6 -0
- data/cookbooks/mu-master/CHANGELOG.md +13 -0
- data/cookbooks/mu-master/LICENSE +37 -0
- data/cookbooks/mu-master/README.md +6 -0
- data/cookbooks/mu-master/attributes/default.rb +95 -0
- data/cookbooks/mu-master/files/default/0-mu-log-server.conf +19 -0
- data/cookbooks/mu-master/files/default/addRSA.ldif +8 -0
- data/cookbooks/mu-master/files/default/check_mem.pl +197 -0
- data/cookbooks/mu-master/files/default/cloudamatic.png +0 -0
- data/cookbooks/mu-master/files/default/dirsrv_admin.pp +0 -0
- data/cookbooks/mu-master/files/default/dirsrv_admin.te +13 -0
- data/cookbooks/mu-master/files/default/nagios_selinux.pp +0 -0
- data/cookbooks/mu-master/files/default/nagios_selinux.te +51 -0
- data/cookbooks/mu-master/files/default/nagios_selinux_7.pp +0 -0
- data/cookbooks/mu-master/files/default/nagios_selinux_7.te +17 -0
- data/cookbooks/mu-master/files/default/pam_sshd +18 -0
- data/cookbooks/mu-master/files/default/ssl_enable.ldif +18 -0
- data/cookbooks/mu-master/files/default/syslogd_oddjobd.pp +0 -0
- data/cookbooks/mu-master/files/default/syslogd_oddjobd.te +10 -0
- data/cookbooks/mu-master/files/default/vimrc +19 -0
- data/cookbooks/mu-master/libraries/mu.rb +29 -0
- data/cookbooks/mu-master/metadata.rb +30 -0
- data/cookbooks/mu-master/providers/user.rb +41 -0
- data/cookbooks/mu-master/recipes/389ds.rb +164 -0
- data/cookbooks/mu-master/recipes/basepackages.rb +58 -0
- data/cookbooks/mu-master/recipes/caching_nameserver.rb +37 -0
- data/cookbooks/mu-master/recipes/default.rb +451 -0
- data/cookbooks/mu-master/recipes/eks-kubectl.rb +41 -0
- data/cookbooks/mu-master/recipes/firewall-holes.rb +70 -0
- data/cookbooks/mu-master/recipes/init.rb +542 -0
- data/cookbooks/mu-master/recipes/ssl-certs.rb +109 -0
- data/cookbooks/mu-master/recipes/sssd.rb +89 -0
- data/cookbooks/mu-master/recipes/update_nagios_only.rb +242 -0
- data/cookbooks/mu-master/recipes/vault.rb +111 -0
- data/cookbooks/mu-master/resources/user.rb +19 -0
- data/cookbooks/mu-master/templates/default/389-directory-setup.inf.erb +28 -0
- data/cookbooks/mu-master/templates/default/chef-server.rb.erb +18 -0
- data/cookbooks/mu-master/templates/default/dhclient-eth0.conf.erb +9 -0
- data/cookbooks/mu-master/templates/default/mu-momma-cat.erb +149 -0
- data/cookbooks/mu-master/templates/default/mu.rc.erb +9 -0
- data/cookbooks/mu-master/templates/default/openssl.cnf.erb +354 -0
- data/cookbooks/mu-master/templates/default/sssd.conf.erb +44 -0
- data/cookbooks/mu-master/templates/default/web_app.conf.erb +90 -0
- data/cookbooks/mu-mongo/CHANGELOG.md +13 -0
- data/cookbooks/mu-mongo/LICENSE +37 -0
- data/cookbooks/mu-mongo/README.md +5 -0
- data/cookbooks/mu-mongo/attributes/default.rb +22 -0
- data/cookbooks/mu-mongo/files/default/keyfile +16 -0
- data/cookbooks/mu-mongo/files/default/remove_nodes.js +5 -0
- data/cookbooks/mu-mongo/metadata.rb +17 -0
- data/cookbooks/mu-mongo/recipes/default.rb +149 -0
- data/cookbooks/mu-mongo/recipes/yum-update-rule.rb +18 -0
- data/cookbooks/mu-mongo/templates/default/mongo_create_openfema_db.js.erb +2 -0
- data/cookbooks/mu-mongo/templates/default/mongo_init.js.erb +1 -0
- data/cookbooks/mu-mongo/templates/default/mongo_logrotate.erb +14 -0
- data/cookbooks/mu-mongo/templates/default/mongo_replset_addnodes.js.erb +6 -0
- data/cookbooks/mu-mongo/templates/default/replset_init.js.erb +2 -0
- data/cookbooks/mu-openvpn/CHANGELOG.md +13 -0
- data/cookbooks/mu-openvpn/LICENSE +37 -0
- data/cookbooks/mu-openvpn/README.md +6 -0
- data/cookbooks/mu-openvpn/attributes/default.rb +119 -0
- data/cookbooks/mu-openvpn/metadata.rb +18 -0
- data/cookbooks/mu-openvpn/recipes/default.rb +108 -0
- data/cookbooks/mu-openvpn/templates/default/users.json.erb +42 -0
- data/cookbooks/mu-php54/CHANGELOG.md +12 -0
- data/cookbooks/mu-php54/LICENSE +37 -0
- data/cookbooks/mu-php54/README.md +0 -0
- data/cookbooks/mu-php54/files/centos/php.ini +1802 -0
- data/cookbooks/mu-php54/files/ubuntu/php.ini +1870 -0
- data/cookbooks/mu-php54/metadata.rb +21 -0
- data/cookbooks/mu-php54/recipes/default.rb +97 -0
- data/cookbooks/mu-splunk/CHANGELOG.md +37 -0
- data/cookbooks/mu-splunk/LICENSE +37 -0
- data/cookbooks/mu-splunk/README.md +451 -0
- data/cookbooks/mu-splunk/attributes/default.rb +95 -0
- data/cookbooks/mu-splunk/attributes/upgrade.rb +49 -0
- data/cookbooks/mu-splunk/definitions/splunk_installer.rb +103 -0
- data/cookbooks/mu-splunk/files/default/splunk-nocheck +10 -0
- data/cookbooks/mu-splunk/libraries/helpers.rb +72 -0
- data/cookbooks/mu-splunk/libraries/splunk_app_provider.rb +156 -0
- data/cookbooks/mu-splunk/libraries/splunk_app_resource.rb +43 -0
- data/cookbooks/mu-splunk/metadata.json +30 -0
- data/cookbooks/mu-splunk/metadata.rb +17 -0
- data/cookbooks/mu-splunk/recipes/client.rb +143 -0
- data/cookbooks/mu-splunk/recipes/default.rb +31 -0
- data/cookbooks/mu-splunk/recipes/disabled.rb +41 -0
- data/cookbooks/mu-splunk/recipes/install_forwarder.rb +23 -0
- data/cookbooks/mu-splunk/recipes/install_server.rb +23 -0
- data/cookbooks/mu-splunk/recipes/server.rb +53 -0
- data/cookbooks/mu-splunk/recipes/service.rb +95 -0
- data/cookbooks/mu-splunk/recipes/setup_auth.rb +49 -0
- data/cookbooks/mu-splunk/recipes/setup_ssl.rb +63 -0
- data/cookbooks/mu-splunk/recipes/upgrade.rb +94 -0
- data/cookbooks/mu-splunk/recipes/user.rb +34 -0
- data/cookbooks/mu-splunk/templates/default/base_logs_unix_inputs.conf.erb +26 -0
- data/cookbooks/mu-splunk/templates/default/inputs.conf.erb +13 -0
- data/cookbooks/mu-splunk/templates/default/outputs.conf.erb +9 -0
- data/cookbooks/mu-splunk/templates/default/splunk-init.erb +74 -0
- data/cookbooks/mu-splunk/templates/default/system-web.conf.erb +7 -0
- data/cookbooks/mu-tools/CHANGELOG.md +12 -0
- data/cookbooks/mu-tools/LICENSE +37 -0
- data/cookbooks/mu-tools/README.md +188 -0
- data/cookbooks/mu-tools/attributes/default.rb +142 -0
- data/cookbooks/mu-tools/attributes/ebs_rolling_snapshots.rb +3 -0
- data/cookbooks/mu-tools/files/amazon/etc/freshclam.conf +235 -0
- data/cookbooks/mu-tools/files/centos/CentOS-Base.repo +52 -0
- data/cookbooks/mu-tools/files/centos/etc/bashrc +93 -0
- data/cookbooks/mu-tools/files/centos/etc/freshclam.conf +235 -0
- data/cookbooks/mu-tools/files/centos/etc/login.defs +72 -0
- data/cookbooks/mu-tools/files/centos/etc/profile +77 -0
- data/cookbooks/mu-tools/files/centos/etc/security/limits.conf +57 -0
- data/cookbooks/mu-tools/files/centos/etc/sysconfig/init +19 -0
- data/cookbooks/mu-tools/files/centos/etc/sysctl.conf +82 -0
- data/cookbooks/mu-tools/files/centos-6/README_MU +0 -0
- data/cookbooks/mu-tools/files/centos-6/etc/audit/stig.rules +173 -0
- data/cookbooks/mu-tools/files/centos-6/etc/bashrc +90 -0
- data/cookbooks/mu-tools/files/centos-6/etc/login.defs +70 -0
- data/cookbooks/mu-tools/files/centos-6/etc/pam.d/su +12 -0
- data/cookbooks/mu-tools/files/centos-6/etc/profile +83 -0
- data/cookbooks/mu-tools/files/centos-6/etc/securetty +12 -0
- data/cookbooks/mu-tools/files/centos-6/etc/sysconfig/init +30 -0
- data/cookbooks/mu-tools/files/centos-6/etc/sysctl.conf +40 -0
- data/cookbooks/mu-tools/files/default/Mu_CA.pem +34 -0
- data/cookbooks/mu-tools/files/default/PSWindowsUpdate.zip +0 -0
- data/cookbooks/mu-tools/files/default/ebs_snapshots.py +123 -0
- data/cookbooks/mu-tools/files/default/etc/BANNER +0 -0
- data/cookbooks/mu-tools/files/default/etc/BANNER-FEDERAL +19 -0
- data/cookbooks/mu-tools/files/default/gpo_no_uac.zip +0 -0
- data/cookbooks/mu-tools/files/default/mypol.pp +0 -0
- data/cookbooks/mu-tools/files/default/mypol.te +37 -0
- data/cookbooks/mu-tools/files/default/nrpe_c7.pp +0 -0
- data/cookbooks/mu-tools/files/default/nrpe_c7.te +31 -0
- data/cookbooks/mu-tools/files/default/nrpe_check_disk.pp +0 -0
- data/cookbooks/mu-tools/files/default/nrpe_check_disk.te +11 -0
- data/cookbooks/mu-tools/files/default/nrpe_disk.pp +0 -0
- data/cookbooks/mu-tools/files/default/nrpe_disk.te +10 -0
- data/cookbooks/mu-tools/files/default/nrpe_file.pp +0 -0
- data/cookbooks/mu-tools/files/default/nrpe_file.te +31 -0
- data/cookbooks/mu-tools/files/default/ntrights +0 -0
- data/cookbooks/mu-tools/files/default/serverclass.conf +18 -0
- data/cookbooks/mu-tools/files/default/splunk-apps/base_logs_unix/local/app.conf +1 -0
- data/cookbooks/mu-tools/files/default/splunk-apps/base_logs_unix/local/inputs.conf +13 -0
- data/cookbooks/mu-tools/files/default/splunk-apps/base_logs_windows/local/app.conf +1 -0
- data/cookbooks/mu-tools/files/default/splunk-apps/base_logs_windows/local/inputs.conf +8 -0
- data/cookbooks/mu-tools/files/default/sshd_pol.pp +0 -0
- data/cookbooks/mu-tools/files/default/sshd_pol.te +32 -0
- data/cookbooks/mu-tools/files/redhat/etc/bashrc +93 -0
- data/cookbooks/mu-tools/files/redhat/etc/freshclam.conf +235 -0
- data/cookbooks/mu-tools/files/redhat/etc/login.defs +72 -0
- data/cookbooks/mu-tools/files/redhat/etc/profile +77 -0
- data/cookbooks/mu-tools/files/redhat/etc/security/limits.conf +57 -0
- data/cookbooks/mu-tools/files/redhat/etc/sysconfig/init +19 -0
- data/cookbooks/mu-tools/files/redhat/etc/sysctl.conf +82 -0
- data/cookbooks/mu-tools/files/redhat-6/README_MU +0 -0
- data/cookbooks/mu-tools/files/redhat-6/etc/audit/stig.rules +173 -0
- data/cookbooks/mu-tools/files/redhat-6/etc/bashrc +90 -0
- data/cookbooks/mu-tools/files/redhat-6/etc/login.defs +70 -0
- data/cookbooks/mu-tools/files/redhat-6/etc/pam.d/su +12 -0
- data/cookbooks/mu-tools/files/redhat-6/etc/profile +83 -0
- data/cookbooks/mu-tools/files/redhat-6/etc/securetty +12 -0
- data/cookbooks/mu-tools/files/redhat-6/etc/sysconfig/init +30 -0
- data/cookbooks/mu-tools/files/redhat-6/etc/sysctl.conf +40 -0
- data/cookbooks/mu-tools/files/redhat-7.1/etc/freshclam.conf +235 -0
- data/cookbooks/mu-tools/files/ubuntu-12.04/etc/bash.bashrc +64 -0
- data/cookbooks/mu-tools/files/ubuntu-12.04/etc/common-session +30 -0
- data/cookbooks/mu-tools/files/ubuntu-12.04/etc/login.defs +338 -0
- data/cookbooks/mu-tools/files/ubuntu-12.04/etc/profile +30 -0
- data/cookbooks/mu-tools/files/ubuntu-12.04/etc/security/limits.conf +56 -0
- data/cookbooks/mu-tools/files/ubuntu-12.04/etc/sysctl.conf +60 -0
- data/cookbooks/mu-tools/libraries/helper.rb +292 -0
- data/cookbooks/mu-tools/metadata.rb +28 -0
- data/cookbooks/mu-tools/recipes/add_admin_ssh_keys.rb +35 -0
- data/cookbooks/mu-tools/recipes/apply_security.rb +440 -0
- data/cookbooks/mu-tools/recipes/aws_api.rb +23 -0
- data/cookbooks/mu-tools/recipes/base_repositories.rb +31 -0
- data/cookbooks/mu-tools/recipes/cisbenchmark.rb +59 -0
- data/cookbooks/mu-tools/recipes/clamav.rb +53 -0
- data/cookbooks/mu-tools/recipes/cloudinit.rb +58 -0
- data/cookbooks/mu-tools/recipes/configure_oracle_tools.rb +81 -0
- data/cookbooks/mu-tools/recipes/disable-requiretty.rb +22 -0
- data/cookbooks/mu-tools/recipes/ebs_rolling_snapshots.rb +75 -0
- data/cookbooks/mu-tools/recipes/efs.rb +70 -0
- data/cookbooks/mu-tools/recipes/eks.rb +160 -0
- data/cookbooks/mu-tools/recipes/gcloud.rb +98 -0
- data/cookbooks/mu-tools/recipes/google_api.rb +25 -0
- data/cookbooks/mu-tools/recipes/maldet.rb +67 -0
- data/cookbooks/mu-tools/recipes/nagios.rb +19 -0
- data/cookbooks/mu-tools/recipes/newclient.rb +23 -0
- data/cookbooks/mu-tools/recipes/nrpe.rb +115 -0
- data/cookbooks/mu-tools/recipes/python_pip.rb +35 -0
- data/cookbooks/mu-tools/recipes/retrieve_application.rb +51 -0
- data/cookbooks/mu-tools/recipes/rsyslog.rb +65 -0
- data/cookbooks/mu-tools/recipes/set_local_fw.rb +57 -0
- data/cookbooks/mu-tools/recipes/set_mu_hostname.rb +81 -0
- data/cookbooks/mu-tools/recipes/split_var_partitions.rb +86 -0
- data/cookbooks/mu-tools/recipes/splunk-client.rb +69 -0
- data/cookbooks/mu-tools/recipes/splunk-server.rb +104 -0
- data/cookbooks/mu-tools/recipes/store_inspec_attr.rb +8 -0
- data/cookbooks/mu-tools/recipes/updates.rb +96 -0
- data/cookbooks/mu-tools/recipes/windows-client.rb +202 -0
- data/cookbooks/mu-tools/resources/aws_windows.rb +33 -0
- data/cookbooks/mu-tools/resources/disk.rb +88 -0
- data/cookbooks/mu-tools/resources/mommacat_request.rb +11 -0
- data/cookbooks/mu-tools/resources/scheduled_tasks.rb +29 -0
- data/cookbooks/mu-tools/resources/sshd_service.rb +45 -0
- data/cookbooks/mu-tools/resources/windows_users.rb +242 -0
- data/cookbooks/mu-tools/templates/amazon/sshd_config.erb +168 -0
- data/cookbooks/mu-tools/templates/centos-6/sshd_config.erb +212 -0
- data/cookbooks/mu-tools/templates/centos-7/sshd_config.erb +215 -0
- data/cookbooks/mu-tools/templates/default/0-mu-log-client.conf.erb +13 -0
- data/cookbooks/mu-tools/templates/default/conf.maldet.erb +137 -0
- data/cookbooks/mu-tools/templates/default/etc_hosts.erb +30 -0
- data/cookbooks/mu-tools/templates/default/etc_pamd_password-auth.erb +14 -0
- data/cookbooks/mu-tools/templates/default/etc_pamd_system-auth.erb +14 -0
- data/cookbooks/mu-tools/templates/default/etc_sysconfig_network.erb +12 -0
- data/cookbooks/mu-tools/templates/default/kubeconfig.erb +29 -0
- data/cookbooks/mu-tools/templates/default/kubelet.service.erb +35 -0
- data/cookbooks/mu-tools/templates/default/maldet_scanall.sh.erb +15 -0
- data/cookbooks/mu-tools/templates/default/nrpe.cfg.erb +233 -0
- data/cookbooks/mu-tools/templates/redhat-6/sshd_config.erb +213 -0
- data/cookbooks/mu-tools/templates/redhat-7/sshd_config.erb +215 -0
- data/cookbooks/mu-tools/templates/ubuntu-12.04/sshd_config.erb +146 -0
- data/cookbooks/mu-tools/templates/ubuntu-14.04/sshd_config.erb +145 -0
- data/cookbooks/mu-tools/templates/windows/Backup.xml.erb +20 -0
- data/cookbooks/mu-tools/templates/windows/bkupInfo.xml.erb +1 -0
- data/cookbooks/mu-tools/templates/windows/gpreprt.xml.erb +214 -0
- data/cookbooks/mu-tools/templates/windows/gptmpl.inf.erb +12 -0
- data/cookbooks/mu-tools/templates/windows/manifest.xml.erb +1 -0
- data/cookbooks/mu-tools/templates/windows/set_ad_dns_scheduled_task.ps1.erb +6 -0
- data/cookbooks/mu-tools/templates/windows/sshd_config.erb +136 -0
- data/cookbooks/mu-utility/CHANGELOG.md +12 -0
- data/cookbooks/mu-utility/LICENSE +37 -0
- data/cookbooks/mu-utility/README.md +6 -0
- data/cookbooks/mu-utility/attributes/default.rb +1 -0
- data/cookbooks/mu-utility/libraries/matchers.rb +21 -0
- data/cookbooks/mu-utility/metadata.rb +16 -0
- data/cookbooks/mu-utility/recipes/apt.rb +23 -0
- data/cookbooks/mu-utility/recipes/cleanup_image_helper.rb +118 -0
- data/cookbooks/mu-utility/recipes/iptables.rb +26 -0
- data/cookbooks/mu-utility/recipes/luks.rb +18 -0
- data/cookbooks/mu-utility/recipes/nat.rb +104 -0
- data/cookbooks/mu-utility/recipes/php.rb +33 -0
- data/cookbooks/mu-utility/recipes/rdp_gateway.rb +83 -0
- data/cookbooks/mu-utility/recipes/remi.rb +44 -0
- data/cookbooks/mu-utility/recipes/vim.rb +26 -0
- data/cookbooks/mu-utility/recipes/windows_basics.rb +37 -0
- data/cookbooks/mu-utility/recipes/zip.rb +26 -0
- data/cookbooks/mu-utility/templates/default/BundleConfig.xml.erb +34 -0
- data/cookbooks/mu-utility/templates/default/config.xml.erb +60 -0
- data/cookbooks/nagios/Berksfile +8 -0
- data/cookbooks/nagios/CHANGELOG.md +589 -0
- data/cookbooks/nagios/CONTRIBUTING.md +11 -0
- data/cookbooks/nagios/LICENSE +37 -0
- data/cookbooks/nagios/README.md +328 -0
- data/cookbooks/nagios/TESTING.md +2 -0
- data/cookbooks/nagios/attributes/config.rb +171 -0
- data/cookbooks/nagios/attributes/default.rb +228 -0
- data/cookbooks/nagios/chefignore +102 -0
- data/cookbooks/nagios/definitions/command.rb +33 -0
- data/cookbooks/nagios/definitions/contact.rb +33 -0
- data/cookbooks/nagios/definitions/contactgroup.rb +33 -0
- data/cookbooks/nagios/definitions/host.rb +33 -0
- data/cookbooks/nagios/definitions/hostdependency.rb +33 -0
- data/cookbooks/nagios/definitions/hostescalation.rb +34 -0
- data/cookbooks/nagios/definitions/hostgroup.rb +33 -0
- data/cookbooks/nagios/definitions/nagios_conf.rb +38 -0
- data/cookbooks/nagios/definitions/resource.rb +33 -0
- data/cookbooks/nagios/definitions/service.rb +33 -0
- data/cookbooks/nagios/definitions/servicedependency.rb +33 -0
- data/cookbooks/nagios/definitions/serviceescalation.rb +34 -0
- data/cookbooks/nagios/definitions/servicegroup.rb +33 -0
- data/cookbooks/nagios/definitions/timeperiod.rb +33 -0
- data/cookbooks/nagios/libraries/base.rb +314 -0
- data/cookbooks/nagios/libraries/command.rb +91 -0
- data/cookbooks/nagios/libraries/contact.rb +230 -0
- data/cookbooks/nagios/libraries/contactgroup.rb +112 -0
- data/cookbooks/nagios/libraries/custom_option.rb +36 -0
- data/cookbooks/nagios/libraries/data_bag_helper.rb +23 -0
- data/cookbooks/nagios/libraries/default.rb +90 -0
- data/cookbooks/nagios/libraries/host.rb +412 -0
- data/cookbooks/nagios/libraries/hostdependency.rb +181 -0
- data/cookbooks/nagios/libraries/hostescalation.rb +173 -0
- data/cookbooks/nagios/libraries/hostgroup.rb +119 -0
- data/cookbooks/nagios/libraries/nagios.rb +282 -0
- data/cookbooks/nagios/libraries/resource.rb +59 -0
- data/cookbooks/nagios/libraries/service.rb +455 -0
- data/cookbooks/nagios/libraries/servicedependency.rb +215 -0
- data/cookbooks/nagios/libraries/serviceescalation.rb +195 -0
- data/cookbooks/nagios/libraries/servicegroup.rb +144 -0
- data/cookbooks/nagios/libraries/timeperiod.rb +160 -0
- data/cookbooks/nagios/libraries/users_helper.rb +54 -0
- data/cookbooks/nagios/metadata.rb +25 -0
- data/cookbooks/nagios/recipes/_load_databag_config.rb +153 -0
- data/cookbooks/nagios/recipes/_load_default_config.rb +241 -0
- data/cookbooks/nagios/recipes/apache.rb +48 -0
- data/cookbooks/nagios/recipes/default.rb +204 -0
- data/cookbooks/nagios/recipes/nginx.rb +82 -0
- data/cookbooks/nagios/recipes/pagerduty.rb +143 -0
- data/cookbooks/nagios/recipes/server_package.rb +40 -0
- data/cookbooks/nagios/recipes/server_source.rb +164 -0
- data/cookbooks/nagios/templates/default/apache2.conf.erb +96 -0
- data/cookbooks/nagios/templates/default/cgi.cfg.erb +266 -0
- data/cookbooks/nagios/templates/default/commands.cfg.erb +13 -0
- data/cookbooks/nagios/templates/default/contacts.cfg.erb +37 -0
- data/cookbooks/nagios/templates/default/hostgroups.cfg.erb +25 -0
- data/cookbooks/nagios/templates/default/hosts.cfg.erb +15 -0
- data/cookbooks/nagios/templates/default/htpasswd.users.erb +6 -0
- data/cookbooks/nagios/templates/default/nagios.cfg.erb +22 -0
- data/cookbooks/nagios/templates/default/nginx.conf.erb +62 -0
- data/cookbooks/nagios/templates/default/pagerduty.cgi.erb +185 -0
- data/cookbooks/nagios/templates/default/resource.cfg.erb +27 -0
- data/cookbooks/nagios/templates/default/servicedependencies.cfg.erb +15 -0
- data/cookbooks/nagios/templates/default/servicegroups.cfg.erb +14 -0
- data/cookbooks/nagios/templates/default/services.cfg.erb +14 -0
- data/cookbooks/nagios/templates/default/templates.cfg.erb +31 -0
- data/cookbooks/nagios/templates/default/timeperiods.cfg.erb +13 -0
- data/cookbooks/s3fs/CHANGELOG.md +13 -0
- data/cookbooks/s3fs/LICENSE +37 -0
- data/cookbooks/s3fs/README.md +6 -0
- data/cookbooks/s3fs/attributes/default.rb +15 -0
- data/cookbooks/s3fs/files/default/fuse-2.9.3.zip +0 -0
- data/cookbooks/s3fs/metadata.rb +16 -0
- data/cookbooks/s3fs/recipes/default.rb +91 -0
- data/data_bags/demo/app.json +7 -0
- data/data_bags/nagios_services/chef.json +6 -0
- data/data_bags/nagios_services/linux_diskspace.json +5 -0
- data/data_bags/nagios_services/momma_cat.json +6 -0
- data/data_bags/nagios_services/mu-master-memory.json +5 -0
- data/data_bags/nagios_services/nagios_ui.json +6 -0
- data/data_bags/nagios_services/node_ssh.json +6 -0
- data/data_bags/nagios_services/ssh.json +6 -0
- data/demo/lambda_test.yaml +29 -0
- data/environments/DEV.json +8 -0
- data/environments/PROD.json +8 -0
- data/environments/dev.json +8 -0
- data/environments/development.json +8 -0
- data/environments/prod.json +8 -0
- data/extras/README.md +1 -0
- data/extras/admin-role-binding.yaml +16 -0
- data/extras/admin-user.yaml +6 -0
- data/extras/aws-auth-cm.yaml.erb +12 -0
- data/extras/clean-stock-amis +48 -0
- data/extras/git-fix-permissions-hook +12 -0
- data/extras/gitlab-eks-helper.sh.erb +20 -0
- data/extras/image-generators/README.md +2 -0
- data/extras/image-generators/aws/centos6.yaml +18 -0
- data/extras/image-generators/aws/centos7-govcloud.yaml +24 -0
- data/extras/image-generators/aws/centos7.yaml +17 -0
- data/extras/image-generators/aws/rhel7.yaml +17 -0
- data/extras/image-generators/aws/win2k12.yaml +16 -0
- data/extras/image-generators/aws/win2k16.yaml +16 -0
- data/extras/image-generators/aws/windows.yaml +18 -0
- data/extras/image-generators/gcp/centos6.yaml +17 -0
- data/extras/lambda_waf_domain_blacklist.py +103 -0
- data/extras/platform_berksfile_base +50 -0
- data/extras/ruby_rpm/build.sh +17 -0
- data/extras/ruby_rpm/muby.spec +44 -0
- data/extras/vault_tools/README.md +6 -0
- data/extras/vault_tools/export_vaults.sh +3 -0
- data/extras/vault_tools/recreate_vaults.sh +5 -0
- data/extras/vault_tools/test_vaults.sh +5 -0
- data/install/README.md +8 -0
- data/install/cfn_create_mu_master.json +1034 -0
- data/install/chef-server.rb.erb +19 -0
- data/install/deprecated-bash-library.sh +1891 -0
- data/install/images/Usage.png +0 -0
- data/install/installer +71 -0
- data/install/jenkinskeys.rb +8 -0
- data/install/user-dot-murc.erb +14 -0
- data/modules/html.erb +19 -0
- data/modules/mommacat.ru +426 -0
- data/modules/mu/cleanup.rb +339 -0
- data/modules/mu/cloud.rb +1446 -0
- data/modules/mu/clouds/README.md +201 -0
- data/modules/mu/clouds/aws/alarm.rb +319 -0
- data/modules/mu/clouds/aws/cache_cluster.rb +1010 -0
- data/modules/mu/clouds/aws/collection.rb +373 -0
- data/modules/mu/clouds/aws/container_cluster.rb +667 -0
- data/modules/mu/clouds/aws/database.rb +1836 -0
- data/modules/mu/clouds/aws/dnszone.rb +911 -0
- data/modules/mu/clouds/aws/firewall_rule.rb +641 -0
- data/modules/mu/clouds/aws/folder.rb +92 -0
- data/modules/mu/clouds/aws/function.rb +349 -0
- data/modules/mu/clouds/aws/group.rb +251 -0
- data/modules/mu/clouds/aws/loadbalancer.rb +888 -0
- data/modules/mu/clouds/aws/log.rb +363 -0
- data/modules/mu/clouds/aws/msg_queue.rb +480 -0
- data/modules/mu/clouds/aws/notification.rb +139 -0
- data/modules/mu/clouds/aws/role.rb +656 -0
- data/modules/mu/clouds/aws/search_domain.rb +646 -0
- data/modules/mu/clouds/aws/server.rb +2294 -0
- data/modules/mu/clouds/aws/server_pool.rb +1388 -0
- data/modules/mu/clouds/aws/storage_pool.rb +495 -0
- data/modules/mu/clouds/aws/user.rb +382 -0
- data/modules/mu/clouds/aws/userdata/README.md +4 -0
- data/modules/mu/clouds/aws/userdata/linux.erb +179 -0
- data/modules/mu/clouds/aws/userdata/windows.erb +278 -0
- data/modules/mu/clouds/aws/vpc.rb +1943 -0
- data/modules/mu/clouds/aws.rb +1009 -0
- data/modules/mu/clouds/cloudformation/alarm.rb +146 -0
- data/modules/mu/clouds/cloudformation/cache_cluster.rb +167 -0
- data/modules/mu/clouds/cloudformation/collection.rb +117 -0
- data/modules/mu/clouds/cloudformation/database.rb +278 -0
- data/modules/mu/clouds/cloudformation/dnszone.rb +274 -0
- data/modules/mu/clouds/cloudformation/firewall_rule.rb +308 -0
- data/modules/mu/clouds/cloudformation/loadbalancer.rb +193 -0
- data/modules/mu/clouds/cloudformation/log.rb +170 -0
- data/modules/mu/clouds/cloudformation/server.rb +370 -0
- data/modules/mu/clouds/cloudformation/server_pool.rb +279 -0
- data/modules/mu/clouds/cloudformation/vpc.rb +322 -0
- data/modules/mu/clouds/cloudformation.rb +733 -0
- data/modules/mu/clouds/docker.rb +30 -0
- data/modules/mu/clouds/google/container_cluster.rb +290 -0
- data/modules/mu/clouds/google/database.rb +152 -0
- data/modules/mu/clouds/google/firewall_rule.rb +267 -0
- data/modules/mu/clouds/google/group.rb +164 -0
- data/modules/mu/clouds/google/loadbalancer.rb +479 -0
- data/modules/mu/clouds/google/server.rb +1510 -0
- data/modules/mu/clouds/google/server_pool.rb +274 -0
- data/modules/mu/clouds/google/user.rb +266 -0
- data/modules/mu/clouds/google/userdata/README.md +4 -0
- data/modules/mu/clouds/google/userdata/linux.erb +137 -0
- data/modules/mu/clouds/google/userdata/windows.erb +275 -0
- data/modules/mu/clouds/google/vpc.rb +890 -0
- data/modules/mu/clouds/google.rb +811 -0
- data/modules/mu/config/README.md +11 -0
- data/modules/mu/config/alarm.rb +271 -0
- data/modules/mu/config/cache_cluster.rb +172 -0
- data/modules/mu/config/collection.rb +87 -0
- data/modules/mu/config/container_cluster.rb +103 -0
- data/modules/mu/config/container_cluster.yml +36 -0
- data/modules/mu/config/database.rb +458 -0
- data/modules/mu/config/database.yml +26 -0
- data/modules/mu/config/dnszone.rb +327 -0
- data/modules/mu/config/firewall_rule.rb +118 -0
- data/modules/mu/config/folder.rb +70 -0
- data/modules/mu/config/function.rb +140 -0
- data/modules/mu/config/group.rb +64 -0
- data/modules/mu/config/loadbalancer.rb +482 -0
- data/modules/mu/config/log.rb +47 -0
- data/modules/mu/config/log.yml +6 -0
- data/modules/mu/config/msg_queue.rb +47 -0
- data/modules/mu/config/msg_queue.yml +9 -0
- data/modules/mu/config/notification.rb +44 -0
- data/modules/mu/config/project.rb +71 -0
- data/modules/mu/config/role.rb +102 -0
- data/modules/mu/config/search_domain.rb +61 -0
- data/modules/mu/config/search_domain.yml +25 -0
- data/modules/mu/config/server.rb +587 -0
- data/modules/mu/config/server.yml +8 -0
- data/modules/mu/config/server_pool.rb +216 -0
- data/modules/mu/config/server_pool.yml +71 -0
- data/modules/mu/config/storage_pool.rb +145 -0
- data/modules/mu/config/user.rb +78 -0
- data/modules/mu/config/vpc.rb +743 -0
- data/modules/mu/config/vpc.yml +6 -0
- data/modules/mu/config.rb +2000 -0
- data/modules/mu/defaults/README.md +2 -0
- data/modules/mu/defaults/amazon_images.yaml +121 -0
- data/modules/mu/defaults/google_images.yaml +16 -0
- data/modules/mu/deploy.rb +686 -0
- data/modules/mu/groomer.rb +123 -0
- data/modules/mu/groomers/README.md +58 -0
- data/modules/mu/groomers/chef.rb +1024 -0
- data/modules/mu/kittens.rb +11319 -0
- data/modules/mu/logger.rb +208 -0
- data/modules/mu/master/README.md +27 -0
- data/modules/mu/master/chef.rb +471 -0
- data/modules/mu/master/ldap.rb +1005 -0
- data/modules/mu/master.rb +415 -0
- data/modules/mu/mommacat.rb +2703 -0
- data/modules/mu-load-config.rb +1 -0
- data/modules/mu.rb +724 -0
- data/modules/scratchpad.erb +1 -0
- data/modules/tests/super_complex_bok.yml +41 -0
- data/modules/tests/super_simple_bok.yml +40 -0
- data/mu.gemspec +62 -0
- data/roles/demo-dbservice-configure.json +19 -0
- data/roles/demo-portal-configure.json +19 -0
- data/roles/mu-master-jenkins.json +24 -0
- data/roles/mu-master-nagios-only.json +13 -0
- data/roles/mu-master.json +12 -0
- data/roles/mu-node.json +19 -0
- data/roles/mu-splunk-server.json +13 -0
- data/roles/mu-splunk.json +13 -0
- data/test/clean_up.py +25 -0
- data/test/demo-test-profile/README.md +3 -0
- data/test/demo-test-profile/controls/flask.rb +84 -0
- data/test/demo-test-profile/inspec.lock +7 -0
- data/test/demo-test-profile/inspec.yml +11 -0
- data/test/etco-test-profile/README.md +3 -0
- data/test/etco-test-profile/controls/all-in-one.rb +182 -0
- data/test/etco-test-profile/inspec.lock +7 -0
- data/test/etco-test-profile/inspec.yml +11 -0
- data/test/exec_inspec.py +246 -0
- data/test/exec_mu_install.py +241 -0
- data/test/exec_retry.py +44 -0
- data/test/mu-master-test/README.md +3 -0
- data/test/mu-master-test/controls/all_in_one.rb +557 -0
- data/test/mu-master-test/inspec.lock +3 -0
- data/test/mu-master-test/inspec.yml +11 -0
- data/test/mu-tools-test/README.md +3 -0
- data/test/mu-tools-test/controls/base.rb +265 -0
- data/test/mu-tools-test/inspec.lock +3 -0
- data/test/mu-tools-test/inspec.yml +8 -0
- data/test/simple-server-php-test/README.md +3 -0
- data/test/simple-server-php-test/controls/apachephp.rb +25 -0
- data/test/simple-server-php-test/controls/example.rb +19 -0
- data/test/simple-server-php-test/inspec.lock +7 -0
- data/test/simple-server-php-test/inspec.yml +12 -0
- data/test/simple-server-rails-test/README.md +3 -0
- data/test/simple-server-rails-test/controls/rails.rb +188 -0
- data/test/simple-server-rails-test/inspec.lock +7 -0
- data/test/simple-server-rails-test/inspec.yml +11 -0
- data/test/simple-windows-test/README.md +3 -0
- data/test/simple-windows-test/controls/windows.rb +20 -0
- data/test/simple-windows-test/inspec.lock +7 -0
- data/test/simple-windows-test/inspec.yml +11 -0
- data/test/smoke_test.rb +75 -0
- data/test/wordpress-test/README.md +3 -0
- data/test/wordpress-test/controls/wordpress.rb +97 -0
- data/test/wordpress-test/inspec.lock +7 -0
- data/test/wordpress-test/inspec.yml +11 -0
- metadata +979 -0
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# Copyright:: Copyright (c) 2016 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 CloudFormation
|
|
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
|
+
attr_reader :cfm_name
|
|
31
|
+
attr_reader :cfm_template
|
|
32
|
+
|
|
33
|
+
# @param mommacat [MU::MommaCat]: A {MU::Mommacat} object containing the deploy of which this resource is/will be a member.
|
|
34
|
+
# @param kitten_cfg [Hash]: The fully parsed and resolved {MU::Config} resource descriptor as defined in {MU::Config::BasketofKittens::firewall_rules}
|
|
35
|
+
def initialize(mommacat: nil, kitten_cfg: nil, mu_name: nil, cloud_id: nil)
|
|
36
|
+
@deploy = mommacat
|
|
37
|
+
@config = kitten_cfg
|
|
38
|
+
@cloud_id ||= cloud_id
|
|
39
|
+
if !mu_name.nil?
|
|
40
|
+
@mu_name = mu_name
|
|
41
|
+
elsif @config['scrub_mu_isms']
|
|
42
|
+
@mu_name = @config['name']
|
|
43
|
+
else
|
|
44
|
+
if !@vpc.nil?
|
|
45
|
+
@mu_name = @deploy.getResourceName(@config['name'], need_unique_string: true)
|
|
46
|
+
else
|
|
47
|
+
@mu_name = @deploy.getResourceName(@config['name'])
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Populate @cfm_template with a resource description for this security
|
|
54
|
+
# group in CloudFormation language.
|
|
55
|
+
def create
|
|
56
|
+
@cfm_name, @cfm_template = MU::Cloud::CloudFormation.cloudFormationBase(self.class.cfg_name, self, tags: @config['tags'], scrub_mu_isms: @config['scrub_mu_isms']) if @cfm_template.nil?
|
|
57
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "GroupDescription", @mu_name)
|
|
58
|
+
|
|
59
|
+
if !@config['vpc'].nil? and !@config['vpc']['vpc_id'].nil?
|
|
60
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "VpcId", @config['vpc']['vpc_id'])
|
|
61
|
+
elsif @dependencies.has_key?("vpc") and !@config["vpc"]["vpc_name"].nil? and @dependencies["vpc"].has_key?(@config["vpc"]["vpc_name"])
|
|
62
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "DependsOn", @dependencies["vpc"][@config["vpc"]["vpc_name"]].cloudobj.cfm_name)
|
|
63
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "VpcId", { "Ref" => @dependencies["vpc"][@config["vpc"]["vpc_name"]].cloudobj.cfm_name })
|
|
64
|
+
end
|
|
65
|
+
egress = false
|
|
66
|
+
egress = true if !@cfm_template[@cfm_name]["VpcId"].nil?
|
|
67
|
+
# XXX the egress logic here is a crude hack, this really needs to be
|
|
68
|
+
# done at config level
|
|
69
|
+
setRules(
|
|
70
|
+
@config['rules'],
|
|
71
|
+
add_to_self: @config['self_referencing'],
|
|
72
|
+
ingress: true,
|
|
73
|
+
egress: egress
|
|
74
|
+
)
|
|
75
|
+
# pp @cfm_template
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Called by {MU::Deploy#createResources}
|
|
79
|
+
def groom
|
|
80
|
+
create
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Log metadata about this ruleset to the currently running deployment
|
|
84
|
+
def notify
|
|
85
|
+
{}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Insert a rule into an existing security group.
|
|
89
|
+
#
|
|
90
|
+
# @param hosts [Array<String>]: An array of CIDR network addresses to which this rule will apply.
|
|
91
|
+
# @param proto [String]: One of "tcp," "udp," or "icmp"
|
|
92
|
+
# @param port [Integer]: A port number. Only valid with udp or tcp.
|
|
93
|
+
# @param egress [Boolean]: Whether this is an egress ruleset, instead of ingress.
|
|
94
|
+
# @param port_range [String]: A port range descriptor (e.g. 0-65535). Only valid with udp or tcp.
|
|
95
|
+
# @return [void]
|
|
96
|
+
def addRule(hosts,
|
|
97
|
+
proto: proto = "tcp",
|
|
98
|
+
port: port = nil,
|
|
99
|
+
egress: egress = false,
|
|
100
|
+
port_range: port_range = "0-65535"
|
|
101
|
+
)
|
|
102
|
+
rule = Hash.new
|
|
103
|
+
rule["proto"] = proto
|
|
104
|
+
if hosts.is_a?(String)
|
|
105
|
+
rule["hosts"] = [hosts]
|
|
106
|
+
else
|
|
107
|
+
rule["hosts"] = hosts
|
|
108
|
+
end
|
|
109
|
+
if port != nil
|
|
110
|
+
port = port.to_s if !port.is_a?(String)
|
|
111
|
+
rule["port"] = port
|
|
112
|
+
else
|
|
113
|
+
rule["port_range"] = port_range
|
|
114
|
+
end
|
|
115
|
+
ec2_rule = convertToEc2([rule])
|
|
116
|
+
|
|
117
|
+
begin
|
|
118
|
+
if egress
|
|
119
|
+
MU::Cloud::AWS.ec2(@config['region']).authorize_security_group_egress(
|
|
120
|
+
group_id: @cloud_id,
|
|
121
|
+
ip_permissions: ec2_rule
|
|
122
|
+
)
|
|
123
|
+
else
|
|
124
|
+
MU::Cloud::AWS.ec2(@config['region']).authorize_security_group_ingress(
|
|
125
|
+
group_id: @cloud_id,
|
|
126
|
+
ip_permissions: ec2_rule
|
|
127
|
+
)
|
|
128
|
+
end
|
|
129
|
+
rescue Aws::EC2::Errors::InvalidPermissionDuplicate => e
|
|
130
|
+
MU.log "Attempt to add duplicate rule to #{@cloud_id}", MU::DEBUG, details: ec2_rule
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::firewall_rules}, bare and unvalidated.
|
|
135
|
+
# @param acl [Hash]: The resource to process and validate
|
|
136
|
+
# @param config [MU::Config]: The overall deployment config of which this resource is a member
|
|
137
|
+
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
138
|
+
def self.validateConfig(acl, config)
|
|
139
|
+
# Just use the AWS implemention
|
|
140
|
+
MU::Cloud::AWS::FirewallRule.validateConfig(acl, config)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
private
|
|
144
|
+
|
|
145
|
+
#########################################################################
|
|
146
|
+
# Manufacture an EC2 security group. The second parameter, rules, is an
|
|
147
|
+
# "ingress_rules" structure parsed and validated by MU::Config.
|
|
148
|
+
#########################################################################
|
|
149
|
+
def setRules(rules, add_to_self: add_to_self = false, ingress: ingress = true, egress: egress = false)
|
|
150
|
+
return if rules.nil? or rules.size == 0
|
|
151
|
+
|
|
152
|
+
if add_to_self
|
|
153
|
+
rules.each { |rule|
|
|
154
|
+
if rule['sgs'].nil?
|
|
155
|
+
new_rule = rule.clone
|
|
156
|
+
new_rule.delete('hosts')
|
|
157
|
+
rule['sgs'] = Array.new if rule['sgs'].nil?
|
|
158
|
+
rule['sgs'] << { "Ref" => @cfm_name }
|
|
159
|
+
end
|
|
160
|
+
}
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
ec2_rules = convertToEc2(rules)
|
|
164
|
+
|
|
165
|
+
# Creating an empty security group is ok, so don't freak out if we get
|
|
166
|
+
# a null rule list.
|
|
167
|
+
if !ec2_rules.nil?
|
|
168
|
+
ec2_rules.each { |rule|
|
|
169
|
+
next if rule.nil? or rule[:ip_ranges].nil? # XXX whaaat
|
|
170
|
+
rule[:ip_ranges].each { |cidr|
|
|
171
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(
|
|
172
|
+
@cfm_template[@cfm_name],
|
|
173
|
+
"SecurityGroupIngress",
|
|
174
|
+
{
|
|
175
|
+
"IpProtocol" => rule[:ip_protocol],
|
|
176
|
+
"FromPort" => rule[:from_port],
|
|
177
|
+
"ToPort" => rule[:to_port],
|
|
178
|
+
"CidrIp" => cidr[:cidr_ip]
|
|
179
|
+
}
|
|
180
|
+
)
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
#########################################################################
|
|
188
|
+
# Convert our config languages description of firewall rules into Amazon's.
|
|
189
|
+
# This rule structure is as defined in MU::Config.
|
|
190
|
+
#########################################################################
|
|
191
|
+
def convertToEc2(rules)
|
|
192
|
+
ec2_rules = []
|
|
193
|
+
if rules != nil
|
|
194
|
+
rules.each { |rule|
|
|
195
|
+
ec2_rule = Hash.new
|
|
196
|
+
rule['proto'] = "tcp" if rule['proto'].nil? or rule['proto'].empty?
|
|
197
|
+
ec2_rule[:ip_protocol] = rule['proto']
|
|
198
|
+
|
|
199
|
+
p_start = nil
|
|
200
|
+
p_end = nil
|
|
201
|
+
if rule['port_range']
|
|
202
|
+
p_start, p_end = rule['port_range'].split(/\s*-\s*/)
|
|
203
|
+
elsif rule['port']
|
|
204
|
+
p_start = rule['port']
|
|
205
|
+
p_end = rule['port']
|
|
206
|
+
elsif rule['proto'] != "icmp"
|
|
207
|
+
raise MuError, "Can't create a TCP or UDP security group rule without specifying ports: #{rule}"
|
|
208
|
+
end
|
|
209
|
+
if rule['proto'] != "icmp"
|
|
210
|
+
if p_start.nil? or p_end.nil?
|
|
211
|
+
raise MuError, "Got nil ports out of rule #{rule}"
|
|
212
|
+
end
|
|
213
|
+
ec2_rule[:from_port] = p_start.to_i
|
|
214
|
+
ec2_rule[:to_port] = p_end.to_i
|
|
215
|
+
else
|
|
216
|
+
ec2_rule[:from_port] = -1
|
|
217
|
+
ec2_rule[:to_port] = -1
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
if (!defined? rule['hosts'] or !rule['hosts'].is_a?(Array)) and
|
|
221
|
+
(!defined? rule['sgs'] or !rule['sgs'].is_a?(Array)) and
|
|
222
|
+
(!defined? rule['lbs'] or !rule['lbs'].is_a?(Array))
|
|
223
|
+
raise MuError, "One of 'hosts', 'sgs', or 'lbs' in rules provided to createEc2SG must be an array."
|
|
224
|
+
end
|
|
225
|
+
ec2_rule[:ip_ranges] = []
|
|
226
|
+
ec2_rule[:user_id_group_pairs] = []
|
|
227
|
+
|
|
228
|
+
if !rule['hosts'].nil?
|
|
229
|
+
rule['hosts'].each { |cidr|
|
|
230
|
+
next if cidr.nil? # XXX where is that coming from?
|
|
231
|
+
cidr = cidr + "/32" if cidr.match(/^\d+\.\d+\.\d+\.\d+$/)
|
|
232
|
+
ec2_rule[:ip_ranges] << {cidr_ip: cidr}
|
|
233
|
+
}
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
if !rule['lbs'].nil?
|
|
237
|
+
# XXX This is a dopey place for this, dependencies() should be doing our legwork
|
|
238
|
+
rule['lbs'].each { |lb_name|
|
|
239
|
+
if @dependencies.has_key?("loadbalancer") and @dependencies["loadbalancer"].has_key?(lb_name)
|
|
240
|
+
# MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "DependsOn", @dependencies["loadbalancer"][lb_name].cloudobj.cfm_name)
|
|
241
|
+
end
|
|
242
|
+
}
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
if !rule['sgs'].nil?
|
|
246
|
+
rule['sgs'].each { |sg_name|
|
|
247
|
+
# XXX This is a dopey place for this, dependencies() should be doing our legwork
|
|
248
|
+
if @dependencies.has_key?("firewall_rule") and @dependencies["firewall_rule"].has_key?(sg_name)
|
|
249
|
+
# MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "DependsOn", @dependencies["firewall_rule"][sg_name].cloudobj.cfm_name)
|
|
250
|
+
end
|
|
251
|
+
}
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
if !ec2_rule[:user_id_group_pairs].nil? and
|
|
255
|
+
ec2_rule[:user_id_group_pairs].size > 0 and
|
|
256
|
+
!ec2_rule[:ip_ranges].nil? and
|
|
257
|
+
ec2_rule[:ip_ranges].size > 0
|
|
258
|
+
MU.log "Cannot specify ip_ranges and user_id_group_pairs", MU::ERR
|
|
259
|
+
raise MuError, "Cannot specify ip_ranges and user_id_group_pairs"
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
ec2_rule.delete(:ip_ranges) if ec2_rule[:ip_ranges].size == 0
|
|
263
|
+
ec2_rule.delete(:user_id_group_pairs) if ec2_rule[:user_id_group_pairs].size == 0
|
|
264
|
+
|
|
265
|
+
if !ec2_rule[:user_id_group_pairs].nil? and
|
|
266
|
+
ec2_rule[:user_id_group_pairs].size > 0
|
|
267
|
+
ec2_rule.delete(:ip_ranges)
|
|
268
|
+
elsif !ec2_rule[:ip_ranges].nil? and
|
|
269
|
+
ec2_rule[:ip_ranges].size > 0
|
|
270
|
+
ec2_rule.delete(:user_id_group_pairs)
|
|
271
|
+
end
|
|
272
|
+
ec2_rules << ec2_rule
|
|
273
|
+
}
|
|
274
|
+
end
|
|
275
|
+
return ec2_rules
|
|
276
|
+
end
|
|
277
|
+
# Placeholder. This is a NOOP for CloudFormation, which doesn't build
|
|
278
|
+
# resources directly.
|
|
279
|
+
def self.find(*args)
|
|
280
|
+
MU.log "find() not implemented for CloudFormation layer", MU::DEBUG
|
|
281
|
+
nil
|
|
282
|
+
end
|
|
283
|
+
# Placeholder. This is a NOOP for CloudFormation, which doesn't build
|
|
284
|
+
# resources directly.
|
|
285
|
+
def self.cleanup(*args)
|
|
286
|
+
MU.log "cleanup() not implemented for CloudFormation layer", MU::DEBUG
|
|
287
|
+
nil
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# Cloud-specific configuration properties.
|
|
291
|
+
# @param config [MU::Config]: The calling MU::Config object
|
|
292
|
+
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
293
|
+
def self.schema(config)
|
|
294
|
+
MU::Cloud::AWS::FirewallRule.schema(config)
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
298
|
+
# @param server [Hash]: The resource to process and validate
|
|
299
|
+
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
300
|
+
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
301
|
+
def self.validateConfig(server, configurator)
|
|
302
|
+
MU::Cloud::AWS::FirewallRule.validateConfig(server, configurator)
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
end #class
|
|
306
|
+
end #class
|
|
307
|
+
end
|
|
308
|
+
end #module
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Copyright:: Copyright (c) 2016 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 CloudFormation
|
|
18
|
+
# A load balancer as configured in {MU::Config::BasketofKittens::loadbalancers}
|
|
19
|
+
class LoadBalancer < MU::Cloud::LoadBalancer
|
|
20
|
+
|
|
21
|
+
@deploy = nil
|
|
22
|
+
@lb = nil
|
|
23
|
+
attr_reader :mu_name
|
|
24
|
+
attr_reader :config
|
|
25
|
+
attr_reader :cloud_id
|
|
26
|
+
|
|
27
|
+
attr_reader :cfm_template
|
|
28
|
+
attr_reader :cfm_name
|
|
29
|
+
|
|
30
|
+
# @param mommacat [MU::MommaCat]: A {MU::Mommacat} object containing the deploy of which this resource is/will be a member.
|
|
31
|
+
# @param kitten_cfg [Hash]: The fully parsed and resolved {MU::Config} resource descriptor as defined in {MU::Config::BasketofKittens::loadbalancers}
|
|
32
|
+
def initialize(mommacat: nil, kitten_cfg: nil, mu_name: nil, cloud_id: nil)
|
|
33
|
+
@deploy = mommacat
|
|
34
|
+
@config = kitten_cfg
|
|
35
|
+
@cloud_id ||= cloud_id
|
|
36
|
+
if !mu_name.nil?
|
|
37
|
+
@mu_name = mu_name
|
|
38
|
+
elsif @config['scrub_mu_isms']
|
|
39
|
+
@mu_name = @config['name'].dup
|
|
40
|
+
else
|
|
41
|
+
@mu_name = @deploy.getResourceName(@config["name"], max_length: 32, need_unique_string: true)
|
|
42
|
+
@mu_name.gsub!(/[^\-a-z0-9]/i, "-") # AWS ELB naming rules
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Populate @cfm_template with a resource description for this load
|
|
47
|
+
# balancer in CloudFormation language.
|
|
48
|
+
def create
|
|
49
|
+
@cfm_name, @cfm_template = MU::Cloud::CloudFormation.cloudFormationBase(self.class.cfg_name, self, tags: @config['tags'], scrub_mu_isms: @config['scrub_mu_isms']) if @cfm_template.nil?
|
|
50
|
+
if @config['override_name']
|
|
51
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "LoadBalancerName", @config['override_name'])
|
|
52
|
+
else
|
|
53
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "LoadBalancerName", @mu_name)
|
|
54
|
+
end
|
|
55
|
+
@config["cross_zone"] = !@config["cross_zone_unstickiness"]
|
|
56
|
+
@config["health_check"] = @config["healthcheck"]
|
|
57
|
+
@config["access_logging_policy"] = @config["access_log"]
|
|
58
|
+
["cross_zone", "health_check", "access_logging_policy"].each { |arg|
|
|
59
|
+
if !@config[arg].nil?
|
|
60
|
+
key = ""
|
|
61
|
+
val = @config[arg]
|
|
62
|
+
arg.split(/_/).each { |chunk| key = key + chunk.capitalize }
|
|
63
|
+
if val.is_a?(Hash)
|
|
64
|
+
val = {}
|
|
65
|
+
@config[arg].each_pair { |name, value|
|
|
66
|
+
newkey = ""
|
|
67
|
+
name.split(/_/).each { |chunk| newkey = newkey + chunk.capitalize }
|
|
68
|
+
val[newkey] = value
|
|
69
|
+
}
|
|
70
|
+
end
|
|
71
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], key, val)
|
|
72
|
+
end
|
|
73
|
+
}
|
|
74
|
+
if @config['add_firewall_rules']
|
|
75
|
+
@config['add_firewall_rules'].each { |acl|
|
|
76
|
+
if acl["rule_id"]
|
|
77
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "SecurityGroups", acl["rule_id"])
|
|
78
|
+
else
|
|
79
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "SecurityGroups", { "Ref" => @dependencies["firewall_rule"][acl["rule_name"]].cloudobj.cfm_name } )
|
|
80
|
+
end
|
|
81
|
+
}
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
@config['listeners'].each { |listener|
|
|
85
|
+
prop = {
|
|
86
|
+
"InstancePort" => listener['instance_port'].to_s,
|
|
87
|
+
"InstanceProtocol" => listener['instance_protocol'],
|
|
88
|
+
"LoadBalancerPort" => listener['lb_port'].to_s,
|
|
89
|
+
"Protocol" => listener['lb_protocol']
|
|
90
|
+
}
|
|
91
|
+
if !listener['ssl_certificate_id'].nil?
|
|
92
|
+
prop["SSLCertificateId"] = listener['ssl_certificate_id']
|
|
93
|
+
elsif !listener['ssl_certificate_name'].nil?
|
|
94
|
+
raise "Cannot use ssl_certificate_name when targeting CloudFormation, bust use ssl_certificate_id with full ARN"
|
|
95
|
+
end
|
|
96
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(
|
|
97
|
+
@cfm_template[@cfm_name],
|
|
98
|
+
"Listeners",
|
|
99
|
+
prop
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
["lb_cookie_stickiness_policy", "app_cookie_stickiness_policy"].each { |policy|
|
|
105
|
+
if @config[policy]
|
|
106
|
+
key = ""
|
|
107
|
+
policy.split(/_/).each { |chunk| key = key + chunk.capitalize }
|
|
108
|
+
desc = { "PolicyName" => @config[policy]['name'] }
|
|
109
|
+
if @config[policy]['timeout']
|
|
110
|
+
desc["CookieExpirationPeriod"] = @config[policy]['timeout']
|
|
111
|
+
end
|
|
112
|
+
if @config[policy]['cookie']
|
|
113
|
+
desc["CookieName"] = @config[policy]['cookie']
|
|
114
|
+
end
|
|
115
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], key, desc)
|
|
116
|
+
end
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if @config['idle_timeout']
|
|
120
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "ConnectionSettings", { "IdleTimeout" => @config['idle_timeout'] })
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
if @config['private']
|
|
124
|
+
if @config['private'].class.to_s == "MU::Config::Tail"
|
|
125
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "Scheme", @config['private'])
|
|
126
|
+
else
|
|
127
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "Scheme", "internal")
|
|
128
|
+
end
|
|
129
|
+
else
|
|
130
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "Scheme", "internet-facing")
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
if @config['connection_draining_timeout'] and @config['connection_draining_timeout'] >= 0
|
|
134
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "ConnectionDrainingPolicy", { "Enabled" => true, "Timeout" => @config['connection_draining_timeout'] })
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
if !@config['vpc'].nil? and !@config["vpc"]["subnets"].nil? and @config["vpc"]["subnets"].size > 0
|
|
138
|
+
@config["vpc"]["subnets"].each { |subnet|
|
|
139
|
+
if !subnet["subnet_id"].nil?
|
|
140
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "Subnets", subnet["subnet_id"])
|
|
141
|
+
elsif @dependencies.has_key?("vpc") and @dependencies["vpc"].has_key?(@config["vpc"]["vpc_name"])
|
|
142
|
+
@dependencies["vpc"][@config["vpc"]["vpc_name"]].subnets.each { |sibling_subnet|
|
|
143
|
+
if sibling_subnet.name == subnet['subnet_name'] and !sibling_subnet.cloudobj.nil?
|
|
144
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "DependsOn", sibling_subnet.cloudobj.cfm_name)
|
|
145
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "Subnets", { "Ref" => sibling_subnet.cloudobj.cfm_name } )
|
|
146
|
+
end
|
|
147
|
+
}
|
|
148
|
+
end
|
|
149
|
+
}
|
|
150
|
+
# XXX something about AZs
|
|
151
|
+
else
|
|
152
|
+
# Default to "sit in every possible AZ"
|
|
153
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "AvailabilityZones", { "Fn::GetAZs" => { "Ref" => "AWS::Region" } } )
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Return the metadata for this LoadBalancer
|
|
158
|
+
# @return [Hash]
|
|
159
|
+
def notify
|
|
160
|
+
{}
|
|
161
|
+
end
|
|
162
|
+
# Placeholder. This is a NOOP for CloudFormation, which doesn't build
|
|
163
|
+
# resources directly.
|
|
164
|
+
def self.find(*args)
|
|
165
|
+
MU.log "find() not implemented for CloudFormation layer", MU::DEBUG
|
|
166
|
+
nil
|
|
167
|
+
end
|
|
168
|
+
# Placeholder. This is a NOOP for CloudFormation, which doesn't build
|
|
169
|
+
# resources directly.
|
|
170
|
+
def self.cleanup(*args)
|
|
171
|
+
MU.log "cleanup() not implemented for CloudFormation layer", MU::DEBUG
|
|
172
|
+
nil
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# Cloud-specific configuration properties.
|
|
176
|
+
# @param config [MU::Config]: The calling MU::Config object
|
|
177
|
+
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
178
|
+
def self.schema(config)
|
|
179
|
+
MU::Cloud::AWS::LoadBalancer.schema(config)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
183
|
+
# @param server [Hash]: The resource to process and validate
|
|
184
|
+
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
185
|
+
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
186
|
+
def self.validateConfig(server, configurator)
|
|
187
|
+
MU::Cloud::AWS::LoadBalancer.validateConfig(server, configurator)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Copyright:: Copyright (c) 2016 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 CloudFormation
|
|
18
|
+
# A log target as configured in {MU::Config::BasketofKittens::logs}
|
|
19
|
+
class Log < MU::Cloud::Log
|
|
20
|
+
|
|
21
|
+
@deploy = nil
|
|
22
|
+
attr_reader :mu_name
|
|
23
|
+
attr_reader :config
|
|
24
|
+
attr_reader :cloud_id
|
|
25
|
+
|
|
26
|
+
attr_reader :cfm_template
|
|
27
|
+
attr_reader :cfm_name
|
|
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::logs}
|
|
31
|
+
def initialize(mommacat: nil, kitten_cfg: nil, mu_name: nil, cloud_id: nil)
|
|
32
|
+
@deploy = mommacat
|
|
33
|
+
@config = kitten_cfg
|
|
34
|
+
@cloud_id ||= cloud_id
|
|
35
|
+
if !mu_name.nil?
|
|
36
|
+
@mu_name = mu_name
|
|
37
|
+
elsif @config['scrub_mu_isms']
|
|
38
|
+
@mu_name = @config['name']
|
|
39
|
+
else
|
|
40
|
+
@mu_name ||= @deploy.getResourceName(@config["name"])
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Populate @cfm_template with a resource description for this log
|
|
45
|
+
# in CloudFormation language.
|
|
46
|
+
def create
|
|
47
|
+
@cfm_name, @cfm_template = MU::Cloud::CloudFormation.cloudFormationBase("loggroup", self, scrub_mu_isms: @config['scrub_mu_isms'])
|
|
48
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(@cfm_template[@cfm_name], "RetentionInDays", @config["retention_period"])
|
|
49
|
+
|
|
50
|
+
@config["log_stream_name"] =
|
|
51
|
+
if @config["enable_cloudtrail_logging"]
|
|
52
|
+
{ "Fn::Join" => [
|
|
53
|
+
"",
|
|
54
|
+
[
|
|
55
|
+
{ "Ref" => "AWS::AccountId" },
|
|
56
|
+
"_CloudTrail_",
|
|
57
|
+
{ "Ref" => "AWS::Region" }
|
|
58
|
+
]
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
else
|
|
62
|
+
@mu_name
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
stream_name, stream_template = MU::Cloud::CloudFormation.cloudFormationBase("logstream", self, scrub_mu_isms: @config['scrub_mu_isms'])
|
|
66
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(stream_template[stream_name], "LogGroupName", { "Ref" => @cfm_name })
|
|
67
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(stream_template[stream_name], "LogStreamName", @config["log_stream_name"])
|
|
68
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(stream_template[stream_name], "DependsOn", @cfm_name)
|
|
69
|
+
@cfm_template.merge!(stream_template)
|
|
70
|
+
|
|
71
|
+
if @config["filters"] && !@config["filters"].empty?
|
|
72
|
+
@config["filters"].each{ |filter|
|
|
73
|
+
metric_name, metric_template = MU::Cloud::CloudFormation.cloudFormationBase("logmetricfilter", self, name: @mu_name+"filter"+filter["name"], scrub_mu_isms: @config['scrub_mu_isms'])
|
|
74
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(metric_template[metric_name], "FilterPattern", filter["search_pattern"])
|
|
75
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(metric_template[metric_name], "MetricTransformations", { "MetricName" => filter["metric_name"], "MetricNamespace" => filter["namespace"], "MetricValue" => filter["value"] } )
|
|
76
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(metric_template[metric_name], "LogGroupName", { "Ref" => @cfm_name })
|
|
77
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(metric_template[metric_name], "DependsOn", @cfm_name)
|
|
78
|
+
@cfm_template.merge!(metric_template)
|
|
79
|
+
}
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
if @config["enable_cloudtrail_logging"]
|
|
84
|
+
role_name, role_template = MU::Cloud::CloudFormation.cloudFormationBase("iamrole", name: @mu_name, scrub_mu_isms: @config['scrub_mu_isms'])
|
|
85
|
+
iam_policy = {
|
|
86
|
+
"Version" => "2012-10-17",
|
|
87
|
+
"Statement" => [
|
|
88
|
+
{
|
|
89
|
+
"Sid" => "AWSCloudTrail",
|
|
90
|
+
"Effect" => "Allow",
|
|
91
|
+
"Action" => [
|
|
92
|
+
"logs:CreateLogStream",
|
|
93
|
+
"logs:PutLogEvents"
|
|
94
|
+
],
|
|
95
|
+
"Resource" => { "Fn::Join" => [
|
|
96
|
+
"",
|
|
97
|
+
[
|
|
98
|
+
"arn:#{MU::Cloud::AWS.isGovCloud?(@config["region"]) ? "aws-us-gov" : "aws"}:logs:",
|
|
99
|
+
{ "Ref" => "AWS::Region" },
|
|
100
|
+
":",
|
|
101
|
+
{ "Ref" => "AWS::AccountId" },
|
|
102
|
+
":log-group:#{@cfm_name}:log-stream:",
|
|
103
|
+
@config["log_stream_name"]
|
|
104
|
+
]
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(role_template[role_name], "Policies", { "PolicyName" => "#{@mu_name}-CloudTrail", "PolicyDocument" => iam_policy })
|
|
111
|
+
iam_assume_role_policy = {
|
|
112
|
+
"Version" => "2012-10-17",
|
|
113
|
+
"Statement" => [
|
|
114
|
+
{
|
|
115
|
+
"Effect" => "Allow",
|
|
116
|
+
"Principal" => {
|
|
117
|
+
"Service" => [
|
|
118
|
+
"cloudtrail.amazonaws.com",
|
|
119
|
+
"cloudtrail.preprod.amazonaws.com"
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
"Action" => [
|
|
123
|
+
"sts:AssumeRole"
|
|
124
|
+
]
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
MU::Cloud::CloudFormation.setCloudFormationProp(role_template[role_name], "AssumeRolePolicyDocument", iam_assume_role_policy)
|
|
129
|
+
@cfm_template.merge!(role_template)
|
|
130
|
+
MU.log "You must manually associate the Log Group #{@cfm_name} and IAM Role #{role_name} with your account's Cloud Trail after this CloudFormation stack has been built.", MU::WARN
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Return the metadata for this CacheCluster
|
|
135
|
+
# @return [Hash]
|
|
136
|
+
def notify
|
|
137
|
+
{}
|
|
138
|
+
end
|
|
139
|
+
# Placeholder. This is a NOOP for CloudFormation, which doesn't build
|
|
140
|
+
# resources directly.
|
|
141
|
+
def self.find(*args)
|
|
142
|
+
MU.log "find() not implemented for CloudFormation layer", MU::DEBUG
|
|
143
|
+
nil
|
|
144
|
+
end
|
|
145
|
+
# Placeholder. This is a NOOP for CloudFormation, which doesn't build
|
|
146
|
+
# resources directly.
|
|
147
|
+
def self.cleanup(*args)
|
|
148
|
+
MU.log "cleanup() not implemented for CloudFormation layer", MU::DEBUG
|
|
149
|
+
nil
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# Cloud-specific configuration properties.
|
|
153
|
+
# @param config [MU::Config]: The calling MU::Config object
|
|
154
|
+
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
155
|
+
def self.schema(config)
|
|
156
|
+
MU::Cloud::AWS::Log.schema(config)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::servers}, bare and unvalidated.
|
|
160
|
+
# @param server [Hash]: The resource to process and validate
|
|
161
|
+
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
162
|
+
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
163
|
+
def self.validateConfig(server, configurator)
|
|
164
|
+
MU::Cloud::AWS::Log.validateConfig(server, configurator)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|