Sha256: 62785818360219adf873c75b51ba39bc792904d96309ec09700406b321349855

Contents?: true

Size: 1.18 KB

Versions: 25

Compression:

Stored size: 1.18 KB

Contents

require 'thread'

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

25 entries across 25 versions & 1 rubygems

Version Path
sshkit-0.0.34 lib/sshkit/runners/parallel.rb
sshkit-0.0.33 lib/sshkit/runners/parallel.rb
sshkit-0.0.32 lib/sshkit/runners/parallel.rb
sshkit-0.0.31 lib/sshkit/runners/parallel.rb
sshkit-0.0.29 lib/sshkit/runners/parallel.rb
sshkit-0.0.28 lib/sshkit/runners/parallel.rb
sshkit-0.0.27 lib/sshkit/runners/parallel.rb
sshkit-0.0.26 lib/sshkit/runners/parallel.rb
sshkit-0.0.25 lib/sshkit/runners/parallel.rb
sshkit-0.0.24 lib/sshkit/runners/parallel.rb
sshkit-0.0.23 lib/sshkit/runners/parallel.rb
sshkit-0.0.22 lib/sshkit/runners/parallel.rb
sshkit-0.0.21 lib/sshkit/runners/parallel.rb
sshkit-0.0.19 lib/sshkit/runners/parallel.rb
sshkit-0.0.18 lib/sshkit/runners/parallel.rb
sshkit-0.0.16 lib/sshkit/runners/parallel.rb
sshkit-0.0.15 lib/sshkit/runners/parallel.rb
sshkit-0.0.14 lib/sshkit/runners/parallel.rb
sshkit-0.0.13 lib/sshkit/runners/parallel.rb
sshkit-0.0.12 lib/sshkit/runners/parallel.rb