mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 13:22:36 +00:00 
			
		
		
		
	It isn't natural sort, but in many cases it should work. Natural sort in perl is a pain or a dependency.
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.0 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 %outputhdrs;
 | 
						|
 | 
						|
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 (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";
 | 
						|
}
 |