mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-26 08:55:24 +00:00 
			
		
		
		
	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
This commit is contained in:
		| @@ -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 <noderange> 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 <noderange> 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 | ||||
|         { | ||||
|   | ||||
| @@ -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 <noderange> 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 <noderange> 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(); | ||||
|   | ||||
| @@ -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'); | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -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)]) }; | ||||
|   | ||||
| @@ -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 | ||||
|         { | ||||
|   | ||||
| @@ -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) { | ||||
|   | ||||
| @@ -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'); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user