#!/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";
}