mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-29 02:15:34 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2522 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			211 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			5.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 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 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 xCAT "RMC subsystem has not started"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| 
 | |
| 
 | |
| #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
 | |
| else
 | |
|   if [ $ADD -eq 1 ]; then
 | |
|     exit 0; #resource already defined, do nothing
 | |
|   fi
 | |
| fi
 | |
| 
 | |
| #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 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 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 xCAT "RMC subsystem has not started"
 | |
|   exit 1
 | |
| fi
 | |
| 
 | |
| 
 | |
| if [ $ADD -eq 1 ]; then
 | |
|   #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 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 xCAT  "Define resource in IBM.MCP class on node $NODE. result=$result1" 
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   #TODO: create predefined sensors
 | |
| else
 | |
|   #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 xCAT "Remove resource in IBM.MCP class on noderesult=$result2"
 | |
|     exit 1
 | |
|   fi
 | |
| fi
 | |
| echo "done"
 | |
| exit 0;
 | |
| 
 | |
| 
 |