xcat-core/xCAT-rmc/scripts/configrmcnode
2010-12-16 17:01:03 +00:00

249 lines
7.4 KiB
Bash
Executable File

#!/bin/sh
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
##########################################################################################
# This script is used for RMC node configuration
# usage:
# To add node to the cluster:
# NODE=nodename NODEID=fbb5ec1f64dd299c \
# MONMASTER=msname_or_ip MS_NODEID=fbb5ec1f64dd299c \
# configrmcnode 1
# To remove node to the cluster
# NODE=nodename configrmcnode -1
##########################################################################################
if [ -n "$1" ]; then
ADD=$1
else
ADD=1
fi
if [ -z "$NODE" ]; then
NODE=`hostname`
fi
#logger xCAT "configrmcnode: ADD=$ADD, NODE=$NODE, NODEID=$NODEID MONMASTER=$MONMASTER,MS_NODEID=$MS_NODEID"
#check if rsct is installed and running
if [ ! -e /usr/bin/lsrsrc ]; then
logger -t xCAT "RMC setup on node $NODE: RSCT is not is not installed."
exit 1;
else
PID=`/bin/ps -ef | /bin/grep rmcd | /bin/grep -v grep | /bin/awk '{print $2}'`
if [ -z "$PID" ]; then
result=`/usr/sbin/rsct/bin/rmcctrl -s 2>&1`;
if [ $? -gt 0 ]; then
logger -t xCAT "RMC deamon cannot be started on node $NODE:$result"
exit 1;
fi
fi
fi
#wait for RMC daemon to fully functional
RETRY_LIMIT=10 # number of 2 second retry intervals (20 second total)
let i=$RETRY_LIMIT
while :
do
lsrsrc > /dev/null 2>&1
rc=$?
if [[ $rc -eq 0 ]]
then
break
fi
i=$((i - 1))
if (( i > 0 ))
then
sleep 2
else
break
fi
done
if [[ $rc -ne 0 ]]
then
logger -t xCAT "RMC subsystem has not started"
exit 1
fi
if [ $ADD -eq 1 ]; then
#check if the resource is defined
result=`/usr/bin/lsrsrc-api -s IBM.MCP::"NodeID=0x$MS_NODEID"::MNName 2>&1`
if [ $? -gt 0 ]; then #node defined
#ask RMC take the new nodeid
if [[ $NODEID != "" ]]; then
oldid=`/usr/sbin/rsct/bin/lsnodeid`
oldidU=`echo "$oldid" | awk '{ print toupper($1) }'`
newidU=`echo "$NODEID" | awk '{ print toupper($1) }'`
if [ $oldidU != $newidU ]; then
if [ -e /usr/sbin/rsct/install/bin/recfgctnid ]; then
result=`/usr/sbin/rsct/install/bin/recfgctnid $NODEID 2>&1`
if [ $? -ne 0 ]; then
echo "Reset nodeid: $result"
logger -t xCAT "Reset nodeid: $result"
fi
else
#stop all rmc daemons
/usr/sbin/rsct/bin/rmcctrl -z
#get new nodeid into id files
if [ -e /var/ct/cfg/ct_node_id ]; then
sed s/^[^\#].*$/$NODEID/ /var/ct/cfg/ct_node_id > /tmp/id.tmp
else
if [ -e /etc/ct_node_id ]; then
sed s/^[^\#].*$/$NODEID/ /etc/ct_node_id > /tmp/id.tmp
else
echo $NODEID > /tmp/id.tmp
fi
fi
cp /tmp/id.tmp /var/ct/cfg/ct_node_id
cp /tmp/id.tmp /etc/ct_node_id
rm /tmp/id.tmp
#reconfig RMC
result=`/usr/sbin/rsct/install/bin/recfgct -s 2>&1`
if [ $? -ne 0 ]; then
echo "RMC setup on node $NODE: Cannot reconfig RSCT with new node id"
logger -t xCAT "RMC setup on node $NODE: Cannot reconfig RSCT with new node id"
fi
fi
fi
fi
PID=`/bin/ps -ef | /bin/grep rmcd | /bin/grep -v grep | /bin/awk '{print $2}'`
if [ -z "$PID" ]; then
#restart rmc daemon
result=`/usr/sbin/rsct/bin/rmcctrl -s 2>&1`;
if [ $? -gt 0 ]; then
echo "RMC deamon cannot be started on node $NODE:$result"
logger xCAT "RMC deamon cannot be started on node $NODE:$result"
exit 1;
fi
fi
#wait for RMC daemon to fully functional
RETRY_LIMIT=20 # number of 2 second retry intervals (40 second total)
let i=$RETRY_LIMIT
while :
do
lsrsrc > /dev/null 2>&1
rc=$?
if [[ $rc -eq 0 ]]
then
break
fi
i=$((i - 1))
if (( i > 0 ))
then
sleep 2
else
break
fi
done
if [[ $rc -ne 0 ]]
then
logger -t xCAT "RMC subsystem has not started"
exit 1
fi
#enable remote client connection
/usr/sbin/rsct/bin/rmcctrl -p; /usr/bin/refrsrc IBM.MCP
#get IP address of MS
ms_ip=$MONMASTER
result=`ping -c1 $MONMASTER 2>&1`
if [ $? -eq 0 ]; then
index1=`expr index "$result" "\("`
index2=`expr index "$result" "\)"`
#ms_ip=${result:$index1+1:$index2-$index1-2}
pos=`expr $index1 + 1`
length=`expr $index2 - $index1`
length=`expr $length - 1`
ms_ip=`expr substr "$result" $pos $length`
else
echo "RMC setup on node $NODE:$result"
logger -t xCAT "RMC setup on node $NODE:$result"
fi
#define resource in IBM.MCP class on node
result1=`/usr/bin/mkrsrc-api IBM.MCP::MNName::"$NODE"::KeyToken::"$MONMASTER"::IPAddresses::"{\"$ms_ip\"}"::NodeID::0x$MS_NODEID 2>&1`
if [ $? -gt 0 ]; then
echo "Define resource in IBM.MCP class on node $NODE. result=$result1"
logger -t xCAT "Define resource in IBM.MCP class on node $NODE. result=$result1"
exit 1
fi
fi
#create predefined resources
if [[ -z "$NFSSERVER" ]]; then
NFSSERVER=$MASTER
fi
nodetype="node"
if [[ $NTYPE = service ]]; then
nodetype=sn
fi
mkdir -p /var/xcat/rmcmon
rm -f -R /var/xcat/rmcmon
if [[ $OSTYPE = linux* ]]; then
mkdir -p /tmp/postage/rmcmon/scripts
mkdir -p /tmp/postage/rmcmon/resources/$nodetype
rm -f -R /tmp/postage/rmcmon/scripts/*
rm -f -R /tmp/postage/rmcmon/resources/$nodetype
cd /tmp/postage/rmcmon/scripts
wget -l inf -N -r --waitretry=10 --random-wait --retry-connrefused -t 0 -T 60 ftp://$NFSSERVER/postscripts/rmcmon/scripts 2> /tmp/wget.log
cd /tmp/postage/rmcmon/resources/$nodetype
wget -l inf -N -r --waitretry=10 --random-wait --retry-connrefused -t 0 -T 60 ftp://$NFSSERVER/postscripts/rmcmon/resources/$nodetyp 2> /tmp/wget.log
mv $NFSSERVER/postscripts/rmcmon /var/xcat/rmcmon;
rm -rf $NFSSERVER
else
mkdir -p /xcatmnt
result=`mount $NFSSERVER:/install/postscripts /xcatmnt`
if [ $? -gt 0 ]; then
echo "Failed to mount:$result"
logger -t xCAT "Failed to mount $result"
exit 1
fi
mkdir -p /var/xcat/rmcmon/scripts
cp -p -R /xcatmnt/rmcmon/scripts /var/xcat/rmcmon/scripts 2>/dev/null
mkdir -p /var/xcat/rmcmon/resources/$nodetype
cp -p -R /xcatmnt/rmcmon/resources/$nodetype /var/xcat/rmcmon/resources/$nodetype 2>/dev/null
umount /xcatmnt
rmdir /xcatmnt
fi
chmod 755 /var/xcat/rmcmon/scripts/*
/var/xcat/rmcmon/scripts/mkrmcresources /var/xcat/rmcmon/resources/$nodetype
else
#check if the resource is defined
result=`/usr/bin/lsrsrc-api -s IBM.MCP::"NodeID=0x$MS_NODEID"::MNName 2>&1`
if [ $? -gt 0 ]; then
# echo $result
p="2612-023" #resource not found
result1=`awk -v a="$result" -v b="$p" 'BEGIN{print index(a,b)}'`
if [ $result1 -gt 0 ]; then
if [ $ADD -eq -1 ]; then
exit 0; #resource already removed, do nothing
fi
else
echo "$result"
logger xCAT "$result"
exit 1
fi
fi
#remove resource in IBM.MCP class on the node
result2=`/usr/bin/rmrsrc-api -s IBM.MCP::"NodeID=0x$MS_NODEID" 2>&1`
if [ $? -gt 0 ]; then
echo "Remove resource in IBM.MCP class on noderesult=$result2"
logger -t xCAT "Remove resource in IBM.MCP class on noderesult=$result2"
exit 1
fi
fi
echo "done"
logger -t xCAT "done"
exit 0;