Hardware discovery enhancement: support matching fsp/bpa; record ip into otherinterfaces;

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9493 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
yinle 2011-05-05 11:49:51 +00:00
parent 5aa2739879
commit 8f3f077c52

View File

@ -1364,6 +1364,7 @@ sub gethost_from_url_or_old {
my $cage_number = shift;
my $parmtm = shift;
my $parsn = shift;
my $pname = shift;
my %idhash = ();
my %iphash = ();
my %typehash = ();
@ -1371,12 +1372,14 @@ sub gethost_from_url_or_old {
#######################################
# Extract IP from URL
#######################################
my $nets = xCAT::Utils::my_nets();
my $avip = getip_from_iplist( $ip, $nets, $opt{i});
#if ( !defined( $ip )) {
# return undef;
#}
if ($ip)
{
my $nets = xCAT::Utils::my_nets();
my $avip = getip_from_iplist( $ip, $nets, $opt{i});
#if ( !defined( $ip )) {
# return undef;
#}
}
# get the information of existed nodes to do the migration
if ( !defined(%::OLD_DATA_CACHE))
{
@ -1477,7 +1480,7 @@ sub gethost_from_url_or_old {
}
}
if ($type eq TYPE_BPA or $type eq TYPE_FSP)
if (($type eq TYPE_BPA or $type eq TYPE_FSP) and $pname)
{
$enter_time = ($enter_time + 1) % 2;
}
@ -1494,6 +1497,35 @@ sub gethost_from_url_or_old {
my $tmptype = uc(@{$::OLD_DATA_CACHE{$oldnode}}[6]);
my $unmatched = @{$::OLD_DATA_CACHE{$oldnode}}[7];
# used to match fsp defined by xcatsetup
# should return fast to save time
if ( $type eq TYPE_FSP and ($tmptype eq $type))
{
if ($pname and $tmpparent and $cage_number and $tmpid)
{
if ($pname eq $tmpparent and $cage_number eq $tmpid)
{
return $oldnode;
} else {
next;
}
}
}
# used to match bpa defined by xcatsetup
# should return fast to save time
if ( $type eq TYPE_BPA and ($tmptype eq $type))
{
if ($pname and $tmpparent)
{
if ($pname eq $tmpparent)
{
return $oldnode;
} else {
next;
}
}
}
# match the existed nodes including old data and user defined data
if ( ($type eq TYPE_BPA or $type eq TYPE_FSP) and ($tmptype eq $type))
{
@ -2139,6 +2171,9 @@ sub parse_responses {
# $hostip{$entry->{node}} = $entry->{ip};
#}
#$result[0] is type, $result[1] is mtm, $result[2] is sn, $result[3] is ip,
#$result[4] is side, $result[5] is parent mtm, $result[6] is parent sn,
#$result[7] is frame number, $result[8] is cage number
# begin to define FSP/BPA/FRAME/CEC
my $typetp;
if ( $type eq SERVICE_BPA )
@ -2152,67 +2187,6 @@ sub parse_responses {
my $hostname = undef;
if ( $type eq SERVICE_BPA or $type eq SERVICE_FSP ) {
###########################################
# begin to define fsp/bpa, use ip as the hostname of the fsp/bpa
# for there are redundancy of fsp/bpa,
# excrete each slp response into two definitions
# put the definitions into %outhash
###########################################
# begin to define fsp/bpa
my (@severnode1, @severnode2);
my @ips = split/,/, $result[4];
foreach (@result) {
push @severnode1, $_;
}
#keep cage id for the secondary fsp definition
#the cash hash is like $fid{mtm*sn}=cageid
if ($type eq SERVICE_FSP and $severnode1[3] eq "A")
{
$fid1{$severnode1[1]."*".$severnode1[2]} = $severnode1[8];
}
if ($type eq SERVICE_FSP and $severnode1[3] eq "B")
{
$fid2{$severnode1[1]."*".$severnode1[2]} = $severnode1[8];
}
$severnode1[3] = $severnode1[3].'-0';
$severnode1[4] = $ips[0];
$severnode1[0] = $typetp;
push @severnode1, $rsp;
$hostname = gethost_from_url_or_old($ips[0], $severnode1[0], $severnode1[1], $severnode1[2],
$severnode1[3], $ips[0], $severnode1[8], $severnode1[5],$severnode1[6]);
if ( $hostname )
{
$outhash{$hostname} = \@severnode1;
}
if ( length( $severnode1[4] ) > $$length ) {
$$length = length( $severnode1[4] );
}
$otherinterfacehash{$hostname}{otherinterfaces} = $ips[0];
#begin to define another fsp/bpa
$hostname = undef;
foreach (@result) {
push @severnode2, $_;
}
$severnode2[3] = $severnode2[3].'-1';
$severnode2[4] = $ips[1];
$severnode2[0] = $typetp;
push @severnode2, $rsp;
$hostname = gethost_from_url_or_old($ips[1], $severnode2[0], $severnode2[1], $severnode2[2],
$severnode2[3], $ips[1], $severnode2[8], $severnode2[5],$severnode2[6]);
if ( $hostname )
{
$outhash{$hostname} = \@severnode2;
}
if ( length( $severnode2[4] ) > $$length ) {
$$length = length( $severnode2[4] );
}
$otherinterfacehash{$hostname}{otherinterfaces} = $ips[1];
###########################################
# begin to define frame and cec
# As default, use Server-$result[1]-SN$result[2] as hostname
@ -2242,6 +2216,67 @@ sub parse_responses {
$outhash{$hostname} = \@result;
}
}
###########################################
# begin to define fsp/bpa, use ip as the hostname of the fsp/bpa
# for there are redundancy of fsp/bpa,
# excrete each slp response into two definitions
# put the definitions into %outhash
###########################################
# begin to define fsp/bpa
my (@severnode1, @severnode2);
my @ips = split/,/, $result[4];
foreach (@result) {
push @severnode1, $_;
}
#keep cage id for the secondary fsp definition
#the cash hash is like $fid{mtm*sn}=cageid
if ($type eq SERVICE_FSP and $severnode1[3] eq "A")
{
$fid1{$severnode1[1]."*".$severnode1[2]} = $severnode1[8];
}
if ($type eq SERVICE_FSP and $severnode1[3] eq "B")
{
$fid2{$severnode1[1]."*".$severnode1[2]} = $severnode1[8];
}
$severnode1[3] = $severnode1[3].'-0';
$severnode1[4] = $ips[0];
$severnode1[0] = $typetp;
push @severnode1, $rsp;
$hostname = gethost_from_url_or_old($ips[0], $severnode1[0], $severnode1[1], $severnode1[2],
$severnode1[3], $ips[0], $severnode1[8], $severnode1[5],$severnode1[6]);
if ( $hostname )
{
$outhash{$hostname} = \@severnode1;
}
if ( length( $severnode1[4] ) > $$length ) {
$$length = length( $severnode1[4] );
}
$otherinterfacehash{$hostname}{otherinterfaces} = $ips[0];
#begin to define another fsp/bpa
$hostname = undef;
foreach (@result) {
push @severnode2, $_;
}
$severnode2[3] = $severnode2[3].'-1';
$severnode2[4] = $ips[1];
$severnode2[0] = $typetp;
push @severnode2, $rsp;
$hostname = gethost_from_url_or_old($ips[1], $severnode2[0], $severnode2[1], $severnode2[2],
$severnode2[3], $ips[1], $severnode2[8], $severnode2[5],$severnode2[6]);
if ( $hostname )
{
$outhash{$hostname} = \@severnode2;
}
if ( length( $severnode2[4] ) > $$length ) {
$$length = length( $severnode2[4] );
}
$otherinterfacehash{$hostname}{otherinterfaces} = $ips[1];
} else {
###########################################
@ -2369,6 +2404,7 @@ sub parse_responses {
}
}
# begin to find parent
my $newname;
foreach my $h1 ( keys %outhash ) {
my $data1 = $outhash{$h1};
my $type1 = @$data1[0];
@ -2396,8 +2432,29 @@ sub parse_responses {
}
push @$data, $mac;
$hash{$h} = $data;
# have got node's parent and id, need to match fsp here
if ( $type eq TYPE_FSP and $parent and @$data[8])
{
$newname = gethost_from_url_or_old($h, $type, undef, undef, undef, undef,
@$data[8], undef, undef, $parent)
}
# have got node's parent, need to match bpa here
if ( $type eq TYPE_FSP and $parent and @$data[8])
{
$newname = gethost_from_url_or_old($h, $type, undef, undef, undef, undef,
undef, undef, undef, $parent)
}
if ($newname)
{
$hash{$newname} = $data;
}
else
{
$hash{$h} = $data;
}
}
return( \%hash );