#!/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 %outputhdrs; my $option; my $printcount; my $individual; GetOptions("n" => \$option, "i" => \$individual, "c" => \$printcount); while () { 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 (sort { $a <=> $b or $a cmp $b } 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); } $outputhdrs{$nodes} = $output; } foreach my $hdr (sort { $a <=> $b or $a cmp $b } keys %outputhdrs) { $nodes = $hdr; my $output = $outputhdrs{$hdr}; print "====================================\n"; print "$nodes\n"; print "====================================\n"; if ($printcount) { print "Node count = " . scalar(keys %{ $collated{$output} }) . " \n"; print "====================================\n"; } print $output; print "\n"; }