using the async option in Net::OpenSSH

can someone help me understand whether in second loop commands are being 
executed without waiting for them to complete, so that parallelism is achieved 
as indicated by using async option?

if not, then how can we achieve to execute the commands on remote hosts in 
parallel using Net::OpenSSH?




my @hosts =qw(...);  #all hosts
my @allcmds = qw(...);   #all commands




    for my $host (@hosts){            #loop to process all host in list
    chomp($host);
    $ssh{$host} = Net::OpenSSH->new($host,
                            port => $SSHPORT,
                            user => $USER,
                            password => $PASS,
                            default_stderr_fh => $stderr_fh,
                            default_stdout_fh => $stdout_fh,
                            async => 1,
                            master_opts => [-o => 'StrictHostKeyChecking=no',
                                                 -o => 'ConnectTimeout 10'],
                            );
    }


open(MFOH,">>$MFRESULT");

    for my $host (@hosts) {
        foreach $CMD (@allcmds){
            chomp($CMD);
            ( @CMDRESULT, $CMDERR ) = $ssh{$host}->capture("$CMD");
            print MFOH "\n$host COMMAND: $CMD\n";
            foreach my $line (@CMDRESULT) { print MFOH "$host $line"; }
            @CMDRESULT = "";
            if (defined $CMDERR ) {print MFOH "$host $CMDERR \n"; $CMDERR = "";}
            }
        }
close MFOH;

....

Reply via email to