mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-30 19:02:27 +00:00 
			
		
		
		
	changes to finding xcat node name
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@15482 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -26,7 +26,7 @@ use IO::Socket; | ||||
| my $useSocketSSL=eval { require IO::Socket::SSL; }; | ||||
| use Getopt::Long; | ||||
| use XML::Simple; | ||||
|  | ||||
| use Sys::Hostname; | ||||
|  | ||||
| # since we don't have syslog set up yet we'll | ||||
| # just save msgs in a local log file | ||||
| @@ -86,17 +86,7 @@ my $servnode; | ||||
|  | ||||
| # create new xcatinfo file if -M value is provided | ||||
| if ($::opt_M) { | ||||
| 	my $myname; | ||||
| 	if(-f "/etc/xcatinfo") { | ||||
| 		# get the node name from the original file | ||||
| 		my $cmd = "cat /etc/xcatinfo | grep 'NODE'"; | ||||
|         &runcmd($cmd); | ||||
|         my $SNline = $::outref; | ||||
|         my $junk; | ||||
|         ($junk, $myname) =  split(/=/, $SNline); | ||||
|         chomp $myname; | ||||
|         $myname =~ s/^\s*//;		 | ||||
|  | ||||
| 		# backup the old file - or remove ??? | ||||
| 		my $cpcmd = "cp /etc/xcatinfo /etc/xcatinfo.orig 2>/dev/null"; | ||||
| 		if (&runcmd($cpcmd) != 0) { | ||||
| @@ -105,17 +95,15 @@ if ($::opt_M) { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	chomp $::opt_M; | ||||
|     $servnode = $::opt_M; | ||||
|     $servnode =~ s/^\s*//; | ||||
|  | ||||
| 	# put the new server in the file | ||||
| 	my $xcatinfo="/etc/xcatinfo"; | ||||
| 	open(XCATINFO,">",$xcatinfo); | ||||
| 	print XCATINFO "XCATSERVER=$servnode\n"; | ||||
| 	# use the NODE name from the existing xcatinfo file | ||||
| 	print XCATINFO "NODE=$myname\n"; | ||||
| 	print XCATINFO "XCATSERVER=$::opt_M\n"; | ||||
| 	close(XCATINFO); | ||||
|  | ||||
| 	chomp $::opt_M; | ||||
| 	$servnode = $::opt_M; | ||||
| 	$servnode =~ s/^\s*//; | ||||
| } | ||||
|  | ||||
| if ($::opt_m) { | ||||
| @@ -140,7 +128,9 @@ unless ($servnode) { | ||||
| 		my $cmd = "cat /etc/niminfo | grep 'NIM_NAME'"; | ||||
| 		&runcmd($cmd); | ||||
| 		my $line = $::outref; | ||||
| 		my ($junk, $myname) =  split(/=/, $line); | ||||
| 		my $junk; | ||||
| 		my $myname; | ||||
| 		($junk, $myname) =  split(/=/, $line); | ||||
| 		chomp $myname; | ||||
| 		if ($myname ne "master") { | ||||
| 			$cmd = "cat /etc/niminfo | grep 'NIM_MASTER_HOSTNAME'"; | ||||
| @@ -154,7 +144,6 @@ unless ($servnode) { | ||||
| 				my $xcatinfo="/etc/xcatinfo"; | ||||
| 				open(XCATINFO,">",$xcatinfo); | ||||
| 				print XCATINFO "XCATSERVER=$servnode\n"; | ||||
| 				print XCATINFO "NODE=$myname\n"; | ||||
| 				close(XCATINFO); | ||||
| 			} | ||||
| 		} | ||||
| @@ -168,27 +157,22 @@ unless ($servnode) { | ||||
|     exit 1; | ||||
| } | ||||
|  | ||||
| # get the xCAT hostname for this node | ||||
| my $xcatname = &getxcatname($servnode); | ||||
| if (!$xcatname) { | ||||
|     print "$::sdate  xcataixpost: Could not determine xCAT node name.\n"; | ||||
|     print $::LOG_FILE "$::sdate  xcataixpost: Could not determine xCAT node name.\n"; | ||||
|     exit 1; | ||||
| } | ||||
|  | ||||
| # create the xcatpost dir | ||||
| my $cmd = "mkdir -p /xcatpost"; | ||||
| if (&runcmd($cmd) != 0) { | ||||
| 	`logger -t xcat -p local4.info "$::sdate xcataixpost: Could not create the /xcatpost directory."`; | ||||
| 	print $::LOG_FILE "$::sdate xcataixpost: Could not create the /xcatpost directory.\n"; | ||||
| 	exit 1; | ||||
| } | ||||
|  | ||||
| # request the xCAT postscript for this particular node | ||||
| my $scriptname = "/xcatpost/myxcatpost_" . $xcatname; | ||||
| if (&getmypost != 0) { | ||||
|     `logger -t xcat -p local4.info "$::sdate xcataixpost: Could not get the xCAT post script for this node."`; | ||||
|     print $::LOG_FILE "$::sdate xcataixpost: Could not get the xCAT post script for this node.\n"; | ||||
| # get the xCAT hostname and the mypostscript file | ||||
| if (&getxcatname($servnode) != 0) { | ||||
| 	`logger -t xcat -p local4.info  "$::sdate  xcataixpost: Could not determine xCAT node name."`; | ||||
|     print $::LOG_FILE "$::sdate  xcataixpost: Could not determine xCAT node name.\n"; | ||||
|     exit 1; | ||||
| } | ||||
| my $xcatname=$::XCATNAME; | ||||
| my $scriptname=$::SCRIPTNAME; | ||||
|  | ||||
| # get the installdir to use | ||||
| my $installdir; | ||||
| @@ -524,6 +508,8 @@ sub  getmypost_orig { | ||||
| } | ||||
|  | ||||
| sub  getmypost { | ||||
| 	my $xcatname=shift; | ||||
| 	my $scriptname=shift; | ||||
|  | ||||
|     my $port = "3001"; | ||||
| 	# open a socket to request credentials | ||||
| @@ -558,7 +544,7 @@ sub  getmypost { | ||||
| 	} | ||||
|     } | ||||
|     close $remote; | ||||
|     | ||||
|  | ||||
|     # If the tftpdir is not /tftpboot,  | ||||
|     # should use the -s flag to specify the tftpdir. | ||||
|     # using gettab to get the tftpdir from MN/SN is not efficient | ||||
| @@ -568,7 +554,6 @@ sub  getmypost { | ||||
|     } | ||||
|  | ||||
|     `mkdir -p /xcatpost; cd /xcatpost; tftp -o $scriptname $servnode $TFTPDIR/mypostscripts/mypostscript.$xcatname.tmp`; | ||||
|     # `wget -N --waitretry=10 --random-wait -T 60 http://$servnode$TFTPDIR/mypostscripts/mypostscript.$xcatname  -P /xcatpost 2>> /tmp/wget.log;  mv /xcatpost/mypostscript.$xcatname $scriptname`; | ||||
|  | ||||
|     if(!( -f $scriptname)) { | ||||
|          `logger -t xcat -p local4.info  "$::sdate  xcataixpost: Cold not get the $scriptname from $TFTPDIR/mypostscripts/ on \'$servnode\'"`; | ||||
| @@ -684,61 +669,102 @@ sub runcmd | ||||
| # | ||||
| #   getxcatname | ||||
| #     determines the name of this node as it is know by xCAT | ||||
| #     request the node mypostscript_* file from the server | ||||
| # | ||||
| ############################################################ | ||||
| sub getxcatname | ||||
| { | ||||
| 	my $serv=shift; | ||||
| 	my $servnode=shift; | ||||
|  | ||||
| 	my $xcatname; | ||||
| 	my $node; | ||||
| 	my $scriptname; | ||||
| 	my $xcatshort; | ||||
| 	my $xcatlong; | ||||
|  | ||||
| 	# check the /etc/xcatinfo first | ||||
| 	if (-f "/etc/xcatinfo") { | ||||
|         # if this file exists assume it has the correct xcat node name | ||||
|         my $cmd = "cat /etc/xcatinfo | grep 'NODE'"; | ||||
|         &runcmd($cmd); | ||||
|         my $SNline = $::outref; | ||||
| 		my $junk; | ||||
|         ($junk, $node) =  split(/=/, $SNline); | ||||
|     }  | ||||
|  | ||||
| 	if (!$node) { | ||||
|  | ||||
| 		#  find out what interface we use to contact the server | ||||
| 		my $tcmd=qq~/bin/traceroute $serv~; | ||||
| 		if (&runcmd($tcmd) != 0) { | ||||
| 			print "$::sdate xcataixpost: Could not run traceroute.\n"; | ||||
| 			print $::LOG_FILE "$::sdate xcataixpost: Could not run traceroute\n"; | ||||
| 			return undef; | ||||
| 		} | ||||
|  | ||||
| 		my $NIP; | ||||
| 	#  find out what interface we use to contact the server | ||||
| 	my $NIP; | ||||
| 	my $tcmd=qq~/bin/traceroute $servnode~; | ||||
| 	if (&runcmd($tcmd) != 0) { | ||||
| 		print "$::sdate xcataixpost: Could not run traceroute.\n"; | ||||
| 		print $::LOG_FILE "$::sdate xcataixpost: Could not run traceroute\n"; | ||||
| 	} else { | ||||
| 		my @lines = ( split(/\n/, $::outref)); | ||||
| 		foreach my $l (@lines) | ||||
| 		{ | ||||
| 			if ($l =~ /^source should be/) { | ||||
| 				my ($n1, $n2, $n3, $nip) = split(/\s+/, $l); | ||||
| 				chomp $nip; | ||||
| 				chomp $l; | ||||
| 				$l =~ s/^\s+//; | ||||
| 				$NIP=$nip; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 		if (!$NIP) { | ||||
| 			# if not found then use the primary hostname of this node | ||||
| 			$node=hostname(); | ||||
| 	if ($NIP) { | ||||
| 		# traceroute gave us an ip | ||||
| 		$xcatname=gethostbyaddr(inet_aton($NIP), AF_INET); | ||||
| 		if ($xcatname =~ /\./) { | ||||
| 			$xcatlong=$xcatname; | ||||
| 			($xcatshort = $xcatname) =~ s/\..*//; | ||||
| 		} else { | ||||
| 			# otherwise just get the hostname from the ip | ||||
| 			$node=gethostbyaddr(inet_aton($NIP), AF_INET); | ||||
| 			$xcatlong=""; | ||||
| 			$xcatshort=$xcatname; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if ($node) { | ||||
| 		# make sure we have the short hostname | ||||
| 		chomp $node; | ||||
| 		($xcatname=$node) =~ s/\..*//; | ||||
| 		return $xcatname; | ||||
| 	} else { | ||||
| 		return undef; | ||||
| 	} | ||||
| 		# try short name | ||||
| 		if ($xcatshort) { | ||||
| 			$scriptname = "/xcatpost/myxcatpost_" . $xcatshort; | ||||
| 			if (&getmypost($xcatshort,$scriptname) == 0) { | ||||
| 				$::XCATNAME=$xcatshort; | ||||
| 				$::SCRIPTNAME=$scriptname; | ||||
| 				return 0; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		# try long name - if any | ||||
| 		if ($xcatlong) { | ||||
| 			$scriptname = "/xcatpost/myxcatpost_" . $xcatlong; | ||||
| 			if (&getmypost($xcatlong,$scriptname) == 0) { | ||||
|                 $::XCATNAME=$xcatlong; | ||||
|                 $::SCRIPTNAME=$scriptname; | ||||
|                 return 0; | ||||
|             } | ||||
|         } | ||||
| 	}  | ||||
|  | ||||
| 	# couldn't find NIP so try the primary hostname | ||||
| 	$xcatname=hostname(); | ||||
| 	if ($xcatname =~ /\./) { | ||||
|         $xcatlong=$xcatname; | ||||
|         ($xcatshort = $xcatname) =~ s/\..*//; | ||||
|     } else { | ||||
|         $xcatlong=""; | ||||
|         $xcatshort=$xcatname; | ||||
|     } | ||||
|  | ||||
|     # try short hostname | ||||
|     if ($xcatshort) { | ||||
|         $scriptname = "/xcatpost/myxcatpost_" . $xcatshort; | ||||
|         if (&getmypost($xcatshort,$scriptname) == 0) { | ||||
|             $::XCATNAME=$xcatshort; | ||||
|             $::SCRIPTNAME=$scriptname; | ||||
|             return 0; | ||||
|         } | ||||
|     } | ||||
| 		 | ||||
| 	# try long hostname - if any | ||||
|     if ($xcatlong) { | ||||
|         $scriptname = "/xcatpost/myxcatpost_" . $xcatlong; | ||||
|         if (&getmypost($xcatlong,$scriptname) == 0) { | ||||
|             $::XCATNAME=$xcatlong; | ||||
|             $::SCRIPTNAME=$scriptname; | ||||
|             return 0; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| 	# if we get here we've exhaused all possibilities | ||||
|     `logger -t xcat -p local4.info "$::sdate xcataixpost: Could not get the xCAT post script for this node."`; | ||||
|     print $::LOG_FILE "$::sdate xcataixpost: Could not get the xCAT post script for this node.\n"; | ||||
|  | ||||
| 	return 1; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user