====== DSH ======
As dsh is a standard AIX command (package dsm.dsh) starting a parallel shell on multiple server, using ssh mechanism, dshvio is a shell (but sequential only) that can be used on VIOS as padmin or root.
In the same idea, dcp will copy a file on many server in parallel, while dcpvio will copy in sequential mode for padmin user only
===== DSHVIO =====
[root@nim]/root/scripts# cat dshvio
#!/bin/ksh
#set -x
#############################################
#@(#) execute an ssh on multiple VIOS as padmin or root
#############################################
# version 1.0 09-2016 Manu
#############################################
#VIOS="vios1 vios3"
path_script=/root/script
logpath=/root/script/log
DSH_WCOLL=${DSH_WCOLL:-"/root/.ssh/.dsh_wcoll_vios.cfg"} # export DSH_WCOLL=...; export NOCR="\t\c" ; dsh '...'
sed '/^$/d' $DSH_WCOLL > $logpath/dcp_$$.list
sed '/^ *$/d' $logpath/dcp_$$.list > $logpath/dcp_$$.list2
grep -v "^ *#" $logpath/dcp_$$.list2 > $logpath/dcp_$$.list
grep -v "$(hostname)" $logpath/dcp_$$.list > $logpath/dcp_$$.list2 ; mv $logpath/dcp_$$.list2 $logpath/dcp_$$.list # pas d'execution locale
VIOS=$(cat $logpath/dcp_$$.list); rm -f $logpath/dcp_$$.list
DisplayUsage ()
{
echo "Syntax: dshvio COMMAND\n"
echo " Valid parameters are:\n -r for a root command\n -n for a list of VIOS servers\n -n vios1\n -n vios1,vios2"
}
if [ ${#*} -eq 0 ]
then
DisplayUsage
else
while getopts :rn: PARMS
do
case $PARMS in
r) lslpp -L | grep -w expect > /dev/null
if [ $? -ne 0 ]
then
echo "Error: cannot use -r flag because expect package is not installed"
exit 1
else
ROOT=1
fi ;;
n) VIOS=${OPTARG}
VIOS=`echo ${VIOS} | sed 's/,/ /g'` ;;
?) echo "Valid parameters are:\n -r for a root command\n -n for a list of VIOS servers\n -n vios1\n -n vios1,vios2"
exit ;;
esac
done
shift $(($OPTIND -1))
VIOSCMD=${*}
if [ ${#VIOSCMD} -eq 0 ]
then
DisplayUsage
fi
fi
for VIO in ${VIOS}
do
ping -c1 ${VIO} > /dev/null
if [ $? -eq 0 ]
then
echo "========================== \nVIO server --> ${VIO}\n=========================="
if [ ${ROOT:=0} -ne 1 ]
then
ssh padmin@${VIO} "ioscli ${VIOSCMD}"
else
ssh padmin@${VIO} ioscli oem_setup_env <<+EOF+
${VIOSCMD}
+EOF+
#expect -c "spawn ssh padmin@${VIO} ; expect \"\$\*\"; send \"oem_setup_env\\r\"; expect \"\#\*\"; send \"${VIOSCMD}\\r\";\
#send \"exit\\r\"; expect \"\$\*\"; send \"exit\\r\""| egrep -v "^spawn|^Last|oem_setup_env|^exit|^#|^\[padmin"
fi
else
echo "========================== \nVIO server --> ${VIO}\n =========================="
echo "VIOS Server; ${VIO} is not responding"
fi
done
===== DCPVIO =====
[root@nim]/root/scripts# cat dcpvio
#!/bin/ksh
#set -x
#############################################
#@(#) execute an scp on multiple VIOS as padmin only
#############################################
# version 1.0 09-2016 Manu
#############################################
#VIOS="vios1 vios3"
path_script=/root/script
logpath=/root/script/log
VIOS=$(cat $path_script/dsh_wcoll_vios.cfg)
DisplayUsage ()
{
echo "Syntax: dcpvio SRC TARGET\n Run dcpvio -? for the valid parameters"
}
if [ ${#*} -ne 2 ]
then
DisplayUsage
else
source=$1
target=$2
fi
for VIO in ${VIOS}
do
ping -c1 ${VIO} > /dev/null
if [ $? -eq 0 ]
then
echo "========================== \nVIO server --> ${VIO}\n =========================="
scp $source padmin@${VIO}:$target
else
echo "========================== \nVIO server --> ${VIO}\n =========================="
echo "VIOS Server; ${VIO} is not responding"
fi
done