|
NAMENet::SSH::Mechanize::Multi - parallel ssh invocationVERSIONversion 0.1.3SYNOPSISmy $manager = Net::SSH::Mechanize::Multi->new( # Set the default parameters for the Net::SSH::Mechanize # instances we will create constructor_defaults => { login_timeout => 180 }, ); # Add connection definitions as a list of connection-name to # Net::SSH::Mechanize instance pairs (or shorthand equivalents, as # illustrated). $manager->add( # This defines the connection using a # Net::SSH::Mechanize::ConnectParams instance (or subclass # thereof) connection1 => Net::SSH::Mechanize::ConnectParams->new( hostname => 'host1.com', ), # This defines it using a hashref of constructor parameters # for Net::SSH::Mechanize connection2 => { user => 'joe', hostname => 'host1.com', login_timeout => 60, }, # This passes a Net::SSH::Mechanize instance directly connection3 => Net::SSH::Mechanize->new( user => 'joe', hostname => 'host2.com', login_timeout => 60, ), # ... ); # At this point no hosts have been contacted. # Connect to a named subset of them all in parallel like this. # The callback should expect the name and the appropriate # Net::SSH::Mechanize instance as arguments. # Synchronous commands in the callback work asyncronously # thanks to Coro::AnyEvent. my @names = qw(host1 host2); my $threads = $manager->in_parallel(@names => sub { my ($name, $ssh) = @_; printf "About to connect to %s using;\n'$s'\n\n", $name, $ssh->connection_params->ssh_cmd # note, the login is done implicitly when you access the # ->session parameter, or a method which delegates to it. # do stuff... print "checking git status of config definition:\n"; print $ssh->sudo_capture("cd /root/config; git status"); # ... }); # Wait for them all to complete. $_->join for @$threads; print "done\n"; There is a full implementation of this kind of usage is in the "gofer" script included in this distribution. CLASS METHODS"$obj = $class->new(%params)"Creates a new instance. Parameters is a hash or a list of key-value parameters. Valid parameter keys are:
Currently it is also possible to pass parameters to initialise the "names" and "ssh_instances" attributes, but since the content of those are intended to be correlated this is definitely not recommended. Use "->add" instead. INSTANCE ATTRIBUTES"$hashref = $obj->constructor_defaults" =head2 "$obj->constructor_defaults(\%hashref)"This is an read-write accessor which allows you to specify the default parameters to pass to the "Net::SSH::Mechanize" constructor. These defaults can be overridden in individual cases."$hashref = $obj->names"This is a hashref of connection names mapped to "Net::SSH::Mechanize" instances. It is not recommend you change this directly, use the "->add" method instead."$hashref = $obj->ssh_instances"This is an arrayref listing "Net::SSH::Mechanize" instances we have created, in the order they have been defined via "->add" (which is also the order they will be iterated over within "->in_parallel").INSTANCE METHODS"@mech_instances = $obj->add(%connections)"Adds one or more named connection definitions.%connections is a hash or list of name-value pairs defining what to connect to. The order in which they are defined here is preserved and used when iterating over them in "->in_parallel". The names are simple string aliases, and can be anything unique (to this instance). If a duplicate is encountered, an exception will be thrown. The values can be:
A list of the "Net::SSH::Mechanize" instances are returned, in the order they were defined. This method can be called any number of times, so long as the connection names are never duplicated. "@threads = $obj->in_parallel(@names, \&actions)"This method accepts a list of host-names, and a callback. The callback should expect two parameters: a connection name, and a "Net::SSH::Mechanize" instance.It first checks that all the names have been defined in an earlier "->add" invocation. If any are unknown, an exception is thrown. Otherwise, it iterates over the names in the order given, and invokes the callback with the name and the appropriate "Net::SSH::Mechanize" instance. Note: the callback is invoked each time as a co-routine. See Coro and Coro::AnyEvent for more information about this, but it essentially means that each one is asynchronously run in parallel. This method returns a list of "Coro" threads, immediately, before the callbacks have completed. Your program is then free to do other things, and/or call "->join" on each of the threads to wait for their termination. AUTHORNick Stokoe "<wulee@cpan.org>"LICENCE AND COPYRIGHTCopyright (c) 2011, Nick Stokoe "<wulee@cpan.org>". All rights reserved.This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.
Visit the GSP FreeBSD Man Page Interface. |