From 97f9d4da8fbbd22a100e62b54c5d7648f7263315 Mon Sep 17 00:00:00 2001 From: chenglch Date: Fri, 23 Dec 2016 13:45:20 +0800 Subject: [PATCH] Do not update bootparams table when running nodeset With the nytprof tool, the buttleneck is the time to update the bootparams table.To optimize the performance on large scale nodes, this patch tranfer the bootparams hash through variable reference. posible impact: getdestiny can not get the information about bootparams. partial-issue: #2024 --- xCAT-server/lib/xcat/plugins/anaconda.pm | 45 +++++------------ xCAT-server/lib/xcat/plugins/debian.pm | 28 +++-------- xCAT-server/lib/xcat/plugins/destiny.pm | 16 +++--- xCAT-server/lib/xcat/plugins/grub2.pm | 9 ++-- xCAT-server/lib/xcat/plugins/petitboot.pm | 9 ++-- xCAT-server/lib/xcat/plugins/pxe.pm | 7 +-- xCAT-server/lib/xcat/plugins/sles.pm | 60 +++++++---------------- xCAT-server/lib/xcat/plugins/vsmppxe.pm | 7 +-- xCAT-server/lib/xcat/plugins/xnba.pm | 10 ++-- 9 files changed, 69 insertions(+), 122 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/anaconda.pm b/xCAT-server/lib/xcat/plugins/anaconda.pm index 6decce701..513cedb15 100644 --- a/xCAT-server/lib/xcat/plugins/anaconda.pm +++ b/xCAT-server/lib/xcat/plugins/anaconda.pm @@ -172,6 +172,7 @@ sub mknetboot if ($req->{command}->[0] =~ 'mkstatelite') { $statelite = "true"; } + my $bootparams = ${$req->{bootparams}}; my $globaltftpdir = "/tftpboot"; my $nodes = @{ $req->{node} }; my @args = @{ $req->{arg} } if (exists($req->{arg})); @@ -232,7 +233,6 @@ sub mknetboot my %donetftp = (); my %oents = %{ $ostab->getNodesAttribs(\@nodes, [qw(os arch profile provmethod)]) }; my $restab = xCAT::Table->new('noderes'); - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $hmtab = xCAT::Table->new('nodehm'); my $mactab = xCAT::Table->new('mac'); @@ -249,8 +249,6 @@ sub mknetboot $stateHash = $statetab->getNodesAttribs(\@nodes, ['statemnt']); } - #my $addkcmdhash = - # $bptab->getNodesAttribs(\@nodes, ['addkcmdline']); # Warning message for nodeset install/netboot/statelite foreach my $knode (keys %oents) @@ -950,15 +948,9 @@ sub mknetboot $kcmdline .= " MNTOPTS=$mntoptions"; } } - - $bptab->setNodeAttribs( - $node, - { - kernel => $kernstr, - initrd => $initrdstr, - kcmdline => $kcmdline - } - ); + $bootparams->{$node}->[0]->{kernel} = $kernstr; + $bootparams->{$node}->[0]->{initrd} = $initrdstr; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } } @@ -971,6 +963,7 @@ sub mkinstall my @nodes = @{ $request->{node} }; my $noupdateinitrd = $request->{'noupdateinitrd'}; my $ignorekernelchk = $request->{'ignorekernelchk'}; + my $bootparams = ${$request->{bootparams}}; #my $sitetab = xCAT::Table->new('site'); my $linuximagetab; @@ -1023,7 +1016,6 @@ sub mkinstall my $ostab = xCAT::Table->new('nodetype'); my %donetftp; my $restab = xCAT::Table->new('noderes'); - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $hmtab = xCAT::Table->new('nodehm'); my $mactab = xCAT::Table->new('mac'); my %osents = %{ $ostab->getNodesAttribs(\@nodes, [ 'profile', 'os', 'arch', 'provmethod' ]) }; @@ -1033,8 +1025,6 @@ sub mkinstall [ 'serialport', 'serialspeed', 'serialflow' ]) }; my %macents = %{ $mactab->getNodesAttribs(\@nodes, ['mac']) }; - #my $addkcmdhash = - # $bptab->getNodesAttribs(\@nodes, ['addkcmdline']); require xCAT::Template; # Warning message for nodeset install/netboot/statelite @@ -1668,14 +1658,9 @@ sub mkinstall xCAT::MsgUtils->trace($verbose_on_off, "d", "anaconda->mkinstall: kcmdline=$kcmdline kernal=$k initrd=$i"); - $bptab->setNodeAttribs( - $node, - { - kernel => $k, - initrd => $i, - kcmdline => $kcmdline - } - ); + $bootparams->{$node}->[0]->{kernel} = $k; + $bootparams->{$node}->[0]->{initrd} = $i; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } else { @@ -1701,6 +1686,7 @@ sub mksysclone my $callback = shift; my $doreq = shift; my @nodes = @{ $request->{node} }; + my $bootparams = ${$request->{bootparams}}; my $linuximagetab; my $osimagetab; my %img_hash = (); @@ -1727,7 +1713,6 @@ sub mksysclone my $ostab = xCAT::Table->new('nodetype'); my %donetftp; my $restab = xCAT::Table->new('noderes'); - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $hmtab = xCAT::Table->new('nodehm'); my $mactab = xCAT::Table->new('mac'); @@ -2064,15 +2049,9 @@ sub mksysclone $k = "xcat/$kernpath"; $i = "xcat/$initrdpath"; - - $bptab->setNodeAttribs( - $node, - { - kernel => $k, - initrd => $i, - kcmdline => $kcmdline - } - ); + $bootparams->{$node}->[0]->{kernel} = $k; + $bootparams->{$node}->[0]->{initrd} = $i; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } else { diff --git a/xCAT-server/lib/xcat/plugins/debian.pm b/xCAT-server/lib/xcat/plugins/debian.pm index 89c405cbf..823e80b36 100644 --- a/xCAT-server/lib/xcat/plugins/debian.pm +++ b/xCAT-server/lib/xcat/plugins/debian.pm @@ -445,6 +445,7 @@ sub mkinstall { my $callback = shift; my $doreq = shift; my @nodes = @{ $request->{node} }; + my $bootparams = ${$request->{bootparams}}; my $sitetab = xCAT::Table->new('site'); my $linuximagetab; my $osimagetab; @@ -490,7 +491,6 @@ sub mkinstall { my $ostab = xCAT::Table->new('nodetype'); my %donetftp; my $restab = xCAT::Table->new('noderes'); - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $hmtab = xCAT::Table->new('nodehm'); my $mactab = xCAT::Table->new('mac'); my %osents = %{ $ostab->getNodesAttribs(\@nodes, [ 'profile', 'os', 'arch', 'provmethod' ]) }; @@ -502,8 +502,6 @@ sub mkinstall { [ 'serialport', 'serialspeed', 'serialflow' ]) }; my %macents = %{ $mactab->getNodesAttribs(\@nodes, ['mac']) }; - #my $addkcmdhash = - # $bptab->getNodesAttribs(\@nodes, ['addkcmdline']); require xCAT::Template; # Warning message for nodeset install/netboot/statelite @@ -923,10 +921,9 @@ sub mkinstall { } xCAT::MsgUtils->trace($verbose_on_off, "d", "debian->mkinstall: kcmdline=$kcmdline kernal=$rtftppath/vmlinuz initrd=$rtftppath/initrd.img"); - - $bptab->setNodeAttribs($node, { kernel => "$rtftppath/vmlinuz", - initrd => "$rtftppath/initrd.img", - kcmdline => $kcmdline }); + $bootparams->{$node}->[0]->{kernel} = "$rtftppath/vmlinuz"; + $bootparams->{$node}->[0]->{initrd} = "$rtftppath/initrd.img"; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } else { $callback->({ error => ["Install image not found in $installroot/$os/$arch"], @@ -945,6 +942,7 @@ sub mknetboot if ($req->{command}->[0] =~ 'mkstatelite') { $statelite = "true"; } + my $bootparams = ${$request->{bootparams}}; my $tftpdir = "/tftpboot"; my $nodes = @{ $req->{node} }; my @args = @{ $req->{arg} }; @@ -991,7 +989,6 @@ sub mknetboot my %donetftp = (); my %oents = %{ $ostab->getNodesAttribs(\@nodes, [qw(os arch profile provmethod)]) }; my $restab = xCAT::Table->new('noderes'); - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $hmtab = xCAT::Table->new('nodehm'); my $mactab = xCAT::Table->new('mac'); @@ -1008,9 +1005,6 @@ sub mknetboot $stateHash = $statetab->getNodesAttribs(\@nodes, ['statemnt']); } - #my $addkcmdhash = - # $bptab->getNodesAttribs(\@nodes, ['addkcmdline']); - # Warning message for nodeset install/netboot/statelite foreach my $knode (keys %oents) { my $ent = $oents{$knode}->[0]; @@ -1589,15 +1583,9 @@ sub mknetboot $kcmdline .= " MNTOPTS=$mntoptions"; } } - - $bptab->setNodeAttribs( - $node, - { - kernel => "$kernstr", - initrd => "$initrdstr", - kcmdline => $kcmdline - } - ); + $bootparams->{$node}->[0]->{kernel} = $kernstr; + $bootparams->{$node}->[0]->{initrd} = $initrdstr; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } #my $rc = xCAT::TableUtils->create_postscripts_tar(); diff --git a/xCAT-server/lib/xcat/plugins/destiny.pm b/xCAT-server/lib/xcat/plugins/destiny.pm index d2eb6b26d..f43449209 100755 --- a/xCAT-server/lib/xcat/plugins/destiny.pm +++ b/xCAT-server/lib/xcat/plugins/destiny.pm @@ -26,7 +26,6 @@ my $errored = 0; #DESTINY SCOPED GLOBALS my $chaintab; my $iscsitab; -my $bptab; my $typetab; my $restab; @@ -94,6 +93,7 @@ sub setdestiny { my $noupdate = shift; $chaintab = xCAT::Table->new('chain', -create => 1); my @nodes = @{ $req->{node} }; + my $bphash = $req->{bootparams}; @ARGV = @{ $req->{arg} }; my $noupdateinitrd; @@ -157,7 +157,6 @@ sub setdestiny { unless ($iscsitab) { $callback->({ error => "Unable to open iscsi table to get iscsiboot parameters", errorcode => [1] }); } - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $nodetype = xCAT::Table->new('nodetype'); my $ntents = $nodetype->getNodesAttribs($req->{node}, [qw(os arch profile)]); my $ients = $iscsitab->getNodesAttribs($req->{node}, [qw(kernel kcmdline initrd)]); @@ -168,11 +167,9 @@ sub setdestiny { unless ($ntent and $ntent->{arch} =~ /x86/ and -f ("$tftpdir/undionly.kpxe" or -f "$tftpdir/xcat/xnba.kpxe")) { $callback->({ error => "$_: No iscsi boot data available", errorcode => [1] }); } #If x86 node and undionly.kpxe exists, presume they know what they are doing next; } - my $hash; - $hash->{kernel} = $ient->{kernel}; - if ($ient->{initrd}) { $hash->{initrd} = $ient->{initrd} } - if ($ient->{kcmdline}) { $hash->{kcmdline} = $ient->{kcmdline} } - $bptab->setNodeAttribs($_, $hash); + $bphash->{kernel} = $ient->{kernel}; + if ($ient->{initrd}) { $bphash->{initrd} = $ient->{initrd} } + if ($ient->{kcmdline}) { $bphash->{kcmdline} = $ient->{kcmdline} } } } elsif ($state =~ /^install[=\$]/ or $state eq 'install' or $state =~ /^netboot[=\$]/ or $state eq 'netboot' or $state eq "image" or $state eq "winshell" or $state =~ /^osimage/ or $state =~ /^statelite/) { my %state_hash; @@ -389,7 +386,8 @@ sub setdestiny { $subreq->({ command => ["mk$tempstate"], node => $samestatenodes, noupdateinitrd => $noupdateinitrd, - ignorekernelchk => $ignorekernelchk, }, \&relay_response); + ignorekernelchk => $ignorekernelchk, + bootparams => \$bphash}, \&relay_response); if ($errored) { my @myself = xCAT::NetworkUtils->determinehostname(); my $myname = $myself[ (scalar @myself) - 1 ]; @@ -746,7 +744,7 @@ sub getdestiny { my $chaintab = xCAT::Table->new('chain'); my $chainents = $chaintab->getNodesAttribs(\@nodes, [qw(currstate chain)]); my $nrents = $restab->getNodesAttribs(\@nodes, [qw(tftpserver xcatmaster)]); - $bptab = xCAT::Table->new('bootparams', -create => 1); + my $bptab = xCAT::Table->new('bootparams', -create => 1); my $bpents = $bptab->getNodesAttribs(\@nodes, [qw(kernel initrd kcmdline xcatmaster)]); #my $sitetab= xCAT::Table->new('site'); diff --git a/xCAT-server/lib/xcat/plugins/grub2.pm b/xCAT-server/lib/xcat/plugins/grub2.pm index 34ddd9d8a..e5a03620d 100644 --- a/xCAT-server/lib/xcat/plugins/grub2.pm +++ b/xCAT-server/lib/xcat/plugins/grub2.pm @@ -571,17 +571,18 @@ sub process_request { if (exists($request->{inittime})) { $inittime = $request->{inittime}->[0]; } if (!$inittime) { $inittime = 0; } $errored = 0; + my %bphash; unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') { xCAT::MsgUtils->trace($verbose_on_off, "d", "grub2: issue setdestiny request"); $sub_req->({ command => ['setdestiny'], node => \@nodes, inittime => [$inittime], - arg => \@args }, \&pass_along); + arg => \@args, + bootparams => \%bphash + }, \&pass_along); } if ($errored) { return; } - my $bptab = xCAT::Table->new('bootparams', -create => 1); - my $bphash = $bptab->getNodesAttribs(\@nodes, [ 'kernel', 'initrd', 'kcmdline', 'addkcmdline' ]); my $chaintab = xCAT::Table->new('chain', -create => 1); my $chainhash = $chaintab->getNodesAttribs(\@nodes, ['currstate']); my $noderestab = xCAT::Table->new('noderes', -create => 1); @@ -618,7 +619,7 @@ sub process_request { $linuximghash = $linuximgtab->getAttribs({ imagename => $osimgname }, 'boottarget', 'addkcmdline'); } - ($rc, $errstr) = setstate($_, $bphash, $chainhash, $machash, $tftpdir, $nrhash, $linuximghash); + ($rc, $errstr) = setstate($_, \%bphash, $chainhash, $machash, $tftpdir, $nrhash, $linuximghash); if ($rc) { $response{node}->[0]->{errorcode}->[0] = $rc; $response{node}->[0]->{errorc}->[0] = $errstr; diff --git a/xCAT-server/lib/xcat/plugins/petitboot.pm b/xCAT-server/lib/xcat/plugins/petitboot.pm index 3d3d7fa6d..cea7eeaea 100644 --- a/xCAT-server/lib/xcat/plugins/petitboot.pm +++ b/xCAT-server/lib/xcat/plugins/petitboot.pm @@ -460,12 +460,15 @@ sub process_request { if (exists($request->{inittime})) { $inittime = $request->{inittime}->[0]; } if (!$inittime) { $inittime = 0; } $errored = 0; + my %bphash; unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') { xCAT::MsgUtils->trace($verbose_on_off, "d", "petitboot: issue setdestiny request"); $sub_req->({ command => ['setdestiny'], node => \@nodes, inittime => [$inittime], - arg => \@args }, \&pass_along); + arg => \@args, + bootparams => \%bphash}, + \&pass_along); } if ($errored) { return; } @@ -476,8 +479,6 @@ sub process_request { arg => ['default'] }); xCAT::MsgUtils->message("S", "xCAT: petitboot netboot: clear node(s): @nodes boot device setting."); } - my $bptab = xCAT::Table->new('bootparams', -create => 1); - my $bphash = $bptab->getNodesAttribs(\@nodes, [ 'kernel', 'initrd', 'kcmdline', 'addkcmdline' ]); my $chaintab = xCAT::Table->new('chain', -create => 1); my $chainhash = $chaintab->getNodesAttribs(\@nodes, ['currstate']); my $noderestab = xCAT::Table->new('noderes', -create => 1); @@ -510,7 +511,7 @@ sub process_request { my $linuximghash = $linuximghash = $linuximgtab->getAttribs({ imagename => $osimgname }, 'boottarget', 'addkcmdline'); - ($rc, $errstr) = setstate($_, $bphash, $chainhash, $machash, $tftpdir, $nodereshash, $linuximghash); + ($rc, $errstr) = setstate($_, \%bphash, $chainhash, $machash, $tftpdir, $nodereshash, $linuximghash); if ($rc) { $response{node}->[0]->{errorcode}->[0] = $rc; $response{node}->[0]->{errorc}->[0] = $errstr; diff --git a/xCAT-server/lib/xcat/plugins/pxe.pm b/xCAT-server/lib/xcat/plugins/pxe.pm index 4b0d937dc..f35afae12 100644 --- a/xCAT-server/lib/xcat/plugins/pxe.pm +++ b/xCAT-server/lib/xcat/plugins/pxe.pm @@ -497,6 +497,7 @@ sub process_request { $errored = 0; + my %bphash; my $inittime = 0; if (exists($::PXE_request->{inittime})) { $inittime = $::PXE_request->{inittime}->[0]; } if (!$inittime) { $inittime = 0; } @@ -505,19 +506,19 @@ sub process_request { $sub_req->({ command => ['setdestiny'], node => \@nodes, inittime => [$inittime], - arg => \@args }, \&pass_along); + arg => \@args, + bootparams => \%bphash + }, \&pass_along); } if ($errored) { return; } #Time to actually configure the nodes, first extract database data with the scalable calls - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $chaintab = xCAT::Table->new('chain'); my $mactab = xCAT::Table->new('mac'); #to get all the hostnames my $typetab = xCAT::Table->new('nodetype'); my $restab = xCAT::Table->new('noderes'); my $linuximgtab = xCAT::Table->new('linuximage', -create => 1); my %nrhash = %{ $restab->getNodesAttribs(\@nodes, [qw(tftpdir)]) }; - my %bphash = %{ $bptab->getNodesAttribs(\@nodes, [qw(kernel initrd kcmdline addkcmdline)]) }; my %chainhash = %{ $chaintab->getNodesAttribs(\@nodes, [qw(currstate)]) }; my %machash = %{ $mactab->getNodesAttribs(\@nodes, [qw(mac)]) }; my %nthash = %{ $typetab->getNodesAttribs(\@nodes, [qw(os provmethod)]) }; diff --git a/xCAT-server/lib/xcat/plugins/sles.pm b/xCAT-server/lib/xcat/plugins/sles.pm index 0d14e4080..dcccc895b 100644 --- a/xCAT-server/lib/xcat/plugins/sles.pm +++ b/xCAT-server/lib/xcat/plugins/sles.pm @@ -54,6 +54,7 @@ sub mknetboot if ($req->{command}->[0] =~ 'mkstatelite') { $statelite = "true"; } + my $bootparams = ${$req->{bootparams}}; my $globaltftpdir = "/tftpboot"; my $nodes = @{ $req->{node} }; @@ -445,7 +446,6 @@ sub mknetboot } # TODO: move the table operations out of the foreach loop - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $hmtab = xCAT::Table->new('nodehm'); my $sent = $hmtab->getNodeAttribs($node, @@ -720,13 +720,9 @@ sub mknetboot $kcmdline .= "MNTOPTS=\'$mntoptions\'"; } } - $bptab->setNodeAttribs( - $node, - { - kernel => "$rtftppath/kernel", - initrd => $initrdstr, - kcmdline => $kcmdline - }); + $bootparams->{$node}->[0]->{kernel} = "$rtftppath/kernel"; + $bootparams->{$node}->[0]->{initrd} = $initrdstr; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } } @@ -770,6 +766,7 @@ sub mkinstall my $noupdateinitrd = $request->{'noupdateinitrd'}; my $ignorekernelchk = $request->{'ignorekernelchk'}; + my $bootparams = ${$request->{bootparams}}; my @nodes = @{ $request->{node} }; my $node; my $ostab = xCAT::Table->new('nodetype'); @@ -799,7 +796,6 @@ sub mkinstall my $installroot; $installroot = "/install"; my $restab = xCAT::Table->new('noderes'); - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $hmtab = xCAT::Table->new('nodehm'); my $resents = $restab->getNodesAttribs( @@ -1365,14 +1361,9 @@ sub mkinstall $kernelpath = "$rtftppath/linux"; $initrdpath = "$rtftppath/initrd"; xCAT::MsgUtils->trace($verbose_on_off, "d", "sles->mkinstall: kcmdline=$kcmdline kernal=$kernelpath initrd=$initrdpath"); - $bptab->setNodeAttribs( - $node, - { - kernel => $kernelpath, - initrd => $initrdpath, - kcmdline => $kcmdline - } - ); + $bootparams->{$node}->[0]->{kernel} = $kernelpath; + $bootparams->{$node}->[0]->{initrd} = $initrdpath; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } elsif ($arch eq "ppc64") { @@ -1384,14 +1375,9 @@ sub mkinstall $kernelpath = "$rtftppath/linux64"; $initrdpath = "$rtftppath/initrd64"; xCAT::MsgUtils->trace($verbose_on_off, "d", "sles->mkinstall: kcmdline=$kcmdline kernal=$kernelpath initrd=$initrdpath"); - $bptab->setNodeAttribs( - $node, - { - kernel => $kernelpath, - initrd => $initrdpath, - kcmdline => $kcmdline - } - ); + $bootparams->{$node}->[0]->{kernel} = $kernelpath; + $bootparams->{$node}->[0]->{initrd} = $initrdpath; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } elsif (-r "$tftppath/inst64") { @@ -1399,14 +1385,9 @@ sub mkinstall #suseboot/inst64 can not be run on Power8 BE $kernelpath = "$rtftppath/inst64"; xCAT::MsgUtils->trace($verbose_on_off, "d", "sles->mkinstall: kcmdline=$kcmdline kernal=$kernelpath initrd="); - $bptab->setNodeAttribs( - $node, - { - kernel => $kernelpath, - initrd => "", - kcmdline => $kcmdline - } - ); + $bootparams->{$node}->[0]->{kernel} = $kernelpath; + $bootparams->{$node}->[0]->{initrd} = ""; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } } } @@ -1436,6 +1417,7 @@ sub mksysclone my $callback = shift; my $doreq = shift; my @nodes = @{ $request->{node} }; + my $bootparams = ${$request->{bootparams}}; my $osimagetab; my %img_hash = (); @@ -1460,7 +1442,6 @@ sub mksysclone my $node; my $ostab = xCAT::Table->new('nodetype'); my $restab = xCAT::Table->new('noderes'); - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $hmtab = xCAT::Table->new('nodehm'); my %osents = %{ $ostab->getNodesAttribs(\@nodes, [ 'os', 'arch', 'provmethod' ]) }; my %rents = @@ -1645,14 +1626,9 @@ sub mksysclone if (-r "$tftpdir/xcat/genesis.fs.$arch.lzma") { $i = "xcat/genesis.fs.$arch.lzma"; } - $bptab->setNodeAttribs( - $node, - { - kernel => "xcat/genesis.kernel.$arch", - initrd => $i, - kcmdline => $kcmdline - } - ); + $bootparams->{$node}->[0]->{kernel} = "xcat/genesis.kernel.$arch"; + $bootparams->{$node}->[0]->{initrd} = $i; + $bootparams->{$node}->[0]->{kcmdline} = $kcmdline; } else { diff --git a/xCAT-server/lib/xcat/plugins/vsmppxe.pm b/xCAT-server/lib/xcat/plugins/vsmppxe.pm index 60e0cab30..aa22a24ed 100644 --- a/xCAT-server/lib/xcat/plugins/vsmppxe.pm +++ b/xCAT-server/lib/xcat/plugins/vsmppxe.pm @@ -402,6 +402,7 @@ sub process_request { $errored = 0; + my %bphash; my $inittime = 0; if (exists($::VSMPPXE_request->{inittime})) { $inittime = $::VSMPPXE_request->{inittime}->[0]; } if (!$inittime) { $inittime = 0; } @@ -409,15 +410,15 @@ sub process_request { $sub_req->({ command => ['setdestiny'], node => \@nodes, inittime => [$inittime], - arg => [ $args[0] ] }, \&pass_along); + arg => [ $args[0] ], + bootparams => \%bphash + }, \&pass_along); } if ($errored) { return; } #Time to actually configure the nodes, first extract database data with the scalable calls - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $chaintab = xCAT::Table->new('chain'); my $mactab = xCAT::Table->new('mac'); #to get all the hostnames - my %bphash = %{ $bptab->getNodesAttribs(\@nodes, [qw(kernel initrd kcmdline addkcmdline)]) }; my %chainhash = %{ $chaintab->getNodesAttribs(\@nodes, [qw(currstate)]) }; my %machash = %{ $mactab->getNodesAttribs(\@nodes, [qw(mac)]) }; foreach (@nodes) { diff --git a/xCAT-server/lib/xcat/plugins/xnba.pm b/xCAT-server/lib/xcat/plugins/xnba.pm index bdf93d294..fc485dd4e 100644 --- a/xCAT-server/lib/xcat/plugins/xnba.pm +++ b/xCAT-server/lib/xcat/plugins/xnba.pm @@ -108,7 +108,7 @@ sub setstate { my $linuximghashref = shift; if (ref $linuximghashref) { %linuximghash = %{$linuximghashref}; } my $imgaddkcmdline = ($linuximghash{'boottarget'}) ? undef : $linuximghash{'addkcmdline'}; - my $kern = $bphash{$node}->[0]; #$bptab->getNodeAttribs($node,['kernel','initrd','kcmdline']); + my $kern = $bphash{$node}->[0]; unless ($::XNBA_addkcmdlinehandled->{$node}) { #Tag to let us know the plugin had a special syntax implemented for addkcmdline if ($kern->{addkcmdline} or ($imgaddkcmdline)) { @@ -520,22 +520,24 @@ sub process_request { if (exists($::XNBA_request->{inittime})) { $inittime = $::XNBA_request->{inittime}->[0]; } if (!$inittime) { $inittime = 0; } $errored = 0; + my %bphash; unless ($args[0] eq 'stat') { # or $args[0] eq 'enact') { xCAT::MsgUtils->trace($verbose_on_off, "d", "xnba: issue setdestiny request"); $sub_req->({ command => ['setdestiny'], node => \@nodes, inittime => [$inittime], - arg => \@args }, \&pass_along); + arg => \@args , + bootparams => \%bphash}, + \&pass_along); } + if ($errored) { return; } #Time to actually configure the nodes, first extract database data with the scalable calls - my $bptab = xCAT::Table->new('bootparams', -create => 1); my $chaintab = xCAT::Table->new('chain'); my $noderestab = xCAT::Table->new('noderes'); #in order to detect per-node tftp directories my $mactab = xCAT::Table->new('mac'); #to get all the hostnames my %nrhash = %{ $noderestab->getNodesAttribs(\@nodes, [qw(tftpdir)]) }; - my %bphash = %{ $bptab->getNodesAttribs(\@nodes, [qw(kernel initrd kcmdline addkcmdline)]) }; my %chainhash = %{ $chaintab->getNodesAttribs(\@nodes, [qw(currstate)]) }; my %iscsihash; my $iscsitab = xCAT::Table->new('iscsi');