From c6889f8bf1a4c0a48ec5b5fe6941ef914932f6bc Mon Sep 17 00:00:00 2001
From: Robert Ricci <ricci@cs.utah.edu>
Date: Fri, 22 Dec 2006 19:55:05 +0000
Subject: [PATCH] Add an option, -t, to limit to nodes of a specific type.

---
 pelab/goodnodes.pl | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/pelab/goodnodes.pl b/pelab/goodnodes.pl
index c7987bf4a6..ebe702266f 100644
--- a/pelab/goodnodes.pl
+++ b/pelab/goodnodes.pl
@@ -27,21 +27,23 @@ my $PWDFILE = "/usr/testbed/etc/pelabdb.pwd";
 my $DBNAME  = "pelab";
 my $DBUSER  = "pelab";
 my $NLIST = "/usr/testbed/bin/node_list";
-my $pprefix = "node-";
+my $pprefix = "plab";
 #
 # Turn off line buffering on output
 #
 $| = 1;
 sub usage {
-        print "Usage: $0 [-e pid/eid] [-f blacklistfilename] <numNodes>\n";
+        print "Usage: $0 [-e pid/eid] [-f blacklistfilename] [-t type] <numNodes>\n";
         return 1;
 }
 my ($pid, $eid);
 my $blacklistfilename;
+my $type = "";
 my %opt = ();
-getopts("e:f:", \%opt);
+getopts("e:f:t:", \%opt);
 if ($opt{e}) { ($pid,$eid) = split('/', $opt{e}); }
 if ($opt{f}) { $blacklistfilename = $opt{f}; }
+if ($opt{t}) { $type = $opt{t}; }
 if (@ARGV !=1) { exit &usage; }
 my $numnodes = $ARGV[0];
 my @allnodes = ();      #nodes to consider, in order of desirablility (?)
@@ -111,12 +113,17 @@ sub isFullyConn($);
 if( defined($pid) && defined($eid) ){
 #    print "reading $pid/$eid nodes\n";
     #add exp nodes to a hash
-    my @expnodelist = split('\s+', `$NLIST -m -e $pid,$eid`);
+    my @expnodelist = split('\s+', `$NLIST -H -e $pid,$eid`);
     chomp(@expnodelist);
-    foreach my $mapping (@expnodelist) {
-        if ($mapping =~ /^(${pprefix}[\d]+)=([\w]*)$/) {
-            my $vnode = $1;
-            my $pnode = $2;
+    foreach my $node (@expnodelist) {
+        if ($node =~ /^(${pprefix}\d+)=([\w,]*)$/) {
+            my $pnode = $1;
+            my $types = $2;
+            my @types = split(/,/,$types);
+            if ($type && ! grep(/^$type$/,@types)) {
+                #print "Skipping $pnode ($type,$types)\n";
+                next;
+            }
 #            print "$vnode ($pnode)\n";
             $expnodes{$pnode} = 1;  #set this node
         }
-- 
GitLab