Sha256: fbef208732775863fed3a920c447dd16def777ecfded4845d81d504081907659

Contents?: true

Size: 1.17 KB

Versions: 3

Compression:

Stored size: 1.17 KB

Contents

module SSHKit

  module Runner

    class Abstract

      attr_reader :hosts, :block

      def initialize(hosts, &block)
        @hosts       = Array(hosts)
        @block       = block
      end

      private

      def backend(host, &block)
        SSHKit.config.backend.new(host, &block)
      end

    end

    class Parallel < Abstract
      def execute
        threads = []
        hosts.each do |host|
          threads << Thread.new(host) do |h|
            backend(host, &block).run
          end
        end
        threads.map(&:join)
      end
    end

    class Sequential < Abstract
      attr_writer :wait_interval
      def execute
        hosts.each do |host|
          backend(host, &block).run
          sleep wait_interval
        end
      end
      private
      def wait_interval
        @wait_interval ||= 2
      end
    end

    class Group < Sequential
      attr_writer :group_size
      def execute
        hosts.each_slice(group_size).collect do |group_hosts|
          Parallel.new(group_hosts, &block).execute
          sleep wait_interval
        end.flatten
      end
      private
      def group_size
        @group_size ||= 2
      end
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sshkit-0.0.6 lib/sshkit/runners/parallel.rb
sshkit-0.0.5 lib/sshkit/runners/parallel.rb
sshkit-0.0.4 lib/sshkit/runners/parallel.rb