generated from guanyuankai/bonus-edge-proxy
75 lines
2.8 KiB
Python
75 lines
2.8 KiB
Python
|
|
#!/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())
|