write frame and cec into datatable for cluster setup wizard

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@9010 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
xq2005 2011-03-08 13:34:42 +00:00
parent 8a2cc81d53
commit a67ad94915

View File

@ -52,9 +52,12 @@ sub process_request {
'gangliastart' => \&web_gangliastart,
'gangliastop' => \&web_gangliastop,
'gangliastatus' => \&web_gangliastatus,
'gangliacheck' => \&web_gangliacheck,
'gangliacheck' => \&web_gangliacheck,
'mkcondition' => \&web_mkcondition,
'monls' => \&web_monls,
'writeframe' => \&web_writeframe,
'writecec' => \&web_writecec,
'writehmc' => \&web_writehmc
#'xdsh' => \&web_xdsh,
#THIS list needs to be updated
);
@ -976,4 +979,218 @@ sub web_monls(){
$ret = substr($ret, 0, length($ret) - 1);
$callback->({data=>$ret});
}
}
sub web_opentables{
my %tableHash;
my $tempNameArray = shift @_;
foreach my $tableName (@$tempNameArray){
$tableHash{$tableName} = xCAT::Table->new($tableName);
if (!($tableHash{$tableName})){
web_closetables(\%tableHash);
return undef;
}
}
return \%tableHash;
}
sub web_closetables{
my $tempHash = shift @_;
foreach my $tab (keys %$tempHash){
if ($tempHash->{$tab}){
$tempHash->{$tab}->close();
}
}
}
#-------------------------------------------------------
=head3 web_writehmc
Description : work for cluster setup wizard, write hmc into nodelist, ppc, site table
Arguments : hmcnamerange
Returns : Nothing
=cut
#-------------------------------------------------------
sub web_writehmc{
my ( $request, $callback, $sub_req ) = @_;
my $hmcNameRange = $request->{arg}->[1];
#connect all used tables;
my $tablePoint = web_opentables(['nodelist', 'ppc', 'site']);
if (!$tablePoint){
$callback->({data=>'Error: Connect tables failed!'});
return;
}
my @names = xCAT::NodeRange::noderange($hmcNameRange, 0);
if (scalar(@names) < 1){
$callback->({data=>'Error: node range input error!'});
web_closetables($tablePoint);
return;
}
for my $tempName (@names){
$tablePoint->{'nodelist'}->setNodeAttribs($tempName, {groups => 'hmc,all'});
$tablePoint->{'ppc'}->setNodeAttribs($tempName, {nodetype => 'hmc'});
}
$tablePoint->{'site'}->setAttribs({key => 'ea_primary_hmc'}, {value => $names[0]});
if (scalar(@names) > 2){
$tablePoint->{'site'}->setAttribs({key => 'ea_backup_hmc'}, {value => $names[1]});
}
web_closetables($tablePoint);
$callback->({data=>'Success: Write all HMCs into xCAT database!'});
}
#-------------------------------------------------------
=head3 web_writeframe
Description : work for cluster setup wizard, write frame into nodelist, ppc, nodehm table
the command is "webrun writeframe framename hmc/dfm hmcname framenumperhmc"
Arguments : nodegroupname, management method(hmc or dfm)
Returns : Nothing
=cut
#-------------------------------------------------------
sub web_writeframe{
my ( $request, $callback, $sub_req ) = @_;
my $frameNameRange = $request->{arg}->[1];
my $hmcFlag = $request->{arg}->[2];
my $framenumperhmc;
my @hmcNames;
my $tempname = '';
my $id = 0;
my $index = 0;
if ('hmc' eq $hmcFlag){
my $hmcName = $request->{arg}->[3];
$framenumperhmc = $request->{arg}->[4] + 0;
unless ($framenumperhmc){
$callback->({data=>'Error: frame number per hmc is error!'});
return;
}
@hmcNames = xCAT::NodeRange::noderange($hmcName, 0);
}
#open nodelist, ppc and nodehm table for update or add
my $tablePoint = web_opentables(['nodelist', 'ppc', 'nodehm']);
unless ($tablePoint){
$callback->({data=>'Error: Connect tables failed!'});
return;
}
my %nodelistHash;
my %nodehmHash;
my %ppcHash;
#expand the node range and set attributes in database.
my @frameNames = xCAT::NodeRange::noderange($frameNameRange, 0);
foreach $tempname (@frameNames){
#find it's id
if ($tempname =~ /\S+?(\d+)$/){
$id = $1;
}
else{
$id++;
}
$ppcHash{$tempname}{'id'} = $id;
$ppcHash{$tempname}{'nodetype'} = 'frame';
if ('hmc' eq $hmcFlag){
$nodehmHash{$tempname}{'mgt'} = 'hmc';
$ppcHash{$tempname}{'hcp'} = $hmcNames[int($index / $framenumperhmc)];
}
else{
$nodehmHash{$tempname}{'mgt'} = 'bpa';
$ppcHash{$tempname}{'hcp'} = $tempname;
}
$nodelistHash{$tempname}{'groups'} = 'frame,all';
$index++;
}
$tablePoint->{'nodelist'}->setNodesAttribs(\%nodelistHash);
$tablePoint->{'ppc'}->setNodesAttribs(\%ppcHash);
$tablePoint->{'nodehm'}->setNodesAttribs(\%nodehmHash);
web_closetables($tablePoint);
$callback->({data=>'Success: Write all Frames into xCAT database!'});
}
#-------------------------------------------------------
=head3 web_writecec
Description : work for cluster setup wizard, write cec into nodelist, ppc, nodehm table
command is "webrun writecec frameNameRange hmc/dfm cecNameRange cecnumperframe"
Arguments : nodegroupname, management method(hmc or dfm), cecname, cecnumperframe
Returns : Nothing
=cut
#-------------------------------------------------------
sub web_writecec{
my ( $request, $callback, $sub_req ) = @_;
my $frameNameRange = $request->{arg}->[1];
my $hmcFlag = $request->{arg}->[2];
my $cecNameRange = $request->{arg}->[3];
my $cecnumperframe = $request->{arg}->[4];;
my @frameNames = xCAT::NodeRange::noderange($frameNameRange, 0);
my @cecNames = xCAT::NodeRange::noderange($cecNameRange, 0);
my $tempname = '';
my $index = 0;
unless ($cecnumperframe){
$callback->({data=>'Error: cec number per frame is error!'});
return;
}
#open nodelist, ppc and nodehm table for update or add
my $tablePoint = web_opentables(['nodelist', 'ppc', 'nodehm', 'nodepos']);
unless ($tablePoint){
$callback->({data=>'Error: Connect tables failed!'});
return;
}
my %ppcHash;
my %nodelistHash;
my %nodehmHash;
my %nodeposHash;
foreach $tempname (@cecNames){
my $tempFrameid = int($index / $cecnumperframe) + 1;
my $tempCageid = 5 + ($index % $cecnumperframe) * 2;
my $parentName = $frameNames[$tempFrameid];
$nodelistHash{$tempname}{'groups'} = 'cec,all';
if ('hmc' eq $hmcFlag){
$nodehmHash{$tempname}{'mgt'} = 'hmc';
my $parentHcp = $tablePoint->getNodeAttribs($parentName, ['hcp']);
if ($parentHcp && $parentHcp->{'hcp'}){
$ppcHash{$tempname}{'hcp'} = $parentHcp->{'hcp'};
}
}
else{
$nodehmHash{$tempname}{'mgt'} = 'cec';
$ppcHash{$tempname}{'hcp'} = $tempname;
}
$ppcHash{$tempname}{'id'} = $tempCageid;
$ppcHash{$tempname}{'parent'} = $parentName;
$nodeposHash{$tempname} = {'rack' => $tempFrameid, 'u' =>$tempCageid};
$index++;
}
$tablePoint->{'nodelist'}->setNodesAttribs(\%nodelistHash);
$tablePoint->{'ppc'}->setNodesAttribs(\%ppcHash);
$tablePoint->{'nodehm'}->setNodesAttribs(\%nodehmHash);
$tablePoint->{'nodepos'}->setNodesAttribs(\%nodeposHash);
web_closetables($tablePoint);
$callback->({data=>'Success: Write all CECs into xCAT database!'});
}
1;