#!/usr/bin/perl # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html #(C)IBM Corp # use Getopt::Long; #----------------------------------------------------------------------------- =head1 mkrrnodes mkrrnodes -C -R (add) mkrrnodes -d -C -R (delete) Build an nodelist entry that looks like this "rrb048c","rrb048,qs22,cub,cell,cell-c,compute,tb,all,rack06",,,, =cut #----------------------------------------------------------------------------- # Main my $rc = 0; &parse_args; my $cmd = ""; my @bladename; @bladename=("a","b","c"); my $count=0; my $rackno="01"; foreach my $CU (@::CU) { foreach my $range (@::RANGE) { foreach my $blade (@bladename) { $rack="rack"; $cmd = "rr"; $cmd .= $CU; $cmd .= $range; $cmd .= "$blade"; $cmd .= " "; if ($blade eq "a" ) { $cmd .= "groups=rr$CU$range,ls21,cu$CU,opteron,compute,tb,all"; } else { if ($blade eq "b" ) { $cmd .= "groups=rr$CU$range,qs22,cu$CU,cell,cell-b,compute,all,tb"; } else { # c $cmd .= "groups=rr$CU$range,qs22,cu$CU,cell,cell-c,compute,all,tb"; } } # calculate the rack number ( 12 triblades/rack) if ($count < 36) { # each 36 blades $rack .= $rackno; $count++; } else { # increment to next rack $rack="rack"; $rackno++; $rack .= $rackno; $count =0; } $cmd .= ","; $cmd .= $rack; if ($::DELETE) { system("noderm $cmd"); } else { system("nodeadd $cmd"); } } } } exit $rc; #----------------------------------------------------------------------------- =head3 parse_args Parses for input =cut #----------------------------------------------------------------------------- sub parse_args { Getopt::Long::Configure("posix_default"); Getopt::Long::Configure("no_gnu_compat"); Getopt::Long::Configure("bundling"); if ( !GetOptions( 'C|CU=s' => \$::CU, 'h|help' => \$::HELP, 'd|delete' => \$::DELETE, 'R|RANGE=s' => \$::RANGE ) ) { my $usagemsg = " mkrrnodes -h \n mkrrnodes [-d] -C [a|b|...,r] -R [startrange,endrange]\n"; printf $usagemsg; exit 1; } if ($::HELP) { my $usagemsg = " mkrrnodes -h \n mkrrnodes [-d] -C [a|b|,...,r] -R [startrange,endrange]\n"; printf $usagemsg; exit 0; } @::CU = split(',', $::CU); my ($fNum,$eNum) = split(',', $::RANGE); my $prefix; foreach my $suffix ($fNum .. $eNum) { my $numOfZeros = (length($fNum) - length($suffix)); my $prefix = '0' x $numOfZeros; push @::RANGE, "$fRoot$prefix$suffix$fDomain"; } }