hardware discovery enhancement

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@4850 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
zhanx 2009-12-28 08:10:42 +00:00
parent d8bbe38994
commit ceea26ca17
8 changed files with 256 additions and 146 deletions

View File

@ -12,7 +12,7 @@ use xCAT::Usage;
##########################################
my %rspconfig = (
sshcfg => \&sshcfg,
frame => \&frame
frame => \&frame
);
@ -144,7 +144,7 @@ sub parse_args {
# Return method to invoke
####################################
if ( exists($cmds{frame}) ) {
$request->{hcp} = "hmc";
$request->{hwcp} = "hmc";
$request->{method} = "cfg";
return( \%opt );
}
@ -259,7 +259,6 @@ sub cfg {
return( $result );
}
##########################################################################
# Enables/disables/displays SSH access to HMC/IVM
##########################################################################

View File

@ -92,9 +92,20 @@ my %rmsysconn = (
# lssysconn support formats
##############################################
my %lssysconn = (
all => "lssysconn -r all"
all => "lssysconn -r all",
alls => "lssysconn -r all -F %s"
);
##############################################
# Change IP address for managed systems
# or frames
##############################################
my %chsyspwd = (
fsp => "chsyspwd -t %s -m %s --passwd %s --newpasswd %s",
bpa => "chsyspwd -t %s -e %s --passwd %s --newpasswd %s"
);
##########################################################################
# Logon to remote server
##########################################################################
@ -1205,8 +1216,10 @@ sub network_reset {
##########################################################################
sub lssysconn
{
my $exp = shift;
my $cmd = $lssysconn{all};
my $exp = shift;
my $res = shift;
my $filter = shift;
my $cmd = sprintf( $lssysconn{$res}, $filter );
my $result = send_cmd( $exp, $cmd);
return ( $result);
}
@ -1226,6 +1239,23 @@ sub mksysconn
return ( $result);
}
##########################################################################
# Change IP address for managed systems or frames
##########################################################################
sub chsyspwd
{
my $exp = shift;
my $user = shift;
my $type = shift;
my $mtms = shift;
my $passwd = shift;
my $newpwd = shift;
my $cmd = sprintf( $chsyspwd{$type}, $user, $mtms, $passwd, $newpwd );
my $result = send_cmd( $exp, $cmd);
return ( $result );
}
##########################################################################
# Remove connection for CEC/BPA
##########################################################################

View File

@ -54,7 +54,7 @@ sub mkhwconn_parse_args
$Getopt::Long::ignorecase = 0;
Getopt::Long::Configure( "bundling" );
if ( !GetOptions( \%opt, qw(V|verbose h|help t p=s P=s) )) {
if ( !GetOptions( \%opt, qw(V|verbose h|help t p=s P=s N=s) )) {
return( usage() );
}
return usage() if ( exists $opt{h});
@ -277,9 +277,9 @@ sub rmhwconn_parse_args
my $usage_string = xCAT::Usage->getUsage("rmhwconn");
return( [ $_[0], $usage_string] );
};
#############################################
# Get options in command line
#############################################
#############################################
# Get options in command line
#############################################
local @ARGV = ref($args) eq 'ARRAY'? @$args:();
$Getopt::Long::ignorecase = 0;
Getopt::Long::Configure( "bundling" );
@ -399,16 +399,10 @@ sub mkhwconn
}
if (!$node_ip)
{
my $ip_tmp_res = xCAT::Utils::toIP($node_name);
($Rc, $node_ip) = @$ip_tmp_res;
if ( $Rc )
{
push @value, [$node_name, $node_ip, $Rc];
next;
}
push @value, [$node_name, $node_ip, $Rc];
next;
}
my ( undef,undef,undef,undef,$type) = @$d;
my ( undef,undef,$mtms,undef,$type) = @$d;
my ($user, $passwd);
if ( exists $opt->{P})
{
@ -432,6 +426,14 @@ sub mkhwconn
{
sethmcmgt( $node_name, $exp->[3]);
}
# if ( exists $opt->{N} )
# {
# my $newpwd = $opt->{N};
# my $Res = xCAT::PPCcli::chsyspwd( $exp, "access", $type, $mtms, $passwd, $newpwd );
# $Rc = shift @$Res;
# push @value, [$node_name, @$Res[0], $Rc];
# }
}
}
return \@value;
@ -449,8 +451,9 @@ sub lshwconn
my @value = ();
my $Rc = undef;
my $hosttab = xCAT::Table->new( 'hosts' );
my $res = xCAT::PPCcli::lssysconn( $exp);
my $res = xCAT::PPCcli::lssysconn( $exp, "all" );
$Rc = shift @$res;
if ( $request->{nodetype} eq 'hmc')
{
@ -526,13 +529,8 @@ sub lshwconn
}
if (!$node_ip)
{
my $ip_tmp_res = xCAT::Utils::toIP($node_name);
($Rc, $node_ip) = @$ip_tmp_res;
if ( $Rc )
{
push @value, [$node_name, $node_ip, $Rc];
next;
}
push @value, [$node_name, $node_ip, $Rc];
next;
}
if ( my @res_matched = grep /\Qipaddr=$node_ip,\E/, @$res)
@ -590,13 +588,8 @@ sub rmhwconn
}
if (!$node_ip)
{
my $ip_tmp_res = xCAT::Utils::toIP($node_name);
($Rc, $node_ip) = @$ip_tmp_res;
if ( $Rc )
{
push @value, [$node_name, $node_ip, $Rc];
next;
}
push @value, [$node_name, $node_ip, $Rc];
next;
}
my $res = xCAT::PPCcli::rmsysconn( $exp, $type, $node_ip);

View File

@ -73,6 +73,7 @@ sub add_ppc {
$id,
$model,
$serial,
$side,
$server,
$pprofile,
$parent,
@ -149,10 +150,12 @@ sub add_ppc {
if ( $type =~ /^(fsp|bpa)$/ ) {
$db{vpd}->setNodeAttribs( $name,
{ mtm=>$model,
serial=>$serial
serial=>$serial,
side=>$side
});
$db{vpd}{commit} = 1;
}
}
###################################
@ -174,7 +177,7 @@ sub update_ppc {
my $hwtype = shift;
my $values = shift;
my $not_overwrite = shift;
my @tabs = qw(ppc vpd nodehm nodelist nodetype ppcdirect);
my @tabs = qw(ppc vpd nodehm nodelist nodetype ppcdirect hosts);
my %db = ();
my %nodetype = (
fsp => $::NODETYPE_FSP,
@ -194,7 +197,8 @@ sub update_ppc {
return( "Error opening '$_'" );
}
}
my @vpdlist = $db{vpd}->getAllNodeAttribs(['node','serial','mtm']);
my @vpdlist = $db{vpd}->getAllNodeAttribs(['node','serial','mtm','side']);
my @hostslist = $db{hosts}->getAllNodeAttribs(['node','ip']);
my @ppclist = $db{ppc}->getAllNodeAttribs(['node','hcp','id',
'pprofile','parent','supernode',
'comments', 'disable']);
@ -207,6 +211,7 @@ sub update_ppc {
$id,
$model,
$serial,
$side,
$server,
$pprofile,
$parent,
@ -217,7 +222,7 @@ sub update_ppc {
my $predefined_node = undef;
foreach my $vpdent (@vpdlist)
{
if ( $vpdent->{mtm} eq $model && $vpdent->{serial} eq $serial)
if ( $vpdent->{mtm} eq $model && $vpdent->{serial} eq $serial && $vpdent->{side} eq $side )
{
$predefined_node = $vpdent->{node};
last;
@ -226,7 +231,13 @@ sub update_ppc {
next if ( !$predefined_node);
if ( update_node_attribs($hwtype, $type, $name, $id, $model, $serial,
if ( $predefined_node =~ /-A$/ ) {
$name = $name . "-A";
} elsif ( $predefined_node =~ /-B$/ ) {
$name = $name . "-B";
}
if ( update_node_attribs($hwtype, $type, $name, $id, $model, $serial, $side,
$server, $pprofile, $parent, $ips,
\%db, $predefined_node, \@ppclist))
{
@ -243,6 +254,7 @@ sub update_ppc {
$id,
$model,
$serial,
$side,
$server,
$pprofile,
$parent,
@ -253,7 +265,7 @@ sub update_ppc {
my $predefined_node = undef;
foreach my $vpdent (@vpdlist)
{
if ( $vpdent->{mtm} eq $model && $vpdent->{serial} eq $serial)
if ( $vpdent->{mtm} eq $model && $vpdent->{serial} eq $serial && $vpdent->{side} eq $side )
{
$predefined_node = $vpdent->{node};
last;
@ -262,7 +274,12 @@ sub update_ppc {
next if ( !$predefined_node);
if (update_node_attribs($hwtype, $type, $name, $id, $model, $serial,
if ( $predefined_node =~ /-A$/ ) {
$name = $name . "-A";
} elsif ( $predefined_node =~ /-B$/ ) {
$name = $name . "-B";
}
if (update_node_attribs($hwtype, $type, $name, $id, $model, $serial, $side,
$server, $pprofile, $parent, $ips,
\%db, $predefined_node, \@ppclist))
{
@ -292,6 +309,7 @@ sub update_node_attribs
my $id = shift;
my $model = shift;
my $serial = shift;
my $side = shift;
my $server = shift;
my $pprofile = shift;
my $parent = shift;
@ -311,7 +329,7 @@ sub update_node_attribs
if ( $model ne $vpdhash->{mtm} or $serial ne $vpdhash->{serial} or $namediff)
{
$db->{vpd}->delEntries( $key_col) if ( $namediff);
$db->{vpd}->setNodeAttribs( $name, { mtm=>$model, serial=>$serial});
$db->{vpd}->setNodeAttribs( $name, { mtm=>$model, serial=>$serial, side=>$side});
$db->{vpd}->{commit} = 1;
$updated = 1;
}
@ -408,6 +426,18 @@ sub update_node_attribs
$db->{nodelist}->{commit} = 1;
$updated = 1;
}
###########################
# Update hosts table
###########################
my $hostslisthash = $db->{hosts}->getNodeAttribs( $name, [qw(ip)]);
if ( $namediff )
{
$db->{hosts}->delEntries( $key_col);
$db->{hosts}->setNodeAttribs( $name,{ip=>$ips} );
$db->{hosts}->{commit} = 1;
$updated = 1;
}
return $updated;
}
@ -581,7 +611,7 @@ sub credentials {
if ( !$user_specified or $user eq @{$logon{$hwtype}}[0])
{
$user = @{$logon{$hwtype}}[0];
$pass = @{$logon{$hwtype}}[1];
$pass = @{$logon{$hwtype}}[1];
}
###########################################
@ -643,6 +673,5 @@ sub credentials {
return( $user,$pass );
}
1;

View File

@ -21,9 +21,10 @@ my @header = (
["id", "%-8s" ],
["type-model", "%-12s" ],
["serial-number", "%-15s" ],
["side", "%-6s" ],
["address", "%s\n" ]);
my @attribs = qw(nodetype node id mtm serial hcp pprofile parent groups mgt cons);
my @attribs = qw(nodetype node id mtm serial side hcp pprofile parent groups mgt cons);
my %nodetype = (
fsp => $::NODETYPE_FSP,
bpa => $::NODETYPE_BPA,
@ -133,6 +134,7 @@ sub enumerate {
my $server = @$exp[3];
my @values = ();
my %cage = ();
my %hwconn = ();
my $Rc;
my $filter;
@ -157,9 +159,37 @@ sub enumerate {
my $prof = "";
my $ips = "";
my $bpa = "";
my $side = "";
push @values, join( ",",
$hwtype,$server,$id,$model,$serial,$server,$prof,$bpa,$ips );
$hwtype,$server,$id,$model,$serial,$side,$server,$prof,$bpa,$ips );
}
#########################################
# Save hardware connections
#########################################
$filter = "type_model_serial_num,ipaddr,sp,side";
my $conns = xCAT::PPCcli::lssysconn( $exp, "alls", $filter );
$Rc = shift(@$conns);
#########################################
# Return error
#########################################
if ( $Rc != SUCCESS ) {
return( @$conns[0] );
}
foreach my $con ( @$conns ) {
my ($mtms,$ipaddr,$sp,$side) = split /,/,$con;
my $value = undef;
if ( $sp =~ /^primary$/ or $side =~ /^a$/ ) {
$value = "A";
} elsif ($sp =~ /^secondary$/ or $side =~ /^b$/ ) {
$value = "B";
}
$hwconn{$ipaddr} = "$mtms,$value";
}
#########################################
@ -258,11 +288,21 @@ sub enumerate {
if ( defined($host) ) {
$fname = $host;
}
my $bpastr = join( ",","bpa",$fname,$id,$model,$serial,$server,$prof,$bpa,"$ipa $ipb");
#######################################
# Save two sides of BPA seperately
#######################################
my $bpastr = join( ",","bpa",$fname,$id,$model,$serial,"A",$server,$prof,$bpa,$ipa);
if ( !grep /^\Q$bpastr\E$/, @values)
{
push @values, join( ",",
"bpa",$fname,$id,$model,$serial,$server,$prof,$bpa,"$ipa $ipb");
"bpa",$fname,$id,$model,$serial,"A",$server,$prof,$bpa,$ipa);
}
$bpastr = join( ",","bpa",$fname,$id,$model,$serial,"B",$server,$prof,$bpa,$ipb);
if ( !grep /^\Q$bpastr\E$/, @values)
{
push @values, join( ",",
"bpa",$fname,$id,$model,$serial,"B",$server,$prof,$bpa,$ipb);
}
}
#####################################
@ -278,8 +318,11 @@ sub enumerate {
if ( defined($host) ) {
$fsp = $host;
}
my $mtmss = $hwconn{$ips};
my ($mtms,$side) = split /,/, $mtmss;
push @values, join( ",",
"fsp",$fsp,$cageid,$model,$serial,$server,$prof,$fname,$ips );
"fsp",$fsp,$cageid,$model,$serial,$side,$server,$prof,$fname,$ips );
#####################################
# Enumerate LPARs
@ -312,12 +355,13 @@ sub enumerate {
my ($name,$lparid,$dprof,$curprof) = split /,/;
my $prof = (length($curprof) && ($curprof !~ /^none$/)) ? $curprof : $dprof;
my $ips = "";
my $port = "";
#####################################
# Save LPAR information
#####################################
push @values, join( ",",
"lpar",$name,$lparid,$model,$serial,$server,$prof,$fsp,$ips );
"lpar",$name,$lparid,$model,$serial,$port,$server,$prof,$fsp,$ips );
}
}
return( \@values );

View File

@ -701,13 +701,14 @@ switch => {
},
},
vpd => {
cols => [qw(node serial mtm asset comments disable)],
cols => [qw(node serial mtm side asset comments disable)],
keys => [qw(node)],
table_desc => 'The Machine type, Model, and Serial numbers of each node.',
descriptions => {
node => 'The node name or group name.',
serial => 'The serial number of the node.',
mtm => 'The machine type and model number of the node. E.g. 7984-6BU',
side => 'The side information for the BPA/FSP',
asset => 'A field for administators to use to correlate inventory numbers they may have to accomodate',
comments => 'Any user-written notes.',
disable => "Set to 'yes' or '1' to comment out this row.",
@ -1130,6 +1131,10 @@ my @nodeattrs = (
{attr_name => 'mtm',
tabentry => 'vpd.mtm',
access_tabentry => 'vpd.node=attr:node',
},
{attr_name => 'side',
tabentry => 'vpd.side',
access_tabentry => 'vpd.node=attr:node',
},
##################
# mac table #

View File

@ -678,7 +678,7 @@ sub preprocess_nodes {
# rscan - Nodes are hardware control pts
# FSPpower, FSPinv and FSPrflash
########################################
if (( !$request->{hcp} && ($request->{hcp} ne "hmc" ))
if (( !$request->{hwcp} && ($request->{hwcp} ne "hmc" ))
and ($request->{command} !~ /^renergy$/)
and (( $request->{command} =~ /^(rscan|rspconfig)$/ )
or ($request->{hwtype} eq "fsp" or $request->{hwtype} eq "bpa" )
@ -749,7 +749,7 @@ sub preprocess_nodes {
##########################################
while (my ($hcp,$hash) = each(%nodehash) ) {
my @cred;
if ($request->{hcp} && ($request->{hcp} eq "hmc" )) {
if ($request->{hwcp} && ($request->{hwcp} eq "hmc" )) {
@cred = xCAT::PPCdb::credentials( $hcp, $request->{hcp} );
} else {
@cred = xCAT::PPCdb::credentials( $hcp, $request->{hwtype} );
@ -1111,7 +1111,7 @@ sub invoke_cmd {
my $hwtype = $request->{hwtype};
my $verbose = $request->{verbose};
my $cmd = $request->{command};
my $power = $request->{hcp};
my $power = $request->{hwcp};
my @exp;
my $verbose_log;
my @outhash;

View File

@ -38,7 +38,7 @@ use constant {
TYPE_HMC => "HMC",
TYPE_IVM => "IVM",
TYPE_FSP => "FSP",
IP_ADDRESSES => 3,
IP_ADDRESSES => 4,
TEXT => 0,
FORMAT => 1,
SUCCESS => 0,
@ -65,6 +65,7 @@ my @header = (
["device", "%-8s" ],
["type-model", "%-12s"],
["serial-number", "%-15s"],
["side", "%-6s" ],
["ip-addresses", "placeholder"],
["hostname", "%s"]
);
@ -95,7 +96,7 @@ my %mgt = (
lc(TYPE_RSA) => "blade"
);
my @attribs = qw(nodetype model serial groups node mgt mpa id);
my @attribs = qw(nodetype model serial groups node mgt mpa id side);
my $verbose = 0;
my %ip_addr = ();
my %slp_result = ();
@ -1110,8 +1111,13 @@ sub gethost_from_url {
my $type = shift;
my $mtm = shift;
my $sn = shift;
my $side = shift;
my $iplist = shift;
if ( $side =~ /^N\/A$/ ) {
$side = undef;
}
#######################################
# Extract IP from URL
#######################################
@ -1137,33 +1143,17 @@ sub gethost_from_url {
if ( !%::VPD_TAB_CACHE)
{
my $vpdtab = xCAT::Table->new( 'vpd' );
my @entries = $vpdtab->getAllNodeAttribs(['node','mtm','serial']);
my @entries = $vpdtab->getAllNodeAttribs(['node','mtm','serial','side']);
#Assuming IP is unique in hosts table
for my $entry ( @entries)
{
if ( $entry->{mtm} and $entry->{serial})
if ( $entry->{mtm} and $entry->{serial} and defined( $entry->{side} ))
{
$::VPD_TAB_CACHE{$entry->{ 'node'}} = $entry->{mtm} . '*' . $entry->{serial};
$::VPD_TAB_CACHE{$entry->{ 'node'}} = $entry->{mtm} . '*' . $entry->{serial} . '-' . $entry->{side};
}
}
}
###############################################################
# Convert IP to hostname (Accoording to DNS or /etc/hosts
###############################################################
my $host = gethostbyaddr( $packed, AF_INET );
if ( !$host or $! ) {
#Tentative solution
return undef if ($opt{H});
}
if ( $host ) {
if ( $::VPD_TAB_CACHE{$host} ) {
delete $::VPD_TAB_CACHE{$host};
}
return( "$host($ip)" );
}
if ( $rsp =~ /\(machinetype-model=(.*?)\)/ )
{
my $mtm = $1;
@ -1171,18 +1161,13 @@ sub gethost_from_url {
{
my $sn = $1;
foreach my $node ( keys %::VPD_TAB_CACHE ) {
if ( $::VPD_TAB_CACHE{$node} eq $mtm . '*' . $sn ) {
my $iip = gethostbyname($node);
if ( !$iip ) {
delete $::VPD_TAB_CACHE{$node};
return $node . "($ip)";
}
if ( $::VPD_TAB_CACHE{$node} eq $mtm . '*' . $sn . '-' . $side ) {
delete $::VPD_TAB_CACHE{$node};
return $node . "($ip)";
}
}
}
}
#######################################
# Read host from hosts table
#######################################
@ -1199,12 +1184,12 @@ sub gethost_from_url {
}
}
}
if ( exists $::HOST_TAB_CACHE{ $ip})
if ( exists $::HOST_TAB_CACHE{$ip})
{
return $::HOST_TAB_CACHE{ $ip} ."($ip)";
return $::HOST_TAB_CACHE{$ip} . "($ip)";
}
$host = getFactoryHostname($type,$mtm,$sn,$rsp);
my $host = getFactoryHostname($type,$mtm,$sn,$side,$rsp);
#######################################
# Convert hostname to short-hostname
#######################################
@ -1231,6 +1216,7 @@ sub getFactoryHostname
my $type = shift;
my $mtm = shift;
my $sn = shift;
my $side = shift;
my $rsp = shift;
my $host = undef;
@ -1247,7 +1233,7 @@ sub getFactoryHostname
if ( $type eq SERVICE_FSP or $type eq SERVICE_BPA)
{
$host = "Server-$mtm-SN$sn";
$host = "Server-$mtm-SN$sn-$side";
}
return $host;
}
@ -1366,6 +1352,7 @@ sub parse_responses {
"type",
"machinetype-model",
"serial-number",
"slot",
"ip-address" );
#######################################
@ -1375,6 +1362,7 @@ sub parse_responses {
"type",
"enclosure-machinetype-model",
"enclosure-serial-number",
"slot",
"ip-address" );
foreach my $rsp ( @$values ) {
@ -1424,9 +1412,17 @@ sub parse_responses {
if ( $verbose ) {
trace( $request, "Attribute not found: [$_]->($rsp)" );
}
next;
push @result, "N/A";
next;
}
push @result, $1;
my $val = $1;
if (( $_ =~ /^slot$/ ) and ( $val == 0 )) {
push @result, "B";
} elsif (( $_ =~ /^slot$/ ) and ( $val == 1 )) {
push @result, "A";
} else {
push @result, $val;
}
}
###########################################
@ -1503,7 +1499,6 @@ sub parse_responses {
# Also, remove those nodes that have same IP addresses and
# give a warning message.
##########################################################
my %hostname_record;
my %ip_record;
for my $h ( keys %outhash)
{
@ -1512,21 +1507,13 @@ sub parse_responses {
{
$name = $1;
$ip = $2;
}
else
{
next;
}
# my $name_node_pair = {$name=>$h};
# if ( not exists $ip_record{$ip})
# {
# $ip_record{$ip} = [$name_node_pair];
# }
# else
# {
# push @{$ip_record{$ip}}, $name_node_pair;
# }
if ( ! $ip_record{$ip})
{
$ip_record{$ip} = $h;
@ -1538,25 +1525,6 @@ sub parse_responses {
xCAT::MsgUtils->message("W", $response, $request->{callback});
delete $outhash{$h};
}
if (exists $hostname_record{$name})
{
#Name is duplicated
my ($old_h, $old_ip) = @{$hostname_record{$name}};
#if the node has been defined, keep one for old node name
#otherwise create new node name
$outhash{$old_h}->[4] = $name . "-1" . "($old_ip)";
$outhash{$name . "-1" . "($old_ip)"} = $outhash{$old_h};
delete $outhash{$old_h};
$outhash{$h}->[4] = $name . "-2" . "($ip)";
$outhash{$name . "-2" . "($ip)"} = $outhash{$h};
delete $outhash{$h};
}
else
{
$hostname_record{$name} = [$h,$ip];
}
}
return( \%outhash );
@ -1579,17 +1547,15 @@ sub xCATdB {
$vpdtab = xCAT::Table->new('vpd');
if ($vpdtab)
{
my @ents=$vpdtab->getAllNodeAttribs(['serial','mtm']);
my @ents=$vpdtab->getAllNodeAttribs(['serial','mtm','side']);
for my $ent ( @ents)
{
if ( $ent->{mtm} and $ent->{serial})
if ( $ent->{mtm} and $ent->{serial} and defined( $ent->{side} ))
{
# if there is no BPA, or there is the second BPA, change it
if ( ! exists $sn_node{"Server-" . $ent->{mtm} . "-SN" . $ent->{serial}} or
$sn_node{"Server-" . $ent->{mtm} . "-SN" . $ent->{serial}} =~ /-2$/
)
if ( ! exists $sn_node{"Server-" . $ent->{mtm} . "-SN" . $ent->{serial} . "-" . $ent->{side}} )
{
$sn_node{"Server-" . $ent->{mtm} . "-SN" . $ent->{serial}} = $ent->{node};
$sn_node{"Server-" . $ent->{mtm} . "-SN" . $ent->{serial} . "-" . $ent->{side}} = $ent->{node};
}
}
}
@ -1598,7 +1564,7 @@ sub xCATdB {
foreach ( keys %$outhash ) {
my $data = $outhash->{$_};
my $type = @$data[0];
my $nameips = @$data[4];
my $nameips = @$data[5];
my ($name,$ips);
if ( $nameips =~ /^([^\(]+)\(([^\)]+)\)$/)
{
@ -1607,17 +1573,19 @@ sub xCATdB {
$host_ip{$name} = $ips;
}
$ips = @$data[3] if ( !$ips);
$name = @$data[4] if ( !$name);
$ips = @$data[4] if ( !$ips);
$name = @$data[5] if ( !$name);
my $hostip = xCAT::Utils::updateEtcHosts($name,$ips);
$name = @$hostip[0];
$ips = @$hostip[1];
########################################
# Write result to hosts table
########################################
my $hostip = writehost($name,$ips);
if ( $type =~ /^BPA$/ ) {
my $model = @$data[1];
my $serial = @$data[2];
my $id = @$data[6];
my $side = @$data[3];
my $id = @$data[7];
####################################
# N/A Values
@ -1626,7 +1594,7 @@ sub xCATdB {
my $frame = "";
my $values = join( ",",
lc($type),$name,$id,$model,$serial,$name,$prof,$frame,$ips );
lc($type),$name,$id,$model,$serial,$side,$name,$prof,$frame,$ips );
xCAT::PPCdb::add_ppc( lc($type), [$values],1 );
}
elsif ( $type =~ /^(HMC|IVM)$/ ) {
@ -1639,11 +1607,12 @@ sub xCATdB {
my $frame = "";
my $model = @$data[1];
my $serial = @$data[2];
$ips = @$data[3] if ( !$ips);
$name = @$data[4] if ( !$name);
my $bpc_model = @$data[6];
my $bpc_serial = @$data[7];
my $cageid = @$data[8];
my $side = @$data[3];
$ips = @$data[4] if ( !$ips);
$name = @$data[5] if ( !$name);
my $bpc_model = @$data[7];
my $bpc_serial = @$data[8];
my $cageid = @$data[9];
############################################################
# For HE machine, there are 2 FSPs, but only one FSP have the
@ -1656,13 +1625,13 @@ sub xCATdB {
{
if ( $model eq $outhash->{$he_node}->[1] and
$serial eq $outhash->{$he_node}->[2] and
$outhash->{$he_node}->[6] and
$outhash->{$he_node}->[7]
$outhash->{$he_node}->[8] and
$outhash->{$he_node}->[9]
)
{
$bpc_model = $outhash->{$he_node}->[6];
$bpc_serial = $outhash->{$he_node}->[7];
$cageid = $outhash->{$he_node}->[8];
$bpc_model = $outhash->{$he_node}->[7];
$bpc_serial = $outhash->{$he_node}->[8];
$cageid = $outhash->{$he_node}->[9];
}
}
}
@ -1699,7 +1668,7 @@ sub xCATdB {
# the short-hostname as the name.
########################################
if ( $name =~ /^[\d]{1}/ ) {
$name = "Server-$model-$serial";
$name = "Server-$model-$serial-$side";
}
########################################
# N/A Values
@ -1708,7 +1677,7 @@ sub xCATdB {
my $server = "";
my $values = join( ",",
lc($type),$name,$cageid,$model,$serial,$name,$prof,$frame,$ips );
lc($type),$name,$cageid,$model,$serial,$side,$name,$prof,$frame,$ips );
xCAT::PPCdb::add_ppc( "fsp", [$values],1 );
}
elsif ( $type =~ /^(RSA|MM)$/ ) {
@ -1733,7 +1702,9 @@ sub format_stanza {
foreach ( keys %$outhash ) {
my @data = @{$outhash->{$_}};
my $type = lc($data[0]);
my $name = $data[4];
my $name = $data[5];
my $ip = $data[4];
my $side = $data[3];
my $i = 0;
#################################
@ -1761,7 +1732,16 @@ sub format_stanza {
} else {
next;
}
} elsif ( /^side$/ ) {
if ( $type =~ /^(fsp|bpa)$/ ) {
$d = $side;
} else {
next;
}
} elsif ( /^ip$/ ) {
$d = $ip;
}
$result .= "\t$_=$d\n";
}
}
@ -1784,7 +1764,9 @@ sub format_xml {
foreach ( keys %$outhash ) {
my @data = @{ $outhash->{$_}};
my $type = lc($data[0]);
my $name = $data[4];
my $name = $data[5];
my $ip = $data[4];
my $side = $data[3];
my $i = 0;
#################################
@ -1811,6 +1793,16 @@ sub format_xml {
} else {
next;
}
} elsif ( /^side$/ ) {
if ( $type =~ /^(fsp|bpa)$/ ) {
$d = $side;
} else {
next;
}
} elsif ( /^node$/ ) {
$d = $name;
} elsif ( /^ip$/ ) {
$d = $ip;
}
$href->{Node}->{$_} = $d;
}
@ -2841,6 +2833,24 @@ sub process_request {
return( $Rc );
}
##########################################################################
# Write hostnames and IP address to host table. If an existing entry
# with same IP address can be found, return the existing hostname and IP
##########################################################################
sub writehost {
my $hostname = shift;
my $ip = shift;
my $hoststab = xCAT::Table->new( "hosts", -create=>1, -autocommit=>1 );
if ( !$hoststab ) {
return( [[$hostname,"Error opening 'hosts' table",RC_ERROR]] );
}
$hoststab->setNodeAttribs( $hostname,{ip=>$ip} );
$hoststab->close();
}
1;