mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-31 11:22:27 +00:00 
			
		
		
		
	code drop for external NFS support with AIX stateless/statlite
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@8010 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -8135,6 +8135,135 @@ sub mkdsklsnode | ||||
|  | ||||
|     }    # end - for each node | ||||
|  | ||||
|     # | ||||
|     # External NFS support: | ||||
|     #   For shared_root: | ||||
|     #       Update shared_root/etc/.client_data/hosts.<nodename> | ||||
|     #       Update shared_root/etc/.client_data/filesystems.<nodename> | ||||
|     #   For non-shared_root: | ||||
|     #       Update root/<nodename>/etc/hosts | ||||
|     #       Update root/<nodename>/etc/filesystems | ||||
|     # | ||||
|  | ||||
|     # convert the @nodesfailed to hash for search performance considerations | ||||
|     my %fnhash = (); | ||||
|     foreach my $fnd (@nodesfailed) | ||||
|     { | ||||
|         $fnhash{$fnd} = 1; | ||||
|     } | ||||
|  | ||||
|     # Only do the update for the successful nodes | ||||
|     my @snode = (); | ||||
|     foreach my $nd (@nodelist) | ||||
|     { | ||||
|         if(!defined($fnhash{$nd}) || ($fnhash{$nd} != 1)) | ||||
|         { | ||||
|             push(@snode, $nd); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if(scalar(@snode) > 0) | ||||
|     { | ||||
|         my $nfshash; | ||||
|         my $restab = xCAT::Table->new('noderes'); | ||||
|         if ($restab) | ||||
|         { | ||||
|             $nfshash = $restab->getNodesAttribs(\@nodelist, ['nfsserver']); | ||||
|         } | ||||
|         foreach my $snd (@snode) | ||||
|         { | ||||
|             # nfsserver defined for this node | ||||
|             if($nfshash->{$snd}->[0]->{'nfsserver'}) | ||||
|             { | ||||
|                 # if nfsserver is set to the service node itself, nothing needs to do | ||||
|                 if(!xCAT::InstUtils->is_me($nfshash->{$snd}->[0]->{'nfsserver'})) | ||||
|                 { | ||||
|                     my $osimg = $imagehash{$snd}{'profile'}; | ||||
|                     #shared_root configuration | ||||
|                     my $hostfile; | ||||
|                     my $filesystemsfile; | ||||
|                     if($imagehash{$osimg}{'shared_root'}) | ||||
|                     { | ||||
|                         my $imgsrdir = xCAT::InstUtils->get_nim_attr_val( | ||||
|                                                         $imagehash{$osimg}{'shared_root'},  | ||||
|                                                         "location", $callback, "", $subreq); | ||||
|                         $hostfile = "$imgsrdir/etc/.client_data/hosts.$snd"; | ||||
|                         $filesystemsfile = "$imgsrdir/etc/.client_data/filesystems.$snd"; | ||||
|                     } | ||||
|                     else # non-shared_root configuration | ||||
|                     { | ||||
|                         my $imgrootdir = xCAT::InstUtils->get_nim_attr_val( | ||||
|                                                           $imagehash{$osimg}{'root'}, | ||||
|                                                           "location", $callback, "", $subreq); | ||||
|                         $hostfile = "$imgrootdir/$snd/etc/hosts"; | ||||
|                         $filesystemsfile = "$imgrootdir/$snd/etc/filesystems"; | ||||
|                     } | ||||
|                     my ($nfshost,$nfsip) = xCAT::NetworkUtils->gethostnameandip($nfshash->{$snd}->[0]->{'nfsserver'}); | ||||
|                     if (!$nfshost || !$nfsip) | ||||
|                     { | ||||
|                         my $rsp = {}; | ||||
|                         $rsp->{data}->[0] = "Can not resolve the nfsserver $nfshost for node $snd"; | ||||
|                         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                         next; | ||||
|                     } | ||||
|                      | ||||
|                     #Update etc/hosts file in the shared_root or root | ||||
|                     my $line = "$nfsip    $nfshost"; | ||||
|                     my $cmd = "echo  $line >> $hostfile"; | ||||
|                     xCAT::Utils->runcmd($cmd, 0); | ||||
|                     if ($::RUNCMD_RC != 0) | ||||
|                     { | ||||
|                         my $rsp = {}; | ||||
|                         $rsp->{data}->[0] = "Can not update the NIM hosts file $hostfile for node $snd"; | ||||
|                         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                         next; | ||||
|                     } | ||||
|  | ||||
|                     #Update etc/filesystems file in the shared_root or root | ||||
|                     my $fscontent; | ||||
|                     unless (open(FSFILE, "<$filesystemsfile")) | ||||
|                     { | ||||
|                         my $rsp = {}; | ||||
|                         $rsp->{data}->[0] = "Can not open the filesystems file $filesystemsfile for node $snd"; | ||||
|                         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                         next; | ||||
|                     } | ||||
|                     while (my $line = <FSFILE>) | ||||
|                     { | ||||
|                         $fscontent .= $line; | ||||
|                     } | ||||
|  | ||||
|                     # Update the mount server for / and /usr | ||||
|                     $fscontent =~ s/(\/:\s*\n\s+nodename\s+=\s+)(.*)/$1$nfshost/; | ||||
|                     $fscontent =~ s/(\/usr:\s*\n\s+nodename\s+=\s+)(.*)/$1$nfshost/; | ||||
|                     close(FSFILE); | ||||
|  | ||||
|                     my $tmpfile = $filesystemsfile . ".tmp"; | ||||
|                     unless (open(FSTMPFILE, ">$tmpfile")) | ||||
|                     { | ||||
|                         my $rsp = {}; | ||||
|                         $rsp->{data}->[0] = "Can not open the file $tmpfile for writing"; | ||||
|                         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                         next; | ||||
|                     } | ||||
|                     print FSTMPFILE $fscontent; | ||||
|                     close(FSTMPFILE); | ||||
|  | ||||
|                     my $cpcmd = "cp $tmpfile $filesystemsfile"; | ||||
|                     xCAT::Utils->runcmd($cpcmd, 0); | ||||
|                     if ($::RUNCMD_RC != 0) | ||||
|                     { | ||||
|                         my $rsp = {}; | ||||
|                         $rsp->{data}->[0] = "Can not update the NIM filesystems file $filesystemsfile for node $snd"; | ||||
|                         xCAT::MsgUtils->message("E", $rsp, $callback); | ||||
|                         next; | ||||
|                     } | ||||
|  | ||||
|  | ||||
|                 } #end if(!xCAT::InstUtils->is_me... | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     # | ||||
|     # update the node definitions with the new osimage - if provided | ||||
|     # | ||||
|   | ||||
		Reference in New Issue
	
	Block a user