defect 3998 - change file vars to globals
This commit is contained in:
		@@ -11,9 +11,6 @@ use Getopt::Long;
 | 
			
		||||
require xCAT::Utils;
 | 
			
		||||
require xCAT::TableUtils;
 | 
			
		||||
use xCAT::ServiceNodeUtils;
 | 
			
		||||
my $addkcmdlinehandled;
 | 
			
		||||
my $request;
 | 
			
		||||
my $callback;
 | 
			
		||||
my $dhcpconf = "/etc/dhcpd.conf";
 | 
			
		||||
my $globaltftpdir = xCAT::TableUtils->getTftpDir();
 | 
			
		||||
#my $dhcpver = 3;
 | 
			
		||||
@@ -93,7 +90,7 @@ sub setstate {
 | 
			
		||||
  my $imgaddkcmdline=($linuximghash{'boottarget'})? undef:$linuximghash{'addkcmdline'};
 | 
			
		||||
 | 
			
		||||
  my $kern = $bphash{$node}->[0]; #$bptab->getNodeAttribs($node,['kernel','initrd','kcmdline']);
 | 
			
		||||
  if (not $addkcmdlinehandled->{$node} and ($kern->{addkcmdline} or  ($imgaddkcmdline))) {
 | 
			
		||||
  if (not $::PXE_addkcmdlinehandled->{$node} and ($kern->{addkcmdline} or  ($imgaddkcmdline))) {
 | 
			
		||||
 | 
			
		||||
#Implement the kcmdline append here for
 | 
			
		||||
#most generic, least code duplication
 | 
			
		||||
@@ -129,7 +126,7 @@ sub setstate {
 | 
			
		||||
            $kcmdlinehack =~ s/#TABLE:([^:#]+):([^:#]+):([^:#]+)#/$naval/;
 | 
			
		||||
        } else {
 | 
			
		||||
            my $msg =  "Table key of $2 not yet supported by boottarget mini-template";
 | 
			
		||||
            $::callback->({
 | 
			
		||||
            $::PXE_callback->({
 | 
			
		||||
                error => ["$msg"],
 | 
			
		||||
                errorcode => [1]
 | 
			
		||||
            });
 | 
			
		||||
@@ -148,7 +145,7 @@ sub setstate {
 | 
			
		||||
      unless ($ipfn) {
 | 
			
		||||
        my @myself = xCAT::NetworkUtils->determinehostname();
 | 
			
		||||
        my $myname = $myself[(scalar @myself)-1];
 | 
			
		||||
         $::callback->(
 | 
			
		||||
         $::PXE_callback->(
 | 
			
		||||
                {
 | 
			
		||||
                 error => [
 | 
			
		||||
                     "$myname: Unable to determine or reasonably guess the image server for $node"
 | 
			
		||||
@@ -263,11 +260,11 @@ sub pass_along {
 | 
			
		||||
          $errored=1;
 | 
			
		||||
       }
 | 
			
		||||
       if ($_->{_addkcmdlinehandled}) {
 | 
			
		||||
           $addkcmdlinehandled->{$_->{name}->[0]}=1;
 | 
			
		||||
           $::PXE_addkcmdlinehandled->{$_->{name}->[0]}=1;
 | 
			
		||||
           return; #Don't send back to client this internal hint
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
    $callback->($resp);
 | 
			
		||||
    $::PXE_callback->($resp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -356,28 +353,28 @@ sub preprocess_request {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub process_request {
 | 
			
		||||
  $request = shift;
 | 
			
		||||
  $callback = shift;
 | 
			
		||||
  $::PXE_request = shift;
 | 
			
		||||
  $::PXE_callback = shift;
 | 
			
		||||
  my $sub_req = shift;
 | 
			
		||||
  $::callback=$callback;
 | 
			
		||||
  undef $::PXE_addkcmdlinehandled;
 | 
			
		||||
  my @args;
 | 
			
		||||
  my @nodes;
 | 
			
		||||
  my @rnodes;
 | 
			
		||||
  if (ref($request->{node})) {
 | 
			
		||||
    @rnodes = @{$request->{node}};
 | 
			
		||||
  if (ref($::PXE_request->{node})) {
 | 
			
		||||
    @rnodes = @{$::PXE_request->{node}};
 | 
			
		||||
  } else {
 | 
			
		||||
    if ($request->{node}) { @rnodes = ($request->{node}); }
 | 
			
		||||
    if ($::PXE_request->{node}) { @rnodes = ($::PXE_request->{node}); }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  unless (@rnodes) {
 | 
			
		||||
      if ($usage{$request->{command}->[0]}) {
 | 
			
		||||
          $callback->({data=>$usage{$request->{command}->[0]}});
 | 
			
		||||
      if ($usage{$::PXE_request->{command}->[0]}) {
 | 
			
		||||
          $::PXE_callback->({data=>$usage{$::PXE_request->{command}->[0]}});
 | 
			
		||||
      }
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #if not shared, then help sync up
 | 
			
		||||
  if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
  if ($::PXE_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
   @nodes = ();
 | 
			
		||||
   foreach (@rnodes) {
 | 
			
		||||
     if (xCAT::NetworkUtils->nodeonmynet($_)) {
 | 
			
		||||
@@ -396,16 +393,16 @@ sub process_request {
 | 
			
		||||
     return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (ref($request->{arg})) {
 | 
			
		||||
      @args=@{$request->{arg}};
 | 
			
		||||
  if (ref($::PXE_request->{arg})) {
 | 
			
		||||
      @args=@{$::PXE_request->{arg}};
 | 
			
		||||
  } else {
 | 
			
		||||
      @args=($request->{arg});
 | 
			
		||||
      @args=($::PXE_request->{arg});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
   #now run the begin part of the prescripts
 | 
			
		||||
   unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') {
 | 
			
		||||
       $errored=0;
 | 
			
		||||
       if ($request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
       if ($::PXE_request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
           $sub_req->({command=>['runbeginpre'],
 | 
			
		||||
           node=>\@nodes,
 | 
			
		||||
           arg=>[$args[0], '-l']},\&pass_along);
 | 
			
		||||
@@ -418,7 +415,7 @@ sub process_request {
 | 
			
		||||
	  my $rsp;
 | 
			
		||||
	  $rsp->{errorcode}->[0]=1;
 | 
			
		||||
	  $rsp->{error}->[0]="Failed in running begin prescripts\n";
 | 
			
		||||
	  $callback->($rsp);
 | 
			
		||||
	  $::PXE_callback->($rsp);
 | 
			
		||||
	  return; 
 | 
			
		||||
       }
 | 
			
		||||
   }
 | 
			
		||||
@@ -426,7 +423,7 @@ sub process_request {
 | 
			
		||||
#end prescripts code
 | 
			
		||||
  if (! -r "$tftpdir/pxelinux.0") {
 | 
			
		||||
    unless (-r "/usr/lib/syslinux/pxelinux.0" or -r "/usr/share/syslinux/pxelinux.0") {
 | 
			
		||||
       $callback->({error=>["Unable to find pxelinux.0 "],errorcode=>[1]});
 | 
			
		||||
       $::PXE_callback->({error=>["Unable to find pxelinux.0 "],errorcode=>[1]});
 | 
			
		||||
       return;
 | 
			
		||||
    }
 | 
			
		||||
    if (-r "/usr/lib/syslinux/pxelinux.0") {
 | 
			
		||||
@@ -437,14 +434,14 @@ sub process_request {
 | 
			
		||||
     chmod(0644,"$tftpdir/pxelinux.0");
 | 
			
		||||
  }
 | 
			
		||||
  unless ( -r "$tftpdir/pxelinux.0" ) {
 | 
			
		||||
     $callback->({errror=>["Unable to find pxelinux.0 from syslinux"],errorcode=>[1]});
 | 
			
		||||
     $::PXE_callback->({errror=>["Unable to find pxelinux.0 from syslinux"],errorcode=>[1]});
 | 
			
		||||
     return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
  $errored=0;
 | 
			
		||||
  my $inittime=0;
 | 
			
		||||
  if (exists($request->{inittime})) { $inittime= $request->{inittime}->[0];}
 | 
			
		||||
  if (exists($::PXE_request->{inittime})) { $inittime= $::PXE_request->{inittime}->[0];}
 | 
			
		||||
  if (!$inittime) { $inittime=0;}
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') {
 | 
			
		||||
    $sub_req->({command=>['setdestiny'],
 | 
			
		||||
@@ -476,7 +473,7 @@ sub process_request {
 | 
			
		||||
    $response{node}->[0]->{name}->[0]=$_;
 | 
			
		||||
    if ($args[0] eq 'stat') {
 | 
			
		||||
      $response{node}->[0]->{data}->[0]= getstate($_,$tftpdir);
 | 
			
		||||
      $callback->(\%response);
 | 
			
		||||
      $::PXE_callback->(\%response);
 | 
			
		||||
    } elsif ($args[0]) { #If anything else, send it on to the destiny plugin, then setstate
 | 
			
		||||
      my $ent = $nthash{$_}->[0];
 | 
			
		||||
      my $osimgname = $ent->{'provmethod'};
 | 
			
		||||
@@ -488,13 +485,13 @@ sub process_request {
 | 
			
		||||
      if ($rc) {
 | 
			
		||||
        $response{node}->[0]->{errorcode}->[0]= $rc;
 | 
			
		||||
        $response{node}->[0]->{errorc}->[0]= $errstr;
 | 
			
		||||
        $callback->(\%response);
 | 
			
		||||
        $::PXE_callback->(\%response);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  my $inittime=0;
 | 
			
		||||
  if (exists($request->{inittime})) { $inittime= $request->{inittime}->[0];} 
 | 
			
		||||
  if (exists($::PXE_request->{inittime})) { $inittime= $::PXE_request->{inittime}->[0];} 
 | 
			
		||||
  if (!$inittime) { $inittime=0;}
 | 
			
		||||
 | 
			
		||||
  #dhcp stuff -- inittime is set when xcatd on sn is started
 | 
			
		||||
@@ -511,12 +508,12 @@ sub process_request {
 | 
			
		||||
      #}
 | 
			
		||||
      
 | 
			
		||||
      if ($do_dhcpsetup) {
 | 
			
		||||
        if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
        if ($::PXE_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],arg=>['-l'],
 | 
			
		||||
                        node=>\@nodes},$callback);
 | 
			
		||||
                        node=>\@nodes},$::PXE_callback);
 | 
			
		||||
        } else {
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],
 | 
			
		||||
                       node=>\@nodes},$callback);
 | 
			
		||||
                       node=>\@nodes},$::PXE_callback);
 | 
			
		||||
        }
 | 
			
		||||
     }  
 | 
			
		||||
 | 
			
		||||
@@ -568,7 +565,7 @@ sub process_request {
 | 
			
		||||
  #now run the end part of the prescripts
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') 
 | 
			
		||||
      $errored=0;
 | 
			
		||||
      if ($request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
      if ($::PXE_request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
         $sub_req->({command=>['runendpre'],
 | 
			
		||||
                     node=>\@nodes,
 | 
			
		||||
                     arg=>[$args[0], '-l']},\&pass_along);
 | 
			
		||||
@@ -581,7 +578,7 @@ sub process_request {
 | 
			
		||||
	  my $rsp;
 | 
			
		||||
	  $rsp->{errorcode}->[0]=1;
 | 
			
		||||
	  $rsp->{error}->[0]="Failed in running end prescripts\n";
 | 
			
		||||
	  $callback->($rsp);
 | 
			
		||||
	  $::PXE_callback->($rsp);
 | 
			
		||||
	  return; 
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -11,9 +11,6 @@ use Getopt::Long;
 | 
			
		||||
use xCAT::MsgUtils;
 | 
			
		||||
use xCAT::ServiceNodeUtils;
 | 
			
		||||
use xCAT::TableUtils;
 | 
			
		||||
my $addkcmdlinehandled;
 | 
			
		||||
my $request;
 | 
			
		||||
my $callback;
 | 
			
		||||
my $dhcpconf = "/etc/dhcpd.conf";
 | 
			
		||||
my $tftpdir = "/tftpboot/vsmp";
 | 
			
		||||
#my $dhcpver = 3;
 | 
			
		||||
@@ -75,7 +72,7 @@ sub setstate {
 | 
			
		||||
  my %chainhash = %{shift()};
 | 
			
		||||
  my %machash = %{shift()};
 | 
			
		||||
  my $kern = $bphash{$node}->[0]; #$bptab->getNodeAttribs($node,['kernel','initrd','kcmdline']);
 | 
			
		||||
  if (not $addkcmdlinehandled->{$node} and $kern->{addkcmdline}) {  #Implement the kcmdline append here for
 | 
			
		||||
  if (not $::VSMPPXE_addkcmdlinehandled->{$node} and $kern->{addkcmdline}) {  #Implement the kcmdline append here for
 | 
			
		||||
                               #most generic, least code duplication
 | 
			
		||||
        $kern->{kcmdline} .= " ".$kern->{addkcmdline};
 | 
			
		||||
  }
 | 
			
		||||
@@ -84,7 +81,7 @@ sub setstate {
 | 
			
		||||
      unless ($ipfn) {
 | 
			
		||||
        my @myself = xCAT::NetworkUtils->determinehostname();
 | 
			
		||||
        my $myname = $myself[(scalar @myself)-1];
 | 
			
		||||
         $callback->(
 | 
			
		||||
         $::VSMPPXE_callback->(
 | 
			
		||||
                {
 | 
			
		||||
                 error => [
 | 
			
		||||
                     "$myname: Unable to determine or reasonably guess the image server for $node"
 | 
			
		||||
@@ -189,11 +186,11 @@ sub pass_along {
 | 
			
		||||
          $errored=1;
 | 
			
		||||
       }
 | 
			
		||||
       if ($_->{_addkcmdlinehandled}) {
 | 
			
		||||
           $addkcmdlinehandled->{$_->{name}->[0]}=1;
 | 
			
		||||
           $::VSMPPXE_addkcmdlinehandled->{$_->{name}->[0]}=1;
 | 
			
		||||
           return; #Don't send back to client this internal hint
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
    $callback->($resp);
 | 
			
		||||
    $::VSMPPXE_callback->($resp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -288,29 +285,30 @@ sub preprocess_request {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub process_request {
 | 
			
		||||
  $request = shift;
 | 
			
		||||
  $callback = shift;
 | 
			
		||||
  $::VSMPPXE_request = shift;
 | 
			
		||||
  $::VSMPPXE_callback = shift;
 | 
			
		||||
  my $sub_req = shift;
 | 
			
		||||
  undef $::VSMPPXE_addkcmdlinehandled;
 | 
			
		||||
  my @args;
 | 
			
		||||
  my @nodes;
 | 
			
		||||
  my @rnodes;
 | 
			
		||||
  if (ref($request->{node})) {
 | 
			
		||||
    @rnodes = @{$request->{node}};
 | 
			
		||||
  if (ref($::VSMPPXE_request->{node})) {
 | 
			
		||||
    @rnodes = @{$::VSMPPXE_request->{node}};
 | 
			
		||||
  } else {
 | 
			
		||||
    if ($request->{node}) { 
 | 
			
		||||
    	@rnodes = ($request->{node}); 
 | 
			
		||||
    if ($::VSMPPXE_request->{node}) { 
 | 
			
		||||
    	@rnodes = ($::VSMPPXE_request->{node}); 
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  unless (@rnodes) {
 | 
			
		||||
      if ($usage{$request->{command}->[0]}) {
 | 
			
		||||
          $callback->({data=>$usage{$request->{command}->[0]}});
 | 
			
		||||
      if ($usage{$::VSMPPXE_request->{command}->[0]}) {
 | 
			
		||||
          $::VSMPPXE_callback->({data=>$usage{$::VSMPPXE_request->{command}->[0]}});
 | 
			
		||||
      }
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #if not shared, then help sync up
 | 
			
		||||
  if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
  if ($::VSMPPXE_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
   @nodes = ();
 | 
			
		||||
   foreach (@rnodes) {
 | 
			
		||||
     if (xCAT::NetworkUtils->nodeonmynet($_)) {
 | 
			
		||||
@@ -329,17 +327,17 @@ sub process_request {
 | 
			
		||||
     return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (ref($request->{arg})) {
 | 
			
		||||
      @args=@{$request->{arg}};
 | 
			
		||||
  if (ref($::VSMPPXE_request->{arg})) {
 | 
			
		||||
      @args=@{$::VSMPPXE_request->{arg}};
 | 
			
		||||
  } else {
 | 
			
		||||
      @args=($request->{arg});
 | 
			
		||||
      @args=($::VSMPPXE_request->{arg});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
   #now run the begin part of the prescripts
 | 
			
		||||
 | 
			
		||||
   unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') {
 | 
			
		||||
       $errored=0;
 | 
			
		||||
       if ($request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
       if ($::VSMPPXE_request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
           $sub_req->({command=>['runbeginpre'],
 | 
			
		||||
           node=>\@nodes,
 | 
			
		||||
           arg=>[$args[0], '-l']},\&pass_along);
 | 
			
		||||
@@ -352,7 +350,7 @@ sub process_request {
 | 
			
		||||
	  my $rsp;
 | 
			
		||||
	  $rsp->{errorcode}->[0]=1;
 | 
			
		||||
	  $rsp->{error}->[0]="Failed in running begin prescripts\n";
 | 
			
		||||
	  $callback->($rsp);
 | 
			
		||||
	  $::VSMPPXE_callback->($rsp);
 | 
			
		||||
	  return; 
 | 
			
		||||
       }
 | 
			
		||||
   }
 | 
			
		||||
@@ -375,7 +373,7 @@ sub process_request {
 | 
			
		||||
 | 
			
		||||
  if (! -r "$tftpdir/pxelinux.0") {
 | 
			
		||||
    unless (-r "/usr/lib/syslinux/pxelinux.0" or -r "/usr/share/syslinux/pxelinux.0") {
 | 
			
		||||
       $callback->({error=>["Unable to find pxelinux.0 "],errorcode=>[1]});
 | 
			
		||||
       $::VSMPPXE_callback->({error=>["Unable to find pxelinux.0 "],errorcode=>[1]});
 | 
			
		||||
       return;
 | 
			
		||||
    }
 | 
			
		||||
    if (-r "/usr/lib/syslinux/pxelinux.0") {
 | 
			
		||||
@@ -386,14 +384,14 @@ sub process_request {
 | 
			
		||||
     chmod(0644,"$tftpdir/pxelinux.0");
 | 
			
		||||
  }
 | 
			
		||||
  unless ( -r "$tftpdir/pxelinux.0" ) {
 | 
			
		||||
     $callback->({errror=>["Unable to find pxelinux.0 from syslinux"],errorcode=>[1]});
 | 
			
		||||
     $::VSMPPXE_callback->({errror=>["Unable to find pxelinux.0 from syslinux"],errorcode=>[1]});
 | 
			
		||||
     return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
  $errored=0;
 | 
			
		||||
  my $inittime=0;
 | 
			
		||||
  if (exists($request->{inittime})) { $inittime= $request->{inittime}->[0];}
 | 
			
		||||
  if (exists($::VSMPPXE_request->{inittime})) { $inittime= $::VSMPPXE_request->{inittime}->[0];}
 | 
			
		||||
  if (!$inittime) { $inittime=0;}
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') {
 | 
			
		||||
    $sub_req->({command=>['setdestiny'],
 | 
			
		||||
@@ -414,19 +412,19 @@ sub process_request {
 | 
			
		||||
    $response{node}->[0]->{name}->[0]=$_;
 | 
			
		||||
    if ($args[0] eq 'stat') {
 | 
			
		||||
      $response{node}->[0]->{data}->[0]= getstate($_);
 | 
			
		||||
      $callback->(\%response);
 | 
			
		||||
      $::VSMPPXE_callback->(\%response);
 | 
			
		||||
    } elsif ($args[0]) { #If anything else, send it on to the destiny plugin, then setstate
 | 
			
		||||
      ($rc,$errstr) = setstate($_,\%bphash,\%chainhash,\%machash);
 | 
			
		||||
      if ($rc) {
 | 
			
		||||
        $response{node}->[0]->{errorcode}->[0]= $rc;
 | 
			
		||||
        $response{node}->[0]->{errorc}->[0]= $errstr;
 | 
			
		||||
        $callback->(\%response);
 | 
			
		||||
        $::VSMPPXE_callback->(\%response);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  my $inittime=0;
 | 
			
		||||
  if (exists($request->{inittime})) { $inittime= $request->{inittime}->[0];} 
 | 
			
		||||
  if (exists($::VSMPPXE_request->{inittime})) { $inittime= $::VSMPPXE_request->{inittime}->[0];} 
 | 
			
		||||
  if (!$inittime) { $inittime=0;}
 | 
			
		||||
 | 
			
		||||
  #dhcp stuff -- inittime is set when xcatd on sn is started
 | 
			
		||||
@@ -443,12 +441,12 @@ sub process_request {
 | 
			
		||||
      #}
 | 
			
		||||
      
 | 
			
		||||
      if ($do_dhcpsetup) {
 | 
			
		||||
        if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
        if ($::VSMPPXE_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],arg=>['-l'],
 | 
			
		||||
                        node=>\@nodes},$callback);
 | 
			
		||||
                        node=>\@nodes},$::VSMPPXE_callback);
 | 
			
		||||
        } else {
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],
 | 
			
		||||
                       node=>\@nodes},$callback);
 | 
			
		||||
                       node=>\@nodes},$::VSMPPXE_callback);
 | 
			
		||||
        }
 | 
			
		||||
     }  
 | 
			
		||||
 | 
			
		||||
@@ -456,7 +454,7 @@ sub process_request {
 | 
			
		||||
  #now run the end part of the prescripts
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') 
 | 
			
		||||
      $errored=0;
 | 
			
		||||
      if ($request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
      if ($::VSMPPXE_request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
         $sub_req->({command=>['runendpre'],
 | 
			
		||||
                     node=>\@nodes,
 | 
			
		||||
                     arg=>[$args[0], '-l']},\&pass_along);
 | 
			
		||||
@@ -469,7 +467,7 @@ sub process_request {
 | 
			
		||||
	  my $rsp;
 | 
			
		||||
	  $rsp->{errorcode}->[0]=1;
 | 
			
		||||
	  $rsp->{error}->[0]="Failed in running end prescripts\n";
 | 
			
		||||
	  $callback->($rsp);
 | 
			
		||||
	  $::VSMPPXE_callback->($rsp);
 | 
			
		||||
	  return; 
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -11,9 +11,7 @@ use Getopt::Long;
 | 
			
		||||
use xCAT::Utils;
 | 
			
		||||
use xCAT::TableUtils;
 | 
			
		||||
use xCAT::ServiceNodeUtils;
 | 
			
		||||
my $addkcmdlinehandled;
 | 
			
		||||
my $request;
 | 
			
		||||
my $callback;
 | 
			
		||||
 | 
			
		||||
my $dhcpconf = "/etc/dhcpd.conf";
 | 
			
		||||
#my $tftpdir = "/tftpboot";
 | 
			
		||||
my $globaltftpdir = xCAT::TableUtils->getTftpDir();
 | 
			
		||||
@@ -102,7 +100,7 @@ sub setstate {
 | 
			
		||||
  if (ref $linuximghashref) { %linuximghash = %{$linuximghashref}; }
 | 
			
		||||
  my $imgaddkcmdline=($linuximghash{'boottarget'})? undef:$linuximghash{'addkcmdline'};
 | 
			
		||||
  my $kern = $bphash{$node}->[0]; #$bptab->getNodeAttribs($node,['kernel','initrd','kcmdline']);
 | 
			
		||||
  unless ($addkcmdlinehandled->{$node}) { #Tag to let us know the plugin had a special syntax implemented for addkcmdline
 | 
			
		||||
  unless ($::XNBA_addkcmdlinehandled->{$node}) { #Tag to let us know the plugin had a special syntax implemented for addkcmdline
 | 
			
		||||
    if ($kern->{addkcmdline} or ($imgaddkcmdline)) {
 | 
			
		||||
 | 
			
		||||
#Implement the kcmdline append here for
 | 
			
		||||
@@ -138,7 +136,7 @@ sub setstate {
 | 
			
		||||
            $kcmdlinehack =~ s/#TABLE:([^:#]+):([^:#]+):([^:#]+)#/$naval/;
 | 
			
		||||
        } else {
 | 
			
		||||
            my $msg =  "Table key of $2 not yet supported by boottarget mini-template";
 | 
			
		||||
            $callback->({
 | 
			
		||||
            $::XNBA_callback->({
 | 
			
		||||
                error => ["$msg"],
 | 
			
		||||
                errorcode => [1]
 | 
			
		||||
            });
 | 
			
		||||
@@ -279,11 +277,11 @@ sub pass_along {
 | 
			
		||||
          $errored=1;
 | 
			
		||||
       }
 | 
			
		||||
       if ($_->{_addkcmdlinehandled}) {
 | 
			
		||||
           $addkcmdlinehandled->{$_->{name}->[0]}=1;
 | 
			
		||||
           $::XNBA_addkcmdlinehandled->{$_->{name}->[0]}=1;
 | 
			
		||||
           return; #Don't send back to client this internal hint
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
    $callback->($resp);
 | 
			
		||||
    $::XNBA_callback->($resp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -376,27 +374,28 @@ sub preprocess_request {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub process_request {
 | 
			
		||||
  $request = shift;
 | 
			
		||||
  $callback = shift;
 | 
			
		||||
  $::XNBA_request = shift;
 | 
			
		||||
  $::XNBA_callback = shift;
 | 
			
		||||
  my $sub_req = shift;
 | 
			
		||||
  undef $::XNBA_addkcmdlinehandled;  # clear out any previous value
 | 
			
		||||
  my @args;
 | 
			
		||||
  my @nodes;
 | 
			
		||||
  my @rnodes;
 | 
			
		||||
  if (ref($request->{node})) {
 | 
			
		||||
    @rnodes = @{$request->{node}};
 | 
			
		||||
  if (ref($::XNBA_request->{node})) {
 | 
			
		||||
    @rnodes = @{$::XNBA_request->{node}};
 | 
			
		||||
  } else {
 | 
			
		||||
    if ($request->{node}) { @rnodes = ($request->{node}); }
 | 
			
		||||
    if ($::XNBA_request->{node}) { @rnodes = ($::XNBA_request->{node}); }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  unless (@rnodes) {
 | 
			
		||||
      if ($usage{$request->{command}->[0]}) {
 | 
			
		||||
          $callback->({data=>$usage{$request->{command}->[0]}});
 | 
			
		||||
      if ($usage{$::XNBA_request->{command}->[0]}) {
 | 
			
		||||
          $::XNBA_callback->({data=>$usage{$::XNBA_request->{command}->[0]}});
 | 
			
		||||
      }
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #if not shared, then help sync up
 | 
			
		||||
  if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
  if ($::XNBA_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
   @nodes = ();
 | 
			
		||||
   foreach (@rnodes) {
 | 
			
		||||
     if (xCAT::NetworkUtils->nodeonmynet($_)) {
 | 
			
		||||
@@ -415,16 +414,16 @@ sub process_request {
 | 
			
		||||
     return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (ref($request->{arg})) {
 | 
			
		||||
    @args=@{$request->{arg}};
 | 
			
		||||
  if (ref($::XNBA_request->{arg})) {
 | 
			
		||||
    @args=@{$::XNBA_request->{arg}};
 | 
			
		||||
  } else {
 | 
			
		||||
    @args=($request->{arg});
 | 
			
		||||
    @args=($::XNBA_request->{arg});
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #now run the begin part of the prescripts
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') {
 | 
			
		||||
      $errored=0;
 | 
			
		||||
      if ($request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
      if ($::XNBA_request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
	  $sub_req->({command=>['runbeginpre'],
 | 
			
		||||
		      node=>\@nodes,
 | 
			
		||||
		      arg=>[$args[0], '-l']},\&pass_along);
 | 
			
		||||
@@ -437,7 +436,7 @@ sub process_request {
 | 
			
		||||
	  my $rsp;
 | 
			
		||||
 	  $rsp->{errorcode}->[0]=1;
 | 
			
		||||
	  $rsp->{error}->[0]="Failed in running begin prescripts.\n";
 | 
			
		||||
	  $callback->($rsp);
 | 
			
		||||
	  $::XNBA_callback->($rsp);
 | 
			
		||||
	  return; 
 | 
			
		||||
      }
 | 
			
		||||
  }  
 | 
			
		||||
@@ -445,21 +444,21 @@ sub process_request {
 | 
			
		||||
  #back to normal business
 | 
			
		||||
  if (! -r "$globaltftpdir/xcat/pxelinux.0") {
 | 
			
		||||
    unless (-r $::XCATROOT."/share/xcat/netboot/syslinux/pxelinux.0") {
 | 
			
		||||
       $callback->({error=>["Unable to find pxelinux.0 at ".$::XCATROOT."/share/xcat/netboot/syslinux/pxelinux.0"],errorcode=>[1]});
 | 
			
		||||
       $::XNBA_callback->({error=>["Unable to find pxelinux.0 at ".$::XCATROOT."/share/xcat/netboot/syslinux/pxelinux.0"],errorcode=>[1]});
 | 
			
		||||
       return;
 | 
			
		||||
    }
 | 
			
		||||
    copy($::XCATROOT."/share/xcat/netboot/syslinux/pxelinux.0","$globaltftpdir/xcat/pxelinux.0");
 | 
			
		||||
     chmod(0644,"$globaltftpdir/xcat/pxelinux.0");
 | 
			
		||||
  }
 | 
			
		||||
  unless ( -r "$globaltftpdir/xcat/pxelinux.0" ) {
 | 
			
		||||
     $callback->({error=>["Unable to find pxelinux.0 from syslinux"],errorcode=>[1]});
 | 
			
		||||
     $::XNBA_callback->({error=>["Unable to find pxelinux.0 from syslinux"],errorcode=>[1]});
 | 
			
		||||
     return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
  my $inittime=0;
 | 
			
		||||
  if (exists($request->{inittime})) { $inittime= $request->{inittime}->[0];} 
 | 
			
		||||
  if (exists($::XNBA_request->{inittime})) { $inittime= $::XNBA_request->{inittime}->[0];} 
 | 
			
		||||
  if (!$inittime) { $inittime=0;}
 | 
			
		||||
  $errored=0;
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') {
 | 
			
		||||
@@ -499,7 +498,7 @@ sub process_request {
 | 
			
		||||
    $response{node}->[0]->{name}->[0]=$_;
 | 
			
		||||
    if ($args[0] eq 'stat') {
 | 
			
		||||
      $response{node}->[0]->{data}->[0]= getstate($_,$tftpdir);
 | 
			
		||||
      $callback->(\%response);
 | 
			
		||||
      $::XNBA_callback->(\%response);
 | 
			
		||||
    } elsif ($args[0]) { #If anything else, send it on to the destiny plugin, then setstate
 | 
			
		||||
      my $rc;
 | 
			
		||||
      my $errstr;
 | 
			
		||||
@@ -514,7 +513,7 @@ sub process_request {
 | 
			
		||||
      #if ($rc) {
 | 
			
		||||
      #  $response{node}->[0]->{errorcode}->[0]= $rc;
 | 
			
		||||
      #  $response{node}->[0]->{errorc}->[0]= $errstr;
 | 
			
		||||
      #  $callback->(\%response);
 | 
			
		||||
      #  $::XNBA_callback->(\%response);
 | 
			
		||||
      #}
 | 
			
		||||
      if($args[0] eq 'offline') {
 | 
			
		||||
        unlink($tftpdir."/xcat/xnba/nodes/".$_);
 | 
			
		||||
@@ -540,12 +539,12 @@ sub process_request {
 | 
			
		||||
      #}
 | 
			
		||||
      
 | 
			
		||||
      if ($do_dhcpsetup) {
 | 
			
		||||
        if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
        if ($::XNBA_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],arg=>['-l'],
 | 
			
		||||
                        node=>\@nodes},$callback);
 | 
			
		||||
                        node=>\@nodes},$::XNBA_callback);
 | 
			
		||||
        } else {
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],
 | 
			
		||||
                       node=>\@nodes},$callback);
 | 
			
		||||
                       node=>\@nodes},$::XNBA_callback);
 | 
			
		||||
        }
 | 
			
		||||
     }  
 | 
			
		||||
  }
 | 
			
		||||
@@ -553,7 +552,7 @@ sub process_request {
 | 
			
		||||
  #now run the end part of the prescripts
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') 
 | 
			
		||||
      $errored=0;
 | 
			
		||||
      if ($request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
      if ($::XNBA_request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
	  $sub_req->({command=>['runendpre'],
 | 
			
		||||
		      node=>\@nodes,
 | 
			
		||||
		      arg=>[$args[0], '-l']},\&pass_along);
 | 
			
		||||
@@ -566,7 +565,7 @@ sub process_request {
 | 
			
		||||
	  my $rsp;
 | 
			
		||||
 	  $rsp->{errorcode}->[0]=1;
 | 
			
		||||
	  $rsp->{error}->[0]="Failed in running end prescripts.\n";
 | 
			
		||||
	  $callback->($rsp);
 | 
			
		||||
	  $::XNBA_callback->($rsp);
 | 
			
		||||
	  return; 
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
@@ -13,11 +13,8 @@ use Socket;
 | 
			
		||||
use Getopt::Long;
 | 
			
		||||
use xCAT::Table;
 | 
			
		||||
 | 
			
		||||
my $request;
 | 
			
		||||
my %breaknetbootnodes;
 | 
			
		||||
our %normalnodes;
 | 
			
		||||
my $callback;
 | 
			
		||||
my $sub_req;
 | 
			
		||||
my $dhcpconf = "/etc/dhcpd.conf";
 | 
			
		||||
my $globaltftpdir = xCAT::TableUtils->getTftpDir();
 | 
			
		||||
#my $dhcpver = 3;
 | 
			
		||||
@@ -104,7 +101,7 @@ sub setstate {
 | 
			
		||||
                  if (xCAT::InstUtils->is_me($sn)) {
 | 
			
		||||
                      my @myself = xCAT::NetworkUtils->determinehostname();
 | 
			
		||||
                      my $myname = $myself[(scalar @myself)-1];
 | 
			
		||||
                      $::callback->(
 | 
			
		||||
                      $::YABOOT_callback->(
 | 
			
		||||
                          {
 | 
			
		||||
                          error => [
 | 
			
		||||
                          "$myname: Unable to determine the image server for $node on service node $sn"
 | 
			
		||||
@@ -116,7 +113,7 @@ sub setstate {
 | 
			
		||||
                  }
 | 
			
		||||
              }
 | 
			
		||||
          } else {
 | 
			
		||||
              $::callback->(
 | 
			
		||||
              $::YABOOT_callback->(
 | 
			
		||||
                          {
 | 
			
		||||
                          error => [
 | 
			
		||||
                          "$myname: Unable to determine the image server for $node"
 | 
			
		||||
@@ -177,7 +174,7 @@ sub setstate {
 | 
			
		||||
              delete $normalnodes{$node}; #Signify to omit this from one makedhcp command
 | 
			
		||||
              #$sub_req->({command=>['makedhcp'], #batched elsewhere, this code is stale, hopefully
 | 
			
		||||
              #       node=>[$node],
 | 
			
		||||
              #        arg=>['-s','filename = \"xcat/nonexistant_file_to_intentionally_break_netboot_for_localboot_to_work\";']},$callback);
 | 
			
		||||
              #        arg=>['-s','filename = \"xcat/nonexistant_file_to_intentionally_break_netboot_for_localboot_to_work\";']},$::YABOOT_callback);
 | 
			
		||||
              print $pcfg "bye\n";
 | 
			
		||||
              close($pcfg);
 | 
			
		||||
            } elsif ($kern and $kern->{kernel}) {
 | 
			
		||||
@@ -231,13 +228,13 @@ sub setstate {
 | 
			
		||||
                        #to clear the filename field, so the logic is a little
 | 
			
		||||
                        #opposite
 | 
			
		||||
    #  $sub_req->({command=>['makedhcp'], #This is currently batched elswhere
 | 
			
		||||
    #         node=>[$node]},$callback);  #It hopefully will perform correctly
 | 
			
		||||
    #         node=>[$node]},$::YABOOT_callback);  #It hopefully will perform correctly
 | 
			
		||||
    if ($cref and $cref->{currstate} eq "boot") {
 | 
			
		||||
      $breaknetbootnodes{$node}=1;
 | 
			
		||||
      delete $normalnodes{$node}; #Signify to omit this from one makedhcp command
 | 
			
		||||
      #$sub_req->({command=>['makedhcp'], #batched elsewhere, this code is stale, hopefully
 | 
			
		||||
      #       node=>[$node],
 | 
			
		||||
      #        arg=>['-s','filename = \"xcat/nonexistant_file_to_intentionally_break_netboot_for_localboot_to_work\";']},$callback);
 | 
			
		||||
      #        arg=>['-s','filename = \"xcat/nonexistant_file_to_intentionally_break_netboot_for_localboot_to_work\";']},$::YABOOT_callback);
 | 
			
		||||
      print $pcfg "bye\n";
 | 
			
		||||
      close($pcfg);
 | 
			
		||||
    } elsif ($kern and $kern->{kernel}) {
 | 
			
		||||
@@ -309,7 +306,7 @@ sub pass_along {
 | 
			
		||||
 | 
			
		||||
#    print Dumper($resp);
 | 
			
		||||
    
 | 
			
		||||
    $callback->($resp);
 | 
			
		||||
    $::YABOOT_callback->($resp);
 | 
			
		||||
    if ($resp and ($resp->{errorcode} and $resp->{errorcode}->[0]) or ($resp->{error} and $resp->{error}->[0])) {
 | 
			
		||||
        $errored=1;
 | 
			
		||||
    }
 | 
			
		||||
@@ -409,31 +406,30 @@ sub preprocess_request {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
sub process_request {
 | 
			
		||||
  $request = shift;
 | 
			
		||||
  $callback = shift;
 | 
			
		||||
  $::callback=$callback;
 | 
			
		||||
  $sub_req = shift;
 | 
			
		||||
  my $command  = $request->{command}->[0];
 | 
			
		||||
  $::YABOOT_request = shift;
 | 
			
		||||
  $::YABOOT_callback = shift;
 | 
			
		||||
  my $sub_req = shift;
 | 
			
		||||
  my $command  = $::YABOOT_request->{command}->[0];
 | 
			
		||||
  %breaknetbootnodes=();
 | 
			
		||||
  %normalnodes=();
 | 
			
		||||
 | 
			
		||||
  my @args;
 | 
			
		||||
  my @nodes;
 | 
			
		||||
  my @rnodes;
 | 
			
		||||
  if (ref($request->{node})) {
 | 
			
		||||
    @rnodes = @{$request->{node}};
 | 
			
		||||
  if (ref($::YABOOT_request->{node})) {
 | 
			
		||||
    @rnodes = @{$::YABOOT_request->{node}};
 | 
			
		||||
  } else {
 | 
			
		||||
    if ($request->{node}) { @rnodes = ($request->{node}); }
 | 
			
		||||
    if ($::YABOOT_request->{node}) { @rnodes = ($::YABOOT_request->{node}); }
 | 
			
		||||
  }
 | 
			
		||||
  unless (@rnodes) {
 | 
			
		||||
      if ($usage{$request->{command}->[0]}) {
 | 
			
		||||
          $callback->({data=>$usage{$request->{command}->[0]}});
 | 
			
		||||
      if ($usage{$::YABOOT_request->{command}->[0]}) {
 | 
			
		||||
          $::YABOOT_callback->({data=>$usage{$::YABOOT_request->{command}->[0]}});
 | 
			
		||||
      }
 | 
			
		||||
      return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #if not shared tftpdir, then filter, otherwise, set up everything
 | 
			
		||||
  if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
  if ($::YABOOT_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
   @nodes = ();
 | 
			
		||||
   foreach (@rnodes) {
 | 
			
		||||
     if (xCAT::NetworkUtils->nodeonmynet($_)) {
 | 
			
		||||
@@ -452,16 +448,16 @@ sub process_request {
 | 
			
		||||
     return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (ref($request->{arg})) {
 | 
			
		||||
    @args=@{$request->{arg}};
 | 
			
		||||
  if (ref($::YABOOT_request->{arg})) {
 | 
			
		||||
    @args=@{$::YABOOT_request->{arg}};
 | 
			
		||||
  } else {
 | 
			
		||||
    @args=($request->{arg});
 | 
			
		||||
    @args=($::YABOOT_request->{arg});
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  #now run the begin part of the prescripts
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') {
 | 
			
		||||
      $errored=0;
 | 
			
		||||
      if ($request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
      if ($::YABOOT_request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
	  $sub_req->({command=>['runbeginpre'],
 | 
			
		||||
		      node=>\@nodes,
 | 
			
		||||
		      arg=>[$args[0], '-l']},\&pass_along);
 | 
			
		||||
@@ -474,14 +470,14 @@ sub process_request {
 | 
			
		||||
	  my $rsp;
 | 
			
		||||
 	  $rsp->{errorcode}->[0]=1;
 | 
			
		||||
	  $rsp->{error}->[0]="Failed in running begin prescripts.\n";
 | 
			
		||||
	  $callback->($rsp);
 | 
			
		||||
	  $::YABOOT_callback->($rsp);
 | 
			
		||||
	  return; 
 | 
			
		||||
      }
 | 
			
		||||
  } 
 | 
			
		||||
 | 
			
		||||
  #back to normal business
 | 
			
		||||
  my $inittime=0;
 | 
			
		||||
  if (exists($request->{inittime})) { $inittime= $request->{inittime}->[0];}
 | 
			
		||||
  if (exists($::YABOOT_request->{inittime})) { $inittime= $::YABOOT_request->{inittime}->[0];}
 | 
			
		||||
  if (!$inittime) { $inittime=0;}
 | 
			
		||||
  $errored=0;
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') {
 | 
			
		||||
@@ -521,7 +517,7 @@ sub process_request {
 | 
			
		||||
    $response{node}->[0]->{name}->[0]=$_;
 | 
			
		||||
    if ($args[0] eq 'stat') {
 | 
			
		||||
      $response{node}->[0]->{data}->[0]= getstate($_,$tftpdir);
 | 
			
		||||
      $callback->(\%response);
 | 
			
		||||
      $::YABOOT_callback->(\%response);
 | 
			
		||||
    } elsif ($args[0]) { #If anything else, send it on to the destiny plugin, then setstate
 | 
			
		||||
      my $ent = $typehash->{$_}->[0]; 
 | 
			
		||||
      my $osimgname = $ent->{'provmethod'};
 | 
			
		||||
@@ -534,7 +530,7 @@ sub process_request {
 | 
			
		||||
      if ($rc) {
 | 
			
		||||
        $response{node}->[0]->{errorcode}->[0]= $rc;
 | 
			
		||||
        $response{node}->[0]->{errorc}->[0]= $errstr;
 | 
			
		||||
        $callback->(\%response);
 | 
			
		||||
        $::YABOOT_callback->(\%response);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }# end of foreach node    
 | 
			
		||||
@@ -577,7 +573,7 @@ sub process_request {
 | 
			
		||||
            my $rsp;
 | 
			
		||||
            push @{$rsp->{data}},
 | 
			
		||||
                  "stop configuration because yaboot DOES NOT work for $os provision, please change noderes.netboot=grub2 instead.\n";
 | 
			
		||||
            xCAT::MsgUtils->message("E", $rsp, $callback);
 | 
			
		||||
            xCAT::MsgUtils->message("E", $rsp, $::YABOOT_callback);
 | 
			
		||||
            return;                    
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -589,7 +585,7 @@ sub process_request {
 | 
			
		||||
                my $rsp;
 | 
			
		||||
                push @{$rsp->{data}},
 | 
			
		||||
                  "stop configuration because yaboot-xcat need to be installed for $os.\n";
 | 
			
		||||
                xCAT::MsgUtils->message("E", $rsp, $callback);       
 | 
			
		||||
                xCAT::MsgUtils->message("E", $rsp, $::YABOOT_callback);       
 | 
			
		||||
                return; 
 | 
			
		||||
              }
 | 
			
		||||
        } elsif (($osv =~ /rh/ and int($osn) >= 6) or
 | 
			
		||||
@@ -600,7 +596,7 @@ sub process_request {
 | 
			
		||||
                my $rsp;
 | 
			
		||||
                push @{$rsp->{data}},
 | 
			
		||||
                  "stop configuration because rsync does not exist or is not executable.\n";
 | 
			
		||||
                xCAT::MsgUtils->message("E", $rsp, $callback);            
 | 
			
		||||
                xCAT::MsgUtils->message("E", $rsp, $::YABOOT_callback);            
 | 
			
		||||
                return;
 | 
			
		||||
           }      
 | 
			
		||||
            my $yabootpath = $tftpdir."/yb/".$os;
 | 
			
		||||
@@ -622,7 +618,7 @@ sub process_request {
 | 
			
		||||
                my $rsp;
 | 
			
		||||
                push @{$rsp->{data}},
 | 
			
		||||
                  "stop configuration because Unable to find the os shipped yaboot file.\n";
 | 
			
		||||
                xCAT::MsgUtils->message("E", $rsp, $callback);
 | 
			
		||||
                xCAT::MsgUtils->message("E", $rsp, $::YABOOT_callback);
 | 
			
		||||
                return; 
 | 
			
		||||
              }          
 | 
			
		||||
 | 
			
		||||
@@ -633,7 +629,7 @@ sub process_request {
 | 
			
		||||
                my $rsp;
 | 
			
		||||
                push @{$rsp->{data}},
 | 
			
		||||
                  "stop configuration because $synccmd failed.\n";
 | 
			
		||||
                xCAT::MsgUtils->message("E", $rsp, $callback);
 | 
			
		||||
                xCAT::MsgUtils->message("E", $rsp, $::YABOOT_callback);
 | 
			
		||||
               return; 
 | 
			
		||||
            } 
 | 
			
		||||
        }
 | 
			
		||||
@@ -675,42 +671,42 @@ sub process_request {
 | 
			
		||||
                if (($osv =~ /rh/ and int($osn) >= 6) or 
 | 
			
		||||
                    ($osv =~ /sles/ and int($osn) >= 11)) {
 | 
			
		||||
                    my $fpath = "/yb/". $osentry."/yaboot"; 
 | 
			
		||||
                    if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
                    if ($::YABOOT_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
                    $sub_req->({command=>['makedhcp'],
 | 
			
		||||
                         node=>\@{$osimagenodehash{$osimage}},
 | 
			
		||||
                         arg=>['-l','-s','filename = \"'.$fpath.'\";']},$callback);
 | 
			
		||||
                         arg=>['-l','-s','filename = \"'.$fpath.'\";']},$::YABOOT_callback);
 | 
			
		||||
                    } else {
 | 
			
		||||
                    $sub_req->({command=>['makedhcp'],
 | 
			
		||||
                         node=>\@{$osimagenodehash{$osimage}},
 | 
			
		||||
                         arg=>['-s','filename = \"'.$fpath.'\";']},$callback);
 | 
			
		||||
                         arg=>['-s','filename = \"'.$fpath.'\";']},$::YABOOT_callback);
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command, only change local settings if already farmed
 | 
			
		||||
                    if ($::YABOOT_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command, only change local settings if already farmed
 | 
			
		||||
                    $sub_req->({command=>['makedhcp'],arg=>['-l'],
 | 
			
		||||
                           node=>\@{$osimagenodehash{$osimage}}},$callback);
 | 
			
		||||
                           node=>\@{$osimagenodehash{$osimage}}},$::YABOOT_callback);
 | 
			
		||||
                    } else {
 | 
			
		||||
                    $sub_req->({command=>['makedhcp'],
 | 
			
		||||
                         node=>\@{$osimagenodehash{$osimage}}},$callback);
 | 
			
		||||
                         node=>\@{$osimagenodehash{$osimage}}},$::YABOOT_callback);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command, only change local settings if already farmed
 | 
			
		||||
            if ($::YABOOT_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command, only change local settings if already farmed
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],arg=>['-l'],
 | 
			
		||||
                   node=>\@normalnodeset},$callback);
 | 
			
		||||
                   node=>\@normalnodeset},$::YABOOT_callback);
 | 
			
		||||
            } else {
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],
 | 
			
		||||
                 node=>\@normalnodeset},$callback);
 | 
			
		||||
                 node=>\@normalnodeset},$::YABOOT_callback);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
        if ($::YABOOT_request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],
 | 
			
		||||
             node=>\@breaknetboot,
 | 
			
		||||
             arg=>['-l','-s','filename = \"xcat/nonexistant_file_to_intentionally_break_netboot_for_localboot_to_work\";']},$callback);
 | 
			
		||||
             arg=>['-l','-s','filename = \"xcat/nonexistant_file_to_intentionally_break_netboot_for_localboot_to_work\";']},$::YABOOT_callback);
 | 
			
		||||
        } else {
 | 
			
		||||
            $sub_req->({command=>['makedhcp'],
 | 
			
		||||
             node=>\@breaknetboot,
 | 
			
		||||
             arg=>['-s','filename = \"xcat/nonexistant_file_to_intentionally_break_netboot_for_localboot_to_work\";']},$callback);
 | 
			
		||||
             arg=>['-s','filename = \"xcat/nonexistant_file_to_intentionally_break_netboot_for_localboot_to_work\";']},$::YABOOT_callback);
 | 
			
		||||
        }
 | 
			
		||||
     }
 | 
			
		||||
  }
 | 
			
		||||
@@ -718,7 +714,7 @@ sub process_request {
 | 
			
		||||
  #now run the end part of the prescripts
 | 
			
		||||
  unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') 
 | 
			
		||||
      $errored=0;
 | 
			
		||||
      if ($request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
      if ($::YABOOT_request->{'_disparatetftp'}->[0]) {  #the call is distrubuted to the service node already, so only need to handles my own children
 | 
			
		||||
	  $sub_req->({command=>['runendpre'],
 | 
			
		||||
		      node=>\@nodes,
 | 
			
		||||
		      arg=>[$args[0], '-l']},\&pass_along);
 | 
			
		||||
@@ -731,7 +727,7 @@ sub process_request {
 | 
			
		||||
	  my $rsp;
 | 
			
		||||
	  $rsp->{errorcode}->[0]=1;
 | 
			
		||||
	  $rsp->{error}->[0]="Failed in running end prescripts\n";
 | 
			
		||||
	  $callback->($rsp);
 | 
			
		||||
	  $::YABOOT_callback->($rsp);
 | 
			
		||||
	  return; 
 | 
			
		||||
      }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user