class EY::Tools::CLI::Base

Public Class Methods

start(given_args=ARGV, config={}) click to toggle source
Calls superclass method
# File lib/ey_tools/base.rb, line 21
def self.start(given_args=ARGV, config={})
  Thor::Base.shell = EY::CLI::UI
  ui = EY::CLI::UI.new
  super(given_args, {:shell => ui}.merge(config))
rescue EY::Error, EY::CloudClient::Error => e
  ui.print_exception(e)
  exit 1
rescue Interrupt => e
  puts
  ui.print_exception(e)
  ui.say("Quitting...")
  raise
rescue SystemExit, Errno::EPIPE
  # don't print a message for safe exits
  raise
rescue Exception => e
  ui.print_exception(e)
  raise
end

Public Instance Methods

ssh_host_filter(opts) click to toggle source
# File lib/ey_tools/base.rb, line 42
def ssh_host_filter(opts)
  return lambda {|instance| true }                                                if opts[:all]
  return lambda {|instance| %w(solo app app_master    ).include?(instance.role) } if opts[:app_servers]
  return lambda {|instance| %w(solo db_master db_slave).include?(instance.role) } if opts[:db_servers ]
  return lambda {|instance| %w(solo db_master         ).include?(instance.role) } if opts[:db_master  ]
  return lambda {|instance| %w(db_slave               ).include?(instance.role) } if opts[:db_slaves  ]
  return lambda {|instance| %w(util).include?(instance.role) && opts[:utilities].include?(instance.name) } if opts[:utilities]
  return lambda {|instance| %w(solo app_master        ).include?(instance.role) }
end
ssh_hosts(opts, environment) click to toggle source
# File lib/ey_tools/base.rb, line 52
def ssh_hosts(opts, environment)
  if opts[:utilities] and not opts[:utilities].respond_to?(:include?)
    includes_everything = []
    class << includes_everything
      def include?(*) true end
    end
    filter = ssh_host_filter(opts.merge(:utilities => includes_everything))
  else
    filter = ssh_host_filter(opts)
  end

  instances = environment.instances.select {|instance| filter[instance] }
  raise NoInstancesError.new(environment.name) if instances.empty?
  return instances.map { |instance| instance.public_hostname }
end