diff --git a/test/python/controlVMnetworkstate.py b/test/python/controlVMnetworkstate.py new file mode 100755 index 00000000..29566b4c --- /dev/null +++ b/test/python/controlVMnetworkstate.py @@ -0,0 +1,74 @@ +#!/usr/bin/python +import os +import sys +import time +import subprocess +import random +bindir='/usr/bin' +sys.path.append(bindir) + +def input_sel(prompt,max_,selectionoption): + # let the user choose the VM and verify selection + while True: + try: + print ('Please select from the list of running VMs\n\n'+'\n'.join(selectionoption)) + userin = int(raw_input(prompt)) + except ValueError: + print('\nThat was not a number\n\n') + continue + if userin > max_: + print('\nInput must be less than or equal to {0}.\n\n'.format(max_)) + elif userin < 1: + print('\nInput must be greater than or equal to 1\n\n') + else: + return userin + +def statustext(result): + if result == 0: + status = 'OK' + else: + status = 'Failed' + return status + +def controlvmnetworkstate(): + try: + offtime = 600 + ontime = 14 + vmdict={} + vmlist=[] + executable = os.path.join(bindir, 'VBoxManage') + + #retrieve a list of all running VMs + runningvms= subprocess.check_output('%s list runningvms' %executable,shell=True).splitlines() + if len(runningvms) != 0: + for n in range(0, len(runningvms)): + vmlist.append('%s: %s' %(n+1,runningvms[n].rsplit(' ',1)[0].strip('"'))) + vmdict[n+1]=runningvms[n].rsplit(' ',1)[-1] + usersel=input_sel('\nEnter the number of the VM: ',len(runningvms),vmlist) + + else: + print('Can not retrieve list of running VMs') + sys.exit() + + vmuuid=vmdict[usersel] + while True: + offtime = random.randint(60, 90) + ontime = random.randint(10, 90) + timenow = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) + on = subprocess.call('%s controlvm %s setlinkstate1 on' %(executable,vmuuid), + shell=True) + status=statustext(on) + print ('%s: Plug Network cable into VM %s for %ds: %s' % (timenow, runningvms[usersel-1].rsplit(' ',1)[0].strip('"'),ontime, str(status))) + time.sleep(ontime) + timenow = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) + off = subprocess.call('%s controlvm %s setlinkstate1 off' %(executable,vmuuid), + shell=True) + status = statustext(off) + print ('%s: Unplug Network cable from VM %s for %ds: %s' % (timenow, runningvms[usersel-1].rsplit(' ',1)[0].strip('"'),offtime, str(status))) + time.sleep(offtime) + except KeyboardInterrupt: + sys.exit('\nUser Interrupt') + except Exception as e: + print("Error in %s in function %s: %s" % (__name__, sys._getframe().f_code.co_name, e.message)) +if __name__ == "__main__": + sys.exit(controlvmnetworkstate())