http://qs321.pair.com?node_id=964273


in reply to Net::OpenSSH::Parallel documentation

The Error Handling section gives some pretty good pointers. For instance, you may want to specify on_error in one of the following ways:

useNet::OpenSSH::Parallel::Constants qw(:error :on_error);
# with a coderef $pssh->add_host($host, user =>'root', passwd=>'access', on_error=> sub { my ($pssh, $label, $error, $task) = @_; $error == OSSH_JOIN_FAILED and do { ... }; $error == OSSH_ABORTED and do { ... }; $error == OSSH_GOTO_FAILED and do { ... }; }, ); # or with constants $pssh->add_host($label, on_error => OSSH_ON_ERROR_IGNORE); $pssh->add_host($label, on_error => OSSH_ON_ERROR_ABORT_ALL);

Replies are listed 'Best First'.
Re^2: Net::OpenSSH::Parallel documentation
by ashok.g (Beadle) on Apr 10, 2012 at 14:48 UTC
    Thanks for update.

    So, we need to compare each time the $error with some Error constant always?

    Thanks,
    Ashok
      $error should be compared with the Error constants because the documentation mentions that it would be one of the constant values.

      The coderef is just an example. You're free to do whatever you want with it.
Re^2: Net::OpenSSH::Parallel documentation
by ashok.g (Beadle) on Apr 16, 2012 at 22:32 UTC
    Hi,

    The following code gives no result:
    #!/usr/bin/perl use strict; use warnings; use Net::OpenSSH::Parallel; use Net::OpenSSH::Parallel::Constants qw(:error :on_error); my @hosts=('192.168.0.19','192.168.0.18'); my $pssh = Net::OpenSSH::Parallel->new(); my @errors=(OSSH_ON_ERROR_IGNORE,OSSH_ON_ERROR_RETRY,OSSH_ON_ERROR_DON +E,OSSH_ON_ERROR_ABORT,OSSH_ON_ERROR_ABORT_ALL,OSSH_JOIN_FAILED,OSSH_A +BORTED,OSSH_GOTO_FAILED); foreach my $host ( @hosts ) { $pssh->add_host($host,user =>'root',passwd=>'access', on_error +=> sub { my ($pssh, $label, $error, $task) = @_; foreach my $err ( @errors ){ if ( $error =~ m/$err/ ){ print "---$task----\n"; } } } ); }
    But
    #!/usr/bin/perl use strict; use warnings; use Net::OpenSSH::Parallel; use Net::OpenSSH::Parallel::Constants qw(:error :on_error); my @hosts=('192.168.0.19','192.168.0.18'); my $pssh = Net::OpenSSH::Parallel->new(); my @errors=(OSSH_ON_ERROR_IGNORE,OSSH_ON_ERROR_RETRY,OSSH_ON_ERROR_DON +E,OSSH_ON_ERROR_ABORT,OSSH_ON_ERROR_ABORT_ALL,OSSH_JOIN_FAILED,OSSH_A +BORTED,OSSH_GOTO_FAILED); foreach my $host ( @hosts ) { $pssh->add_host($host,user =>'root',passwd=>'access') or print + "Error----\n"; }
    Gives me:
    [root@station20 cgi-bin]# perl NetOpenSSHParallel.pl Error---- Error----

    Still missing anything here??

    Thanks,
    Ashok.