xcat-core/xCAT-client/bin/xcoll
2013-11-07 10:31:15 -05:00

74 lines
1.7 KiB
Perl
Executable File

#!/usr/bin/env perl
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
BEGIN { $::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : -d '/opt/xcat' ? '/opt/xcat' : '/usr'; }
use lib "$::XCATROOT/lib/perl";
#use Data::Dumper;
use xCAT::Client;
use Getopt::Long;
use strict;
my %output;
my $option;
my $printcount;
my $individual;
GetOptions("n"=>\$option,
"i"=>\$individual,
"c"=>\$printcount);
while (<STDIN>) {
my $node;
my $output;
if (/:/) {
($node,$output) = split /:/,$_,2;
} else {
$node= "UNKNOWN";
$output = $_;
}
$output =~ s/^ //;
$output{$node}.=$output;
}
my %collated;
unless ($individual) {
foreach (keys %output) {
$collated{$output{$_}}->{$_}=1;
}
}
my $nodes;
sub fillerup {
my $response = shift;
if ($response->{data}->[0]) {
$nodes = $response->{data}->[0];
}
}
if ($individual) {
foreach my $node (keys %output) {
print "====================================\n";
print "$node\n";
print "====================================\n";
print $output{$node};
print "\n";
}
exit(0);
}
foreach my $output (keys %collated) {
$nodes = join(',',sort (keys %{$collated{$output}}));
my $cmdref = {
noderange => [$nodes],
command => ['rnoderange'],
};
unless ($option) {
xCAT::Client::submit_request($cmdref,\&fillerup);
}
print "====================================\n";
print "$nodes\n";
print "====================================\n";
if ($printcount) {
print "Node count = ".scalar( keys %{$collated{$output}})." \n";
print "====================================\n";
}
print $output;
print "\n";
}