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,274 @@
|
|
|
1
|
+
# Copyright:: Copyright (c) 2017 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 Google
|
|
18
|
+
# A server pool as configured in {MU::Config::BasketofKittens::server_pools}
|
|
19
|
+
class ServerPool < MU::Cloud::ServerPool
|
|
20
|
+
|
|
21
|
+
@deploy = nil
|
|
22
|
+
@config = nil
|
|
23
|
+
attr_reader :mu_name
|
|
24
|
+
attr_reader :cloud_id
|
|
25
|
+
attr_reader :config
|
|
26
|
+
|
|
27
|
+
# @param mommacat [MU::MommaCat]: A {MU::Mommacat} object containing the deploy of which this resource is/will be a member.
|
|
28
|
+
# @param kitten_cfg [Hash]: The fully parsed and resolved {MU::Config} resource descriptor as defined in {MU::Config::BasketofKittens::server_pools}
|
|
29
|
+
def initialize(mommacat: nil, kitten_cfg: nil, mu_name: nil, cloud_id: nil)
|
|
30
|
+
@deploy = mommacat
|
|
31
|
+
@config = MU::Config.manxify(kitten_cfg)
|
|
32
|
+
@cloud_id ||= cloud_id
|
|
33
|
+
if !mu_name.nil?
|
|
34
|
+
@mu_name = mu_name
|
|
35
|
+
elsif @config['scrub_mu_isms']
|
|
36
|
+
@mu_name = @config['name']
|
|
37
|
+
else
|
|
38
|
+
@mu_name = @deploy.getResourceName(@config['name'])
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Called automatically by {MU::Deploy#createResources}
|
|
43
|
+
def create
|
|
44
|
+
port_objs = []
|
|
45
|
+
|
|
46
|
+
@config['named_ports'].each { |port_cfg|
|
|
47
|
+
port_objs << MU::Cloud::Google.compute(:NamedPort).new(
|
|
48
|
+
name: port_cfg['name'],
|
|
49
|
+
port: port_cfg['port']
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# subnet = @vpc.getSubnet(cloud_id: @config['vpc']['subnets'].first["subnet_id"].to_s)
|
|
54
|
+
|
|
55
|
+
labels = {}
|
|
56
|
+
MU::MommaCat.listStandardTags.each_pair { |name, value|
|
|
57
|
+
if !value.nil?
|
|
58
|
+
labels[name.downcase] = value.downcase.gsub(/[^a-z0-9\-\_]/i, "_")
|
|
59
|
+
end
|
|
60
|
+
}
|
|
61
|
+
labels["name"] = MU::Cloud::Google.nameStr(@mu_name)
|
|
62
|
+
|
|
63
|
+
size = nil
|
|
64
|
+
if !@config['basis']['launch_config'].nil?
|
|
65
|
+
size = @config['basis']['launch_config']['size']
|
|
66
|
+
@config['image_id'] = @config['basis']['launch_config']['image_id']
|
|
67
|
+
end
|
|
68
|
+
az = @config['availability_zone']
|
|
69
|
+
if az.nil?
|
|
70
|
+
az = MU::Cloud::Google.listAZs(@config['region']).sample
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
instance_props = MU::Cloud::Google.compute(:InstanceProperties).new(
|
|
74
|
+
can_ip_forward: !@config['src_dst_check'],
|
|
75
|
+
description: @deploy.deploy_id,
|
|
76
|
+
# machine_type: "zones/"+az+"/machineTypes/"+size,
|
|
77
|
+
machine_type: size,
|
|
78
|
+
labels: labels,
|
|
79
|
+
disks: MU::Cloud::Google::Server.diskConfig(@config, false, false),
|
|
80
|
+
network_interfaces: MU::Cloud::Google::Server.interfaceConfig(@config, @vpc),
|
|
81
|
+
metadata: {
|
|
82
|
+
:items => [
|
|
83
|
+
:key => "ssh-keys",
|
|
84
|
+
:value => @config['ssh_user']+":"+@deploy.ssh_public_key
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
tags: MU::Cloud::Google.compute(:Tags).new(items: [MU::Cloud::Google.nameStr(@mu_name)])
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
template_obj = MU::Cloud::Google.compute(:InstanceTemplate).new(
|
|
91
|
+
name: MU::Cloud::Google.nameStr(@mu_name),
|
|
92
|
+
description: @deploy.deploy_id,
|
|
93
|
+
properties: instance_props
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
MU.log "Creating instance template #{@mu_name}", details: template_obj
|
|
97
|
+
template = MU::Cloud::Google.compute.insert_instance_template(
|
|
98
|
+
@config['project'],
|
|
99
|
+
template_obj
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
# XXX AWS-style @config['health_check_type'] doesn't make a lick of sense here
|
|
103
|
+
healing_obj = MU::Cloud::Google.compute(:InstanceGroupManager).new(
|
|
104
|
+
initial_delay_sec: @config['health_check_grace_period']
|
|
105
|
+
# TODO here's where health_checks go
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
mgr_obj = MU::Cloud::Google.compute(:InstanceGroupManager).new(
|
|
109
|
+
name: MU::Cloud::Google.nameStr(@mu_name),
|
|
110
|
+
description: @deploy.deploy_id,
|
|
111
|
+
target_size: @config['desired_capacity'] || @config['min_size'],
|
|
112
|
+
base_instance_name: MU::Cloud::Google.nameStr(@mu_name),
|
|
113
|
+
instance_template: template.self_link,
|
|
114
|
+
named_ports: port_objs,
|
|
115
|
+
auto_healing_policies: [healing_obj]
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
MU.log "Creating region instance group manager #{@mu_name}", details: mgr_obj
|
|
119
|
+
mgr = MU::Cloud::Google.compute.insert_region_instance_group_manager(
|
|
120
|
+
@config['project'],
|
|
121
|
+
@config['region'],
|
|
122
|
+
mgr_obj
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
# TODO this thing supports based on CPU usage, LB usage, or an arbitrary Cloud
|
|
126
|
+
# Monitoring metric. The default is "sustained 60%+ CPU usage". We should
|
|
127
|
+
# support all that.
|
|
128
|
+
# http://www.rubydoc.info/github/google/google-api-ruby-client/Google/Apis/ComputeBeta/AutoscalingPolicyCpuUtilization
|
|
129
|
+
# http://www.rubydoc.info/github/google/google-api-ruby-client/Google/Apis/ComputeBeta/AutoscalingPolicyLoadBalancingUtilization
|
|
130
|
+
# http://www.rubydoc.info/github/google/google-api-ruby-client/Google/Apis/ComputeBeta/AutoscalingPolicyCustomMetricUtilization
|
|
131
|
+
policy_obj = MU::Cloud::Google.compute(:AutoscalingPolicy).new(
|
|
132
|
+
cooldown_period_sec: @config['default_cooldown'],
|
|
133
|
+
max_num_replicas: @config['max_size'],
|
|
134
|
+
min_num_replicas: @config['min_size']
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
scaler_obj = MU::Cloud::Google.compute(:Autoscaler).new(
|
|
138
|
+
name: MU::Cloud::Google.nameStr(@mu_name),
|
|
139
|
+
description: @deploy.deploy_id,
|
|
140
|
+
target: mgr.self_link,
|
|
141
|
+
autoscaling_policy: policy_obj
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
MU.log "Creating autoscaler policy #{@mu_name}", details: scaler_obj
|
|
145
|
+
MU::Cloud::Google.compute.insert_region_autoscaler(
|
|
146
|
+
@config['project'],
|
|
147
|
+
@config['region'],
|
|
148
|
+
scaler_obj
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
# TODO honor wait_for_instances
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# This is a NOOP right now, because we're really an empty generator for
|
|
155
|
+
# Servers, and that's what we care about having in deployment
|
|
156
|
+
# descriptors. Should we log some stuff though?
|
|
157
|
+
def notify
|
|
158
|
+
return {}
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Locate an existing ServerPool or ServerPools and return an array containing matching Google resource descriptors for those that match.
|
|
162
|
+
# @param cloud_id [String]: The cloud provider's identifier for this resource.
|
|
163
|
+
# @param region [String]: The cloud provider region
|
|
164
|
+
# @param tag_key [String]: A tag key to search.
|
|
165
|
+
# @param tag_value [String]: The value of the tag specified by tag_key to match when searching by tag.
|
|
166
|
+
# @param flags [Hash]: Optional flags
|
|
167
|
+
# @return [Array<Hash<String,OpenStruct>>]: The cloud provider's complete descriptions of matching ServerPools
|
|
168
|
+
def self.find(cloud_id: nil, region: MU.curRegion, tag_key: "Name", tag_value: nil, flags: {})
|
|
169
|
+
MU.log "XXX ServerPool.find not yet implemented", MU::WARN
|
|
170
|
+
return {}
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Cloud-specific configuration properties.
|
|
174
|
+
# @param config [MU::Config]: The calling MU::Config object
|
|
175
|
+
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
176
|
+
def self.schema(config)
|
|
177
|
+
toplevel_required = []
|
|
178
|
+
schema = {
|
|
179
|
+
"named_ports" => {
|
|
180
|
+
"type" => "array",
|
|
181
|
+
"items" => {
|
|
182
|
+
"type" => "object",
|
|
183
|
+
"required" => ["name", "port"],
|
|
184
|
+
"additionalProperties" => false,
|
|
185
|
+
"description" => "A named network port for a Google instance group, used for health checks and forwarding targets.",
|
|
186
|
+
"properties" => {
|
|
187
|
+
"name" => {
|
|
188
|
+
"type" => "string"
|
|
189
|
+
},
|
|
190
|
+
"port" => {
|
|
191
|
+
"type" => "integer"
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
[toplevel_required, schema]
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::server_pools}, bare and unvalidated.
|
|
201
|
+
# @param pool [Hash]: The resource to process and validate
|
|
202
|
+
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
203
|
+
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
204
|
+
def self.validateConfig(pool, configurator)
|
|
205
|
+
ok = true
|
|
206
|
+
|
|
207
|
+
pool['named_ports'] ||= []
|
|
208
|
+
if !pool['named_ports'].include?({"name" => "ssh", "port" => 22})
|
|
209
|
+
pool['named_ports'] << {"name" => "ssh", "port" => 22}
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
if pool['basis']['launch_config']
|
|
213
|
+
launch = pool["basis"]["launch_config"]
|
|
214
|
+
|
|
215
|
+
launch['size'] = MU::Cloud::Google::Server.validateInstanceType(launch["size"], pool["region"])
|
|
216
|
+
ok = false if launch['size'].nil?
|
|
217
|
+
|
|
218
|
+
if launch['image_id'].nil?
|
|
219
|
+
if MU::Config.google_images.has_key?(pool['platform'])
|
|
220
|
+
launch['image_id'] = configurator.getTail("server_pool"+pool['name']+"Image", value: MU::Config.google_images[pool['platform']], prettyname: "server_pool"+pool['name']+"Image", cloudtype: "Google::Apis::ComputeBeta::Image")
|
|
221
|
+
else
|
|
222
|
+
MU.log "No image specified for #{pool['name']} and no default available for platform #{pool['platform']}", MU::ERR, details: launch
|
|
223
|
+
ok = false
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
real_image = nil
|
|
228
|
+
begin
|
|
229
|
+
real_image = MU::Cloud::Google::Server.fetchImage(launch['image_id'].to_s)
|
|
230
|
+
rescue ::Google::Apis::ClientError => e
|
|
231
|
+
MU.log e.inspect, MU::WARN
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
if real_image.nil?
|
|
235
|
+
MU.log "Image #{launch['image_id']} for server_pool #{pool['name']} does not appear to exist", MU::ERR
|
|
236
|
+
ok = false
|
|
237
|
+
else
|
|
238
|
+
launch['image_id'] = real_image.self_link
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
ok
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
# Remove all autoscale groups associated with the currently loaded deployment.
|
|
246
|
+
# @param noop [Boolean]: If true, will only print what would be done
|
|
247
|
+
# @param ignoremaster [Boolean]: If true, will remove resources not flagged as originating from this Mu server
|
|
248
|
+
# @param region [String]: The cloud provider region
|
|
249
|
+
# @return [void]
|
|
250
|
+
def self.cleanup(noop: false, ignoremaster: false, region: MU.curRegion, flags: {})
|
|
251
|
+
flags["project"] ||= MU::Cloud::Google.defaultProject
|
|
252
|
+
|
|
253
|
+
if !flags["global"]
|
|
254
|
+
["region_autoscaler", "region_instance_group_manager"].each { |type|
|
|
255
|
+
MU::Cloud::Google.compute.delete(
|
|
256
|
+
type,
|
|
257
|
+
flags["project"],
|
|
258
|
+
region,
|
|
259
|
+
noop
|
|
260
|
+
)
|
|
261
|
+
}
|
|
262
|
+
else
|
|
263
|
+
MU::Cloud::Google.compute.delete(
|
|
264
|
+
"instance_template",
|
|
265
|
+
flags["project"],
|
|
266
|
+
noop
|
|
267
|
+
)
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
end
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# Copyright:: Copyright (c) 2018 eGlobalTech, Inc., all rights reserved
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the BSD-3 license (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License in the root of the project or at
|
|
6
|
+
#
|
|
7
|
+
# http://egt-labs.com/mu/LICENSE.html
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
module MU
|
|
16
|
+
class Cloud
|
|
17
|
+
class Google
|
|
18
|
+
# A user as configured in {MU::Config::BasketofKittens::users}
|
|
19
|
+
class User < MU::Cloud::User
|
|
20
|
+
@deploy = nil
|
|
21
|
+
@config = nil
|
|
22
|
+
attr_reader :mu_name
|
|
23
|
+
attr_reader :config
|
|
24
|
+
attr_reader :cloud_id
|
|
25
|
+
|
|
26
|
+
# @param mommacat [MU::MommaCat]: A {MU::Mommacat} object containing the deploy of which this resource is/will be a member.
|
|
27
|
+
# @param kitten_cfg [Hash]: The fully parsed and resolved {MU::Config} resource descriptor as defined in {MU::Config::BasketofKittens::users}
|
|
28
|
+
def initialize(mommacat: nil, kitten_cfg: nil, mu_name: nil, cloud_id: nil)
|
|
29
|
+
@deploy = mommacat
|
|
30
|
+
@config = MU::Config.manxify(kitten_cfg)
|
|
31
|
+
@cloud_id ||= cloud_id
|
|
32
|
+
@mu_name ||= @deploy.getResourceName(@config["name"])
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Called automatically by {MU::Deploy#createResources}
|
|
36
|
+
def create
|
|
37
|
+
if @config['type'] == "interactive"
|
|
38
|
+
bind_human_user
|
|
39
|
+
else
|
|
40
|
+
req_obj = MU::Cloud::Google.iam(:CreateServiceAccountRequest).new(
|
|
41
|
+
account_id: @deploy.getResourceName(@config["name"], max_length: 30).downcase,
|
|
42
|
+
service_account: MU::Cloud::Google.iam(:ServiceAccount).new(
|
|
43
|
+
display_name: @mu_name
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
MU.log "Creating service account #{@mu_name}"
|
|
47
|
+
MU::Cloud::Google.iam.create_service_account(
|
|
48
|
+
"projects/"+@config['project'],
|
|
49
|
+
req_obj
|
|
50
|
+
)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Called automatically by {MU::Deploy#createResources}
|
|
55
|
+
def groom
|
|
56
|
+
if @config['type'] == "interactive"
|
|
57
|
+
bind_human_user
|
|
58
|
+
else
|
|
59
|
+
if @config['create_api_key']
|
|
60
|
+
resp = MU::Cloud::Google.iam.list_project_service_account_keys(
|
|
61
|
+
cloud_desc.name
|
|
62
|
+
)
|
|
63
|
+
if resp.keys.size == 0
|
|
64
|
+
MU.log "Generating API keys for service account #{@mu_name}"
|
|
65
|
+
resp = MU::Cloud::Google.iam.create_service_account_key(
|
|
66
|
+
cloud_desc.name
|
|
67
|
+
)
|
|
68
|
+
scratchitem = MU::Master.storeScratchPadSecret("Google Cloud Service Account credentials for #{@mu_name}:\n<pre style='text-align:left;'>#{resp.private_key_data}</pre>")
|
|
69
|
+
MU.log "User #{@mu_name}'s Google Cloud Service Account credentials can be retrieved from: https://#{$MU_CFG['public_address']}/scratchpad/#{scratchitem}", MU::SUMMARY
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Retrieve the cloud descriptor for this resource.
|
|
76
|
+
def cloud_desc
|
|
77
|
+
if @config['type'] == "interactive"
|
|
78
|
+
return nil
|
|
79
|
+
else
|
|
80
|
+
resp = MU::Cloud::Google.iam.list_project_service_accounts(
|
|
81
|
+
"projects/"+@config["project"]
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
if resp and resp.accounts
|
|
85
|
+
resp.accounts.each { |sa|
|
|
86
|
+
if sa.display_name and sa.display_name == @mu_name
|
|
87
|
+
return sa
|
|
88
|
+
end
|
|
89
|
+
}
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Return the metadata for this user configuration
|
|
95
|
+
# @return [Hash]
|
|
96
|
+
def notify
|
|
97
|
+
description = MU.structToHash(cloud_desc)
|
|
98
|
+
if description
|
|
99
|
+
description.delete(:etag)
|
|
100
|
+
return description
|
|
101
|
+
end
|
|
102
|
+
{
|
|
103
|
+
}
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Remove all users associated with the currently loaded deployment.
|
|
107
|
+
# @param noop [Boolean]: If true, will only print what would be done
|
|
108
|
+
# @param ignoremaster [Boolean]: If true, will remove resources not flagged as originating from this Mu server
|
|
109
|
+
# @param region [String]: The cloud provider region
|
|
110
|
+
# @return [void]
|
|
111
|
+
def self.cleanup(noop: false, ignoremaster: false, region: MU.curRegion, flags: {})
|
|
112
|
+
flags["project"] ||= MU::Cloud::Google.defaultProject
|
|
113
|
+
resp = MU::Cloud::Google.iam.list_project_service_accounts(
|
|
114
|
+
"projects/"+flags["project"]
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
if resp and resp.accounts and MU.deploy_id
|
|
118
|
+
resp.accounts.each { |sa|
|
|
119
|
+
if sa.display_name and sa.display_name.match(/^#{Regexp.quote(MU.deploy_id)}-/i)
|
|
120
|
+
begin
|
|
121
|
+
MU.log "Deleting service account #{sa.name}", details: sa
|
|
122
|
+
if !noop
|
|
123
|
+
MU::Cloud::Google.iam.delete_project_service_account(sa.name)
|
|
124
|
+
end
|
|
125
|
+
rescue ::Google::Apis::ClientError => e
|
|
126
|
+
raise e if !e.message.match(/^notFound: /)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
}
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Locate an existing user group.
|
|
134
|
+
# @param cloud_id [String]: The cloud provider's identifier for this resource.
|
|
135
|
+
# @param region [String]: The cloud provider region.
|
|
136
|
+
# @param flags [Hash]: Optional flags
|
|
137
|
+
# @return [OpenStruct]: The cloud provider's complete descriptions of matching user group.
|
|
138
|
+
def self.find(cloud_id: nil, region: MU.curRegion, flags: {})
|
|
139
|
+
found = nil
|
|
140
|
+
resp = MU::Cloud::Google.iam.list_project_service_accounts(
|
|
141
|
+
"projects/"+flags["project"]
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
if resp and resp.accounts
|
|
145
|
+
resp.accounts.each { |sa|
|
|
146
|
+
if sa.display_name and sa.display_name == cloud_id
|
|
147
|
+
found ||= {}
|
|
148
|
+
found[cloud_id] = sa
|
|
149
|
+
end
|
|
150
|
+
}
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
found
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Cloud-specific configuration properties.
|
|
157
|
+
# @param config [MU::Config]: The calling MU::Config object
|
|
158
|
+
# @return [Array<Array,Hash>]: List of required fields, and json-schema Hash of cloud-specific configuration parameters for this resource
|
|
159
|
+
def self.schema(config)
|
|
160
|
+
toplevel_required = []
|
|
161
|
+
schema = {
|
|
162
|
+
"name" => {
|
|
163
|
+
"type" => "string",
|
|
164
|
+
"description" => "This must be the email address of an existing Google user account (+foo@gmail.com+), or of a federated GSuite or Cloud Identity domain account from your organization."
|
|
165
|
+
},
|
|
166
|
+
"type" => {
|
|
167
|
+
"type" => "string",
|
|
168
|
+
"description" => "'interactive' will attempt to bind an existing user; 'service' will create a service account and generate API keys"
|
|
169
|
+
},
|
|
170
|
+
"roles" => {
|
|
171
|
+
"type" => "array",
|
|
172
|
+
"description" => "One or more Google IAM roles to associate with this user.",
|
|
173
|
+
"default" => ["roles/viewer"],
|
|
174
|
+
"items" => {
|
|
175
|
+
"type" => "string",
|
|
176
|
+
"description" => "One or more Google IAM roles to associate with this user. Google Cloud human user accounts (as distinct from service accounts) are not created directly; pre-existing Google accounts are associated with a project by being bound to one or more roles in that project. If no roles are specified, we default to +roles/viewer+, which permits read-only access project-wide."
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
"project" => {
|
|
180
|
+
"type" => "string",
|
|
181
|
+
"description" => "The project into which to deploy resources"
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
[toplevel_required, schema]
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# Cloud-specific pre-processing of {MU::Config::BasketofKittens::users}, bare and unvalidated.
|
|
188
|
+
# @param user [Hash]: The resource to process and validate
|
|
189
|
+
# @param configurator [MU::Config]: The overall deployment configurator of which this resource is a member
|
|
190
|
+
# @return [Boolean]: True if validation succeeded, False otherwise
|
|
191
|
+
def self.validateConfig(user, configurator)
|
|
192
|
+
ok = true
|
|
193
|
+
|
|
194
|
+
# admin_directory only works in a GSuite environment
|
|
195
|
+
if !user['name'].match(/@/i) and $MU_CFG['google']['masquerade_as']
|
|
196
|
+
# XXX flesh this check out, need to test with a GSuite site
|
|
197
|
+
pp MU::Cloud::Google.admin_directory.get_user(user['name'])
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
if user['groups'] and user['groups'].size > 0 and
|
|
201
|
+
!$MU_CFG['google']['masquerade_as']
|
|
202
|
+
MU.log "Cannot change Google group memberships in non-GSuite environments.\nVisit https://groups.google.com to manage groups.", MU::ERR
|
|
203
|
+
ok = false
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
if user['type'] != "service" and user["create_api_key"]
|
|
207
|
+
MU.log "Only service accounts can have API keys in Google Cloud", MU::ERR
|
|
208
|
+
ok = false
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
ok
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
private
|
|
215
|
+
|
|
216
|
+
def bind_human_user
|
|
217
|
+
bindings = []
|
|
218
|
+
ext_policy = MU::Cloud::Google.resource_manager.get_project_iam_policy(
|
|
219
|
+
@config['project']
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
change_needed = false
|
|
223
|
+
@config['roles'].each { |role|
|
|
224
|
+
seen = false
|
|
225
|
+
ext_policy.bindings.each { |b|
|
|
226
|
+
if b.role == role
|
|
227
|
+
seen = true
|
|
228
|
+
if !b.members.include?("user:"+@config['name'])
|
|
229
|
+
change_needed = true
|
|
230
|
+
b.members << "user:"+@config['name']
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
}
|
|
234
|
+
if !seen
|
|
235
|
+
ext_policy.bindings << MU::Cloud::Google.resource_manager(:Binding).new(
|
|
236
|
+
role: role,
|
|
237
|
+
members: ["user:"+@config['name']]
|
|
238
|
+
)
|
|
239
|
+
change_needed = true
|
|
240
|
+
end
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if change_needed
|
|
244
|
+
req_obj = MU::Cloud::Google.resource_manager(:SetIamPolicyRequest).new(
|
|
245
|
+
policy: ext_policy
|
|
246
|
+
)
|
|
247
|
+
MU.log "Adding #{@config['name']} to Google Cloud project #{@config['project']}", details: @config['roles']
|
|
248
|
+
|
|
249
|
+
begin
|
|
250
|
+
MU::Cloud::Google.resource_manager.set_project_iam_policy(
|
|
251
|
+
@config['project'],
|
|
252
|
+
req_obj
|
|
253
|
+
)
|
|
254
|
+
rescue ::Google::Apis::ClientError => e
|
|
255
|
+
if e.message.match(/does not exist/i) and !$MU_CFG['google']['masquerade_as']
|
|
256
|
+
raise MuError, "User #{@config['name']} does not exist, and we cannot create Google user in non-GSuite environments.\nVisit https://accounts.google.com to create new accounts."
|
|
257
|
+
end
|
|
258
|
+
raise e
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Copyright:: Copyright (c) 2014 eGlobalTech, Inc., all rights reserved
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the BSD-3 license (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License in the root of the project or at
|
|
7
|
+
#
|
|
8
|
+
# http://egt-labs.com/mu/LICENSE.html
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
updates_run=0
|
|
17
|
+
need_reboot=0
|
|
18
|
+
instance_id="`curl http://metadata.google.internal/computeMetadata/v1/instance/name`"
|
|
19
|
+
if [ -f /etc/debian_version ];then
|
|
20
|
+
if ! grep '^/bin/sh /var/lib/cloud/instance/user-data.txt$' /etc/rc.local > /dev/null;then
|
|
21
|
+
echo "/bin/sh /var/lib/cloud/instance/user-data.txt" >> /etc/rc.local
|
|
22
|
+
fi
|
|
23
|
+
apt-get update -y
|
|
24
|
+
if [ ! -f /usr/bin/curl ] ;then /usr/bin/apt-get --fix-missing -y install curl;fi
|
|
25
|
+
<% if !$mu.skipApplyUpdates %>
|
|
26
|
+
if [ ! -f /.mu-installer-ran-updates ];then
|
|
27
|
+
service ssh stop
|
|
28
|
+
apt-get --fix-missing -y upgrade
|
|
29
|
+
if [ $? -eq 0 ]
|
|
30
|
+
then
|
|
31
|
+
echo "Successfully updated packages"
|
|
32
|
+
updates_run=1
|
|
33
|
+
else
|
|
34
|
+
echo "FAILED PACKAGE UPDATE" >&2
|
|
35
|
+
fi
|
|
36
|
+
# Proceed regardless
|
|
37
|
+
touch /.mu-installer-ran-updates
|
|
38
|
+
|
|
39
|
+
# XXX this logic works on Ubuntu, is it Debian-friendly?
|
|
40
|
+
latest_kernel="`ls -1 /boot/vmlinuz-* | sed -r 's/^\/boot\/vmlinuz-//' | tail -1`"
|
|
41
|
+
running_kernel="`uname -r`"
|
|
42
|
+
if [ "$running_kernel" != "$latest_kernel" -a "$latest_kernel" != "" ];then
|
|
43
|
+
need_reboot=1
|
|
44
|
+
else
|
|
45
|
+
service ssh start
|
|
46
|
+
fi
|
|
47
|
+
fi
|
|
48
|
+
<% end %>
|
|
49
|
+
elif [ -x /usr/bin/yum ];then
|
|
50
|
+
version=`/bin/rpm -qa \*-release | grep -Ei "redhat|centos" | cut -d"-" -f3`
|
|
51
|
+
if [ -z "$version" ];then
|
|
52
|
+
amazon_version=`/bin/rpm -qa \*-release | grep -Ei "system-release"| cut -d"-" -f3 | cut -d"." -f1`
|
|
53
|
+
if [ "$amazon_version" == "2014" ] || [ "$amazon_version" == "2015" ] || [ "$amazon_version" == "2016" ];then
|
|
54
|
+
version=6
|
|
55
|
+
fi
|
|
56
|
+
fi
|
|
57
|
+
if [ $version -eq 7 ];then
|
|
58
|
+
userdata_dir="/var/lib/cloud/instances/$instance_id"
|
|
59
|
+
else
|
|
60
|
+
userdata_dir="/var/lib/cloud/instance"
|
|
61
|
+
fi
|
|
62
|
+
if ! grep "^/bin/sh $userdata_dir/user-data.txt$" /etc/rc.d/rc.local > /dev/null;then
|
|
63
|
+
echo "/bin/sh $userdata_dir/user-data.txt" >> /etc/rc.d/rc.local
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
sed -i 's/^Defaults.*requiretty$/Defaults !requiretty/' /etc/sudoers
|
|
67
|
+
|
|
68
|
+
if [ $version == 7 ];then
|
|
69
|
+
chmod 755 /etc/rc.d/rc.local
|
|
70
|
+
fi
|
|
71
|
+
if [ ! -f /usr/bin/curl ] ;then /usr/bin/yum -y install curl;fi
|
|
72
|
+
# Ugh, rando EPEL mirror
|
|
73
|
+
if [ ! -f /etc/yum.repos.d/epel.repo ];then
|
|
74
|
+
/bin/rpm -ivh http://mirror.metrocast.net/fedora/epel/epel-release-latest-$version.noarch.rpm
|
|
75
|
+
fi
|
|
76
|
+
<% if !$mu.skipApplyUpdates %>
|
|
77
|
+
if [ ! -f /.mu-installer-ran-updates ];then
|
|
78
|
+
service sshd stop
|
|
79
|
+
kernel_update=`yum list updates | grep kernel`
|
|
80
|
+
yum -y update
|
|
81
|
+
if [ $? -eq 0 ]
|
|
82
|
+
then
|
|
83
|
+
echo "Successfully updated packages"
|
|
84
|
+
updates_run=1
|
|
85
|
+
else
|
|
86
|
+
echo "FAILED PACKAGE UPDATE" >&2
|
|
87
|
+
fi
|
|
88
|
+
# Proceed regardless
|
|
89
|
+
touch /.mu-installer-ran-updates
|
|
90
|
+
if [ -n "$kernel_update" ]; then
|
|
91
|
+
need_reboot=1
|
|
92
|
+
else
|
|
93
|
+
service sshd start
|
|
94
|
+
fi
|
|
95
|
+
fi
|
|
96
|
+
<% end %>
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
umask 0077
|
|
100
|
+
|
|
101
|
+
# Install Chef now, because why not?
|
|
102
|
+
if [ ! -f /opt/chef/embedded/bin/ruby ];then
|
|
103
|
+
curl https://www.chef.io/chef/install.sh > chef-install.sh
|
|
104
|
+
set +e
|
|
105
|
+
# We may run afoul of a synchronous bootstrap process doing the same thing. So
|
|
106
|
+
# wait until we've managed to run successfully.
|
|
107
|
+
while ! sh chef-install.sh -v <%= MU.chefVersion %>;do
|
|
108
|
+
sleep 10
|
|
109
|
+
done
|
|
110
|
+
touch /opt/mu_installed_chef
|
|
111
|
+
set -e
|
|
112
|
+
fi
|
|
113
|
+
|
|
114
|
+
<% if !$mu.skipApplyUpdates %>
|
|
115
|
+
if [ "$need_reboot" == "1" ];then
|
|
116
|
+
shutdown -r now "Applying new kernel"
|
|
117
|
+
fi
|
|
118
|
+
<% end %>
|
|
119
|
+
|
|
120
|
+
gsutil cp gs://<%= MU.adminBucketName %>/<%= $mu.muID %>-secret .
|
|
121
|
+
|
|
122
|
+
echo '
|
|
123
|
+
require "openssl"
|
|
124
|
+
require "base64"
|
|
125
|
+
key = OpenSSL::PKey::RSA.new(Base64.urlsafe_decode64("<%= $mu.deployKey %>"))
|
|
126
|
+
print Base64.urlsafe_encode64(key.public_encrypt(File.read("<%= $mu.muID %>-secret")))
|
|
127
|
+
' > encrypt_deploy_secret.rb
|
|
128
|
+
|
|
129
|
+
deploykey="<%= $mu.deployKey %>"
|
|
130
|
+
instance_id="`curl http://metadata.google.internal/computeMetadata/v1/instance/name`"
|
|
131
|
+
|
|
132
|
+
# Make double-sure sshd is actually up
|
|
133
|
+
service sshd restart
|
|
134
|
+
|
|
135
|
+
/usr/bin/curl -k --data mu_id="<%= $mu.muID %>" --data mu_resource_name="<%= $mu.resourceName %>" --data mu_resource_type="<%= $mu.resourceType %>" --data mu_instance_id="$instance_id" --data mu_bootstrap="1" --data mu_user="<%= $mu.muUser %>" --data mu_deploy_secret="`/opt/chef/embedded/bin/ruby encrypt_deploy_secret.rb`" https://<%= $mu.publicIP %>:2260/
|
|
136
|
+
/bin/rm -f <%= $mu.muID %>-secret mu_deploy_key.pub chef-install.sh encrypt_deploy_secret.rb
|
|
137
|
+
touch /.mu_userdata_complete
|