Read the HMC config and add all partition to dconsole config file, and to DSH config file.
dsh command is a parallel shell (AIX package dsm.dsh) dconsole command allows from an AIX server (NIM for example) to open a console on an LPAR using the file /etc/ibm/sysmgt/dsm/config/
refresh_dcons.sh
#!/bin/ksh #set -x #@(#) Refresh the node list for dconsole command, and wcoll for dsh # try : what * # HMC password file must be located in /etc/ibm/sysmgt/dsm/config/${hmc}_passwd_file ######################################################################## # v1.0 18-11-2015 Manu # v1.1 09-2016 add dsh list for VIOS dir=`dirname $0` . $dir/.env emailaddr="test@yahoo.com" hmclist="hmc1 hmc2" hmcuser=hscroot dshpath=/root DSH_NODE_LIST=$dshpath/.dsh_wcoll_all.cfg DSH_NODE_LIST_LPAR=$dshpath/.dsh_wcoll_lpar.cfg DSH_NODE_LIST_WPAR=$dshpath/.dsh_wcoll_wpar.cfg DSH_VIOS_LIST=$dshpath/.dsh_wcoll_vios.cfg DSH_NODE_LIST_LINUX=$dshpath/.dsh_wcoll_lpar_linux.cfg DCONSOLE_NODE_LIST=/etc/ibm/sysmgt/dsm/nodeinfo SSH_BIN='ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=ERROR ' #------------------------------------------------ usage() { rep=$* case "$rep" in help|-h|-help ) echo "Usage: "$0" (start | stop)" exit 1 ;; *) echo OK ;; esac } #------------------------------------------------ refresh_dconsole() { rm $logpath/dcons*.log 2> /dev/null for hmc1 in $(echo $hmclist) do if [ $(ping -c2 $hmc1 > /dev/null 2>&1;echo $?) -eq 0 ] then hmc=$hmc1 break fi done ssh $hmcuser@$hmc 'lssyscfg -r sys -F name,type_model,serial_num,state' > $logpath/dcons1.log if [ -f $DCONSOLE_NODE_LIST ] then mv $DCONSOLE_NODE_LIST ${DCONSOLE_NODE_LIST}.old fi for line in $(cat $logpath/dcons1.log | sort | uniq) do server=$(echo $line | cut -d',' -f1) type=$(echo $line | cut -d',' -f2) serial=$(echo $line | cut -d',' -f3) ssh $hmcuser@$hmc "lssyscfg -r lpar -m $server -F name,lpar_id,lpar_env,state" > $logpath/dcons1.${server}.log for line1 in $(cat $logpath/dcons1.${server}.log | sed 's/\ //g') do lparname=$(echo $line1 | cut -d',' -f1) lparid=$(echo $line1 | cut -d',' -f2) lparenv=$(echo $line1 | cut -d',' -f3) lparstate=$(echo $line1 | cut -d',' -f4) echo "${lparname}|hmc|${hmc}|TargetHWTypeModel=${type}:TargetHWSerialNum=${serial}:TargetLPARID=${lparid}|/etc/ibm/sysmgt/dsm/config/${hmc}_passwd_file" >> ${DCONSOLE_NODE_LIST} if [ "$lparstate" == "Running" ] then if [ "$lparenv" == "vioserver" ] then echo "${lparname}" >> $logpath/dcons_list_vios_running.log else echo "${lparname}" >> $logpath/dcons_list_running.log fi fi done done } #------------------------------------------------ refresh_dshlist() { ALERT="" rm ${DSH_NODE_LIST_LPAR} ${DSH_NODE_LIST_WPAR} ${DSH_NODE_LIST_LINUX} > /dev/null 2>&1 if [ -f $DSH_NODE_LIST ] then mv $DSH_NODE_LIST ${DSH_NODE_LIST}.old fi if [ -f $DSH_VIOS_LIST ] then mv $DSH_VIOS_LIST ${DSH_VIOS_LIST}.old fi for node in $(cat $logpath/dcons_list_vios_running.log | sort) do if [ $(${SSH_BIN} -l padmin $node 'ioscli ioslevel' > /dev/null 2>&1;echo $?) -eq 0 ] then echo "$node" >> ${DSH_VIOS_LIST} else echo "VIOS: $node doesn't ping" fi done for node in $(cat $logpath/dcons_list_running.log | cut -d'|' -f1 | sort) do if [ $(${SSH_BIN} $node 'uname -a' | grep -q '^AIX';echo $?) -eq 0 ] then echo "$node" >> ${DSH_NODE_LIST} echo "$node" >> ${DSH_NODE_LIST_LPAR} for node1 in $(${SSH_BIN} $node 'lswpar -qca name -sA') do if [ $(${SSH_BIN} $node1 hostname > /dev/null 2>&1;echo $?) -eq 0 ] then echo "$node1" >> ${DSH_NODE_LIST} echo "$node1" >> ${DSH_NODE_LIST_WPAR} else echo "$node1 doesn't ping" fi done else if [ $(${SSH_BIN} $node 'uname -a' | grep -qi '^linux';echo $?) -eq 0 ] then echo "$node" >> ${DSH_NODE_LIST_LINUX} else if [ $(ping -c2 $node > /dev/null 2>&1;echo $?) -eq 0 ] then echo "$node ping but SSH not working" ALERT=$(echo ${ALERT} "$node ping but SSH not working\n") else echo "$node doesn't ping" fi fi fi done if [ "$ALERT" != "" ] then echo $ALERT | mailx -s "Please correct the SSH problems from $(hostname)" $emailaddr fi } ############################################# # main ############################################# main() { date echo "######### refresh_dconsole" refresh_dconsole echo "######### refresh_dshlist" refresh_dshlist date } main > $logname 2>&1