summaryrefslogtreecommitdiff
path: root/pkg/net-ssh-multi-1.1/lib/net/ssh/multi.rb
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/net-ssh-multi-1.1/lib/net/ssh/multi.rb')
-rw-r--r--pkg/net-ssh-multi-1.1/lib/net/ssh/multi.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/pkg/net-ssh-multi-1.1/lib/net/ssh/multi.rb b/pkg/net-ssh-multi-1.1/lib/net/ssh/multi.rb
new file mode 100644
index 0000000..1664d0e
--- /dev/null
+++ b/pkg/net-ssh-multi-1.1/lib/net/ssh/multi.rb
@@ -0,0 +1,71 @@
+require 'net/ssh/multi/session'
+
+module Net; module SSH
+ # Net::SSH::Multi is a library for controlling multiple Net::SSH
+ # connections via a single interface. It exposes an API similar to that of
+ # Net::SSH::Connection::Session and Net::SSH::Connection::Channel, making it
+ # simpler to adapt programs designed for single connections to be used with
+ # multiple connections.
+ #
+ # This library is particularly useful for automating repetitive tasks that
+ # must be performed on multiple machines. It executes the commands in
+ # parallel, and allows commands to be executed on subsets of servers
+ # (defined by groups).
+ #
+ # require 'net/ssh/multi'
+ #
+ # Net::SSH::Multi.start do |session|
+ # # access servers via a gateway
+ # session.via 'gateway', 'gateway-user'
+ #
+ # # define the servers we want to use
+ # session.use 'user1@host1'
+ # session.use 'user2@host2'
+ #
+ # # define servers in groups for more granular access
+ # session.group :app do
+ # session.use 'user@app1'
+ # session.use 'user@app2'
+ # end
+ #
+ # # execute commands on all servers
+ # session.exec "uptime"
+ #
+ # # execute commands on a subset of servers
+ # session.with(:app).exec "hostname"
+ #
+ # # run the aggregated event loop
+ # session.loop
+ # end
+ #
+ # See Net::SSH::Multi::Session for more documentation.
+ module Multi
+ # This is a convenience method for instantiating a new
+ # Net::SSH::Multi::Session. If a block is given, the session will be
+ # yielded to the block automatically closed (see Net::SSH::Multi::Session#close)
+ # when the block finishes. Otherwise, the new session will be returned.
+ #
+ # Net::SSH::Multi.start do |session|
+ # # ...
+ # end
+ #
+ # session = Net::SSH::Multi.start
+ # # ...
+ # session.close
+ #
+ # Any options are passed directly to Net::SSH::Multi::Session.new (q.v.).
+ def self.start(options={})
+ session = Session.new(options)
+
+ if block_given?
+ begin
+ yield session
+ session.loop
+ session.close
+ end
+ else
+ return session
+ end
+ end
+ end
+end; end \ No newline at end of file