From cee982b8774ccd25cfadde8930b9a58ec8b4fad7 Mon Sep 17 00:00:00 2001 From: linggao Date: Mon, 10 Aug 2009 21:18:38 +0000 Subject: [PATCH] more on prescripts git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@3982 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/prescripts.pm | 6 +-- xCAT-server/lib/xcat/plugins/pxe.pm | 61 +++++++++------------- xCAT-server/lib/xcat/plugins/yaboot.pm | 50 ++++++------------ 3 files changed, 45 insertions(+), 72 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/prescripts.pm b/xCAT-server/lib/xcat/plugins/prescripts.pm index 74014504a..36069ede0 100644 --- a/xCAT-server/lib/xcat/plugins/prescripts.pm +++ b/xCAT-server/lib/xcat/plugins/prescripts.pm @@ -58,7 +58,7 @@ sub preprocess_request Getopt::Long::Configure("bundling"); Getopt::Long::Configure("pass_through"); GetOptions('l' => \$::LOCAL); - my $sn = xCAT::Utils->get_ServiceNode($nodes, $service, "MN"); + my $sn = xCAT::Utils->getSNformattedhash($nodes, $service, "MN"); my @requests; if ($::LOCAL) { #only handle the local nodes print "process local nodes: @$nodes\n"; @@ -164,7 +164,7 @@ sub runbeginpre if ($runnodes && (@$runnodes>0)) { my $runnodes_s=join(',', @$runnodes); my $rsp = {}; - $rsp->{data}->[0]="$localhostname: Running $scripts for nodes $runnodes_s."; + $rsp->{data}->[0]="$localhostname: Running begin scripts $scripts for nodes $runnodes_s."; $callback->($rsp); #now run the scripts @@ -217,7 +217,7 @@ sub runendpre my %runnodes_hash=(); my $rsp = {}; - $rsp->{data}->[0]="$localhostname: Running $scripts for nodes $runnodes_s."; + $rsp->{data}->[0]="$localhostname: Running end scripts $scripts for nodes $runnodes_s."; $callback->($rsp); #now run the scripts diff --git a/xCAT-server/lib/xcat/plugins/pxe.pm b/xCAT-server/lib/xcat/plugins/pxe.pm index bd347eff6..491ffd8f2 100644 --- a/xCAT-server/lib/xcat/plugins/pxe.pm +++ b/xCAT-server/lib/xcat/plugins/pxe.pm @@ -9,7 +9,6 @@ use Getopt::Long; my $request; my $callback; -my $callback1; my $dhcpconf = "/etc/dhcpd.conf"; my $tftpdir = "/tftpboot"; #my $dhcpver = 3; @@ -222,26 +221,12 @@ sub pass_along { } } -sub pass_along1 { - my $resp = shift; - $callback1->($resp); - if ($resp and ($resp->{errorcode} and $resp->{errorcode}->[0]) or ($resp->{error} and $resp->{error}->[0])) { - $errored=1; - } - foreach (@{$resp->{node}}) { - if ($_->{error} or $_->{errorcode}) { - $errored=1; - } - } -} - - sub preprocess_request { my $req = shift; if ($req->{_xcatpreprocessed}->[0] == 1) { return [$req]; } - $callback1 = shift; + my $callback1 = shift; my $command = $req->{command}->[0]; my $sub_req = shift; my @args=(); @@ -290,20 +275,6 @@ sub preprocess_request { return; } - #now run the begin part of the prescripts - my @nodes=(); - if (ref($req->{node})) { - @nodes = @{$req->{node}}; - } else { - if ($req->{node}) { @nodes = ($req->{node}); } - } - $errored=0; - unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') { - $sub_req->({command=>['runbeginpre'], - node=>\@nodes, - arg=>[$args[0]]},\&pass_along1); - } - if ($errored) { return; } #Assume shared tftp directory for boring people, but for cool people, help sync up tftpdirectory contents when #they specify no sharedtftp in site table @@ -403,7 +374,29 @@ sub process_request { } else { @nodes = @rnodes; } - + + if (ref($request->{arg})) { + @args=@{$request->{arg}}; + } else { + @args=($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 + $sub_req->({command=>['runbeginpre'], + node=>\@nodes, + arg=>[$args[0], '-l']},\&pass_along); + } else { #nodeset did not distribute to the service node, here we need to let runednpre to distribute the nodes to their masters + $sub_req->({command=>['runbeginpre'], + node=>\@rnodes, + arg=>[$args[0]]},\&pass_along); + } + if ($errored) { return; } + } + + #back to normal business 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]}); @@ -422,11 +415,7 @@ sub process_request { } - if (ref($request->{arg})) { - @args=@{$request->{arg}}; - } else { - @args=($request->{arg}); - } + $errored=0; unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') { $sub_req->({command=>['setdestiny'], diff --git a/xCAT-server/lib/xcat/plugins/yaboot.pm b/xCAT-server/lib/xcat/plugins/yaboot.pm index 45ec0918f..09f51e38b 100644 --- a/xCAT-server/lib/xcat/plugins/yaboot.pm +++ b/xCAT-server/lib/xcat/plugins/yaboot.pm @@ -11,7 +11,6 @@ my $request; my %breaknetbootnodes; my %normalnodes; my $callback; -my $callback1; my $sub_req; my $dhcpconf = "/etc/dhcpd.conf"; my $tftpdir = "/tftpboot"; @@ -205,28 +204,12 @@ sub pass_along { } } -sub pass_along1 { - print "pass_along1\n"; - my $resp = shift; - -# print Dumper($resp); - - $callback1->($resp); - if ($resp and ($resp->{errorcode} and $resp->{errorcode}->[0]) or ($resp->{error} and $resp->{error}->[0])) { - $errored=1; - } - foreach (@{$resp->{node}}) { - if ($_->{error} or $_->{errorcode}) { - $errored=1; - } - } -} sub preprocess_request { my $req = shift; if ($req->{_xcatpreprocessed}->[0] == 1) { return [$req]; } - $callback1 = shift; + my $callback1 = shift; my $command = $req->{command}->[0]; my $sub_req = shift; my @args=(); @@ -275,20 +258,6 @@ sub preprocess_request { return; } - #now run the begin part of the prescripts - my @nodes=(); - if (ref($req->{node})) { - @nodes = @{$req->{node}}; - } else { - if ($req->{node}) { @nodes = ($req->{node}); } - } - $errored=0; - unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') { - $sub_req->({command=>['runbeginpre'], - node=>\@nodes, - arg=>[$args[0]]},\&pass_along1); - } - if ($errored) { return; } #Assume shared tftp directory for boring people, but for cool people, help sync up tftpdirectory contents when #they specify no sharedtftp in site table @@ -363,7 +332,6 @@ sub process_request { return; } - #back to normal business #if not shared tftpdir, then filter, otherwise, set up everything if ($request->{'_disparatetftp'}->[0]) { #reading hint from preprocess_command @nodes = (); @@ -383,6 +351,22 @@ sub process_request { @args=($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 + $sub_req->({command=>['runbeginpre'], + node=>\@nodes, + arg=>[$args[0], '-l']},\&pass_along); + } else { #nodeset did not distribute to the service node, here we need to let runednpre to distribute the nodes to their masters + $sub_req->({command=>['runbeginpre'], + node=>\@rnodes, + arg=>[$args[0]]},\&pass_along); + } + if ($errored) { return; } + } + + #back to normal business $errored=0; unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') { $sub_req->({command=>['setdestiny'],