class Fezzik::HostTask

Attributes

roles[RW]
weave_options[RW]

Public Class Methods

new(task_name, app) click to toggle source
Calls superclass method
# File lib/fezzik/host_task.rb, line 5
def initialize(task_name, app)
  super
  @host_actions = []
  @roles = []
  @weave_options = {}
end

Public Instance Methods

enhance(deps = nil, &block) click to toggle source
Calls superclass method
# File lib/fezzik/host_task.rb, line 12
def enhance(deps = nil, &block)
  @host_actions << block if block_given?
  super(deps)
end
execute(args = nil) click to toggle source
# File lib/fezzik/host_task.rb, line 17
def execute(args = nil)
  return if Rake.application.options.dryrun

  merged_weave_options = Fezzik.default_weave_options.merge(@weave_options).merge(:args => [self, args])

  if @roles.empty?
    hosts = Fezzik.get(:domain).map { |domain| "#{Fezzik.get(:user)}@#{domain}" }
    @@connection_pool ||= Weave::ConnectionPool.new
    @host_actions.each do |action|
      begin
        @@connection_pool.execute_with(hosts, merged_weave_options, &action)
      rescue Weave::Error => e
        STDERR.puts "Error running command in HostTask '#{@name}':"
        abort e.message
      end
    end
  else
    @roles.each do |role|
      Fezzik.with_role(role) do
        hosts = Fezzik.get(:domain).map { |domain| "#{Fezzik.get(:user)}@#{domain}" }
        @@role_connection_pools ||= {}
        @@role_connection_pools[role] ||= Weave::ConnectionPool.new
        @host_actions.each do |action|
          begin
            @@role_connection_pools[role].execute_with(hosts, merged_weave_options, &action)
          rescue Weave::Error => e
            STDERR.puts "Error running command in HostTask '#{@name}' with role '#{role}':"
            abort e.message
          end
        end
      end
    end
  end
end