rubber-jcarnegie 0.0.1
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.
- data/CHANGELOG +477 -0
- data/COPYING +339 -0
- data/README +6 -0
- data/TODO +11 -0
- data/VERSION +1 -0
- data/bin/vulcanize +25 -0
- data/generators/vulcanize/USAGE +6 -0
- data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +51 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/apache/deflate.conf +10 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/apache/expires.conf +9 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/apache/headers.conf +6 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +8 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/apache/setenvif.conf +52 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +79 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +34 -0
- data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +6 -0
- data/generators/vulcanize/templates/apache/templates.yml +1 -0
- data/generators/vulcanize/templates/base/Capfile +14 -0
- data/generators/vulcanize/templates/base/Rakefile +23 -0
- data/generators/vulcanize/templates/base/config/deploy.rb +56 -0
- data/generators/vulcanize/templates/base/config/rubber/common/crontab +22 -0
- data/generators/vulcanize/templates/base/config/rubber/common/monit-postfix.conf +8 -0
- data/generators/vulcanize/templates/base/config/rubber/common/rubber.profile +13 -0
- data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +92 -0
- data/generators/vulcanize/templates/base/config/rubber/deploy-util.rb +97 -0
- data/generators/vulcanize/templates/base/config/rubber/rubber-dns.yml +78 -0
- data/generators/vulcanize/templates/base/config/rubber/rubber-rvm.yml +33 -0
- data/generators/vulcanize/templates/base/config/rubber/rubber.yml +241 -0
- data/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
- data/generators/vulcanize/templates/base/script/cron-rake +18 -0
- data/generators/vulcanize/templates/base/script/cron-runner +18 -0
- data/generators/vulcanize/templates/base/script/cron-sh +67 -0
- data/generators/vulcanize/templates/base/templates.rb +11 -0
- data/generators/vulcanize/templates/base/templates.yml +6 -0
- data/generators/vulcanize/templates/cassandra/config/rubber/deploy-cassandra.rb +88 -0
- data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.in.sh +60 -0
- data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.yaml +210 -0
- data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/log4j-server.properties +45 -0
- data/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/monit-cassandra.conf +8 -0
- data/generators/vulcanize/templates/cassandra/config/rubber/rubber-cassandra.yml +18 -0
- data/generators/vulcanize/templates/cassandra/templates.yml +1 -0
- data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
- data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
- data/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
- data/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
- data/generators/vulcanize/templates/complete_passenger/config/rubber/role/haproxy/haproxy-passenger.conf +21 -0
- data/generators/vulcanize/templates/complete_passenger/config/rubber/rubber-complete.yml +40 -0
- data/generators/vulcanize/templates/complete_passenger/templates.rb +9 -0
- data/generators/vulcanize/templates/complete_passenger/templates.yml +9 -0
- data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +4 -0
- data/generators/vulcanize/templates/complete_passenger_postgresql/templates.yml +4 -0
- data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
- data/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
- data/generators/vulcanize/templates/cruise/templates.yml +1 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +11 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +21 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
- data/generators/vulcanize/templates/haproxy/templates.yml +1 -0
- data/generators/vulcanize/templates/jetty/config/rubber/deploy-jetty.rb +59 -0
- data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh +589 -0
- data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.xml +199 -0
- data/generators/vulcanize/templates/jetty/config/rubber/role/jetty/monit-jetty.conf +9 -0
- data/generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml +10 -0
- data/generators/vulcanize/templates/jetty/templates.yml +1 -0
- data/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
- data/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
- data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
- data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
- data/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
- data/generators/vulcanize/templates/memcached/templates.yml +1 -0
- data/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
- data/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
- data/generators/vulcanize/templates/mongrel/templates.yml +1 -0
- data/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
- data/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +252 -0
- data/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +33 -0
- data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
- data/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
- data/generators/vulcanize/templates/monit/templates.yml +1 -0
- data/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
- data/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
- data/generators/vulcanize/templates/munin/config/rubber/common/munin-plugins.conf +11 -0
- data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +115 -0
- data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
- data/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +55 -0
- data/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
- data/generators/vulcanize/templates/munin/templates.yml +1 -0
- data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +12 -0
- data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +169 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/apparmor-mysql.conf +46 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +163 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
- data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +47 -0
- data/generators/vulcanize/templates/mysql/templates.yml +1 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +177 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
- data/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
- data/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
- data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
- data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
- data/generators/vulcanize/templates/nginx/templates.yml +1 -0
- data/generators/vulcanize/templates/node/INSTALL_NOTES +20 -0
- data/generators/vulcanize/templates/node/config/rubber/deploy-node.rb +33 -0
- data/generators/vulcanize/templates/node/config/rubber/rubber-node.yml +1 -0
- data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +45 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-memory.conf +34 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +8 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +48 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +41 -0
- data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +15 -0
- data/generators/vulcanize/templates/passenger/templates.yml +3 -0
- data/generators/vulcanize/templates/postgresql/config/rubber/common/database.yml +12 -0
- data/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +158 -0
- data/generators/vulcanize/templates/postgresql/config/rubber/role/db/crontab +14 -0
- data/generators/vulcanize/templates/postgresql/config/rubber/role/db/monit-postgresql.conf +10 -0
- data/generators/vulcanize/templates/postgresql/config/rubber/role/db/munin-postgresql.conf +7 -0
- data/generators/vulcanize/templates/postgresql/config/rubber/role/db/pg_hba.conf +89 -0
- data/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql-sysctl.conf +6 -0
- data/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql.conf +531 -0
- data/generators/vulcanize/templates/postgresql/config/rubber/rubber-postgresql.yml +45 -0
- data/generators/vulcanize/templates/postgresql/templates.yml +1 -0
- data/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +76 -0
- data/generators/vulcanize/templates/redis/config/rubber/role/redis/crontab +8 -0
- data/generators/vulcanize/templates/redis/config/rubber/role/redis/monit-redis.conf +9 -0
- data/generators/vulcanize/templates/redis/config/rubber/role/redis/redis.conf +320 -0
- data/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +9 -0
- data/generators/vulcanize/templates/redis/templates.yml +1 -0
- data/generators/vulcanize/templates/resque/config/initializers/resque.rb +15 -0
- data/generators/vulcanize/templates/resque/config/rubber/common/resque.yml +5 -0
- data/generators/vulcanize/templates/resque/config/rubber/deploy-resque.rb +58 -0
- data/generators/vulcanize/templates/resque/config/rubber/role/resque_web/monit-resque_web.conf +14 -0
- data/generators/vulcanize/templates/resque/config/rubber/role/resque_worker/monit-resque_worker.conf +19 -0
- data/generators/vulcanize/templates/resque/config/rubber/rubber-resque.yml +18 -0
- data/generators/vulcanize/templates/resque/script/resque_worker_management.rb +144 -0
- data/generators/vulcanize/templates/resque/templates.rb +1 -0
- data/generators/vulcanize/templates/resque/templates.yml +3 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +13 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
- data/generators/vulcanize/templates/sphinx/templates.yml +1 -0
- data/generators/vulcanize/vulcanize_generator.rb +184 -0
- data/lib/capistrano/hostcmd.rb +12 -0
- data/lib/generators/vulcanize/USAGE +6 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +51 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/deflate.conf +10 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/expires.conf +9 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/headers.conf +6 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/monit-apache.conf +8 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/ports.conf +8 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/role/apache/setenvif.conf +52 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache-vhost.conf +79 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-apache.auth +7 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/role/web_tools/tools-index.html +34 -0
- data/lib/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +6 -0
- data/lib/generators/vulcanize/templates/apache/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/base/Capfile +14 -0
- data/lib/generators/vulcanize/templates/base/Rakefile +23 -0
- data/lib/generators/vulcanize/templates/base/config/deploy.rb +56 -0
- data/lib/generators/vulcanize/templates/base/config/rubber/common/crontab +22 -0
- data/lib/generators/vulcanize/templates/base/config/rubber/common/monit-postfix.conf +8 -0
- data/lib/generators/vulcanize/templates/base/config/rubber/common/rubber.profile +13 -0
- data/lib/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +92 -0
- data/lib/generators/vulcanize/templates/base/config/rubber/deploy-util.rb +97 -0
- data/lib/generators/vulcanize/templates/base/config/rubber/rubber-dns.yml +78 -0
- data/lib/generators/vulcanize/templates/base/config/rubber/rubber-rvm.yml +33 -0
- data/lib/generators/vulcanize/templates/base/config/rubber/rubber.yml +241 -0
- data/lib/generators/vulcanize/templates/base/lib/tasks/rubber.rake +15 -0
- data/lib/generators/vulcanize/templates/base/script/cron-rake +18 -0
- data/lib/generators/vulcanize/templates/base/script/cron-runner +18 -0
- data/lib/generators/vulcanize/templates/base/script/cron-sh +67 -0
- data/lib/generators/vulcanize/templates/base/templates.rb +11 -0
- data/lib/generators/vulcanize/templates/base/templates.yml +6 -0
- data/lib/generators/vulcanize/templates/cassandra/config/rubber/deploy-cassandra.rb +88 -0
- data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.in.sh +60 -0
- data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/cassandra.yaml +210 -0
- data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/log4j-server.properties +45 -0
- data/lib/generators/vulcanize/templates/cassandra/config/rubber/role/cassandra/monit-cassandra.conf +8 -0
- data/lib/generators/vulcanize/templates/cassandra/config/rubber/rubber-cassandra.yml +18 -0
- data/lib/generators/vulcanize/templates/cassandra/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/haproxy/haproxy-mongrel.conf +23 -0
- data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/role/nginx/nginx-mongrel.conf +113 -0
- data/lib/generators/vulcanize/templates/complete_mongrel_mysql/config/rubber/rubber-complete.yml +41 -0
- data/lib/generators/vulcanize/templates/complete_mongrel_mysql/templates.yml +6 -0
- data/lib/generators/vulcanize/templates/complete_passenger/config/rubber/role/haproxy/haproxy-passenger.conf +21 -0
- data/lib/generators/vulcanize/templates/complete_passenger/config/rubber/rubber-complete.yml +40 -0
- data/lib/generators/vulcanize/templates/complete_passenger/templates.rb +9 -0
- data/lib/generators/vulcanize/templates/complete_passenger/templates.yml +9 -0
- data/lib/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +4 -0
- data/lib/generators/vulcanize/templates/complete_passenger_postgresql/templates.yml +4 -0
- data/lib/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +72 -0
- data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
- data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
- data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
- data/lib/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
- data/lib/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
- data/lib/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
- data/lib/generators/vulcanize/templates/cruise/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
- data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-base.conf +26 -0
- data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
- data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
- data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +11 -0
- data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +21 -0
- data/lib/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
- data/lib/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +7 -0
- data/lib/generators/vulcanize/templates/haproxy/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/jetty/config/rubber/deploy-jetty.rb +59 -0
- data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.sh +589 -0
- data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/jetty.xml +199 -0
- data/lib/generators/vulcanize/templates/jetty/config/rubber/role/jetty/monit-jetty.conf +9 -0
- data/lib/generators/vulcanize/templates/jetty/config/rubber/rubber-jetty.yml +10 -0
- data/lib/generators/vulcanize/templates/jetty/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
- data/lib/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
- data/lib/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
- data/lib/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
- data/lib/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
- data/lib/generators/vulcanize/templates/memcached/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
- data/lib/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
- data/lib/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
- data/lib/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/mongrel_cluster.yml +12 -0
- data/lib/generators/vulcanize/templates/mongrel/config/rubber/role/mongrel/monit-mongrel.conf +20 -0
- data/lib/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
- data/lib/generators/vulcanize/templates/mongrel/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
- data/lib/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +252 -0
- data/lib/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +33 -0
- data/lib/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
- data/lib/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
- data/lib/generators/vulcanize/templates/monit/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
- data/lib/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
- data/lib/generators/vulcanize/templates/munin/config/rubber/common/munin-plugins.conf +11 -0
- data/lib/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +46 -0
- data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
- data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
- data/lib/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +115 -0
- data/lib/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
- data/lib/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +55 -0
- data/lib/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
- data/lib/generators/vulcanize/templates/munin/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +12 -0
- data/lib/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +169 -0
- data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/apparmor-mysql.conf +46 -0
- data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
- data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
- data/lib/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +163 -0
- data/lib/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
- data/lib/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +47 -0
- data/lib/generators/vulcanize/templates/mysql/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
- data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +177 -0
- data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
- data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
- data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
- data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
- data/lib/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
- data/lib/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
- data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
- data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
- data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
- data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
- data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
- data/lib/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
- data/lib/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
- data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/crontab +9 -0
- data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/monit-nginx.conf +8 -0
- data/lib/generators/vulcanize/templates/nginx/config/rubber/role/nginx/nginx.conf +42 -0
- data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +55 -0
- data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-index.html +30 -0
- data/lib/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/tools-nginx.auth +7 -0
- data/lib/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +10 -0
- data/lib/generators/vulcanize/templates/nginx/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +45 -0
- data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-memory.conf +34 -0
- data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger-sudoers.conf +8 -0
- data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/munin-passenger.conf +47 -0
- data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger-apache-vhost.conf +48 -0
- data/lib/generators/vulcanize/templates/passenger/config/rubber/role/passenger/passenger.conf +41 -0
- data/lib/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +15 -0
- data/lib/generators/vulcanize/templates/passenger/templates.yml +3 -0
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/common/database.yml +12 -0
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/deploy-postgresql.rb +158 -0
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/crontab +14 -0
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/monit-postgresql.conf +10 -0
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/munin-postgresql.conf +7 -0
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/pg_hba.conf +89 -0
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql-sysctl.conf +6 -0
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/role/db/postgresql.conf +531 -0
- data/lib/generators/vulcanize/templates/postgresql/config/rubber/rubber-postgresql.yml +45 -0
- data/lib/generators/vulcanize/templates/postgresql/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/redis/config/rubber/deploy-redis.rb +76 -0
- data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/crontab +8 -0
- data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/monit-redis.conf +9 -0
- data/lib/generators/vulcanize/templates/redis/config/rubber/role/redis/redis.conf +320 -0
- data/lib/generators/vulcanize/templates/redis/config/rubber/rubber-redis.yml +9 -0
- data/lib/generators/vulcanize/templates/redis/templates.yml +1 -0
- data/lib/generators/vulcanize/templates/resque/config/initializers/resque.rb +15 -0
- data/lib/generators/vulcanize/templates/resque/config/rubber/common/resque.yml +5 -0
- data/lib/generators/vulcanize/templates/resque/config/rubber/deploy-resque.rb +58 -0
- data/lib/generators/vulcanize/templates/resque/config/rubber/role/resque_web/monit-resque_web.conf +14 -0
- data/lib/generators/vulcanize/templates/resque/config/rubber/role/resque_worker/monit-resque_worker.conf +19 -0
- data/lib/generators/vulcanize/templates/resque/config/rubber/rubber-resque.yml +18 -0
- data/lib/generators/vulcanize/templates/resque/script/resque_worker_management.rb +144 -0
- data/lib/generators/vulcanize/templates/resque/templates.rb +1 -0
- data/lib/generators/vulcanize/templates/resque/templates.yml +3 -0
- data/lib/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
- data/lib/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
- data/lib/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
- data/lib/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +13 -0
- data/lib/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
- data/lib/generators/vulcanize/templates/sphinx/templates.yml +1 -0
- data/lib/generators/vulcanize/vulcanize_generator.rb +184 -0
- data/lib/rubber.rb +76 -0
- data/lib/rubber/capistrano.rb +1 -0
- data/lib/rubber/cloud.rb +13 -0
- data/lib/rubber/cloud/aws.rb +362 -0
- data/lib/rubber/cloud/base.rb +16 -0
- data/lib/rubber/configuration.rb +47 -0
- data/lib/rubber/dns.rb +13 -0
- data/lib/rubber/dns/base.rb +84 -0
- data/lib/rubber/dns/dyndns.rb +77 -0
- data/lib/rubber/dns/nettica.rb +117 -0
- data/lib/rubber/dns/zerigo.rb +115 -0
- data/lib/rubber/environment.rb +177 -0
- data/lib/rubber/generator.rb +209 -0
- data/lib/rubber/instance.rb +176 -0
- data/lib/rubber/railtie.rb +14 -0
- data/lib/rubber/recipes/rubber.rb +96 -0
- data/lib/rubber/recipes/rubber/bundles.rb +30 -0
- data/lib/rubber/recipes/rubber/deploy.rb +90 -0
- data/lib/rubber/recipes/rubber/instances.rb +453 -0
- data/lib/rubber/recipes/rubber/load_balancers.rb +44 -0
- data/lib/rubber/recipes/rubber/security_groups.rb +189 -0
- data/lib/rubber/recipes/rubber/setup.rb +534 -0
- data/lib/rubber/recipes/rubber/spot_requests.rb +23 -0
- data/lib/rubber/recipes/rubber/static_ips.rb +190 -0
- data/lib/rubber/recipes/rubber/tags.rb +12 -0
- data/lib/rubber/recipes/rubber/utils.rb +226 -0
- data/lib/rubber/recipes/rubber/volumes.rb +265 -0
- data/lib/rubber/tag.rb +16 -0
- data/lib/rubber/tasks/rubber.rb +279 -0
- data/lib/rubber/util.rb +72 -0
- data/rails/init.rb +6 -0
- data/test/environment_test.rb +144 -0
- data/test/generator_test.rb +370 -0
- data/test/instance_test.rb +96 -0
- data/test/test_helper.rb +14 -0
- data/test/util_test.rb +19 -0
- data/test/zerigo_test.rb +88 -0
- metadata +540 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# add this plugins lib dir to load path for capistrano
|
|
2
|
+
$:.unshift "#{File.dirname(__FILE__)}/../lib"
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
require "socket"
|
|
5
|
+
require 'resolv'
|
|
6
|
+
require 'enumerator'
|
|
7
|
+
require 'capistrano/hostcmd'
|
|
8
|
+
require 'pp'
|
|
9
|
+
require 'rubber'
|
|
10
|
+
|
|
11
|
+
namespace :rubber do
|
|
12
|
+
|
|
13
|
+
# Disable connecting to any Windows instance.
|
|
14
|
+
alias :original_task :task
|
|
15
|
+
def task(name, options={}, &block)
|
|
16
|
+
original_task(name, options.merge(:except => { :platform => 'windows' }), &block)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# advise capistrano's task method so that tasks for non-existent roles don't
|
|
20
|
+
# fail when roles isn't defined due to using a FILTER for load_roles
|
|
21
|
+
# If you have a task you need to execute even when there are no
|
|
22
|
+
# roles, you have to use required_task instead of task - see rubber:create
|
|
23
|
+
# as an example of this role bootstrapping problem.
|
|
24
|
+
def allow_optional_tasks(ns)
|
|
25
|
+
class << ns
|
|
26
|
+
alias :required_task :task
|
|
27
|
+
def task(name, options={}, &block)
|
|
28
|
+
# Disable connecting to any Windows instance.
|
|
29
|
+
required_task(name, options.merge(:except => { :platform => 'windows' })) do
|
|
30
|
+
# define empty roles for the case when a task has a role that we don't define anywhere
|
|
31
|
+
[*options[:roles]].each do |r|
|
|
32
|
+
roles[r] ||= []
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
if find_servers_for_task(current_task).empty?
|
|
36
|
+
logger.info "No servers for task #{name}, skipping"
|
|
37
|
+
next
|
|
38
|
+
end
|
|
39
|
+
block.call
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
allow_optional_tasks(self)
|
|
46
|
+
on :load, "rubber:init"
|
|
47
|
+
|
|
48
|
+
required_task :init do
|
|
49
|
+
set :rubber_cfg, Rubber::Configuration.get_configuration(RUBBER_ENV)
|
|
50
|
+
set :rubber_env, rubber_cfg.environment.bind()
|
|
51
|
+
set :rubber_instances, rubber_cfg.instance
|
|
52
|
+
|
|
53
|
+
# Disable connecting to any Windows instance.
|
|
54
|
+
# pass -l to bash in :shell to that run also gets full env
|
|
55
|
+
# use a pty so we don't get "stdin: is not a tty" error output
|
|
56
|
+
set :default_run_options, :pty => true, :shell => "/bin/bash -l", :except => { :platform => 'windows' }
|
|
57
|
+
|
|
58
|
+
set :cloud, Rubber::Cloud::get_provider(rubber_env.cloud_provider || "aws", rubber_env, self)
|
|
59
|
+
|
|
60
|
+
load_roles() unless rubber_env.disable_auto_roles
|
|
61
|
+
# NOTE: for some reason Capistrano requires you to have both the public and
|
|
62
|
+
# the private key in the same folder, the public key should have the
|
|
63
|
+
# extension ".pub".
|
|
64
|
+
ssh_options[:keys] = rubber_env.cloud_providers[rubber_env.cloud_provider].key_file
|
|
65
|
+
ssh_options[:timeout] = fetch(:ssh_timeout, 5)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# Automatically load and define capistrano roles from instance config
|
|
70
|
+
def load_roles
|
|
71
|
+
top.roles.clear
|
|
72
|
+
|
|
73
|
+
# define empty roles for all known ones so tasks don't fail if a role
|
|
74
|
+
# doesn't exist due to a filter
|
|
75
|
+
all_roles = rubber_instances.all_roles
|
|
76
|
+
all_roles += rubber_cfg.environment.known_roles
|
|
77
|
+
all_roles.uniq!
|
|
78
|
+
all_roles.each {|name| top.roles[name.to_sym] = []}
|
|
79
|
+
|
|
80
|
+
# define capistrano host => role mapping for all instances
|
|
81
|
+
rubber_instances.filtered.each do |ic|
|
|
82
|
+
ic.roles.each do |role|
|
|
83
|
+
opts = Rubber::Util::symbolize_keys(role.options).merge(:platform => ic.platform)
|
|
84
|
+
msg = "Auto role: #{role.name.to_sym} => #{ic.full_name}"
|
|
85
|
+
msg << ", #{opts.inspect}" if opts.inspect.size > 0
|
|
86
|
+
logger.info msg
|
|
87
|
+
top.role role.name.to_sym, ic.full_name, opts
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
Dir[File.join(File.dirname(__FILE__), 'rubber/*.rb')].each do |rubber_part|
|
|
95
|
+
load(rubber_part)
|
|
96
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
namespace :rubber do
|
|
2
|
+
|
|
3
|
+
desc "Back up and register an image of the running instance"
|
|
4
|
+
task :bundle do
|
|
5
|
+
if find_servers_for_task(current_task).size > 1
|
|
6
|
+
fatal "Can only bundle a single instance at a time, use FILTER to limit the scope"
|
|
7
|
+
end
|
|
8
|
+
image_name = get_env('IMAGE', "The image name for the bundle", true, Time.now.strftime("%Y%m%d_%H%M"))
|
|
9
|
+
image_id = cloud.create_image(image_name)
|
|
10
|
+
logger.info "Newly registered image is: #{image_id}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
desc "De-register and Destroy the image for the given name"
|
|
14
|
+
required_task :destroy_bundle do
|
|
15
|
+
image_id = get_env('IMAGE_ID', 'The id of the image to be destroyed', true)
|
|
16
|
+
cloud.destroy_image(image_id)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
desc "Describes all your own image bundles"
|
|
20
|
+
required_task :describe_bundles do
|
|
21
|
+
images = cloud.describe_images()
|
|
22
|
+
images.each do |image|
|
|
23
|
+
logger.info "======================"
|
|
24
|
+
logger.info "ID: #{image[:id]}"
|
|
25
|
+
logger.info "Location: #{image[:location]}"
|
|
26
|
+
logger.info "Root device type: #{image[:root_device_type]}"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
namespace :rubber do
|
|
2
|
+
|
|
3
|
+
# Add in some hooks so that we can insert our own hooks at head/tail of
|
|
4
|
+
# hook chain - this is needed for making monit stop before everyone else.
|
|
5
|
+
before "deploy:start", "rubber:pre_start"
|
|
6
|
+
before "deploy:restart", "rubber:pre_restart"
|
|
7
|
+
before "deploy:stop", "rubber:pre_stop"
|
|
8
|
+
on :load do
|
|
9
|
+
after "deploy:start", "rubber:post_start"
|
|
10
|
+
after "deploy:restart", "rubber:post_restart"
|
|
11
|
+
after "deploy:stop", "rubber:post_stop"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
task :pre_start do
|
|
15
|
+
end
|
|
16
|
+
task :pre_restart do
|
|
17
|
+
end
|
|
18
|
+
task :pre_stop do
|
|
19
|
+
end
|
|
20
|
+
task :post_start do
|
|
21
|
+
end
|
|
22
|
+
task :post_restart do
|
|
23
|
+
end
|
|
24
|
+
task :post_stop do
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Don't want to do rubber:config for update_code as that tree isn't official
|
|
28
|
+
# until it is 'committed' by the symlink task (and doing so causes it to run
|
|
29
|
+
# for bootstrap_db which should only config the db config file). However,
|
|
30
|
+
# deploy:migrations doesn't call update, so we need an additional trigger for
|
|
31
|
+
# it
|
|
32
|
+
after "deploy:update", "rubber:config"
|
|
33
|
+
after "deploy:rollback_code", "rubber:config"
|
|
34
|
+
before "deploy:migrate", "rubber:config"
|
|
35
|
+
|
|
36
|
+
desc <<-DESC
|
|
37
|
+
Configures the deployed rails application by running the rubber configuration process
|
|
38
|
+
DESC
|
|
39
|
+
task :config do
|
|
40
|
+
opts = {}
|
|
41
|
+
opts['NO_POST'] = true if ENV['NO_POST']
|
|
42
|
+
opts['FILE'] = ENV['FILE'] if ENV['FILE']
|
|
43
|
+
opts['RUBBER_ENV'] = RUBBER_ENV
|
|
44
|
+
# we need to set rails env as well because when running rake
|
|
45
|
+
# in a rails project, rails gets loaded before the rubber hook gets run
|
|
46
|
+
opts['RAILS_ENV'] = RUBBER_ENV
|
|
47
|
+
|
|
48
|
+
# when running deploy:migrations, we need to run config against release_path
|
|
49
|
+
opts[:deploy_path] = current_release if fetch(:migrate_target, :current).to_sym == :latest
|
|
50
|
+
|
|
51
|
+
run_config(opts)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# because we start server as appserver user, but migrate as root, server needs to be able to write logs, etc.
|
|
55
|
+
before "rubber:pre_start", "rubber:setup_app_permissions"
|
|
56
|
+
before "rubber:pre_restart", "rubber:setup_app_permissions"
|
|
57
|
+
|
|
58
|
+
desc <<-DESC
|
|
59
|
+
Sets permissions of files in application directory to be owned by app_user.
|
|
60
|
+
DESC
|
|
61
|
+
task :setup_app_permissions do
|
|
62
|
+
rsudo "find #{shared_path} -name cached-copy -prune -o -name bundle -prune -o -print0 | xargs -0 chown #{rubber_env.app_user}:#{rubber_env.app_user}"
|
|
63
|
+
rsudo "chown -R #{rubber_env.app_user}:#{rubber_env.app_user} #{current_path}/tmp"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def run_config(options={})
|
|
67
|
+
path = options.delete(:deploy_path) || current_path
|
|
68
|
+
extra_env = options.keys.inject("") {|all, k| "#{all} #{k}=\"#{options[k]}\""}
|
|
69
|
+
|
|
70
|
+
# Need to do this so we can work with staging instances without having to
|
|
71
|
+
# checkin instance file between create and bootstrap, as well as during a deploy
|
|
72
|
+
if fetch(:push_instance_config, false)
|
|
73
|
+
push_files = [rubber_instances.file] + rubber_cfg.environment.config_files
|
|
74
|
+
push_files.each do |file|
|
|
75
|
+
dest_file = file.sub(/^#{RUBBER_ROOT}\/?/, '')
|
|
76
|
+
put(File.read(file), File.join(path, dest_file), :mode => "+r")
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# if the user has defined a secret config file, then push it into RUBBER_ROOT/config/rubber
|
|
81
|
+
secret = rubber_cfg.environment.config_secret
|
|
82
|
+
if secret && File.exist?(secret)
|
|
83
|
+
base = rubber_cfg.environment.config_root.sub(/^#{RUBBER_ROOT}\/?/, '')
|
|
84
|
+
put(File.read(secret), File.join(path, base, File.basename(secret)), :mode => "+r")
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
rsudo "cd #{path} && #{extra_env} rake rubber:config"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
namespace :rubber do
|
|
2
|
+
|
|
3
|
+
desc <<-DESC
|
|
4
|
+
Create a new EC2 instance with the given ALIAS and ROLES
|
|
5
|
+
DESC
|
|
6
|
+
required_task :create do
|
|
7
|
+
instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
|
|
8
|
+
|
|
9
|
+
env = rubber_cfg.environment.bind(nil, instance_alias)
|
|
10
|
+
default_roles = env.instance_roles
|
|
11
|
+
r = get_env("ROLES", "Instance roles (e.g. web,app,db:primary=true)", true, default_roles)
|
|
12
|
+
|
|
13
|
+
create_spot_instance = ENV.delete("SPOT_INSTANCE") || env.cloud_providers[env.cloud_provider].spot_instance
|
|
14
|
+
|
|
15
|
+
if r == '*'
|
|
16
|
+
instance_roles = rubber_cfg.environment.known_roles
|
|
17
|
+
instance_roles = instance_roles.collect {|role| role == "db" ? "db:primary=true" : role }
|
|
18
|
+
else
|
|
19
|
+
instance_roles = r.split(",")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
ir = []
|
|
23
|
+
instance_roles.each do |r|
|
|
24
|
+
role = Rubber::Configuration::RoleItem.parse(r)
|
|
25
|
+
|
|
26
|
+
# If user doesn't setup a primary db, then be nice and do it
|
|
27
|
+
if role.name == "db" && role.options["primary"] == nil && rubber_instances.for_role("db").size == 0
|
|
28
|
+
value = Capistrano::CLI.ui.ask("You do not have a primary db role, should #{instance_alias} be it [y/n]?: ")
|
|
29
|
+
role.options["primary"] = true if value =~ /^y/
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
ir << role
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Add in roles that the given set of roles depends on
|
|
36
|
+
ir = Rubber::Configuration::RoleItem.expand_role_dependencies(ir, get_role_dependencies)
|
|
37
|
+
|
|
38
|
+
create_instance(instance_alias, ir, create_spot_instance)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
desc <<-DESC
|
|
42
|
+
Refresh the host data for a EC2 instance with the given ALIAS.
|
|
43
|
+
This is useful to run when rubber:create fails after instance creation
|
|
44
|
+
DESC
|
|
45
|
+
required_task :refresh do
|
|
46
|
+
instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
|
|
47
|
+
ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
|
|
48
|
+
refresh_instance(instance_alias)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
desc <<-DESC
|
|
52
|
+
Destroy the EC2 instance for the given ALIAS
|
|
53
|
+
DESC
|
|
54
|
+
required_task :destroy do
|
|
55
|
+
instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
|
|
56
|
+
ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
|
|
57
|
+
destroy_instance(instance_alias)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
desc <<-DESC
|
|
61
|
+
Destroy ALL the EC2 instances for the current env
|
|
62
|
+
DESC
|
|
63
|
+
required_task :destroy_all do
|
|
64
|
+
rubber_instances.each do |ic|
|
|
65
|
+
destroy_instance(ic.name)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
desc <<-DESC
|
|
70
|
+
Reboot the EC2 instance for the give ALIAS
|
|
71
|
+
DESC
|
|
72
|
+
required_task :reboot do
|
|
73
|
+
instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
|
|
74
|
+
ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
|
|
75
|
+
reboot_instance(instance_alias)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
desc <<-DESC
|
|
79
|
+
Stop the EC2 instance for the give ALIAS
|
|
80
|
+
DESC
|
|
81
|
+
required_task :stop do
|
|
82
|
+
instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
|
|
83
|
+
ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
|
|
84
|
+
stop_instance(instance_alias)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
desc <<-DESC
|
|
88
|
+
Start the EC2 instance for the give ALIAS
|
|
89
|
+
DESC
|
|
90
|
+
required_task :start do
|
|
91
|
+
instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
|
|
92
|
+
ENV.delete('ROLES') # so we don't get an error if people leave ROLES in env from :create CLI
|
|
93
|
+
start_instance(instance_alias)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
desc <<-DESC
|
|
97
|
+
Adds the given ROLES to the instance named ALIAS
|
|
98
|
+
DESC
|
|
99
|
+
required_task :add_role do
|
|
100
|
+
instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
|
|
101
|
+
r = get_env('ROLES', "Instance roles (e.g. web,app,db:primary=true)", true)
|
|
102
|
+
|
|
103
|
+
instance_roles = r.split(",")
|
|
104
|
+
|
|
105
|
+
ir = []
|
|
106
|
+
instance_roles.each do |r|
|
|
107
|
+
role = Rubber::Configuration::RoleItem.parse(r)
|
|
108
|
+
ir << role
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Add in roles that the given set of roles depends on
|
|
112
|
+
ir = Rubber::Configuration::RoleItem.expand_role_dependencies(ir, get_role_dependencies)
|
|
113
|
+
|
|
114
|
+
instance = rubber_instances[instance_alias]
|
|
115
|
+
fatal "Instance does not exist: #{instance_alias}" unless instance
|
|
116
|
+
|
|
117
|
+
instance.roles = (instance.roles + ir).uniq
|
|
118
|
+
rubber_instances.save()
|
|
119
|
+
logger.info "Roles for #{instance_alias} are now:"
|
|
120
|
+
logger.info instance.role_names.sort.join("\n")
|
|
121
|
+
logger.info ''
|
|
122
|
+
logger.info "Run 'cap rubber:bootstrap' if done adding roles"
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
desc <<-DESC
|
|
126
|
+
Removes the given ROLES from the instance named ALIAS
|
|
127
|
+
DESC
|
|
128
|
+
required_task :remove_role do
|
|
129
|
+
instance_alias = get_env('ALIAS', "Instance alias (e.g. web01)", true)
|
|
130
|
+
r = get_env('ROLES', "Instance roles (e.g. web,app,db:primary=true)", true)
|
|
131
|
+
|
|
132
|
+
instance_roles = r.split(",")
|
|
133
|
+
|
|
134
|
+
ir = []
|
|
135
|
+
instance_roles.each do |r|
|
|
136
|
+
role = Rubber::Configuration::RoleItem.parse(r)
|
|
137
|
+
ir << role
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
instance = rubber_instances[instance_alias]
|
|
141
|
+
fatal "Instance does not exist: #{instance_alias}" unless instance
|
|
142
|
+
|
|
143
|
+
instance.roles = (instance.roles - ir).uniq
|
|
144
|
+
rubber_instances.save()
|
|
145
|
+
logger.info "Roles for #{instance_alias} are now:"
|
|
146
|
+
logger.info instance.role_names.sort.join("\n")
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
desc <<-DESC
|
|
150
|
+
List all your EC2 instances
|
|
151
|
+
DESC
|
|
152
|
+
required_task :describe do
|
|
153
|
+
results = []
|
|
154
|
+
format = "%-10s %-10s %-10s %-15s %-30s"
|
|
155
|
+
results << format % %w[InstanceID State Zone IP Alias\ (*=unknown)]
|
|
156
|
+
|
|
157
|
+
instances = cloud.describe_instances()
|
|
158
|
+
instances.each do |instance|
|
|
159
|
+
local_alias = find_alias(instance[:external_ip], instance[:id], instance[:state] == 'running')
|
|
160
|
+
results << format % [instance[:id], instance[:state], instance[:zone], instance[:external_ip] || "NoIP", local_alias || "Unknown"]
|
|
161
|
+
end
|
|
162
|
+
results.each {|r| logger.info r}
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
desc <<-DESC
|
|
166
|
+
Describes the availability zones
|
|
167
|
+
DESC
|
|
168
|
+
required_task :describe_zones do
|
|
169
|
+
results = []
|
|
170
|
+
format = "%-20s %-15s"
|
|
171
|
+
results << format % %w[Name State]
|
|
172
|
+
|
|
173
|
+
zones = cloud.describe_availability_zones()
|
|
174
|
+
zones.each do |zone|
|
|
175
|
+
results << format % [zone[:name], zone[:state]]
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
results.each {|r| logger.info r}
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
set :print_ip_command, "ifconfig eth0 | awk 'NR==2 {print $2}' | awk -F: '{print $2}'"
|
|
183
|
+
|
|
184
|
+
# Creates a new ec2 instance with the given alias and roles
|
|
185
|
+
# Configures aliases (/etc/hosts) on local and remote machines
|
|
186
|
+
def create_instance(instance_alias, instance_roles, create_spot_instance=false)
|
|
187
|
+
fatal "Instance already exists: #{instance_alias}" if rubber_instances[instance_alias]
|
|
188
|
+
|
|
189
|
+
role_names = instance_roles.collect{|x| x.name}
|
|
190
|
+
env = rubber_cfg.environment.bind(role_names, instance_alias)
|
|
191
|
+
|
|
192
|
+
# We need to use security_groups during create, so create them up front
|
|
193
|
+
setup_security_groups(instance_alias, role_names)
|
|
194
|
+
security_groups = get_assigned_security_groups(instance_alias, role_names)
|
|
195
|
+
|
|
196
|
+
ami = env.cloud_providers[env.cloud_provider].image_id
|
|
197
|
+
ami_type = env.cloud_providers[env.cloud_provider].image_type
|
|
198
|
+
availability_zone = env.availability_zone
|
|
199
|
+
|
|
200
|
+
if create_spot_instance
|
|
201
|
+
spot_price = env.cloud_providers[env.cloud_provider].spot_price.to_s
|
|
202
|
+
|
|
203
|
+
logger.info "Creating spot instance request for instance #{ami}/#{ami_type}/#{security_groups.join(',') rescue 'Default'}/#{availability_zone || 'Default'}"
|
|
204
|
+
request_id = cloud.create_spot_instance_request(spot_price, ami, ami_type, security_groups, availability_zone)
|
|
205
|
+
|
|
206
|
+
print "Waiting for spot instance request to be fulfilled"
|
|
207
|
+
max_wait_time = env.cloud_providers[env.cloud_provider].spot_instance_request_timeout || (1.0 / 0) # Use the specified timeout value or default to infinite.
|
|
208
|
+
instance_id = nil
|
|
209
|
+
while instance_id.nil? do
|
|
210
|
+
print "."
|
|
211
|
+
sleep 2
|
|
212
|
+
max_wait_time -= 2
|
|
213
|
+
|
|
214
|
+
request = cloud.describe_spot_instance_requests(request_id).first
|
|
215
|
+
instance_id = request[:instance_id]
|
|
216
|
+
|
|
217
|
+
if max_wait_time < 0 && instance_id.nil?
|
|
218
|
+
cloud.destroy_spot_instance_request(request[:id])
|
|
219
|
+
|
|
220
|
+
print "\n"
|
|
221
|
+
print "Failed to fulfill spot instance in the time specified. Falling back to on-demand instance creation."
|
|
222
|
+
break
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
print "\n"
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
if !create_spot_instance || (create_spot_instance && max_wait_time < 0)
|
|
230
|
+
logger.info "Creating instance #{ami}/#{ami_type}/#{security_groups.join(',') rescue 'Default'}/#{availability_zone || 'Default'}"
|
|
231
|
+
instance_id = cloud.create_instance(ami, ami_type, security_groups, availability_zone)
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
logger.info "Instance #{instance_id} created"
|
|
235
|
+
|
|
236
|
+
instance_item = Rubber::Configuration::InstanceItem.new(instance_alias, env.domain, instance_roles, instance_id, security_groups)
|
|
237
|
+
instance_item.spot_instance_request_id = request_id if create_spot_instance
|
|
238
|
+
rubber_instances.add(instance_item)
|
|
239
|
+
rubber_instances.save()
|
|
240
|
+
|
|
241
|
+
# Sometimes tag creation will fail, indicating that the instance doesn't exist yet even though it does. It seems to
|
|
242
|
+
# be a propagation delay on Amazon's end, so the best we can do is wait and try again.
|
|
243
|
+
begin
|
|
244
|
+
Rubber::Tag::update_instance_tags(instance_alias)
|
|
245
|
+
rescue Exception
|
|
246
|
+
sleep 0.5
|
|
247
|
+
retry
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
print "Waiting for instance to start"
|
|
251
|
+
while true do
|
|
252
|
+
print "."
|
|
253
|
+
sleep 2
|
|
254
|
+
|
|
255
|
+
break if refresh_instance(instance_alias)
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# Refreshes a ec2 instance with the given alias
|
|
260
|
+
# Configures aliases (/etc/hosts) on local and remote machines
|
|
261
|
+
def refresh_instance(instance_alias)
|
|
262
|
+
instance_item = rubber_instances[instance_alias]
|
|
263
|
+
|
|
264
|
+
fatal "Instance does not exist: #{instance_alias}" if ! instance_item
|
|
265
|
+
|
|
266
|
+
env = rubber_cfg.environment.bind(instance_item.role_names, instance_alias)
|
|
267
|
+
|
|
268
|
+
instance = cloud.describe_instances(instance_item.instance_id).first rescue {}
|
|
269
|
+
|
|
270
|
+
if instance[:state] == "running"
|
|
271
|
+
print "\n"
|
|
272
|
+
logger.info "Instance running, fetching hostname/ip data"
|
|
273
|
+
instance_item.external_host = instance[:external_host]
|
|
274
|
+
instance_item.external_ip = instance[:external_ip]
|
|
275
|
+
instance_item.internal_host = instance[:internal_host]
|
|
276
|
+
instance_item.internal_ip = instance[:internal_ip]
|
|
277
|
+
instance_item.zone = instance[:zone]
|
|
278
|
+
instance_item.platform = instance[:platform]
|
|
279
|
+
instance_item.root_device_type = instance[:root_device_type]
|
|
280
|
+
rubber_instances.save()
|
|
281
|
+
|
|
282
|
+
unless instance_item.windows?
|
|
283
|
+
# weird cap/netssh bug, sometimes just hangs forever on initial connect, so force a timeout
|
|
284
|
+
begin
|
|
285
|
+
Timeout::timeout(30) do
|
|
286
|
+
# turn back on root ssh access if we are using root as the capistrano user for connecting
|
|
287
|
+
enable_root_ssh(instance_item.external_ip, fetch(:initial_ssh_user, 'ubuntu')) if user == 'root'
|
|
288
|
+
# force a connection so if above isn't enabled we still timeout if initial connection hangs
|
|
289
|
+
direct_connection(instance_item.external_ip) do
|
|
290
|
+
run "echo"
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
rescue Timeout::Error
|
|
294
|
+
logger.info "timeout in initial connect, retrying"
|
|
295
|
+
retry
|
|
296
|
+
end
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
# setup amazon elastic ips if configured to do so
|
|
300
|
+
setup_static_ips
|
|
301
|
+
|
|
302
|
+
# Need to setup aliases so ssh doesn't give us errors when we
|
|
303
|
+
# later try to connect to same ip but using alias
|
|
304
|
+
setup_local_aliases
|
|
305
|
+
|
|
306
|
+
# re-load the roles since we may have just defined new ones
|
|
307
|
+
load_roles() unless env.disable_auto_roles
|
|
308
|
+
|
|
309
|
+
rubber_instances.save()
|
|
310
|
+
|
|
311
|
+
# Add the aliases for this instance to all other hosts
|
|
312
|
+
setup_remote_aliases
|
|
313
|
+
setup_dns_aliases
|
|
314
|
+
|
|
315
|
+
return true
|
|
316
|
+
end
|
|
317
|
+
return false
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
# Destroys the given ec2 instance
|
|
322
|
+
def destroy_instance(instance_alias)
|
|
323
|
+
instance_item = rubber_instances[instance_alias]
|
|
324
|
+
fatal "Instance does not exist: #{instance_alias}" if ! instance_item
|
|
325
|
+
|
|
326
|
+
env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
|
|
327
|
+
|
|
328
|
+
value = Capistrano::CLI.ui.ask("About to DESTROY #{instance_alias} (#{instance_item.instance_id}) in mode #{RUBBER_ENV}. Are you SURE [yes/NO]?: ")
|
|
329
|
+
fatal("Exiting", 0) if value != "yes"
|
|
330
|
+
|
|
331
|
+
if instance_item.static_ip
|
|
332
|
+
value = Capistrano::CLI.ui.ask("Instance has a static ip, do you want to release it? [y/N]?: ")
|
|
333
|
+
destroy_static_ip(instance_item.static_ip) if value =~ /^y/
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
if instance_item.volumes
|
|
337
|
+
value = Capistrano::CLI.ui.ask("Instance has persistent volumes, do you want to destroy them? [y/N]?: ")
|
|
338
|
+
if value =~ /^y/
|
|
339
|
+
instance_item.volumes.clone.each do |volume_id|
|
|
340
|
+
destroy_volume(volume_id)
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
logger.info "Destroying instance alias=#{instance_alias}, instance_id=#{instance_item.instance_id}"
|
|
346
|
+
|
|
347
|
+
cloud.destroy_instance(instance_item.instance_id)
|
|
348
|
+
|
|
349
|
+
rubber_instances.remove(instance_alias)
|
|
350
|
+
rubber_instances.save()
|
|
351
|
+
|
|
352
|
+
# re-load the roles since we just removed some and setup_remote_aliases
|
|
353
|
+
# shouldn't hit removed ones
|
|
354
|
+
load_roles() unless env.disable_auto_roles
|
|
355
|
+
|
|
356
|
+
setup_aliases
|
|
357
|
+
destroy_dyndns(instance_item)
|
|
358
|
+
cleanup_known_hosts(instance_item) unless env.disable_known_hosts_cleanup
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
# Reboots the given ec2 instance
|
|
362
|
+
def reboot_instance(instance_alias)
|
|
363
|
+
instance_item = rubber_instances[instance_alias]
|
|
364
|
+
fatal "Instance does not exist: #{instance_alias}" if ! instance_item
|
|
365
|
+
|
|
366
|
+
env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
|
|
367
|
+
|
|
368
|
+
value = Capistrano::CLI.ui.ask("About to REBOOT #{instance_alias} (#{instance_item.instance_id}) in mode #{RUBBER_ENV}. Are you SURE [yes/NO]?: ")
|
|
369
|
+
fatal("Exiting", 0) if value != "yes"
|
|
370
|
+
|
|
371
|
+
logger.info "Rebooting instance alias=#{instance_alias}, instance_id=#{instance_item.instance_id}"
|
|
372
|
+
|
|
373
|
+
cloud.reboot_instance(instance_item.instance_id)
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
# Stops the given ec2 instance. Note that this operation only works for instances that use an EBS volume for the root
|
|
377
|
+
# device and that are not spot instances.
|
|
378
|
+
def stop_instance(instance_alias)
|
|
379
|
+
instance_item = rubber_instances[instance_alias]
|
|
380
|
+
fatal "Instance does not exist: #{instance_alias}" if ! instance_item
|
|
381
|
+
fatal "Cannot stop spot instances!" if ! instance_item.spot_instance_request_id.nil?
|
|
382
|
+
fatal "Cannot stop instances with instance-store root device!" if (instance_item.root_device_type != 'ebs')
|
|
383
|
+
|
|
384
|
+
env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
|
|
385
|
+
|
|
386
|
+
value = Capistrano::CLI.ui.ask("About to STOP #{instance_alias} (#{instance_item.instance_id}) in mode #{RUBBER_ENV}. Are you SURE [yes/NO]?: ")
|
|
387
|
+
fatal("Exiting", 0) if value != "yes"
|
|
388
|
+
|
|
389
|
+
logger.info "Stopping instance alias=#{instance_alias}, instance_id=#{instance_item.instance_id}"
|
|
390
|
+
|
|
391
|
+
cloud.stop_instance(instance_item.instance_id)
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
# Starts the given ec2 instance. Note that this operation only works for instances that use an EBS volume for the root
|
|
395
|
+
# device, that are not spot instances, and that are already stopped.
|
|
396
|
+
def start_instance(instance_alias)
|
|
397
|
+
instance_item = rubber_instances[instance_alias]
|
|
398
|
+
fatal "Instance does not exist: #{instance_alias}" if ! instance_item
|
|
399
|
+
fatal "Cannot start spot instances!" if ! instance_item.spot_instance_request_id.nil?
|
|
400
|
+
fatal "Cannot start instances with instance-store root device!" if (instance_item.root_device_type != 'ebs')
|
|
401
|
+
|
|
402
|
+
env = rubber_cfg.environment.bind(instance_item.role_names, instance_item.name)
|
|
403
|
+
|
|
404
|
+
value = Capistrano::CLI.ui.ask("About to START #{instance_alias} (#{instance_item.instance_id}) in mode #{RUBBER_ENV}. Are you SURE [yes/NO]?: ")
|
|
405
|
+
fatal("Exiting", 0) if value != "yes"
|
|
406
|
+
|
|
407
|
+
logger.info "Starting instance alias=#{instance_alias}, instance_id=#{instance_item.instance_id}"
|
|
408
|
+
|
|
409
|
+
cloud.start_instance(instance_item.instance_id)
|
|
410
|
+
|
|
411
|
+
# Re-starting an instance will almost certainly give it a new set of IPs and DNS entries, so refresh the values.
|
|
412
|
+
print "Waiting for instance to start"
|
|
413
|
+
while true do
|
|
414
|
+
print "."
|
|
415
|
+
sleep 2
|
|
416
|
+
|
|
417
|
+
break if refresh_instance(instance_alias)
|
|
418
|
+
end
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
# delete from ~/.ssh/known_hosts all lines that begin with ec2- or instance_alias
|
|
422
|
+
def cleanup_known_hosts(instance_item)
|
|
423
|
+
logger.info "Cleaning ~/.ssh/known_hosts"
|
|
424
|
+
File.open(File.expand_path('~/.ssh/known_hosts'), 'r+') do |f|
|
|
425
|
+
out = ""
|
|
426
|
+
f.each do |line|
|
|
427
|
+
line = case line
|
|
428
|
+
when /^ec2-/; ''
|
|
429
|
+
when /#{instance_item.full_name}/; ''
|
|
430
|
+
when /#{instance_item.external_host}/; ''
|
|
431
|
+
when /#{instance_item.external_ip}/; ''
|
|
432
|
+
else line;
|
|
433
|
+
end
|
|
434
|
+
out << line
|
|
435
|
+
end
|
|
436
|
+
f.pos = 0
|
|
437
|
+
f.print out
|
|
438
|
+
f.truncate(f.pos)
|
|
439
|
+
end
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
def get_role_dependencies
|
|
443
|
+
# convert string format of role_dependencies from rubber.yml into
|
|
444
|
+
# objects for use by expand_role_dependencies
|
|
445
|
+
deps = {}
|
|
446
|
+
rubber_env.role_dependencies.each do |k, v|
|
|
447
|
+
rhs = Array(v).collect {|r| Rubber::Configuration::RoleItem.parse(r)}
|
|
448
|
+
deps[Rubber::Configuration::RoleItem.parse(k)] = rhs
|
|
449
|
+
end if rubber_env.role_dependencies
|
|
450
|
+
return deps
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
end
|