83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| # IBM(c) 2013  EPL license http://www.eclipse.org/legal/epl-v10.html
 | |
| # This routine when called, contacts xcatd.  It will return to the caller when xcatd is
 | |
| # ready to process the request
 | |
| # It is called by xcatdsklspost before calling getpostscripts.awk
 | |
| # it is called by remoteshell before calling getcredentials.awk
 | |
| # For example   xcatflowrequest <ip address of master> 3001
 | |
| #  Returns
 | |
| #     0 = good
 | |
| #     1 = ping/nmap to ip address of master failed (TBD)
 | |
| #     2 = xcatd never gave goahead
 | |
| #
 | |
| 
 | |
| #  Here we will test to see if nmap is available
 | |
| #  if available we will use it to see if the daemon is available
 | |
| #  If not available we will use ping to the ip address
 | |
| #  If nmap or ping fail then
 | |
| #   we will return with exit 1
 | |
| #
 | |
| 
 | |
| 
 | |
| # check bash version, if < 4 then cannot use autodetect of next FD
 | |
| bashversion=$BASH_VERSION
 | |
| bashversionnum=`echo $bashversion | cut -d. -f1`
 | |
| 
 | |
| # cleanup before exiting
 | |
| cleanup()
 | |
| {
 | |
| sleeper=$(cat /tmp/sleeperpid.$parpid)
 | |
| sleeper=$(ps -ef|awk "\$3==$sleeper"|awk '{print $2}')
 | |
| rm /tmp/goahead.$parpid
 | |
| rm /tmp/sleeperpid.$parpid
 | |
| rm /tmp/killme.$parpid
 | |
| if [[ $bashversionnum > 3 ]]; then
 | |
|   exec {REMOTEFD}>&-
 | |
| else
 | |
|   exec 50>&-
 | |
| fi
 | |
| kill -TERM $sleeper
 | |
| }
 | |
| 
 | |
| if [[ $bashversionnum > 3 ]]; then
 | |
|     exec {REMOTEFD}<>/dev/udp/$1/$2
 | |
| else
 | |
|     exec 50<>/dev/udp/$1/$2
 | |
|     echo "resourcerequest: xcatd" >&50
 | |
|     REMOTEFD=50
 | |
| fi
 | |
| echo "resourcerequest: xcatd" >&$REMOTEFD
 | |
| parpid=$$
 | |
| touch /tmp/goahead.$parpid
 | |
| touch /tmp/killme.$parpid
 | |
| exec 2> /dev/null
 | |
| RETRY=0
 | |
| MAX_RETRIES=50
 | |
| while ! grep 'resourcerequest: ok' /tmp/goahead.$parpid > /dev/null; do
 | |
| 	(
 | |
|       echo "resourcerequest: xcatd" >&$REMOTEFD
 | |
|       if [[ $bashversionnum > 3 ]]; then
 | |
|          exec {LOCALFD}<>/proc/self/stat
 | |
|       else
 | |
|         exec 51<>/proc/self/stat
 | |
|         LOCALFD=51
 | |
|       fi
 | |
|       read mystat<&$LOCALFD
 | |
|       mypid=$(echo $mystat|cut -d " " -f 4)
 | |
| 	  (sleep $(((RANDOM%60)+120)).$((RANDOM%50)); if [ -f /tmp/killme.$parpid ]; then kill -TERM $mypid; fi) &
 | |
|       echo $! > /tmp/sleeperpid.$parpid
 | |
| 	  exec awk '{print $0 > "/tmp/goahead.'$parpid'";exit}' <&$REMOTEFD
 | |
|       exec {LOCALFD}>&-
 | |
| 	)
 | |
|     # limit retries, if we reach the max error out
 | |
|     RETRY=$(($RETRY+1))
 | |
|     if [ $RETRY -eq $MAX_RETRIES ]
 | |
|     then
 | |
|        cleanup
 | |
|        exit 2 
 | |
|     fi
 | |
| 	
 | |
| done
 | |
| cleanup
 | |
| exit 0
 |