# Rakefile require ‘rubygems’ require ‘bundler’ Bundler.require if defined?(Bundler)
namespace :shell do
desc "Connecting to staging console" task :staging do regions = YAML.load_file('config/opsworks.yml')['staging'] ip = get_ip(regions) path = '/srv/www/' + get_name(regions) + '/current' run_shell(ip, path) end desc "Connecting to production console" task :production do regions = YAML.load_file('config/opsworks.yml')['production'] ip = get_ip(regions) path = '/srv/www/' + get_name(regions) + '/current' run_shell(ip, path) end def get_ip(regions) regions.each do |region, value| client = Aws::OpsWorks::Client.new(region: region) client.describe_instances({layer_id: value['layer_id']}).each do |page| page.instances.each do |instance| return instance.public_ip if instance.status == "online" end break end break end raise "Could not find online instance" end def get_name(regions) regions.each do |region, value| client = Aws::OpsWorks::Client.new(region: region) return client.describe_apps({app_ids: [value['app_id']]})[0][0].shortname end end def run_shell(server, path) server = ENV['AWS_USERNAME'] + "@" + server if ENV['AWS_USERNAME'] exec %Q(ssh #{server}) if server && path end
end