diff --git a/xCAT-server/share/xcat/ib/scripts/annotatelog b/xCAT-server/share/xcat/ib/scripts/annotatelog
index ae03b44aa..294de6367 100644
--- a/xCAT-server/share/xcat/ib/scripts/annotatelog
+++ b/xCAT-server/share/xcat/ib/scripts/annotatelog
@@ -7,7 +7,7 @@
# #
#-------------------------------------------------------------------------#
# This xCAT script is used to parse the QLogic log entries in file
-# /var/log/xcat/errorlog/[xCAT Management Nodes] on CSM Management
+# /var/log/xcat/errorlog/[xCAT Management Nodes] on xCAT Management
# Node by subnet manager, IB node, chassis, FRU(Field-Replaceable Unit) or a
# particular node. This script is supported by both AIX and Linux MN.
# From xCAT's point of view, the log to analyze must be xCAT
@@ -195,7 +195,7 @@ sub getArgs()
my ($hostname, $ip) = getHost($node);
$node = $hostname;
}
- #Check nodes in NodeList and find those that are not defined in CSM database or not in Managed or MinManaged mode
+ #Check nodes in NodeList and find those that are not defined in xCAT database or not in Managed or MinManaged mode
if (!(grep {$_ =~ /$node/} @AllNodes))
{
push (@NotDefinedNodes, $node);
@@ -810,7 +810,7 @@ Usage: annotatelog -f log_file [-s start_time] [-e end_time]
-A Output the combination of -i, -S, -c and -u. It should be used with -g and -l flags.
-f log_file
Specifies a log file fullpath name to analyze.
- Must be CSM consolidated log got from Qlogic HSM or ESM.
+ Must be xCAT consolidated log got from Qlogic HSM or ESM.
-s start_time
Specifies the start time for analysis, where the start_time
variable has the format ddmmyyhh:mm:ss (day, month, year,
diff --git a/xCAT-server/share/xcat/ib/scripts/annotatelog.README b/xCAT-server/share/xcat/ib/scripts/annotatelog.README
index 561cf6fce..09045ec67 100644
--- a/xCAT-server/share/xcat/ib/scripts/annotatelog.README
+++ b/xCAT-server/share/xcat/ib/scripts/annotatelog.README
@@ -50,7 +50,7 @@ setup on xCAT Management Node local will move the log entries to file
entries in this log file and it is difficult for the administrator to look through.
annotatelog is a sample script to parse the QLogic log entries in file
-/var/log/xcat/errorlog/[xCAT Management Node] on xCAT Management Server
+/var/log/xcat/errorlog/[xCAT Management Node] on xCAT Management Node
by subnet manager, IB node, chassis, FRU(Field-Replaceable Unit) or a
particular node. This script is supported by both AIX and Linux Management
Node. From xCAT's point of view, the log to analyze must be xCAT
diff --git a/xCAT-server/share/xcat/ib/scripts/configCECs b/xCAT-server/share/xcat/ib/scripts/configCECs
new file mode 100644
index 000000000..b3ca1a6d7
--- /dev/null
+++ b/xCAT-server/share/xcat/ib/scripts/configCECs
@@ -0,0 +1,743 @@
+#!/usr/bin/ksh
+
+###########################################################################
+#
+# The configCECs script is written in ksh, and used to create a full
+# system partition for each CECs Managed by the HMC. It will use ssh to
+# login the HMC with the hscroot userid in order to rename the CECs based
+# on a certain pattern specified through command line and create full
+# partition for all the CECs.
+# Command Syntax:
+# configCECs -H hmc_list [-c cec_format] [-l lpar_format] [-p profile_format]
+# [--frame_pad_len len_number] [--node_pad_len len_number]
+# [--cage_pad_len len_number]
+# [--allocate_type always_all | always_list | conditional]
+# [--exclude_hw ]
+# [-h]
+#
+# -H hmc_list
+# Specifies a comma-separated list of HMC host names, IP addresses to configure CECs on.
+# -c cec_format
+# Specifies the naming format for CEC, the default format is f%Fn%N_SN%S.
+# -l lpar_format
+# Specifies the naming format for LPAR, the default format is f%Fn%N.
+# -p profile_format
+# Specifies the naming format for profile, the default format is the same with lpar_format.
+# --frame_pad_len len_number
+# Specifies the number of digits used for the frame numbers, it will be zero filled if
+# needed. The default value is no padding.
+# --node_pad_len len_number
+# Specifies the number of digits used for the node numbers, it will be zero filled if
+# needed. The default value is no padding.
+# --cage_pad_len len_number
+# Specifies the number of digits used for the cage numbers, it will be zero filled if
+# needed. The default value is no padding.
+# --allocate_type
+# Specifies the allocation method that is used to allocate resources to full system
+# partition. The supported allocation methods are always_all, always_list and conditional.
+# The default method is always_all. always_all indicates to always use the 'all resources'
+# LPAR flag; always_list indicates to always explicitly list the devices in the LPAR; and
+# conditional indicates to use the 'all resources' LPAR flag if not --exclude_hw is found,
+# otherwise use an explicit list for the hardware.
+# --exclude_hw
+# Specifies a comma-separated list of hardware names or 'device id's that do not need to
+# assign. The supported hardware names are RIO and 10G, RIO indicates Galaxy 1 HCA used
+# for RIO connection in IH nodes; 10G indicates 2-port 10G integrated adapter in IH nodes.
+# It can only be used with --allocate_type is always_list or conditional.
+# -h Display usage information.
+###########################################################################
+
+###########################################################################
+# #
+# Setup default values for the script's variables. Some of these might #
+# be overwritten by the commmand line arguments. #
+# #
+###########################################################################
+CEC_FILE="/tmp/Rename_cecs"
+LPAR_FILE="/tmp/Build_lpars"
+
+CECFORMAT="f%Fn%N_SN%S"
+LPARFORMAT="f%Fn%N"
+PROFFORMAT=""
+NODE_PAD_LENGTH=0 # A value of '0' means no padding
+FRAME_PAD_LENGTH=0 # A value of '0' means no padding
+CAGE_PAD_LENGTH=0 # A value of '0' means no padding
+ALLOCATE_TYPE="always_all"
+COMM_LPAR_INFO_AR="lpar_id=1,lpar_env=aixlinux,all_resources=1,boot_mode=norm,conn_monitoring=0" #For "all resources"
+COMM_LPAR_INFO_LS="lpar_id=1,lpar_env=aixlinux,boot_mode=norm,conn_monitoring=0,proc_mode=ded,sharing_mode=keep_idle_procs"
+NEW_LPAR_ID='1'
+FULLPATH='NO'
+NEWLINE='
+'
+HAVE_PROCESSED_CAGE=""
+
+###########################################################################
+# #
+# usage for configCECs #
+# #
+###########################################################################
+usage()
+{
+echo "Usage: configCECs -H hmc_list [-c cec_format] [-l lpar_format] [-p profile_format]
+ [--frame_pad_len len_number] [--node_pad_len len_number]
+ [--cage_pad_len len_number]
+ [--allocate_type always_all | always_list | conditional]
+ [--exclude_hw ]
+ [-h]
+
+ -H hmc_list
+ Specifies a comma-separated list of HMC host names, IP addresses to configure CECs on.
+ -c cec_format
+ Specifies the naming format for CEC, the default format is f%Fn%N_SN%S.
+ -l lpar_format
+ Specifies the naming format for LPAR, the default format is f%Fn%N.
+ -p profile_format
+ Specifies the naming format for profile, the default format is the same with lpar_format.
+ --frame_pad_len len_number
+ Specifies the number of digits used for the frame numbers, it will be zero filled if
+ needed. The default value is no padding.
+ --node_pad_len len_number
+ Specifies the number of digits used for the node numbers, it will be zero filled if
+ needed. The default value is no padding.
+ --cage_pad_len len_number
+ Specifies the number of digits used for the cage numbers, it will be zero filled if
+ needed. The default value is no padding.
+ --allocate_type
+ Specifies the allocation method that is used to allocate resources to full system
+ partition. The supported allocation methods are always_all, always_list and conditional.
+ The default method is always_all. always_all indicates to always use the 'all resources'
+ LPAR flag; always_list indicates to always explicitly list the devices in the LPAR; and
+ conditional indicates to use the 'all resources' LPAR flag if not --exclude_hw is found,
+ otherwise use an explicit list for the hardware.
+ --exclude_hw
+ Specifies a comma-separated list of hardware names or 'device id's that do not need to
+ assign. The supported hardware names are RIO and 10G, RIO indicates Galaxy 1 HCA used
+ for RIO connection in IH nodes; 10G indicates 2-port 10G integrated adapter in IH nodes.
+ It can only be used with --allocate_type is always_list or conditional.
+ -h Display usage information."
+}
+
+############################################################################
+# #
+# List all resources and exclude the resources indicated by '--exclude_hw' #
+# #
+############################################################################
+lsres()
+{
+ EXCLUDE_HW=`echo $EXCLUDE_HW | sed "s/,/\|/g"`
+ ###########################################################
+ # #
+ # Get the details of any HCAs in the CEC while skipping #
+ # the Galaxy 1 adapter for the RIO (adapter_id of #
+ # 230015ff). When allocate a HCA, a GUID is needed. First #
+ # we try to extract this GUID from unassigned_guids #
+ # attibute. If the unassigned_guids is null, we will try #
+ # to extract this GUID from assigned_guids attibute. If #
+ # this two attribute are both null, an error message will #
+ # will be printed to indicate this device can be #
+ # allocated. #
+ # #
+ ###########################################################
+ HCA_STRING=""
+ HCA_LIST_CMD="ssh hscroot@$HMC $LSHWRES -r hca --level sys -F adapter_id:unassigned_guids:assigned_guids -m $CEC_NAME"
+ TMP_HCA_LIST=`$HCA_LIST_CMD`
+ SAVEIFS="$IFS"
+ IFS="$NEWLINE"
+ set -A HCA_LIST $TMP_HCA_LIST
+ IFS="$SAVEIFS"
+ H_INDEX=0
+ if [[ $HCA_LIST != "No results were found." ]]; then
+ while (($H_INDEX < ${#HCA_LIST[*]})); do
+ ADAPTER_ID=`echo ${HCA_LIST[$H_INDEX]} | cut -d ':' -f1`
+ UNASSIGNED_GUID=`echo ${HCA_LIST[$H_INDEX]} | cut -d ':' -f2`
+ ASSIGNED_GUID=`echo ${HCA_LIST[$H_INDEX]} | cut -d ':' -f3`
+ IS_EXCLUDED=`echo "$EXCLUDE_HW" | grep -q "$ADAPTER_ID" && echo yes || echo no`
+ if [[ $IS_EXCLUDED == "yes" ]]; then
+ ((H_INDEX=$H_INDEX+1))
+ continue
+ fi
+ if [[ "$UNASSIGNED_GUID" != "" && "$UNASSIGNED_GUID" != "none" ]]; then
+ GUID=`echo $UNASSIGNED_GUID | cut -d ',' -f1`
+ else
+ if [[ "$ASSIGNED_GUID" != "" && "$ASSIGNED_GUID" != "none" ]]; then
+ GUID=`echo $ASSIGNED_GUID | cut -d ',' -f1`
+ else
+ echo " ERROR: The device $ADAPTER_ID could not be allocated."
+ ((H_INDEX=$H_INDEX+1))
+ continue
+ fi
+ fi
+ if [[ $HCA_STRING == "" ]]; then
+ HCA_STRING=$ADAPTER_ID'/'$GUID'/4'
+ else
+ HCA_STRING=${HCA_STRING}','$ADAPTER_ID'/'$GUID'/4'
+ fi
+ ((H_INDEX=$H_INDEX+1))
+ done
+ if [[ "${HCA_STRING}" != '' ]]; then
+ HCA_STRING=',\\\\\"hca_adapters='${HCA_STRING}'\\\\\"'
+ fi
+ fi
+ ###########################################################
+ # #
+ # Get the location of all the I/O slots. #
+ # #
+ ###########################################################
+ IO_LIST_CMD="ssh hscroot@$HMC $LSHWRES -r io --rsubtype slot -F drc_index -m $CEC_NAME"
+ if [[ $EXCLUDE_HW != '' ]]; then
+ IO_LIST_CMD=${IO_LIST_CMD}" | egrep -v \"$EXCLUDE_HW\""
+ fi
+ set -A IO_LIST `$IO_LIST_CMD`
+ I_INDEX=0
+ if [[ $IO_LIST != "No" ]]; then
+ while (($I_INDEX < ${#IO_LIST[*]})); do
+ if [[ $I_INDEX == "0" ]]; then
+ IO_STRING=${IO_LIST[$I_INDEX]}'//0'
+ else
+ IO_STRING=${IO_STRING}','${IO_LIST[$I_INDEX]}'//0'
+ fi
+ ((I_INDEX=$I_INDEX+1))
+ done
+ if [[ "${IO_STRING}" != '' ]]; then
+ IO_STRING=',\\\\\"io_slots='${IO_STRING}'\\\\\"'
+ fi
+ fi
+ ###########################################################
+ # #
+ # Get the info on the HEAs in the CEC. #
+ # #
+ ###########################################################
+ HEA_LIST_CMD="ssh hscroot@$HMC $LSHWRES -r hea --rsubtype phys --level port -F adapter_id/port_group/phys_port_id/log_port_ids -m $CEC_NAME"
+ set -A HEA_LIST `$HEA_LIST_CMD`
+ IS_EXCLUDED=`echo "$EXCLUDE_HW" | grep -q "2300000c" && echo yes || echo no`
+ if [[ $HEA_LIST != "No" ]]; then
+ if [[ ${#HEA_LIST[*]} = '4' || $IS_EXCLUDED == "yes" ]]; then
+ HEA_STRING='23000014/2/0/1/,23000014/2/1/2/,23000014/1/0/1/,23000014/1/1/2/'
+ else
+ HEA_STRING='23000014/2/0/1/,23000014/2/1/2/,23000014/1/0/1/,23000014/1/1/2/,2300000c/2/0/1/,2300000c/1/0/1/'
+ fi
+ HEA_STRING=',\\\\\"lhea_logical_ports='${HEA_STRING}'\\\\\"'
+ fi
+ ###########################################################
+ # #
+ # Get the maximum installed memory. #
+ # #
+ ###########################################################
+ MAX_MEM=`ssh hscroot@$HMC $LSHWRES -r mem --level sys -F installed_sys_mem -m $CEC_NAME`
+ MEM_STRING=',min_mem=4096,desired_mem='$MAX_MEM',max_mem='$MAX_MEM
+ ###########################################################
+ # #
+ # Get the maximum installed CPUs. #
+ # #
+ ###########################################################
+ MAX_CPU=`ssh hscroot@$HMC $LSHWRES -r proc --level sys -F installed_sys_proc_units -m $CEC_NAME`
+ MAX_CPU=`echo $MAX_CPU | sed -e 's/\.0$//'`
+ CPU_STRING=',min_procs=1,desired_procs='$MAX_CPU',max_procs='$MAX_CPU
+}
+
+###########################################################################
+# #
+# Parse/validate the commmand line arguments. #
+# #
+###########################################################################
+OS=`uname`
+if [[ "$OS" == "AIX" ]]; then
+ #The getopt on AIX doesn't support long options
+ ALLARGS=$*
+ ALLARGS=`echo $ALLARGS | sed -e 's/ --frame_pad_len/ -F/'`
+ ALLARGS=`echo $ALLARGS | sed -e 's/ --node_pad_len/ -N/'`
+ ALLARGS=`echo $ALLARGS | sed -e 's/ --cage_pad_len/ -G/'`
+ ALLARGS=`echo $ALLARGS | sed -e 's/ --allocate_type/ -A/'`
+ ALLARGS=`echo $ALLARGS | sed -e 's/ --exclude_hw/ -E/'`
+ echo "$ALLARGS" | grep " --" 2>&1 >/dev/null
+ if [ $? -eq 0 ]; then
+ strerr="Invalid options"
+ echo "$strerr" >&2
+ usage
+ exit 1
+ fi
+ args=`getopt H:c:l:p:hF:N:G:A:E: $ALLARGS 2>&1`
+ if [ $? -gt 0 ]; then
+ strerr="Invalid options"
+ echo "$strerr" >&2
+ usage
+ exit 1
+ fi
+ args=`echo $args | sed -e 's/ -F/ --frame_pad_len/'`
+ args=`echo $args | sed -e 's/ -N/ --node_pad_len/'`
+ args=`echo $args | sed -e 's/ -G/ --cage_pad_len/'`
+ args=`echo $args | sed -e 's/ -A/ --allocate_type/'`
+ args=`echo $args | sed -e 's/ -E/ --exclude_hw/'`
+elif [[ "$OS" == "Linux" ]]; then
+ args=`getopt -u -l frame_pad_len:,node_pad_len:,cage_pad_len:,allocate_type:,exclude_hw: H:c:l:p:h $*`
+ if [ $? -gt 0 ]; then
+ strerr="Invalid options"
+ echo "$strerr" >&2
+ usage
+ exit 1
+ fi
+else
+ echo "The system $OS is not supported."
+ exit 1
+fi
+
+set -- $args
+for i in $args; do
+ case $i in
+ -H)
+ shift;
+ HMC_LIST=$1;
+ shift;;
+ -c)
+ shift;
+ CECFORMAT=$1;
+ shift;;
+ -l)
+ shift;
+ LPARFORMAT=$1;
+ shift;;
+ -p)
+ shift;
+ PROFFORMAT=$1;
+ shift;;
+ --frame_pad_len)
+ shift;
+ FRAME_PAD_LENGTH=$1;
+ if [[ `echo "$FRAME_PAD_LENGTH" | grep -sqE ^[0-9]+$ ;echo $?` != "0" ]]; then
+ echo "The parameter of --frame_pad_len should be an integer."
+ usage
+ exit 1
+ fi
+ typeset -RZ${FRAME_PAD_LENGTH} F_NUM;
+ shift
+ ;;
+ --node_pad_len)
+ shift;
+ NODE_PAD_LENGTH=$1;
+ if [[ `echo "$NODE_PAD_LENGTH" | grep -sqE ^[0-9]+$ ;echo $?` != "0" ]]; then
+ echo "The parameter of --node_pad_len should be an integer."
+ usage
+ exit 1
+ fi
+ typeset -RZ${NODE_PAD_LENGTH} N_NUM;
+ shift;;
+ --cage_pad_len)
+ shift;
+ CAGE_PAD_LENGTH=$1;
+ if [[ `echo "$CAGE_PAD_LENGTH" | grep -sqE ^[0-9]+$ ;echo $?` != "0" ]]; then
+ echo "The parameter of --cage_pad_len should be an integer."
+ usage
+ exit 1
+ fi
+ typeset -RZ${CAGE_PAD_LENGTH} CAGE_NUM;
+ shift;;
+ --allocate_type)
+ shift;
+ ALLOCATE_TYPE=$1;
+ shift;;
+ --exclude_hw)
+ shift;
+ EXCLUDE_HW=$1;
+ shift;;
+ -h)
+ shift
+ usage
+ exit 0
+ ;;
+ esac
+done
+
+if [[ "$HMC_LIST" == '' ]]; then
+ echo "There is no HMC specified. Please use -H to specify HMC."
+ usage
+ exit 1
+fi
+if [[ "$ALLOCATE_TYPE" != "always_all" ]] && [[ "$ALLOCATE_TYPE" != "always_list" ]] && [[ "$ALLOCATE_TYPE" != "conditional" ]]; then
+ echo "The parameter of --allocate_type is incorrect."
+ usage
+ exit 1
+fi
+if [[ "$ALLOCATE_TYPE" == "always_all" ]] && [[ "$EXCLUDE_HW" != '' ]]; then
+ echo "The flag --exclude_hw can only be used with --allocate_type is always_list or conditional."
+ usage
+ exit 1
+fi
+if [[ "$ALLOCATE_TYPE" == "conditional" ]] && [[ "$EXCLUDE_HW" != '' ]]; then
+ ALLOCATE_TYPE="always_list"
+fi
+if [[ "$ALLOCATE_TYPE" == "conditional" ]] && [[ "$EXCLUDE_HW" == '' ]]; then
+ ALLOCATE_TYPE="always_all"
+fi
+if [[ "$EXCLUDE_HW" != '' ]]; then
+ EXCLUDE_HW=`echo $EXCLUDE_HW | awk -F, '{ for (i=1;i<=NF;i++){ if($i=="RIO") $i="230015ff"; if($i=="10G") $i="2300000c"; } print $0 }'`
+ EXCLUDE_HW=`echo $EXCLUDE_HW | sed "s/ /,/g"`
+fi
+###########################################################################
+# #
+# Remove any old output files from previous runs of this script. #
+# #
+###########################################################################
+
+rm -r $CEC_FILE >/dev/null 2>&1
+rm -r $LPAR_FILE >/dev/null 2>&1
+
+###########################################################################
+# #
+# Add the full pathname to the HMC commands if needed. #
+# #
+###########################################################################
+
+if [[ "$FULLPATH" == "YES" ]]; then
+ HMCPATH='/opt/hsc/bin/'
+else
+ HMCPATH=''
+fi
+LSSYSCFG=${HMCPATH}'lssyscfg'
+MKSYSCFG=${HMCPATH}'mksyscfg'
+CHSYSCFG=${HMCPATH}'chsyscfg'
+RMSYSCFG=${HMCPATH}'rmsyscfg'
+LSHWRES=${HMCPATH}'lshwres'
+###########################################################################
+# #
+# Main loop: For the given HMC ($HMC) list all it's frames. For each #
+# frame display the contents of it's cages to find it's CECs. Then for #
+# each CEC build the HMC commands to name the CEC and build the LPAR. #
+# The HMC commands are written to the two output files ($CEC_FILE and #
+# $LPAR_FILE). #
+# #
+###########################################################################
+HMC_LIST=`echo $HMC_LIST | sed "s/,/ /g"`
+for HMC in $HMC_LIST; do
+ echo "Checking HMC $HMC......"
+ SAVEIFS="$IFS"
+ IFS="$NEWLINE"
+ set -A ALLFRAMES `ssh hscroot@$HMC $LSSYSCFG -r frame -F name,frame_num,serial_num,state`
+ IFS="$SAVEIFS"
+ if [[ ${#ALLFRAMES[*]} == "0" ]]; then
+ echo 'ERROR: NO FRAMES WERE FOUND ON HMC' "$HMC"
+ continue
+ fi
+ F_INDEX=0
+ while (($F_INDEX < ${#ALLFRAMES[*]})); do
+ SAVEIFS="$IFS"
+ IFS=','
+ set -A FRAMELINE ${ALLFRAMES[$F_INDEX]}
+ IFS="$SAVEIFS"
+ F_NAME="${FRAMELINE[0]}"
+ F_NUM="${FRAMELINE[1]}"
+ F_SN="${FRAMELINE[2]}"
+ F_STATE="${FRAMELINE[3]}"
+ ###################################################################
+ # #
+ # Check if the frame number is invalid (0 or non-numeric). #
+ # #
+ ###################################################################
+ if [[ "$F_NAME" == "No results were found." ]]; then
+ echo 'ERROR: NO FRAMES WERE FOUND ON HMC' "$HMC"
+ break
+ fi
+ if [[ "$F_NUM" == "0" || `echo "$F_NUM" | grep -sqE ^[0-9]+$ ;echo $?` != "0" ]]; then
+ echo 'ERROR: Invalid Frame number for frame' "$F_NAME"":" "$F_NUM"
+ ((F_INDEX=$F_INDEX+1))
+ continue
+ fi
+
+ ###################################################################
+ # #
+ # Check if at least one BPA is in the 'Standby' state. #
+ # #
+ ###################################################################
+ if [[ `echo $F_STATE | grep -sq Standby ; echo $?` != "0" ]]; then
+ echo 'ERROR: Frame' "$F_NAME" 'is in incorrect state -' $F_STATE
+ ((F_INDEX=$F_INDEX+1))
+ continue
+ fi
+
+ ###################################################################
+ # #
+ # List the contents of each cage in the current frame using the #
+ # 'lssyscfg -r cage' command and loop through each one to find the#
+ # CECs. #
+ # #
+ ###################################################################
+ N_NUM=0
+ SAVEIFS="$IFS"
+ IFS="$NEWLINE"
+ set -A ALLCAGES `ssh hscroot@$HMC $LSSYSCFG -r cage -e "$F_NAME" -F cage_num,contents,type_model_serial_num,loc_code,owner | sort -n`
+ IFS="$SAVEIFS"
+ CAGE_INDEX=0
+ while (($CAGE_INDEX < ${#ALLCAGES[*]})); do
+ SAVEIFS="$IFS"
+ IFS=','
+ set -A CAGELINE ${ALLCAGES[$CAGE_INDEX]}
+ IFS="$SAVEIFS"
+ CAGE_NUM="${CAGELINE[0]}"
+ CAGE_CONTENTS="${CAGELINE[1]}"
+ CAGE_TYPE_MODEL_SN="${CAGELINE[2]}"
+ CAGE_LOC_CODE="${CAGELINE[3]}"
+ CAGE_OWNER="${CAGELINE[4]}"
+ if [[ "$CAGE_NUM" == "No results were found." ]]; then
+ echo 'ERROR: NO CAGES WERE FOUND ON FRAME' "$F_NAME"
+ break
+ fi
+ case $CAGE_CONTENTS in
+ io) ;; ## Ignore RIO drawer
+ 48) ;; ## Ignore Federation switch board
+ sys)
+ ###########################################################
+ # #
+ # For each CEC found validate that the frame was able to #
+ # read it's MTMS correctly. The MTMS is the only common #
+ # piece of data between the 'lssyscfg -r cage' and #
+ # 'lssyscfg -r sys' commands. So, if the MTMS is invalid #
+ # skip over this CEC since will not be able to find it in #
+ # the 'lssyscfg -r sys' command output. The MTMS must be #
+ # split in 2 since 'lssyscfg -r sys' uses different fields#
+ # for the Model/Type and the Serial Number. #
+ # #
+ ###########################################################
+ echo "Frame $F_NUM Cage $CAGE_NUM contains CEC $CAGE_TYPE_MODEL_SN"
+ N_NUM=$((${N_NUM} + 1))
+ if [[ "$CAGE_TYPE_MODEL_SN" == "No-TMS*Data!!!" ]]; then
+ echo " ERROR: Bad Type-Model-SN data:" "$CAGE_TYPE_MODEL_SN"
+ else
+ CAGE_TYPE_MODEL=`echo $CAGE_TYPE_MODEL_SN |cut -d '*' -f1`
+ CAGE_SN=`echo $CAGE_TYPE_MODEL_SN | cut -d '*' -f2`
+ for PREVCAGE in $HAVE_PROCESSED_CAGE; do
+ if [[ "$PREVCAGE" == "${CAGE_TYPE_MODEL}:${CAGE_SN}" ]]; then
+ PROCESSED=1
+ break
+ fi
+ PROCESSED=0
+ done
+ if [[ $PROCESSED == 1 ]]; then
+ echo " ERROR: ${CAGE_TYPE_MODEL}:${CAGE_SN} has already been processed."
+ ((CAGE_INDEX=$CAGE_INDEX+1))
+ continue
+ fi
+ HAVE_PROCESSED_CAGE="${HAVE_PROCESSED_CAGE}${CAGE_TYPE_MODEL}:${CAGE_SN} "
+ #######################################################
+ # #
+ # List all the CECs on this HMC and grep for the MTMS #
+ # that was found for the CEC in this cage. If it is #
+ # not found or not an IH p5 then skip over this CEC. #
+ # #
+ #######################################################
+ CEC_ENTRY=`ssh hscroot@$HMC $LSSYSCFG -r sys -F name:state:power_off_policy:service_lpar_id:type_model:serial_num | grep "${CAGE_TYPE_MODEL}:${CAGE_SN}$"`
+ SAVE_RC=$?
+ if [[ "$SAVE_RC" != "0" ]]; then
+ echo " ERROR: Could not find System $CAGE_TYPE_MODEL $CAGE_SN on this HMC"
+ else
+ ###################################################
+ # #
+ # Save the detail data of this CEC. #
+ # #
+ ###################################################
+ CEC_NAME=`echo "$CEC_ENTRY" | cut -d ':' -f1`
+ CEC_STATE=`echo "$CEC_ENTRY" | cut -d ':' -f2`
+ CEC_POWER_POLICY=`echo "$CEC_ENTRY" | cut -d ':' -f3`
+ CEC_SERV_LPAR_ID=`echo "$CEC_ENTRY" | cut -d ':' -f4`
+ CEC_TYPE_MODEL=`echo "$CEC_ENTRY" | cut -d ':' -f5`
+ CEC_SN=`echo "$CEC_ENTRY" | cut -d ':' -f6`
+ ###################################################
+ # #
+ # Format the new CEC name. #
+ # #
+ ###################################################
+ CEC_NEW_NAME=''
+ PERCENT='no'
+ for i in `echo $CECFORMAT | sed -e 's/./& /g'`; do
+ if [[ $i = '%' && $PERCENT = 'no' ]]; then
+ PERCENT='yes'
+ else
+ if [[ $PERCENT = 'yes' ]]; then
+ case $i in
+ F) CEC_NEW_NAME=${CEC_NEW_NAME}${F_NUM} ;;
+ N) CEC_NEW_NAME=${CEC_NEW_NAME}${N_NUM} ;;
+ S) CEC_NEW_NAME=${CEC_NEW_NAME}${CEC_SN} ;;
+ C) CEC_NEW_NAME=${CEC_NEW_NAME}${CAGE_NUM} ;;
+ %) CEC_NEW_NAME=${CEC_NEW_NAME}${i} ;;
+ *) echo "Ignoring Invalid character "${i}" after a '%'." ;;
+ esac
+ PERCENT='no'
+ else
+ CEC_NEW_NAME=${CEC_NEW_NAME}${i}
+ fi
+ fi
+ done
+ ###################################################
+ # #
+ # If the current CEC name needs to be changed then#
+ # build the 'chsyscfg' command and append it to #
+ # the file.
+ # #
+ ###################################################
+ if [[ "$CEC_NAME" == "$CEC_NEW_NAME" ]]; then
+ echo " INFO: CEC NAME ($CEC_NAME) IS CORRECT."
+ else
+ echo " CHANGE: OLD CEC NAME:" "$CEC_NAME""." "NEW CEC NAME:" "$CEC_NEW_NAME""."
+ echo "ssh hscroot@$HMC $CHSYSCFG -r sys -m $CEC_NAME -i \"new_name=$CEC_NEW_NAME\"" >> $CEC_FILE
+ fi
+ ###################################################
+ # #
+ # Check if the CEC is powered up. If it isn't we #
+ # have to skip over it since it needs to be up to #
+ # do anything else other then changing the CEC #
+ # name. #
+ # #
+ ###################################################
+ if [[ "$CEC_STATE" == "Standby" || "$CEC_STATE" == "Operating" ]]; then
+ ###############################################
+ # #
+ # Make sure the CEC power off policy is set to#
+ # 1. This prevents the CEC from being powered #
+ # off when the last LPAR is shutdown. #
+ # #
+ ###############################################
+ if [[ "$CEC_POWER_POLICY" == "1" ]]; then
+ echo " INFO: CEC POWER OFF POLICY IS SET OK ($CEC_POWER_POLICY)."
+ else
+ echo " CHANGE: CEC POWER OFF POLICY IS SET WRONG ($CEC_POWER_POLICY)."
+ echo "ssh hscroot@$HMC $CHSYSCFG -r sys -m $CEC_NAME -i \"power_off_policy=1\"" >> $CEC_FILE
+ fi
+ ###############################################
+ # #
+ # Format the new LPAR name. #
+ # #
+ ###############################################
+ LPAR_NAME=''
+ PERCENT='no'
+ for i in `echo $LPARFORMAT | sed -e 's/./& /g'`; do
+ if [[ $i = '%' && $PERCENT = 'no' ]]; then
+ PERCENT='yes'
+ else
+ if [[ $PERCENT = 'yes' ]]; then
+ case $i in
+ F) LPAR_NAME=${LPAR_NAME}${F_NUM} ;;
+ N) LPAR_NAME=${LPAR_NAME}${N_NUM} ;;
+ S) LPAR_NAME=${LPAR_NAME}${CEC_SN} ;;
+ C) LPAR_NAME=${LPAR_NAME}${CAGE_NUM} ;;
+ %) LPAR_NAME=${LPAR_NAME}${i} ;;
+ *) echo "Ignoring Invalid character "${i}" after a '%'." ;;
+ esac
+ PERCENT='no'
+ else
+ LPAR_NAME=${LPAR_NAME}${i}
+ fi
+ fi
+ done
+ ###############################################
+ # #
+ # Format the new Profile name. #
+ # #
+ ###############################################
+ if [[ "$PROFFORMAT" == '' ]]; then
+ PROF_NAME=$LPAR_NAME
+ else
+ PROF_NAME=''
+ PERCENT='no'
+ for i in `echo $PROFFORMAT | sed -e 's/./& /g'`; do
+ if [[ $i = '%' && $PERCENT = 'no' ]]; then
+ PERCENT='yes'
+ else
+ if [[ $PERCENT = 'yes' ]]; then
+ case $i in
+ F) PROF_NAME=${PROF_NAME}${F_NUM} ;;
+ N) PROF_NAME=${PROF_NAME}${N_NUM} ;;
+ S) PROF_NAME=${PROF_NAME}${CEC_SN} ;;
+ C) PROF_NAME=${PROF_NAME}${CAGE_NUM} ;;
+ %) PROF_NAME=${PROF_NAME}${i} ;;
+ *) echo "Ignoring Invalid character "${i}" after a '%'." ;;
+ esac
+ PERCENT='no'
+ else
+ PROF_NAME=${PROF_NAME}${i}
+ fi
+ fi
+ done
+ fi
+ ###############################################
+ # #
+ # Check if an LPAR with this name already #
+ # exists on this CEC. #
+ # #
+ ###############################################
+ LPAR_ENTRY=`ssh hscroot@$HMC $LSSYSCFG -r lpar -m $CEC_NAME -F name:lpar_id:state --filter "lpar_names=$LPAR_NAME" `
+ LPAR_ENTRY_RC="$?"
+ if [[ "$LPAR_ENTRY_RC" == "0" ]]; then
+ ###########################################
+ # #
+ # An LPAR with the this name exists. Now #
+ # check if the LPAR ID and the profile are#
+ # also correct. #
+ # #
+ ###########################################
+ LPAR_ID=`echo "$LPAR_ENTRY" |cut -d ':' -f2`
+ LPAR_STATE=`echo "$LPAR_ENTRY" |cut -d ':' -f3`
+ if [[ "$LPAR_ID" == "$NEW_LPAR_ID" ]]; then
+ echo " INFO: LPAR $LPAR_NAME IS ALREADY CONFIGURED AS ID 1"
+ if [[ "$CEC_SERV_LPAR_ID" == "$NEW_LPAR_ID" ]]; then
+ echo " INFO: SERVICE LPAR ID IS SET OK ($CEC_SERV_LPAR_ID)."
+ else
+ echo " CHANGE: SERVICE LPAR ID IS SET WRONG ($CEC_SERV_LPAR_ID)."
+ echo "ssh hscroot@$HMC $CHSYSCFG -r sys -m $CEC_NEW_NAME -i \"service_lpar_id=1\"" >> $CEC_FILE
+ fi
+ else
+ echo " ERROR: LPAR $LPAR_NAME IS CONFIGURED AS ID $LPAR_ID"
+ fi
+ else
+ ###########################################
+ # #
+ # There is no existing LPAR with the #
+ # requested name. #
+ # Now verify there is no existing LPAR #
+ # with the requested LPAR ID#. #
+ # #
+ ###########################################
+ LPAR_ENTRY=`ssh hscroot@$HMC $LSSYSCFG -r lpar -m $CEC_NAME -F name:lpar_id:state --filter "lpar_ids=$NEW_LPAR_ID" `
+ LPAR_ENTRY_RC="$?"
+ LPAR_INFO=''
+ if [[ "$ALLOCATE_TYPE" == "always_all" ]]; then
+ LPAR_INFO=${COMM_LPAR_INFO_AR}
+ else
+ lsres
+ LPAR_INFO=${COMM_LPAR_INFO_LS}${CPU_STRING}${MEM_STRING}${IO_STRING}${HEA_STRING}${HCA_STRING}
+ fi
+ if [[ "$LPAR_ENTRY_RC" == "0" ]]; then
+ #######################################
+ # #
+ # An existing LPAR with the requested #
+ # LPAR ID# (but different LPAR name) #
+ # was found. #
+ # #
+ #######################################
+ echo " CHANGE: REMOVE LPAR ID $NEW_LPAR_ID"
+ echo "ssh hscroot@$HMC $CHSYSCFG -r sys -m $CEC_NEW_NAME -i \"service_lpar_id=none\"" >> $LPAR_FILE
+ echo "ssh hscroot@$HMC $RMSYSCFG -r lpar -m $CEC_NEW_NAME --id $NEW_LPAR_ID" >> $LPAR_FILE
+ CONFIG_DATA="name=${LPAR_NAME},profile_name=${PROF_NAME},${LPAR_INFO}"
+ echo " CHANGE: CREATE LPAR $LPAR_NAME as LPAR ID 1"
+ echo "ssh hscroot@$HMC $MKSYSCFG -r lpar -m $CEC_NEW_NAME -i \"$CONFIG_DATA\"" >> $LPAR_FILE
+ echo "ssh hscroot@$HMC $CHSYSCFG -r sys -m $CEC_NEW_NAME -i \"service_lpar_id=1\"" >> $LPAR_FILE
+ else
+ CONFIG_DATA="name=${LPAR_NAME},profile_name=${PROF_NAME},${LPAR_INFO}"
+ echo " CHANGE: CREATE LPAR $LPAR_NAME as LPAR ID 1"
+ echo "ssh hscroot@$HMC $MKSYSCFG -r lpar -m $CEC_NEW_NAME -i \"$CONFIG_DATA\"" >> $LPAR_FILE
+ echo "ssh hscroot@$HMC $CHSYSCFG -r sys -m $CEC_NEW_NAME -i \"service_lpar_id=1\"" >> $LPAR_FILE
+ fi
+ fi
+ else
+ echo " ERROR: CEC NOT POWERED UP. STATE IS: $CEC_STATE"
+ fi
+ fi
+ fi ;;
+ none) ;; ## Ignore empty cage in the frame
+ *) echo " ERROR: Unknown device in cage" $CAGE_NUM ;;
+ esac
+ ((CAGE_INDEX=$CAGE_INDEX+1))
+ done
+ ((F_INDEX=$F_INDEX+1))
+ done
+done
+
+chmod u+x $CEC_FILE >/dev/null 2>&1
+chmod u+x $LPAR_FILE >/dev/null 2>&1
diff --git a/xCAT-server/share/xcat/ib/scripts/configCECs.README b/xCAT-server/share/xcat/ib/scripts/configCECs.README
new file mode 100644
index 000000000..c76e1aa7b
--- /dev/null
+++ b/xCAT-server/share/xcat/ib/scripts/configCECs.README
@@ -0,0 +1,121 @@
+# IBM(c) 2008 EPL license http://www.eclipse.org/legal/epl-v10.html
+
+
+configCECs.README
+
+This README describes how to use the configCECs script.
+
+The syntax of the configCECs command is:
+
+configCECs -H hmc_list [-c cec_format] [-l lpar_format] [-p profile_format]
+ [--frame_pad_len len_number] [--node_pad_len len_number]
+ [--cage_pad_len len_number]
+ [--allocate_type always_all | always_list | conditional]
+ [--exclude_hw ]
+ [-h]
+
+ -H hmc_list
+ Specifies a comma-separated list of HMC host names, IP
+ addresses to configure CECs on.
+ -c cec_format
+ Specifies the naming format for CEC, the default format
+ is f%Fn%N_SN%S.
+ -l lpar_format
+ Specifies the naming format for LPAR, the default
+ format is f%Fn%N.
+ -p profile_format
+ Specifies the naming format for profile, the default
+ format is the same with lpar_format.
+ --frame_pad_len len_number
+ Specifies the number of digits used for the frame
+ numbers, it will be zero filled if needed. The default
+ value is no padding.
+ --node_pad_len len_number
+ Specifies the number of digits used for the node numbers,
+ it will be zero filled if needed. The default value
+ is no padding.
+ --cage_pad_len len_number
+ Specifies the number of digits used for the cage numbers,
+ it will be zero filled if needed. The default value is
+ no padding.
+ --allocate_type
+ Specifies the allocation method that is used to allocate
+ resources to full system partition. The supported
+ allocation methods are always_all, always_list and
+ conditional. The default method is always_all. always_all
+ indicates to always use the 'all resources' LPAR flag;
+ always_list indicates to always explicitly list the
+ devices in the LPAR; and conditional indicates to use
+ the 'all resources' LPAR flag if not --exclude_hw is found,
+ otherwise use an explicit list for the hardware.
+ --exclude_hw
+ Specifies a comma-separated list of hardware names or
+ 'device id's that do not need to assign. The supported
+ hardware names are RIO and 10G, RIO indicates Galaxy 1 HCA
+ used for RIO connection in IH nodes; 10G indicates 2-port
+ 10G integrated adapter in IH nodes. It can only be used
+ with --allocate_type is always_list or conditional.
+ -h Display usage information.
+
+The configCECs script is written in ksh, and used to create a full
+system partition for each CECs Managed by the HMC. It will use ssh to
+login the HMC with the hscroot userid in order to rename the CECs based
+on a certain pattern specified through command line and create full
+partition for all the CECs.
+
+Since for the large HPC environment the user usually does not use many
+nodes that are not IH nodes, so we only support Power6 IH servers in
+this script. If the user wants to do LPAR setup for HV or HE servers,
+he needs to modify this sample script manually.
+
+To specify the name format to be used for the CEC/LPAR/Profile, this
+script uses the same logic that the 'date' command uses for specifying
+how to output the date. There are 4 field descriptors that the script
+will recognize:
+ %F = the frame number of the frame that the CEC is in
+ %N = the relative node number of the CEC in the frame
+ %C = the cage number of the CEC in the frame
+ %S = the serial number of the CEC
+For example if you want the CEC name to be
+'airbus_fn_SN', then the format to use would be
+'airbus_f%Fn%N_SN%S'
+
+The way the script finds the CECs on the HMC is to issue the
+'lssyscfg -r frame' command to find all the frames and then issues the
+'lssyscfg -r cage' command for each frame to list the contents of each
+cage position in a given frame. It then starts looking for CECs starting
+at cage 1 and going through to the last cage. The first CEC found in a
+frame is assumed to be node 1, the second node found is node two and so on.
+The script then will assign each CEC a frame number, a node number, a cage
+number and the Serial number of the CEC which can be used in naming the
+CEC/LPAR/Profile. If no frames/cages/CECs are found on this HMC, an error
+message will be displayed.
+
+xCAT command rspconfig could be used to setup ssh remote shell from the
+xCAT Management Node to the HMCs without prompting for the hscroot password;
+otherwise the user has to type in the password manually for many times.
+And if the user wants to use the frame number in the name of the CEC or
+LPAR then the frame number must be set on the frames through HMC Web GUI
+or HMC command line before issuing this script.
+
+This script supports three resource allocate_types to create the full system
+partition; they are always_all, always_list and conditional. The default
+method is always_all. always_all indicates to always use the 'all resources'
+LPAR flag; always_list indicates to always explicitly list the devices in the
+LPAR; and conditional indicates to use the 'all resources' LPAR flag if not
+--exclude_hw is found, otherwise use an explicit list for the hardware.
+
+As default, this script will assign all the resources to the full system
+partition, but if the allocate_type is always_list or conditional, then the
+user could use --exclude_hw flag to exclude those devices that can not be
+assigned or not supported by the operating system from assignment. The
+supported hardware names or 'device_id's to exclude are RIO and 10G, RIO
+indicates Galaxy 1 HCA used for RIO connection in IH nodes; 10G indicates
+2-port 10G integrated adapter in IH nodes.
+
+Actually, this script will not change the CECs/LPARs directly but creates
+one or two scripts (Rename_cecs, Build_lpars) in /tmp directory on xCAT MN
+that will do the changes once the user executes them. The /tmp/Rename_cecs
+should be run first and then the /tmp/Build_lpars. The reason why we do it
+this way is to have the user see exactly what HMC commands would be executed
+and also have a better chance to fine tune the commands if it is needed.