HMC Alternative support for mkvm

git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@8262 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
jjhua 2010-11-25 02:47:15 +00:00
parent b566e56d8e
commit bc1fe9a207

View File

@ -250,6 +250,134 @@ sub getTypeOfNode
}
#-------------------------------------------------------------------------------
=head3 fsp_api_partition_action
Description:
invoke the fsp_api to perform the functions
Arguments:
$node_name:
$attrs: an attributes hash
$action: the operations on the fsp, bpa or lpar
$tooltype: 0 for HMC, 1 for HNM
Returns:
Return result of the operation
Globals:
none
Error:
none
Example:
my $res = xCAT::FSPUtils::fsp_api_action( $node_name, $d, "add_connection", $tooltype );
Comments:
=cut
#-------------------------------------------------------------------------------
sub fsp_api_create_parttion {
my $starting_lpar_id = shift;
my $octant_conf_value = shift;
my $node_number = shift;
my $attrs = shift;
my $action = shift;
my $tooltype = shift;
# my $user = "HMC";
# my $password = "abc123";
my $fsp_api = ($::XCATROOT) ? "$::XCATROOT/sbin/fsp-api" : "/opt/xcat/sbin/fsp-api";
my $id = 0;
my $fsp_name = ();
my $fsp_ip = ();
my $target_list=();
my $type = (); # fsp|lpar -- 0. BPA -- 1
my @result;
my $Rc = 0 ;
my %outhash = ();
my $res;
my $number_of_lpars_per_octant;
my $octant_num_needed;
my $starting_octant_id;
if( !defined($tooltype) ) {
$tooltype = 0;
}
use Data::Dumper;
print Dumper($attrs);
$fsp_name = $$attrs[3];
$type = 0;
############################
# Get IP address
############################
$fsp_ip = xCAT::Utils::getNodeIPaddress( $fsp_name );
if(!defined($fsp_ip)) {
$res = "Failed to get the $fsp_name\'s ip";
return ([$fsp_name, $res, -1]);
}
#print "fsp name: $fsp_name\n";
#print "fsp ip: $fsp_ip\n";
#octant configuration values could be 1,2,3,4,5 ; AS following:
# 1 - 1 partition with all cpus and memory of the octant
# 2 - 2 partitions with a 50/50 split of cpus and memory
# 3 - 3 partitions with a 25/25/50 split of cpus and memory
# 4 - 4 partitions with a 25/25/25/25 split of cpus and memory
# 5 - 2 partitions with a 25/75 split of cpus and memory
if($octant_conf_value == 1) {
$number_of_lpars_per_octant = 1;
} elsif($octant_conf_value == 2 ) {
$number_of_lpars_per_octant = 2;
} elsif($octant_conf_value == 3 ) {
$number_of_lpars_per_octant = 3;
} elsif($octant_conf_value == 4 ) {
$number_of_lpars_per_octant = 4;
} elsif($octant_conf_value == 5 ) {
$number_of_lpars_per_octant = 2;
} else {
$res = "Wrong octant configuration values!\n";
return ([$fsp_name, $res, -1]);
}
$octant_num_needed = $node_number/$number_of_lpars_per_octant;
$starting_octant_id = int($starting_lpar_id/4);
print "$octant_num_needed\n";
if(7 - $starting_octant_id < $octant_num_needed ) {
$res = "starting LPAR id is $starting_lpar_id, starting octant id is $starting_octant_id, octant configuration values is $octant_conf_value. Wrong plan.\n";
return ([$fsp_name, $res, -1]);
}
my $new_pending_pump_mode = 1;
my $parameters = "$new_pending_pump_mode:$octant_num_needed";
my $octant_id = $starting_octant_id ;
my $new_pending_interleave_mode = 2;
my $i = 0;
for($i = 0; $i < $octant_num_needed; $i++ ) {
$octant_id += $i;
$parameters = $parameters.":$octant_id:$octant_conf_value:$new_pending_interleave_mode";
}
my $cmd;
$cmd = "$fsp_api -a $action -T $tooltype -t $type:$fsp_ip:0:$fsp_name:$parameters";
#fsp-api -a set_octant_cfg -t 0:40.7.5.1:0:M019:1:1:7:4:2
#print "cmd: $cmd\n";
$SIG{CHLD} = 'DEFAULT';
$res = xCAT::Utils->runcmd($cmd, -1);
#$res = "good";
$Rc = $::RUNCMD_RC;
print $cmd;
#$Rc = -1;
##################
# output the prompt
#################
#$outhash{ $node_name } = $res;
$res =~ s/$fsp_name: //;
return( [$fsp_name,$res, $Rc] );
}