From bc1fe9a207700e70f2007c7ee5e06beaf2ac962f Mon Sep 17 00:00:00 2001 From: jjhua Date: Thu, 25 Nov 2010 02:47:15 +0000 Subject: [PATCH] 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 --- perl-xCAT/xCAT/FSPUtils.pm | 128 +++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) diff --git a/perl-xCAT/xCAT/FSPUtils.pm b/perl-xCAT/xCAT/FSPUtils.pm index c268857c7..80beceffd 100644 --- a/perl-xCAT/xCAT/FSPUtils.pm +++ b/perl-xCAT/xCAT/FSPUtils.pm @@ -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] ); +} + + +