# File lib/capistrano/configuration/servers.rb, line 44
      def find_servers(options={})
        return [] if options.key?(:hosts) && (options[:hosts].nil? || [] == options[:hosts])
        return [] if options.key?(:roles) && (options[:roles].nil? || [] == options[:roles])
        
        hosts  = server_list_from(ENV['HOSTS'] || options[:hosts])
        
        if hosts.any?
          if options[:skip_hostfilter]
            hosts.uniq
          else
            filter_server_list(hosts.uniq)
          end
        else
          roles = role_list_from(ENV['ROLES'] || options[:roles] || self.roles.keys)
          roles = roles & Array(options[:roles]) if preserve_roles && !options[:roles].nil?

          only   = options[:only] || {}
          except = options[:except] || {}
          
          # If we don't have a def for a role it means its bogus, skip it so higher level can handle
          servers = roles.inject([]) { |list, role| list.concat(self.roles[role] || []) }
          servers = servers.select { |server| only.all? { |key,value| server.options[key] == value } }
          servers = servers.reject { |server| except.any? { |key,value| server.options[key] == value } }

          if options[:skip_hostfilter]
            servers.uniq
          else
            filter_server_list(servers.uniq)
          end
        end
      end