From fdfa1fe290115bc37f9b20d0d5982cd377525fa5 Mon Sep 17 00:00:00 2001 From: daniceexi Date: Fri, 10 Oct 2014 11:09:04 -0400 Subject: [PATCH] defect 4283: fix the syntax issues in the hosts.pm and NetworkUtils.pm for the code that support multiple domain and makehosts against nics table --- perl-xCAT/xCAT/NetworkUtils.pm | 17 +- xCAT-server/lib/xcat/plugins/hosts.pm | 560 +++++++++++++------------- 2 files changed, 293 insertions(+), 284 deletions(-) diff --git a/perl-xCAT/xCAT/NetworkUtils.pm b/perl-xCAT/xCAT/NetworkUtils.pm index 92e278cfe..7d42970ba 100755 --- a/perl-xCAT/xCAT/NetworkUtils.pm +++ b/perl-xCAT/xCAT/NetworkUtils.pm @@ -69,14 +69,14 @@ This program module file, is a set of network utilities used by xCAT commands. #------------------------------------------------------------------------------- sub getNodeDomains() { - my $class = shift; + my $class = shift; my $nodes = shift; my @nodelist = @$nodes; my %nodedomains; # Get the network info for each node - my %nethash = xCAT::DBobjUtils->getNetwkInfo(\@nodelist); + my %nethash = xCAT::DBobjUtils->getNetwkInfo(\@nodelist); # get the site domain value my @domains = xCAT::TableUtils->get_site_attribute("domain"); @@ -85,12 +85,13 @@ sub getNodeDomains() # for each node - set hash value to network domain or default # to site domain foreach my $node (@nodelist) { - if ($nethash{$node}{domain}) { - $nodedomains{$node} = $nethash{$node}{domain}; - } else { - $nodedomains{$node} = $sitedomain; - } - } + unless (defined($node)) {next;} + if (defined($nethash{$node}) && $nethash{$node}{domain}) { + $nodedomains{$node} = $nethash{$node}{domain}; + } else { + $nodedomains{$node} = $sitedomain; + } + } return \%nodedomains; } diff --git a/xCAT-server/lib/xcat/plugins/hosts.pm b/xCAT-server/lib/xcat/plugins/hosts.pm index abd762dc8..898e620ed 100755 --- a/xCAT-server/lib/xcat/plugins/hosts.pm +++ b/xCAT-server/lib/xcat/plugins/hosts.pm @@ -54,7 +54,7 @@ sub delnode sub addnode { - my $callback = shift; + my $callback = shift; my $node = shift; my $ip = shift; @@ -65,11 +65,11 @@ sub addnode my $othernames = shift; my $domain = shift; - my $nics = shift; + my $nics = shift; my $idx = 0; my $foundone = 0; - # if this ip was already added then just update the entry + # if this ip was already added then just update the entry while ($idx <= $#hosts) { @@ -82,22 +82,22 @@ sub addnode } else { - # we found a matching entry in the hosts list - if ($nics) { - # we're processing the nics table and we found an - # existing entry for this ip so just add this - # node name as an alias for the existing entry - my ($hip, $hnode, $hdom, $hother)= split(/ /, $hosts[$idx]); - - # at this point "othernames", if any is just a space - # delimited list - so just add the node name to the list - $othernames .= " $node"; - $hosts[$idx] = build_line($callback, $ip, $hnode, $domain, $othernames); - } else { - # otherwise just try to completely update the existing - # entry - $hosts[$idx] = build_line($callback, $ip, $node, $domain, $othernames); - } + # we found a matching entry in the hosts list + if ($nics) { + # we're processing the nics table and we found an + # existing entry for this ip so just add this + # ode name as an alias for the existing entry + my ($hip, $hnode, $hdom, $hother)= split(/ /, $hosts[$idx]); + + # at this point "othernames", if any is just a space + # elimited list - so just add the node name to the list + $othernames .= " $node"; + $hosts[$idx] = build_line($callback, $ip, $hnode, $domain, $othernames); + } else { + # otherwise just try to completely update the existing + # entry + $hosts[$idx] = build_line($callback, $ip, $node, $domain, $othernames); + } } $foundone = 1; } @@ -106,14 +106,14 @@ sub addnode if ($foundone) { return; } my $line = build_line($callback, $ip, $node, $domain, $othernames); - if ($line) { - push @hosts, $line; - } + if ($line) { + push @hosts, $line; + } } sub build_line { - my $callback = shift; + my $callback = shift; my $ip = shift; my $node = shift; my $domain = shift; @@ -121,13 +121,13 @@ sub build_line my @o_names = (); my @n_names = (); - # Trim spaces from the beginning and end from $othernames - $othernames =~ s/^\s+|\s+$//g; - if (defined $othernames) { - # the "hostnames" attribute can be a list delimited by - # either a comma or a space + # Trim spaces from the beginning and end from $othernames + $othernames =~ s/^\s+|\s+$//g; + + # the "hostnames" attribute can be a list delimited by + # either a comma or a space @o_names = split(/,| /, $othernames); } my $longname; @@ -153,26 +153,26 @@ sub build_line } unshift(@o_names, @n_names); - my $shortname=$node; + my $shortname=$node; if ($node =~ m/\.$domain$/i) { $longname = $node; - ($shortname = $node) =~ s/\.$domain$//; + ($shortname = $node) =~ s/\.$domain$//; } elsif ($domain && !$longname) { - $shortname = $node; + $shortname = $node; $longname = "$node.$domain"; } # if shortname contains a dot then we have a bad syntax for name - if ($shortname =~ /\./) { - my $rsp; - push @{$rsp->{data}}, "Invalid short node name \'$shortname\'. The short node name may not contain a dot. The short node name is considered to be anything preceeding the network domain name in the fully qualified node name \'$longname\'.\n"; - xCAT::MsgUtils->message("E", $rsp, $callback); - return undef; - } + if ($shortname =~ /\./) { + my $rsp; + push @{$rsp->{data}}, "Invalid short node name \'$shortname\'. The short node name may not contain a dot. The short node name is considered to be anything preceeding the network domain name in the fully qualified node name \'$longname\'.\n"; + xCAT::MsgUtils->message("E", $rsp, $callback); + return undef; + } $othernames = join(' ', @o_names); if ($LONGNAME) { return "$ip $longname $shortname $othernames\n"; } @@ -182,7 +182,7 @@ sub build_line sub addotherinterfaces { - my $callback = shift; + my $callback = shift; my $node = shift; my $otherinterfaces = shift; my $domain = shift; @@ -190,12 +190,12 @@ sub addotherinterfaces my @itf_pairs = split(/,/, $otherinterfaces); foreach (@itf_pairs) { - my ($itf, $ip); - if ($_ =~ /!/) { - ($itf, $ip) = split(/!/, $_); - } else { - ($itf, $ip) = split(/:/, $_); - } + my ($itf, $ip); + if ($_ =~ /!/) { + ($itf, $ip) = split(/!/, $_); + } else { + ($itf, $ip) = split(/:/, $_); + } if ($ip && xCAT::NetworkUtils->isIpaddr($ip)) { if ($itf =~ /^-/) @@ -216,12 +216,12 @@ sub delotherinterfaces my @itf_pairs = split(/,/, $otherinterfaces); foreach (@itf_pairs) { - my ($itf, $ip); - if ($_ =~ /!/) { - ($itf, $ip) = split(/!/, $_); - } else { - ($itf, $ip) = split(/:/, $_); - } + my ($itf, $ip); + if ($_ =~ /!/) { + ($itf, $ip) = split(/!/, $_); + } else { + ($itf, $ip) = split(/:/, $_); + } if ($ip && xCAT::NetworkUtils->isIpaddr($ip)) { if ($itf =~ /^-/) @@ -234,82 +234,80 @@ sub delotherinterfaces } sub add_hosts_content { - my %args = @_; - my $nodelist = $args{nodelist}; - my $callback = $args{callback}; - my $DELNODE = $args{delnode}; - my $domain = $args{domain}; - my $hoststab = xCAT::Table->new('hosts',-create=>0); - my $hostscache; - if ($hoststab) { - $hostscache = - $hoststab->getNodesAttribs($nodelist, - [qw(ip node hostnames otherinterfaces)]); - } - foreach (@{$nodelist}) + my %args = @_; + my $nodelist = $args{nodelist}; + my $callback = $args{callback}; + my $DELNODE = $args{delnode}; + my $domain = $args{domain}; + my $hoststab = xCAT::Table->new('hosts',-create=>0); + my $hostscache; + if ($hoststab) { + $hostscache = $hoststab->getNodesAttribs($nodelist, + [qw(ip node hostnames otherinterfaces)]); + } + foreach (@{$nodelist}) { + my $ref = $hostscache->{$_}->[0]; + my $nodename = $_; + my $ip = $ref->{ip}; + if (not $ip) { + $ip = xCAT::NetworkUtils->getipaddr($nodename); #attempt lookup + } + + my $netn; + ($domain, $netn) = &getIPdomain($ip, $callback); + if (!$domain) { + if ($::sitedomain) { + $domain=$::sitedomain; + } elsif ($::XCATSITEVALS{domain}) { + $domain=$::XCATSITEVALS{domain}; + } else { + my $rsp; + push @{$rsp->{data}}, "No domain can be determined for node \'$nodename\'. The domain of the xCAT node must be provided in an xCAT network definition or the xCAT site definition.\n"; + + xCAT::MsgUtils->message("W", $rsp, $callback); + next; + } + } + + if ($DELNODE) + { + delnode $nodename, $ip, $ref->{hostnames}, $domain; + if (defined($ref->{otherinterfaces})) { - - my $ref = $hostscache->{$_}->[0]; - my $nodename = $_; - my $ip = $ref->{ip}; - if (not $ip) { - $ip = xCAT::NetworkUtils->getipaddr($nodename); #attempt lookup - } - - my $netn; - ($domain, $netn) = &getIPdomain($ip, $callback); - if (!$domain) { - if ($::sitedomain) { - $domain=$::sitedomain; - } elsif ($::XCATSITEVALS{domain}) { - $domain=$::XCATSITEVALS{domain}; - } else { - my $rsp; - push @{$rsp->{data}}, "No domain can be determined for node \'$nodename\'. The domain of the xCAT node must be provided in an xCAT network definition or the xCAT site definition.\n"; - - xCAT::MsgUtils->message("W", $rsp, $callback); - next; - } - } - - if ($DELNODE) - { - delnode $nodename, $ip, $ref->{hostnames}, $domain; - if (defined($ref->{otherinterfaces})) - { - delotherinterfaces $nodename, $ref->{otherinterfaces}, $domain; - } - } - else - { - if (xCAT::NetworkUtils->isIpaddr($ip)) - { - addnode $callback, $nodename, $ip, $ref->{hostnames}, $domain; - } - else - { - my $rsp; + delotherinterfaces $nodename, $ref->{otherinterfaces}, $domain; + } + } + else + { + if (xCAT::NetworkUtils->isIpaddr($ip)) + { + addnode $callback, $nodename, $ip, $ref->{hostnames}, $domain; + } + else + { + my $rsp; if (!$ip) { push @{$rsp->{data}}, "Ignoring node \'$nodename\', it can not be resolved."; } else { - push @{$rsp->{data}}, "Ignoring node \'$nodename\', its ip address \'$ip\' is not valid."; + push @{$rsp->{data}}, "Ignoring node \'$nodename\', its ip address \'$ip\' is not valid."; } - xCAT::MsgUtils->message("W", $rsp, $callback); - } + xCAT::MsgUtils->message("W", $rsp, $callback); + } + + if (defined($ref->{otherinterfaces})) + { + addotherinterfaces $callback, $nodename, $ref->{otherinterfaces}, $domain; + } + } + } #end foreach + if ($args{hostsref}) { + @{$args{hostsref}} = @hosts; + } +} - if (defined($ref->{otherinterfaces})) - { - addotherinterfaces $callback, $nodename, $ref->{otherinterfaces}, $domain; - } - } - } #end foreach - if ($args{hostsref}) { - @{$args{hostsref}} = @hosts; - } - } sub process_request { Getopt::Long::Configure("bundling"); @@ -324,7 +322,7 @@ sub process_request my $HELP; my $VERSION; my $REMOVE; - my $DELNODE; + my $DELNODE; my $usagemsg = "Usage: makehosts [-d] [-n] [-l] [-a] [-o] [-m]\n makehosts -h\n makehosts -v"; @@ -390,14 +388,14 @@ sub process_request return; } - # get site domain for backward compatibility - my $sitetab = xCAT::Table->new('site'); - if ($sitetab) { - my $dom = $sitetab->getAttribs({key=>'domain'},'value'); - if ($dom and $dom->{value}) { - $::sitedomain=$dom->{value}; - } - } + # get site domain for backward compatibility + my $sitetab = xCAT::Table->new('site'); + if ($sitetab) { + my $dom = $sitetab->getAttribs({key=>'domain'},'value'); + if ($dom and $dom->{value}) { + $::sitedomain=$dom->{value}; + } + } my $hoststab = xCAT::Table->new('hosts'); my $domain; @@ -431,9 +429,9 @@ sub process_request } - # the contents of the /etc/hosts file is saved in the @hosts array - # the @hosts elements are updated and used to re-create the - # /etc/hosts file at the end by the writeout subroutine. + # the contents of the /etc/hosts file is saved in the @hosts array + # the @hosts elements are updated and used to re-create the + # /etc/hosts file at the end by the writeout subroutine. open($lockh, ">", "/tmp/xcat/hostsfile.lock"); flock($lockh, LOCK_EX); my $rconf; @@ -465,21 +463,21 @@ sub process_request } my $linklocal = xCAT::NetworkUtils->linklocaladdr($mac); - my $netn; + my $netn; ($domain, $netn) = &getIPdomain($linklocal, $callback); - if (!$domain) { - if ($::sitedomain) { - $domain=$::sitedomain; - } elsif ($::XCATSITEVALS{domain}) { - $domain=$::XCATSITEVALS{domain}; - } else { - my $rsp; - push @{$rsp->{data}}, "No domain can be determined for node \'$node\'. The domain of the xCAT node must be provided in an xCAT network definition or the xCAT site definition.\n"; - xCAT::MsgUtils->message("W", $rsp, $callback); - next; - } - } + if (!$domain) { + if ($::sitedomain) { + $domain=$::sitedomain; + } elsif ($::XCATSITEVALS{domain}) { + $domain=$::XCATSITEVALS{domain}; + } else { + my $rsp; + push @{$rsp->{data}}, "No domain can be determined for node \'$node\'. The domain of the xCAT node must be provided in an xCAT network definition or the xCAT site definition.\n"; + xCAT::MsgUtils->message("W", $rsp, $callback); + next; + } + } if ($DELNODE) { @@ -493,7 +491,7 @@ sub process_request } else { - add_hosts_content(nodelist=>$req->{node},callback=>$callback,delnode=>$DELNODE,domain=>$domain); + add_hosts_content(nodelist=>$req->{node},callback=>$callback,delnode=>$DELNODE,domain=>$domain); } # end else # do the other node nics - if any @@ -515,14 +513,14 @@ sub process_request push @allnodes, $_->{node}; - my $netn; - ($domain, $netn) = &getIPdomain($_->{ip}); - if (!$domain) { + my $netn; + ($domain, $netn) = &getIPdomain($_->{ip}); + if (!$domain) { $domain=$::sitedomain; } - if (!$domain) { + if (!$domain) { $domain=$::XCATSITEVALS{domain}; - } + } if (xCAT::NetworkUtils->isIpaddr($_->{ip})) { @@ -569,13 +567,13 @@ sub writeout =head3 donics Add the additional network interfaces for a list of nodes as - indicated in the nics table + indicated in the nics table Arguments: - node name + node name Returns: - 0 - ok - 1 - error + 0 - ok + 1 - error Globals: @@ -601,8 +599,8 @@ sub donics foreach my $node (@nodelist) { - my $nich; - my %nicindex; + my $nich; + my %nicindex; # get the nic info my $et = @@ -615,64 +613,64 @@ sub donics ] ); - # only require IP for nic + # only require IP for nic if ( !($et->{nicips}) ) { next; } - # gather nics info - # delimiter could be ":" or "!" - # new $et->{nicips} looks like - # "eth0!11.10.1.1,eth1!60.0.0.5|60.0.0.250..." + # gather nics info + # delimiter could be ":" or "!" + # new $et->{nicips} looks like + # "eth0!11.10.1.1,eth1!60.0.0.5|60.0.0.250..." my @nicandiplist = split(',', $et->{'nicips'}); foreach (@nicandiplist) { - my ($nicname, $nicip); + my ($nicname, $nicip); - # if it contains a "!" then split on "!" - if ($_ =~ /!/) { - ($nicname, $nicip) = split('!', $_); - } else { - ($nicname, $nicip) = split(':', $_); - } + # if it contains a "!" then split on "!" + if ($_ =~ /!/) { + ($nicname, $nicip) = split('!', $_); + } else { + ($nicname, $nicip) = split(':', $_); + } - $nicindex{$nicname}=0; + $nicindex{$nicname}=0; - if (!$nicip) { - next; - } + if (!$nicip) { + next; + } - if ( $nicip =~ /\|/) { - my @ips = split( /\|/, $nicip); - foreach my $ip (@ips) { - $nich->{$nicname}->{nicip}->[$nicindex{$nicname}] = $ip; - $nicindex{$nicname}++; - } - } else { - $nich->{$nicname}->{nicip}->[$nicindex{$nicname}] = $nicip; - $nicindex{$nicname}++; - } - } + if ( $nicip =~ /\|/) { + my @ips = split( /\|/, $nicip); + foreach my $ip (@ips) { + $nich->{$nicname}->{nicip}->[$nicindex{$nicname}] = $ip; + $nicindex{$nicname}++; + } + } else { + $nich->{$nicname}->{nicip}->[$nicindex{$nicname}] = $nicip; + $nicindex{$nicname}++; + } + } my @nicandsufx = split(',', $et->{'nichostnamesuffixes'}); my @nicandprfx = split(',', $et->{'nichostnameprefixes'}); foreach (@nicandsufx) { - my ($nicname, $nicsufx); - if ($_ =~ /!/) { - ($nicname, $nicsufx) = split('!', $_); - } else { - ($nicname, $nicsufx) = split(':', $_); - } + my ($nicname, $nicsufx); + if ($_ =~ /!/) { + ($nicname, $nicsufx) = split('!', $_); + } else { + ($nicname, $nicsufx) = split(':', $_); + } if ( $nicsufx =~ /\|/) { my @sufs = split( /\|/, $nicsufx); - my $index=0; + my $index=0; foreach my $suf (@sufs) { $nich->{$nicname}->{nicsufx}->[$index] = $suf; - $index++; + $index++; } } else { $nich->{$nicname}->{nicsufx}->[0] = $nicsufx; @@ -680,46 +678,49 @@ sub donics } foreach (@nicandprfx) { - my ($nicname, $nicprfx); - if ($_ =~ /!/) { - ($nicname, $nicprfx) = split('!', $_); - } else { - ($nicname, $nicprfx) = split(':', $_); - } + my ($nicname, $nicprfx); + if ($_ =~ /!/) { + ($nicname, $nicprfx) = split('!', $_); + } else { + ($nicname, $nicprfx) = split(':', $_); + } - if ( $nicprfx =~ /\|/) { + if ( defined($nicprfx) && $nicprfx =~ /\|/) { my @prfs = split( /\|/, $nicprfx); - my $index=0; + my $index=0; foreach my $prf (@prfs) { $nich->{$nicname}->{nicprfx}->[$index] = $prf; - $index++; + $index++; } } else { $nich->{$nicname}->{nicprfx}->[0] = $nicprfx; } } - # see if we need to fill in a default suffix - # nich has all the valid nics - ie. that have IPs provided! - foreach my $nic (keys %{$nich}) { - for (my $i = 0; $i < $nicindex{$nic}; $i++ ){ - if (!$nich->{$nic}->{nicsufx}->[$i] && !$nich->{$nic}->{nicprfx}->[$i]) { - # then we have no suffix at all for this - # so set a default - $nich->{$nic}->{nicsufx}->[$i] = "-$nic"; - } - } - } + # see if we need to fill in a default suffix + # nich has all the valid nics - ie. that have IPs provided! + foreach my $nic (keys %{$nich}) { + unless (defined ($nicindex{$nic})) { + $nicindex{$nic} = 0; + } + for (my $i = 0; $i < $nicindex{$nic}; $i++ ){ + if (!$nich->{$nic}->{nicsufx}->[$i] && !$nich->{$nic}->{nicprfx}->[$i]) { + # then we have no suffix at all for this + # so set a default + $nich->{$nic}->{nicsufx}->[$i] = "-$nic"; + } + } + } my @nicandnetwrk = split(',', $et->{'nicnetworks'}); foreach (@nicandnetwrk) { - my ($nicname, $netwrk); - if ($_ =~ /!/) { - ($nicname, $netwrk) = split('!', $_); - } else { - ($nicname, $netwrk) = split(':', $_); - } + my ($nicname, $netwrk); + if ($_ =~ /!/) { + ($nicname, $netwrk) = split('!', $_); + } else { + ($nicname, $netwrk) = split(':', $_); + } if (!$netwrk) { next; @@ -737,7 +738,10 @@ sub donics } } - my @nicandnicalias = split(',', $et->{'nicaliases'}); + my @nicandnicalias; + if (defined($et->{'nicaliases'})) { + @nicandnicalias = split(',', $et->{'nicaliases'}); + } foreach (@nicandnicalias) { my ($nicname, $aliases); @@ -762,78 +766,82 @@ sub donics } } - # end gather nics info + # end gather nics info - # add or delete nic entries in the hosts file - foreach my $nic (keys %{$nich}) { + # add or delete nic entries in the hosts file + foreach my $nic (keys %{$nich}) { # make sure we have the short hostname my $shorthost; ($shorthost = $node) =~ s/\..*$//; + for (my $i = 0; $i < $nicindex{$nic}; $i++ ){ + my $nicip = ""; + my $nicsuffix = ""; + my $nicprefix = ""; + my $nicnetworks = ""; + my $nicaliases = ""; + + $nicip = $nich->{$nic}->{nicip}->[$i] if (defined ($nich->{$nic}->{nicip}->[$i])); + $nicsuffix = $nich->{$nic}->{nicsufx}->[$i] if (defined($nich->{$nic}->{nicsufx}->[$i])); + $nicprefix = $nich->{$nic}->{nicprfx}->[$i] if (defined($nich->{$nic}->{nicprfx}->[$i])); + $nicnetworks = $nich->{$nic}->{netwrk}->[$i] if (defined($nich->{$nic}->{netwrk}->[$i])); + $nicaliases = $nich->{$nic}->{nicaliases}->[$i] if (defined($nich->{$nic}->{nicaliases}->[$i])); - for (my $i = 0; $i < $nicindex{$nic}; $i++ ){ + if (!$nicip) { + next; + } - my $nicip = $nich->{$nic}->{nicip}->[$i]; - my $nicsuffix = $nich->{$nic}->{nicsufx}->[$i]; - my $nicprefix = $nich->{$nic}->{nicprfx}->[$i]; - my $nicnetworks = $nich->{$nic}->{netwrk}->[$i]; - my $nicaliases = $nich->{$nic}->{nicaliases}->[$i]; + # construct hostname for nic + my $nichostname = "$nicprefix$shorthost$nicsuffix"; - if (!$nicip) { - next; - } + # get domain from network def provided by nic attr + my $nt = $nettab->getAttribs({ netname => "$nicnetworks"}, 'domain'); + # look up the domain as a check or if it's not provided + my ($ndomain, $netn) = &getIPdomain($nicip, $callback); - # construct hostname for nic - my $nichostname = "$nicprefix$shorthost$nicsuffix"; - - # get domain from network def provided by nic attr - my $nt = $nettab->getAttribs({ netname => "$nicnetworks"}, 'domain'); - # look up the domain as a check or if it's not provided - my ($ndomain, $netn) = &getIPdomain($nicip, $callback); - - if ( $nt->{domain} && $ndomain ) { - # if they don't match we may have a problem. - if($nicnetworks ne $netn) { - my $rsp; - push @{$rsp->{data}}, "The xCAT network name listed for + if ( $nt->{domain} && $ndomain ) { + # if they don't match we may have a problem. + if($nicnetworks ne $netn) { + my $rsp; + push @{$rsp->{data}}, "The xCAT network name listed for \'$nichostname\' is \'$nicnetworks\' however the nic IP address \'$nicip\' seems to be in the \'$netn\' network.\nIf there is an error then makes corrections to the database definitions and re-run this command.\n"; - xCAT::MsgUtils->message("W", $rsp, $callback); - } - } + xCAT::MsgUtils->message("W", $rsp, $callback); + } + } - # choose a domain - my $nicdomain; - if ( $ndomain ) { - # use the one based on the ip address - $nicdomain=$ndomain; - } elsif ( $nt->{domain} ) { - # then try the one provided in the nics entry - $nicdomain=$nt->{domain}; - } elsif ( $::sitedomain) { - # try the site domain for backward compatibility - $nicdomain=$::sitedomain; - } elsif ($::XCATSITEVALS{domain}) { - $nicdomain=$::XCATSITEVALS{domain}; - } else { - my $rsp; - push @{$rsp->{data}}, "No domain can be determined for the NIC IP value of \'$nicip\'. The network domains must be provided in an xCAT network definition or the xCAT site definition.\n"; - xCAT::MsgUtils->message("W", $rsp, $callback); - next; - } + # choose a domain + my $nicdomain; + if ( $ndomain ) { + # use the one based on the ip address + $nicdomain=$ndomain; + } elsif ( $nt->{domain} ) { + # then try the one provided in the nics entry + $nicdomain=$nt->{domain}; + } elsif ( $::sitedomain) { + # try the site domain for backward compatibility + $nicdomain=$::sitedomain; + } elsif ($::XCATSITEVALS{domain}) { + $nicdomain=$::XCATSITEVALS{domain}; + } else { + my $rsp; + push @{$rsp->{data}}, "No domain can be determined for the NIC IP value of \'$nicip\'. The network domains must be provided in an xCAT network definition or the xCAT site definition.\n"; + xCAT::MsgUtils->message("W", $rsp, $callback); + next; + } - if ($delnode) - { - delnode $nichostname, $nicip, '', $nicdomain; - } - else - { - addnode $callback, $nichostname, $nicip, $nicaliases, $nicdomain, 1; - } + if ($delnode) + { + delnode $nichostname, $nicip, '', $nicdomain; + } + else + { + addnode $callback, $nichostname, $nicip, $nicaliases, $nicdomain, 1; + } } # end for each index } # end for each nic } # end for each node if ($args{hostsref}) { - @{$args{hostsref}} = @hosts; + @{$args{hostsref}} = @hosts; } $nettab->close; @@ -846,12 +854,12 @@ sub donics =head3 getIPdomain - Find the xCAT network definition match the IP and then return the - domain value from that network def. + Find the xCAT network definition match the IP and then return the + domain value from that network def. Arguments: - node IP - callback + node IP + callback Returns: domain and netname - ok undef - error