diff --git a/xCAT-server/lib/xcat/plugins/dhcp.pm b/xCAT-server/lib/xcat/plugins/dhcp.pm index 291a9b370..c30eceffd 100644 --- a/xCAT-server/lib/xcat/plugins/dhcp.pm +++ b/xCAT-server/lib/xcat/plugins/dhcp.pm @@ -502,7 +502,7 @@ sub addnode if ($nrhash) { $nrent = $nrhash->{$node}->[0]; - if ($nrent and $nrent->{tftpserver}) + if ($nrent and $nrent->{tftpserver} and $nrent->{tftpserver} ne '') { #check the value of inet_ntoa(inet_aton("")),if the hostname cannot be resolved, #the value of inet_ntoa() will be "undef", which will cause fatal error @@ -531,9 +531,7 @@ sub addnode my $node_server = undef; if ($nrent->{xcatmaster}) { $node_server = $nrent->{xcatmaster}; - } elsif ($nrent->{servicenode}) { - $node_server = $nrent->{servicenode}; - } + } unless ($node_server) { my @nxtsrvd = xCAT::NetworkUtils->my_ip_facing($node); unless ($nxtsrvd[0]) { $nxtsrv = $nxtsrvd[1]; } diff --git a/xCAT-server/lib/xcat/plugins/grub2.pm b/xCAT-server/lib/xcat/plugins/grub2.pm index 14fa9702a..f6600d22c 100644 --- a/xCAT-server/lib/xcat/plugins/grub2.pm +++ b/xCAT-server/lib/xcat/plugins/grub2.pm @@ -218,21 +218,36 @@ sub setstate { } elsif (defined($nrhash{$node}->[0]) && $nrhash{$node}->[0]->{'xcatmaster'}) { $tftpserver = $nrhash{$node}->[0]->{'xcatmaster'}; } else { - my @master = xCAT::TableUtils->get_site_attribute("master"); - $tftpserver = $master[0]; - } - my $serverip; - if (defined($tftpserverip{$tftpserver})) { - $serverip = $tftpserverip{$tftpserver}; - } else { - $serverip = xCAT::NetworkUtils->getipaddr($tftpserver); - unless ($serverip) { - syslog("local1|err", "xCAT unable to resolve $tftpserver"); - return; - } - $tftpserverip{$tftpserver} = $serverip; + $tftpserver = ""; } + my $serverip; + + if($tftpserver eq ""){ + my @nxtsrvd = xCAT::NetworkUtils->my_ip_facing($node); + unless ($nxtsrvd[0]) { + $serverip = $nxtsrvd[1]; + } else { + $callback->({ error => [ $nxtsrvd[1] ], errorcode => [1] }); + return; + } + }else{ + if (defined($tftpserverip{$tftpserver})) { + $serverip = $tftpserverip{$tftpserver}; + } else { + $serverip = xCAT::NetworkUtils->getipaddr($tftpserver); + unless ($serverip) { + syslog("local1|err", "xCAT unable to resolve $tftpserver"); + return; + } + $tftpserverip{$tftpserver} = $serverip; + } + } + + unless($serverip){ + $callback->({ error => ["Unable to determine the tftpserver for $node"], errorcode => [1] }); + return; + } my $grub2protocol = "tftp"; if (defined($nrhash{$node}->[0]) && $nrhash{$node}->[0]->{'netboot'} && ($nrhash{$node}->[0]->{'netboot'} =~ /grub2-(.*)/)) { diff --git a/xCAT-server/lib/xcat/plugins/networks.pm b/xCAT-server/lib/xcat/plugins/networks.pm index 49f318854..cbbea2188 100644 --- a/xCAT-server/lib/xcat/plugins/networks.pm +++ b/xCAT-server/lib/xcat/plugins/networks.pm @@ -549,6 +549,7 @@ sub donets } } + my $tent=$nethash{$netname}; unless ($tent and $tent->{tftpserver}) { my $netdev = $ent[7]; @@ -577,7 +578,7 @@ sub donets push @{ $rsp->{data} }, " tftpserver=$ipaddr"; } else { if (!$foundmatch) { - $nettab->setAttribs({ 'net' => $net, 'mask' => $mask }, { tftpserver => $ipaddr }); + $nettab->setAttribs({ 'net' => $net, 'mask' => $mask }, { tftpserver => "" }); } } last;