Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Changes
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
0.0291
- atnodes: added '-E' and '-tmout' parameter to run expect mode.
0.029
- atnodes: added a '-q' parameter to run SSH in quiet mode,
which prevents banners and motd messages from being
displayed in the output. thanks Mithun Ayachit for the patch.

0.028
- atnodes: fixed tmp file leaks.
- atnodes: automatically check if openssh version >= 4.1.
Expand Down
10 changes: 6 additions & 4 deletions META.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ abstract: 'Cluster operations based on parallel SSH, set and interval arithmetic
author:
- "Zhang \"agentzh\" Yichun <agentzh@gmail.com>"
build_requires:
ExtUtils::MakeMaker: 6.42
ExtUtils::MakeMaker: 6.55
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please exclude these irrelevant changes.

IPC::Run3: 0
configure_requires:
ExtUtils::MakeMaker: 6.42
ExtUtils::MakeMaker: 6.55
distribution_type: module
generated_by: 'Module::Install version 1.01'
dynamic_config: 1
generated_by: 'Module::Install version 1.04'
license: bsd
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
Expand All @@ -26,8 +27,9 @@ requires:
Net::OpenSSH: 0.34
Set::Scalar: 1.23
Term::ReadKey: 2.30
Time::HiRes: 0
perl: 5.6.1
resources:
license: http://opensource.org/licenses/bsd-license.php
repository: http://github.com/agentzh/sshbatch
version: 0.028
version: 0.0291
1 change: 1 addition & 0 deletions Makefile.PL
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ requires ('Net::OpenSSH' => '0.34');
requires ('File::Temp');
requires ('Term::ReadKey' => '2.30');
requires ('IO::Pty');
requires ('Time::HiRes');

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should really add the Except module to the dependency list here.

build_requires ('IPC::Run3');
#build_requires ('Test::Base' => '0.54');
Expand Down
2 changes: 1 addition & 1 deletion README
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ NAME
arithmetic

VERSION
This document describes SSH::Batch 0.028 released on 26 August 2011.
This document describes SSH::Batch 0.029 released on 29 April 2012.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please exclude these irrelevant changes. You shouldn't do the release anyway :)


SYNOPSIS
The following scripts are provided:
Expand Down
43 changes: 34 additions & 9 deletions bin/atnodes
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ use Term::ReadKey;
use SSH::Batch::ForNodes;
use File::Temp qw/ :POSIX /;
use Time::HiRes qw/sleep/;
use Expect;

sub help ($);
sub check_openssh_version ($);
Expand All @@ -30,6 +31,8 @@ my $found_sep;
my $last_option;
my $use_tty;
my $use_quiet_mode;
my $use_expect_mode;
my $expect_timeout = 1;
my $line_mode = $ENV{SSH_BATCH_LINE_MODE};
for (@ARGV) {
if (defined $fetch_value) {
Expand Down Expand Up @@ -71,6 +74,10 @@ for (@ARGV) {
$use_tty = 1;
} elsif ($group eq 'q') {
$use_quiet_mode = 1;
} elsif ($group eq 'E') {
$use_expect_mode = 1;
} elsif ($group eq 'tmout') {
$fetch_value = sub { $expect_timeout = shift };
} else {
die "Unknown option: $_\n";
}
Expand Down Expand Up @@ -200,14 +207,30 @@ while (1) {
for my $host (@active_hosts) {
my ($out, $outfile) = tmpnam();
my $ssh = $conns{$host};
my $pid = $ssh->system({
(defined $password?
(stdin_data => "$password\n") : ()),
stdout_fh => $out,
stderr_to_stdout => 1,
async => 1,
defined $use_tty ? (tty => 1) : (),
}, @cmd);
my $pid;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like bad indentation? Please fix the coding style. Thank you.

my $pty;
if ($use_expect_mode && $use_expect_mode == 1) {
($pty, $pid) = $ssh->open2pty({'stderr_to_stdout' => 1}, @cmd);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, we use 4 space indentation.

my $expect = Expect->init($pty);
$expect->log_file($outfile, "w");
$expect->raw_pty(1);
$expect->expect($expect_timeout, ":");
if (defined $password) {
$expect->send("$password\n");
}
$expect->expect($expect_timeout, "\n");
$expect->raw_pty(0);
close $expect;
} else {
$pid = $ssh->system({
(defined $password?
(stdin_data => "$password\n") : ()),
stdout_fh => $out,
stderr_to_stdout => 1,
async => 1,
defined $use_tty ? (tty => 1) : (),
}, @cmd);
}
#warn "PID: $pid\n";
if (!defined $pid or $pid == -1) {
$active_count--;
Expand Down Expand Up @@ -311,7 +334,9 @@ OPTIONS:
-P Prompt for passphrase (used for login,
could be privided by SSH_BATCH_PASSPHRASE).
-tty Pseudo-tty.
-q Run SSH in quiet mode
-E Use expect for input, such as password.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Options documented in this usage message should be sorted alphabetically. -E shouldn't come after -tty.

-tmout Set timeout of expect.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't like this -tmout option name. It's confusing. How about just -T?

-q Run SSH in quiet mode.
_EOC_
if ($exit_code == 0) {
print $msg;
Expand Down
121 changes: 108 additions & 13 deletions inc/Module/AutoInstall.pm
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use ExtUtils::MakeMaker ();

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please exclude all the changes under inc/ because it's irrelevant for this pull request.

use vars qw{$VERSION};
BEGIN {
$VERSION = '1.03';
$VERSION = '1.04';
}

# special map on pre-defined feature sets
Expand All @@ -17,11 +17,14 @@ my %FeatureMap = (
);

# various lexical flags
my ( @Missing, @Existing, %DisabledTests, $UnderCPAN, $HasCPANPLUS );
my ( @Missing, @Existing, %DisabledTests, $UnderCPAN, $InstallDepsTarget, $HasCPANPLUS );
my (
$Config, $CheckOnly, $SkipInstall, $AcceptDefault, $TestOnly, $AllDeps
$Config, $CheckOnly, $SkipInstall, $AcceptDefault, $TestOnly, $AllDeps,
$UpgradeDeps
);
my ( $PostambleActions, $PostambleUsed );
my ( $PostambleActions, $PostambleActionsNoTest, $PostambleActionsUpgradeDeps,
$PostambleActionsUpgradeDepsNoTest, $PostambleActionsListDeps,
$PostambleActionsListAllDeps, $PostambleUsed, $NoTest);

# See if it's a testing or non-interactive session
_accept_default( $ENV{AUTOMATED_TESTING} or ! -t STDIN );
Expand All @@ -31,6 +34,10 @@ sub _accept_default {
$AcceptDefault = shift;
}

sub _installdeps_target {
$InstallDepsTarget = shift;
}

sub missing_modules {
return @Missing;
}
Expand Down Expand Up @@ -63,6 +70,11 @@ sub _init {
__PACKAGE__->install( $Config, @Missing = split( /,/, $1 ) );
exit 0;
}
elsif ( $arg =~ /^--upgradedeps=(.*)$/ ) {
$UpgradeDeps = 1;
__PACKAGE__->install( $Config, @Missing = split( /,/, $1 ) );
exit 0;
}
elsif ( $arg =~ /^--default(?:deps)?$/ ) {
$AcceptDefault = 1;
}
Expand Down Expand Up @@ -125,7 +137,7 @@ sub import {
# check entirely since we don't want to have to load (and configure)
# an old CPAN just for a cosmetic message

$UnderCPAN = _check_lock(1) unless $SkipInstall;
$UnderCPAN = _check_lock(1) unless $SkipInstall || $InstallDepsTarget;

while ( my ( $feature, $modules ) = splice( @args, 0, 2 ) ) {
my ( @required, @tests, @skiptests );
Expand Down Expand Up @@ -207,6 +219,7 @@ sub import {
$CheckOnly
or ($mandatory and $UnderCPAN)
or $AllDeps
or $InstallDepsTarget
or _prompt(
qq{==> Auto-install the }
. ( @required / 2 )
Expand Down Expand Up @@ -237,10 +250,17 @@ sub import {
}
}

if ( @Missing and not( $CheckOnly or $UnderCPAN ) ) {
if ( @Missing and not( $CheckOnly or $UnderCPAN) ) {
require Config;
print
"*** Dependencies will be installed the next time you type '$Config::Config{make}'.\n";
my $make = $Config::Config{make};
if ($InstallDepsTarget) {
print
"*** To install dependencies type '$make installdeps' or '$make installdeps_notest'.\n";
}
else {
print
"*** Dependencies will be installed the next time you type '$make'.\n";
}

# make an educated guess of whether we'll need root permission.
print " (You may need to do that as the 'root' user.)\n"
Expand Down Expand Up @@ -271,6 +291,10 @@ END_MESSAGE
sub _check_lock {
return unless @Missing or @_;

if ($ENV{PERL5_CPANM_IS_RUNNING}) {
return _running_under('cpanminus');
}

my $cpan_env = $ENV{PERL5_CPAN_IS_RUNNING};

if ($ENV{PERL5_CPANPLUS_IS_RUNNING}) {
Expand Down Expand Up @@ -332,6 +356,11 @@ sub install {
}
}

if ($UpgradeDeps) {
push @modules, @installed;
@installed = ();
}

return @installed unless @modules; # nothing to do
return @installed if _check_lock(); # defer to the CPAN shell

Expand Down Expand Up @@ -463,6 +492,11 @@ sub _cpanplus_config {
} else {
die "*** Cannot convert option $key = '$value' to CPANPLUS version.\n";
}
push @config, 'prereqs', $value;
} elsif ( $key eq 'force' ) {
push @config, $key, $value;
} elsif ( $key eq 'notest' ) {
push @config, 'skiptest', $value;
} else {
die "*** Cannot convert option $key to CPANPLUS version.\n";
}
Expand Down Expand Up @@ -497,10 +531,14 @@ sub _install_cpan {
# set additional options
while ( my ( $opt, $arg ) = splice( @config, 0, 2 ) ) {
( $args{$opt} = $arg, next )
if $opt =~ /^force$/; # pseudo-option
if $opt =~ /^(?:force|notest)$/; # pseudo-option
$CPAN::Config->{$opt} = $arg;
}

if ($args{notest} && (not CPAN::Shell->can('notest'))) {
die "Your version of CPAN is too old to support the 'notest' pragma";
}

local $CPAN::Config->{prerequisites_policy} = 'follow';

while ( my ( $pkg, $ver ) = splice( @modules, 0, 2 ) ) {
Expand All @@ -519,8 +557,16 @@ sub _install_cpan {
delete $INC{$inc};
}

my $rv = $args{force} ? CPAN::Shell->force( install => $pkg )
: CPAN::Shell->install($pkg);
my $rv = do {
if ($args{force}) {
CPAN::Shell->force( install => $pkg )
} elsif ($args{notest}) {
CPAN::Shell->notest( install => $pkg )
} else {
CPAN::Shell->install($pkg)
}
};

$rv ||= eval {
$CPAN::META->instance( 'CPAN::Distribution', $obj->cpan_file, )
->{install}
Expand Down Expand Up @@ -763,6 +809,35 @@ sub _make_args {
: "\$(NOECHO) \$(NOOP)"
);

my $deps_list = join( ',', @Missing, @Existing );

$PostambleActionsUpgradeDeps =
"\$(PERL) $0 --config=$config --upgradedeps=$deps_list";

my $config_notest =
join( ',', (UNIVERSAL::isa( $Config, 'HASH' ) ? %{$Config} : @{$Config}),
'notest', 1 )
if $Config;

$PostambleActionsNoTest = (
($missing and not $UnderCPAN)
? "\$(PERL) $0 --config=$config_notest --installdeps=$missing"
: "\$(NOECHO) \$(NOOP)"
);

$PostambleActionsUpgradeDepsNoTest =
"\$(PERL) $0 --config=$config_notest --upgradedeps=$deps_list";

$PostambleActionsListDeps =
'@$(PERL) -le "print for @ARGV" '
. join(' ', map $Missing[$_], grep $_ % 2 == 0, 0..$#Missing);

my @all = (@Missing, @Existing);

$PostambleActionsListAllDeps =
'@$(PERL) -le "print for @ARGV" '
. join(' ', map $all[$_], grep $_ % 2 == 0, 0..$#all);

return %args;
}

Expand Down Expand Up @@ -797,24 +872,44 @@ sub Write {

sub postamble {
$PostambleUsed = 1;
my $fragment;

return <<"END_MAKE";
$fragment .= <<"AUTO_INSTALL" if !$InstallDepsTarget;

config :: installdeps
\t\$(NOECHO) \$(NOOP)
AUTO_INSTALL

$fragment .= <<"END_MAKE";

checkdeps ::
\t\$(PERL) $0 --checkdeps

installdeps ::
\t$PostambleActions

installdeps_notest ::
\t$PostambleActionsNoTest

upgradedeps ::
\t$PostambleActionsUpgradeDeps

upgradedeps_notest ::
\t$PostambleActionsUpgradeDepsNoTest

listdeps ::
\t$PostambleActionsListDeps

listalldeps ::
\t$PostambleActionsListAllDeps

END_MAKE

return $fragment;
}

1;

__END__

#line 1071
#line 1178
4 changes: 2 additions & 2 deletions inc/Module/Install.pm
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ BEGIN {
# This is not enforced yet, but will be some time in the next few
# releases once we can make sure it won't clash with custom
# Module::Install extensions.
$VERSION = '1.01';
$VERSION = '1.04';

# Storage for the pseudo-singleton
$MAIN = undef;
Expand Down Expand Up @@ -451,7 +451,7 @@ sub _version ($) {
}

sub _cmp ($$) {
_version($_[0]) <=> _version($_[1]);
_version($_[1]) <=> _version($_[2]);
}

# Cloned from Params::Util::_CLASS
Expand Down
Loading