Class: Gofer::Cluster
- Inherits:
-
Object
- Object
- Gofer::Cluster
- Defined in:
- lib/gofer/cluster.rb
Overview
A collection of Gofer::Host instances that can run commands simultaneously
Gofer::Cluster supports most of the methods of Gofer::Host. Commands will be run simultaneously, with up to max_concurrency
commands running at the same time. If max_concurrency
is unset all hosts in the cluster will receive commands at the same time.
Results from commands run are returned in a Hash, keyed by host.
Instance Attribute Summary collapse
-
#hosts ⇒ Object
readonly
Hosts in this cluster.
-
#max_concurrency ⇒ Object
Maximum number of commands to run simultaneously.
Instance Method Summary collapse
-
#<<(other) ⇒ Object
Add a Gofer::Host or the hosts belonging to a Gofer::Cluster to this instance.
-
#concurrency ⇒ Object
Currency effective concurrency, either
max_concurrency
or the number of Gofer::Host instances we contain. -
#directory?(*args) ⇒ Boolean
Check if a path is a directory on each host in the cluster.
-
#exist?(*args) ⇒ Boolean
Check if a path exists on each host in the cluster.
-
#initialize(parties = [], opts = {}) ⇒ Cluster
constructor
Create a new cluster of Gofer::Host connections.
-
#ls(*args) ⇒ Object
List a directory on each host in the cluster.
-
#read(*args) ⇒ Object
Read a file on each host in the cluster.
-
#run(*args) ⇒ Object
Run a command on this Gofer::Cluster.
-
#upload(*args) ⇒ Object
Upload to each host in the cluster.
-
#write(*args) ⇒ Object
Write a file to each host in the cluster.
Constructor Details
#initialize(parties = [], opts = {}) ⇒ Cluster
Create a new cluster of Gofer::Host connections.
parties
-
Gofer::Host or other Gofer::Cluster instances
Options:
max_concurrency
-
Maximum number of commands to run simultaneously
27 28 29 30 31 32 |
# File 'lib/gofer/cluster.rb', line 27 def initialize(parties=[], opts={}) @hosts = [] @max_concurrency = opts.delete(:max_concurrency) parties.each { |i| self << i } end |
Instance Attribute Details
#hosts ⇒ Object (readonly)
Hosts in this cluster
15 16 17 |
# File 'lib/gofer/cluster.rb', line 15 def hosts @hosts end |
#max_concurrency ⇒ Object
Maximum number of commands to run simultaneously
18 19 20 |
# File 'lib/gofer/cluster.rb', line 18 def max_concurrency @max_concurrency end |
Instance Method Details
#<<(other) ⇒ Object
Add a Gofer::Host or the hosts belonging to a Gofer::Cluster to this instance.
41 42 43 44 45 46 47 48 |
# File 'lib/gofer/cluster.rb', line 41 def <<(other) case other when Cluster other.hosts.each { |host| self << host } when Host @hosts << other end end |
#concurrency ⇒ Object
Currency effective concurrency, either max_concurrency
or the number of Gofer::Host instances we contain.
36 37 38 |
# File 'lib/gofer/cluster.rb', line 36 def concurrency max_concurrency.nil? ? hosts.length : [max_concurrency, hosts.length].min end |
#directory?(*args) ⇒ Boolean
Check if a path is a directory on each host in the cluster. See Gofer::Host#directory?
61 62 63 |
# File 'lib/gofer/cluster.rb', line 61 def directory? *args threaded(:directory?, *args) end |
#exist?(*args) ⇒ Boolean
Check if a path exists on each host in the cluster. See Gofer::Host#exist?
56 57 58 |
# File 'lib/gofer/cluster.rb', line 56 def exist? *args threaded(:exist?, *args) end |
#ls(*args) ⇒ Object
List a directory on each host in the cluster. See Gofer::Host#ls
66 67 68 |
# File 'lib/gofer/cluster.rb', line 66 def ls *args threaded(:ls, *args) end |
#read(*args) ⇒ Object
Read a file on each host in the cluster. See Gofer::Host#read
76 77 78 |
# File 'lib/gofer/cluster.rb', line 76 def read *args threaded(:read, *args) end |
#run(*args) ⇒ Object
Run a command on this Gofer::Cluster. See Gofer::Host#run
51 52 53 |
# File 'lib/gofer/cluster.rb', line 51 def run *args threaded(:run, *args) end |
#upload(*args) ⇒ Object
Upload to each host in the cluster. See Gofer::Host#ls
71 72 73 |
# File 'lib/gofer/cluster.rb', line 71 def upload *args threaded(:upload, *args) end |
#write(*args) ⇒ Object
Write a file to each host in the cluster. See Gofer::Host#write
81 82 83 |
# File 'lib/gofer/cluster.rb', line 81 def write *args threaded(:write, *args) end |