blob: 81570a7988de87237567cd8d1838e038c658adc6 [file] [log] [blame]
#!/usr/bin/env python
# @@@ START COPYRIGHT @@@
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# @@@ END COPYRIGHT @@@
from subprocess import call
import sys, os, subprocess, tempfile
argList = sys.argv
execNode = 0
def isDev():
mySQROOT = ''
try:
mySQROOT = os.environ['TRAF_HOME']
except:
print "ERROR: $TRAF_HOME variable not set. Please setup SeaQuest environment."
exit(1)
sqconfig = "%s/sql/scripts/sqconfig" % mySQROOT
grepCommand = ['grep', 'node-name=.[^A-Za-z].[0-9]*', sqconfig]
proc = subprocess.Popen(grepCommand, stdout = subprocess.PIPE, shell=False)
grepOut, _ = proc.communicate()
if grepOut == '':
return True
return False
def getNextNode():
nodeList = []
process = False
nodeLine = ''
nodeInfo = ['sqshell','-c','node','info']
file = tempfile.TemporaryFile()
proc = subprocess.Popen(nodeInfo,
stdout=file,
stderr=subprocess.PIPE,
shell=False,
close_fds=True)
proc.wait()
file.seek(0)
cmdOut = file.read()
file.close()
for line in cmdOut.split('\n'):
if " " in line:
param, value = line.split(" ",1)
if "--- ----------- --------" in line:
process = True
continue
if process:
if nodeLine == '':
nodeLine = value
else:
nodeLine += value
nodeList.append(nodeLine)
nodeLine = ''
for line in nodeList:
nodeValue = line.split()
if nodeValue[2] == 'Up':
return int(nodeValue[0])
print "Error: Unable to find a node in 'Up' state. Exiting"
exit(1)
return -1
def parseArgs():
global argList
global execNode
if '-n' in argList:
i = argList.index('-n')
j = i + 1
if i >= len(argList)-1:
print "Incorrect usage: run_dtmci -n <node ID>"
sys.exit(1)
execNode = argList[j]
del argList[i:j+1]
if '-h' in argList:
print "Usage: run_dtmci [-n <node ID>] [dtmci command arguments]"
sys.exit(0)
def startDTMCI(nodeID):
callCmd = []
callCmd.append('dtmci')
myList = argList
myList.pop(0)
if len(myList) > 0:
callCmd = callCmd + myList
if nodeID == -1 or nodeID == 0:
call(callCmd)
else:
myTTY = getTTY()
executeCmd = "echo exec {nid %s, in %s, out %s} dtmci %s" \
% (nodeID, myTTY, myTTY, myTTY)
if len(myList) > 0:
executeCmd = executeCmd + ' ' + ' '.join(myList)
try:
call(executeCmd + " | sqshell -a", shell=True)
except:
sys.exit(1)
def getTTY():
proc = subprocess.Popen('tty', stdout = subprocess.PIPE)
tty, err = proc.communicate()
return tty.rstrip()
def main():
parseArgs()
if isDev():
runNode = execNode
if runNode == 0:
runNode = getNextNode()
startDTMCI(runNode)
else:
startDTMCI(-1)
if __name__ == '__main__':
main()