Check in configCECs which could help to create a lpar per CEC
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2863 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
		| @@ -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,  | ||||
|   | ||||
| @@ -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  | ||||
|   | ||||
							
								
								
									
										743
									
								
								xCAT-server/share/xcat/ib/scripts/configCECs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										743
									
								
								xCAT-server/share/xcat/ib/scripts/configCECs
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										121
									
								
								xCAT-server/share/xcat/ib/scripts/configCECs.README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								xCAT-server/share/xcat/ib/scripts/configCECs.README
									
									
									
									
									
										Normal file
									
								
							| @@ -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_f<frame#>n<node#>_SN<serial#>', 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. | ||||
		Reference in New Issue
	
	Block a user