Пример #1
0
def guestcreate(argv,param):
	'''Create new guest;
	Usage:
		guestcreate TEMPLATE_ID GUEST_NAME MEMORY_SIZE(MB) CPU 
	'''
	if len(argv)==4:
		try:
			templateID=int(argv[0])
			guestName=argv[1]
			memSize=int(argv[2])
			CPU=int(argv[3])
		except:
			print "invalid data"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/guest/create?guestName=%s&templateID=%s&memory=%s&vCPU=%s'%(guestName,str(templateID),str(memSize),str(CPU)))
	dom = minidom.parseString(finishInfo)
	guestID=getValue(dom,'guest','guestID')
	if guestID==None:
		print 'Creating error:',getValue(dom,'finishMessage')
	else:
		print "Finish, guestID="+guestID
Пример #2
0
def templateadd(argv,param):
	'''Add new template that already have image file in storage path of NFS server;
	Usage:
		templateadd FILE_NAME MINIMUM_MEMORY MAXIMUM_MEMORY
	'''
	if len(argv)==3:
		try:
			fileName=argv[0]
			minimumMemory=int(argv[1])
			maximumMemory=int(argv[2])
			#get more data
			OS=raw_input("OS:")
			description=raw_input("description:")
		except:
			print "invalid data"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestTo(param[0],param[1],'/template/add?fileName=%s&OS=%s&description=%s&minimumMemory=%s&maximumMemory=%s'%(fileName,OS,description,minimumMemory,maximumMemory))

	dom = minidom.parseString(finishInfo)
	templateID=getValue(dom,'template','templateID')
	if templateID==None:
		print 'Creating error:',getValue(dom,'message')
	else:
		print "Finish, templateID="+templateID
Пример #3
0
def setautomode(argv,param):
	'''Set level of cloud automation;
	Usage:
		setautomode MODE
	MODE:
		0 = Full Manual
		1 = Auto Guest Migration
		2 = Auto Guest and Host Controll
	'''
	if len(argv)!=1:
		print param[3][getMyFunctionName()].__doc__
		return
	
	if argv[0] in ['0','1','2']:
		result=requestTo(param[0],param[1],'/cloud/setAutoMode?mode=%s'%(argv[0]))
		if result==None:
			print 'set mode error'
			return
		
		dom = minidom.parseString(result)
		if getValue(dom,'response','type')=='success':
			print 'set mode success'
		else:
			print 'set mode error:',getValue(dom,'message')
		
		return

	else:
		print param[3][getMyFunctionName()].__doc__
		return
Пример #4
0
def servicemigrate(argv,param):
	'''Migrate global controller service(webapi,dhcp server) to target host;
	Usage:
		servicemigrate SERVICE_NAME TARGET_HOST_ID
		SERVICE_NAME=global		is migration of webapi,dhcp server
		SERVICE_NAME=database	is migration of database
		SERVICE_NAME=ca			is migration of certificate authority
		SERVICE_NAME=nfs		is migration of nfs server
	'''

	if len(argv)==2:
		try:
			targetService=argv[0]
			if targetService not in ['global','database','ca','nfs']:
				print "invalid SERVICE_NAME"
				return
			targetHostID=int(argv[1])
		except:
			print "invalid data."
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	if targetService=='global':
		commandString='migrateGlobalController'
		
		#must get ip address of targetHostID from /host/getInfo
		hostInfo=requestTo(param[0],param[1],'/host/getInfo?hostID=%s'%(str(targetHostID)))
		dom = minidom.parseString(hostInfo)
		backupIP=getValue(dom,'IP')

	elif targetService=='database':
		commandString='migrateInformationService'
	elif targetService=='ca':
		commandString='migrateCA'
	elif targetService=='nfs':
		commandString='migrateNFS'

	if commandString!='migrateGlobalController':
		finishInfo=requestAndWait(param[0],param[1],'/cloud/%s?targetHostID=%s'%(commandString,str(targetHostID)))
		dom = minidom.parseString(finishInfo)
		result=getValue(dom,'finishStatus')
		if result=='1':
			print 'Success.'
		else:
			print 'Error:',getValue(dom,'finishMessage')
	
	else:
		finishInfo=requestAndWait(param[0],param[1],'/cloud/%s?targetHostID=%s'%(commandString,str(targetHostID)),backupIP=backupIP)
		dom = minidom.parseString(finishInfo)
		result=getValue(dom,'finishStatus')
		if result=='1':
			print 'Success.'
			return {
				'newIP':backupIP,
				#'newPort':port,
				}
		else:
			print 'Error:',getValue(dom,'finishMessage')
Пример #5
0
def setlog(argv,param):
	'''Set level of host and guest load logging;
	Usage:
		setlog MODE
	MODE:
		0 = Normal usage (default)
		1 = For testing and debugging only
	'''
	if len(argv)!=1:
		print param[3][getMyFunctionName()].__doc__
		return
	
	if argv[0] in ['0','1']:
		result=requestTo(param[0],param[1],'/cloud/setLogMode?mode=%s'%(argv[0]))
		if result==None:
			print 'set mode error'
			return
		
		dom = minidom.parseString(result)
		if getValue(dom,'response','type')=='success':
			print 'set mode success'
		else:
			print 'set mode error:',getValue(dom,'message')
		
		return

	else:
		print param[3][getMyFunctionName()].__doc__
		return
Пример #6
0
def hostshutdown(argv,param):
	'''Shutdown a specific host;
	Usage
		hostshutdown HOST_ID
	'''
	mode='shutdown'
	if len(argv)==1:
		try:
			hostID=int(argv[0])
		except:
			print "hostID must be integer"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/host/close?hostID=%s&mode=%s'%(str(hostID),mode))
	dom = minidom.parseString(finishInfo)
	
	if isinstance(finishInfo, (dict,)):
		return finishInfo
	
	result=getValue(dom,'finishStatus')
	if result=='1':
		pass
	else:
		print 'Error:',getValue(dom,'finishMessage')
Пример #7
0
def guestrestore(argv,param):
	'''Restore guest from saved state;
	Usage:
		guestrestore GUEST_ID [TARGET_HOST_ID]
	'''
	if len(argv) in [1,2]:
		try:
			guestID=int(argv[0])
			if len(argv)==2:
				targetHostID=int(argv[1])
				optional="&targetHostID=%s"%(str(targetHostID))
			else:
				targetHostID=None
				optional=''
		except:
			print "invalid data"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],('/guest/restore?guestID=%s'%(str(guestID)))+optional)
	dom = minidom.parseString(finishInfo)
	result=getValue(dom,'finishStatus')
	if result=='1':
		print 'Success, target host ID='+getValue(dom,'hostID')
	else:
		print 'Error:',getValue(dom,'finishMessage')
Пример #8
0
def hostremove(argv,param):
	'''Remove a specific host from this cloud system;
	Usage
		hostremove HOST_ID
	'''
	if len(argv)==1:
		try:
			hostID=int(argv[0])
		except:
			print "hostID must be integer"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/host/remove?hostID=%s'%(str(hostID)))
	
	if isinstance(finishInfo, (dict,)):
		return finishInfo
	
	dom = minidom.parseString(finishInfo)
	result=getValue(dom,'finishStatus')
	if result=='1':
		pass
	else:
		print 'Error:',getValue(dom,'finishMessage')
Пример #9
0
def hostmonitor(argv,param):
	'''Show current status of a specific host;
	Usage
		hostmonitor HOST_ID
	'''
	if len(argv)==1:
		try:
			hostID=int(argv[0])
		except:
			print "hostID must be integer"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	panel=MonitorPanel()

	firstRound=True
	while True:
		hostInfo=requestTo(param[0],param[1],'/host/getAllCurrentInfo?hostID=%s'%(str(hostID)))
		dom = minidom.parseString(hostInfo)
		if firstRound:
			if getValue(dom,'host','hostID')==None:
				print "Host not found."
				return
			if getValue(dom,'host','polling')=='error':
				print "Host is not running."
				return
			PressKeyThread().start()
			firstRound=False

		result=[('host ID: '+getValue(dom,'host','hostID'),' '*30)]
		result+=[('CPU Usage',str(getValue(dom,'average'))+'%')]
		
		try:
			memTotal=int(getValue(dom,'memTotal'))
			memFree=int(getValue(dom,'memFree'))
			result+=[('free memory space','%d/%d %.2f%%'%(memFree,memTotal,memFree*100.0/memTotal))]
		except:
			result+=[('free memory space','None')]
		
		result+=[('network transmit rate',str(getValue(dom,'tx'))+' Kbps')]
		result+=[('network recieve rate',str(getValue(dom,'rx'))+' Kbps')]

		try:
			storageFree=int(getValue(dom,'free'))
			storageCapacity=int(getValue(dom,'capacity'))
			result+=[('free storage space','%d/%d %.2f%%'%(storageFree,storageCapacity,storageFree*100.0/storageCapacity))]
		except:
			result+=[('free storage space','None')]

		panel.update(getTable(result))

		if len(threading.enumerate())==1:
			break
		
		time.sleep(1)
	
	print ''
Пример #10
0
def get_local_raw_guest_data(argv):
    '''
	send raw data of every guest from libvirt api
	'''
    myIP = network.getMyIPAddr()
    result = []

    conn = libvirt.open(None)
    if conn == None:
        print 'Failed to open connection to the hypervisor'
        return

    domainIDList = conn.listDomainsID()
    for domainID in domainIDList:
        domainDict = {}
        dm = conn.lookupByID(domainID)
        dom = minidom.parseString(dm.XMLDesc(0))
        domainDict['MACAddress'] = getValue(dom, 'mac', 'address')
        domainDict['UUID'] = dm.UUIDString().replace('-', '')
        domainDict['runningState'] = dm.info()[0]
        domainDict['name'] = dm.name()
        domainDict['isActive'] = dm.isActive()

        domainDict['hostIP'] = str(myIP)
        result.append(domainDict)

    return json.dumps(result)
Пример #11
0
def clearoldlog(argv,param):
	'''clear host and guest load logging;
	Usage:
		clearoldlog
	'''
	result=requestTo(param[0],param[1],'/cloud/clearOldLog')
	if result==None:
		print 'clear log error'
		return
	
	dom = minidom.parseString(result)
	if getValue(dom,'response','type')=='success':
		print 'clear log success'
	else:
		print 'clear log error:',getValue(dom,'message')
	
	return
Пример #12
0
def templatelist(argv,param):
	'''List ID, OS and size of all template;
	'''
	templateInfo=requestTo(param[0],param[1],'/template/getInfo')
	dom = minidom.parseString(templateInfo)
	templateList=dom.getElementsByTagName('template')
	
	if len(templateList)==0:
		print "Error, template not found"
		return

	result=[('ID','OS','size')]
	
	for element in templateList:
		result.append((
			getValue(element,'template','templateID'),
			getValue(element,'OS'),
			getValue(element,'size')
		))
		
	print getTable(result)
Пример #13
0
def templateremove(argv,param):
	'''Remove a template permanently;
	Usage:
		templateremove TEMPLATE_ID
	'''
	if len(argv)==1:
		try:
			templateID=int(argv[0])
		except:
			print "invalid data"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/template/remove?templateID=%s'%(str(templateID)))
	dom = minidom.parseString(finishInfo)
	result=getValue(dom,'finishStatus')
	if result=='1':
		print 'Success.'
	else:
		print 'Error:',getValue(dom,'finishMessage')
Пример #14
0
def hostwakeup(argv,param):
	'''Turn on or wake up a specific host;
	Usage
		hostwakeup HOST_ID
	'''
	if len(argv)==1:
		try:
			hostID=int(argv[0])
		except:
			print "hostID must be integer"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/host/wakeup?hostID=%s'%(str(hostID)))
	dom = minidom.parseString(finishInfo)
	result=getValue(dom,'finishStatus')
	if result=='1':
		pass
	else:
		print 'Error:',getValue(dom,'finishMessage')
Пример #15
0
def guestsave(argv,param):
	'''Save guest to disk(like hibernate);
	Usage:
		guestsave GUEST_ID 
	'''
	if len(argv)==1:
		try:
			guestID=int(argv[0])
		except:
			print "invalid data"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/guest/save?guestID=%s'%(str(guestID)))
	dom = minidom.parseString(finishInfo)
	result=getValue(dom,'finishStatus')
	if result=='1':
		print 'Success.'
	else:
		print 'Error:',getValue(dom,'finishMessage')
Пример #16
0
def guestforceoff(argv,param):
	'''Force shuting off a guest;
	Usage:
		guestforceoff GUEST_ID 
	'''
	if len(argv)==1:
		try:
			guestID=int(argv[0])
		except:
			print "invalid data"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/guest/forceOff?guestID=%s'%(str(guestID)))
	dom = minidom.parseString(finishInfo)
	result=getValue(dom,'finishStatus')
	if result=='1':
		print 'Success.'
	else:
		print 'Error:',getValue(dom,'finishMessage')
Пример #17
0
def guestlist(argv,param):
	'''List ID, name and status of all guest;
	'''
	guestInfo=requestTo(param[0],param[1],'/guest/getState')
	dom = minidom.parseString(guestInfo)
	guestList=dom.getElementsByTagName('guest')
	
	if len(guestList)==0:
		print "No guest found."
		return

	result=[('ID','guest name','status','activity')]
	
	for element in guestList:
		
		result.append((
			getValue(element,'guest','guestID'),
			getValue(element,'guest','guestName'),
			converter.getSimpleGuestStatus(getValue(element,'status'),getValue(element,'runningState')),
			converter.guestActivity[getValue(element,'activity')]
		))
		
	print getTable(result)
Пример #18
0
def guestduplicate(argv,param):
	'''Create new guest by cloning from created guest(source guest must be shutoff);
	Usage:
		guestduplicate SOURCE_GUEST_ID GUEST_NAME
	'''
	if len(argv)==2:
		try:
			sourceGuestID=int(argv[0])
			guestName=argv[1]
		except:
			print "invalid data"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/guest/duplicate?guestName=%s&sourceGuestID=%s'%(guestName,str(sourceGuestID)))
	dom = minidom.parseString(finishInfo)
	guestID=getValue(dom,'guest','guestID')
	if guestID==None:
		print 'Creating error:',getValue(dom,'finishMessage')
	else:
		print "Finish, guestID="+guestID
Пример #19
0
def guestmigrate(argv,param):
	'''Migrate a guest to target host;
	Usage:
		guestmigrate GUEST_ID TARGET_HOST_ID
	'''
	if len(argv)==2:
		try:
			guestID=int(argv[0])
			targetHostID=int(argv[1])
		except:
			print "invalid data"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/guest/migrate?guestID=%s&targetHostID=%s'%(str(guestID),str(targetHostID)))
	dom = minidom.parseString(finishInfo)
	result=getValue(dom,'finishStatus')
	if result=='1':
		print 'Success.'
	else:
		print 'Error:',getValue(dom,'finishMessage')
Пример #20
0
def templatecreatefromguest(argv,param):
	'''Create new template by cloning from created guest(source guest must be shutoff);
	Usage:
		templatecreatefromguest SOURCE_GUEST_ID DESCRIPTION
	'''
	if len(argv)>1:
		try:
			sourceGuestID=int(argv[0])
			description=' '.join(argv[1:])
		except:
			print "invalid data"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/template/createFromGuest?sourceGuestID=%s&description=%s'%(str(sourceGuestID),description))
	dom = minidom.parseString(finishInfo)
	templateID=getValue(dom,'template','templateID')
	if templateID==None:
		print 'Creating error:',getValue(dom,'finishMessage')
	else:
		print "Finish, templateID="+templateID
Пример #21
0
def setishost(argv,param):
	'''Set policy of host usage about guest hosting;
	Usage
		setishost HOST_ID VALUE
		VALUE
			0 : avoid this host from guest hosting
			1 : allow this host to host guests
	'''
	if len(argv)==2:
		try:
			hostID=int(argv[0])
		except:
			print "hostID must be integer"
			return
		
		if argv[1] in ['0','1']:
			val=argv[1]
			
			result=requestTo(param[0],param[1],'/host/setIsHost?hostID=%s&isHost=%s'%(hostID,val))
			if result==None:
				print 'setishost error'
				return
			
			dom = minidom.parseString(result)
			if getValue(dom,'response','type')=='success':
				print 'setishost success'
			else:
				print 'setishost error:',getValue(dom,'message')
			
			return

		else:
			print "invalid value"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
Пример #22
0
def hostadd(argv,param):
	'''Add new host to current cloud;
	Usage:
		hostadd HOSTNAME MACADDRESS IPADDRESS 
	'''
	if len(argv)==3:
		try:
			hostName=argv[0]
			macAddress=str(network.MACAddr(argv[1]))
			ipAddress=str(network.IPAddr(argv[2]))
		except:
			print "invalid MAC address or IP address"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	finishInfo=requestAndWait(param[0],param[1],'/host/add?hostName=%s&MACAddress=%s&IPAddress=%s'%(hostName,macAddress,ipAddress))
	dom = minidom.parseString(finishInfo)
	hostID=getValue(dom,'host','hostID')
	if hostID==None:
		print 'Adding error:',getValue(dom,'finishMessage')
	else:
		print "Finish, hostID="+hostID
Пример #23
0
def templateinfo(argv,param):
	'''Show information of specific template;
	Usage
		templateinfo TEMPLATE_ID
	'''
	if len(argv)==1:
		try:
			templateID=int(argv[0])
		except:
			print "templateID must be integer"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return

	templateInfo=requestTo(param[0],param[1],'/template/getInfo?templateID=%s'%(str(templateID)))
	dom = minidom.parseString(templateInfo)
	
	if getValue(dom,'template','templateID')==None:
		print 'Template not found.'
		return

	result=[('key','value')]
	result+=[
	('template ID',getValue(dom,'template','templateID')),
	('OS',getValue(dom,'OS')),
	('minimum memory',getValue(dom,'minimumMemory')),
	('maximum memory',getValue(dom,'maximumMemory')),
	('activity',converter.templateActivity[getValue(dom,'activity')])
	]
	key='description'
	desc=getValue(dom,'description').replace('\n',' ')
	desc_width=50
	i=0
	while i<len(desc):
		result+=[(key,desc[i:i+desc_width])]
		key=''
		i+=desc_width

	print getTable(result)
Пример #24
0
#check this host is nfs server
if str(myIP) != str(nfsIP):
    print "This operation must be done at NFS Server only."
    sys.exit()

#save all guest
cursor.execute("SELECT `guestID` FROM `guests` WHERE `status`=1")
allGuest = cursor.fetchall()
for aGuest in allGuest:
    targetGuestID = aGuest[0]
    print 'Saving guest %s.' % (str(targetGuestID))
    finishInfo = requestAndWait(
        globalIP, setting.API_PORT,
        '/guest/save?guestID=%s' % (str(targetGuestID)))
    dom = minidom.parseString(finishInfo)
    result = getValue(dom, 'finishStatus')
    if result == '1':
        pass
    else:
        print "Error saving guest."
        sys.exit()

#check required amount of storage
fileList = []
cursor.execute("SELECT `volumeFileName`, `status` FROM `guests`")
allGuest = cursor.fetchall()
sumSpace = 0
for element in allGuest:
    if element[1] == 2:
        try:
            sumSpace += os.path.getsize(setting.IMAGE_PATH +
Пример #25
0
def requestAndWait(ip, port, path, token=None, data=None, backupIP=None):
    oldIP = ip
    oldPort = port
    oldToken = token

    taskInfo = requestTo(ip, port, path, token, data)
    dom = minidom.parseString(taskInfo)
    taskID = getValue(dom, 'task', 'taskID')
    if taskID == None:
        return taskInfo

    counter = 0
    loopRange = len(mychar.WAIT_LOOP)
    sys.stdout.write("\r\n")  #for move up
    while True:
        taskInfo = requestTo(ip, port, '/task/poll?taskID=%s' % (taskID),
                             token)
        if taskInfo == None:
            #error zone (1:migrateGlobalController, 2:close, 3:real error)
            time.sleep(3)
            taskInfo = requestTo(ip, port, '/task/poll?taskID=%s' % (taskID),
                                 token)
            if taskInfo == None and backupIP != None:  #case of migrateGlobalController
                taskInfo = requestTo(backupIP, port,
                                     '/task/poll?taskID=%s' % (taskID), token)
            elif taskInfo == None and backupIP == None:  #case of close the host of globalController***
                #ask cacheFile until it update new global controller
                while True:
                    newData = cacheFile.getGlobalControllerIP()
                    if newData != None and newData != ip:
                        ip = newData
                        break
                    sys.stdout.write(mychar.MOVE_UP + mychar.CLEAR_LINE +
                                     "\r" +
                                     mychar.WAIT_LOOP[counter % loopRange] +
                                     " It's working, please wait.\r\n")
                    time.sleep(1)
                    counter += 1
                token = requestTo(ip, port, '/connect/getToken')
                taskInfo = requestTo(ip, port,
                                     '/task/poll?taskID=%s' % (taskID), token)
        if taskInfo == None:  # real error
            sys.stdout.write(mychar.CLEAR_LINE + '\rConnection error.\r\n')
            return None

        dom = minidom.parseString(taskInfo)
        status = getValue(dom, 'status')
        if status == '0':
            sys.stdout.write(mychar.MOVE_UP + mychar.CLEAR_LINE + '\r' +
                             mychar.WAIT_LOOP[counter % loopRange] +
                             ' Waiting in queue.\r\n')
        if status == '1':  #it's working
            #check progress
            progress = getValue(dom, 'progress')
            if progress != None:
                sys.stdout.write(mychar.MOVE_UP + mychar.CLEAR_LINE + '\r' +
                                 mychar.WAIT_LOOP[counter % loopRange] +
                                 ' Progress: ' + progress + "\r\n")
            else:
                sys.stdout.write(mychar.MOVE_UP + mychar.CLEAR_LINE + "\r" +
                                 mychar.WAIT_LOOP[counter % loopRange] +
                                 " It's working, please wait.\r\n")
        if status == '2':
            sys.stdout.write(mychar.CLEAR_LINE + '\rFinished.\r\n')
            if path.startswith("/host/close") or path.startswith(
                    "/host/remove"):
                if ip != oldIP or port != oldPort or token != oldToken:
                    return {'newIP': ip, 'newPort': port, 'newToken': token}
                else:
                    return taskInfo
            else:
                return taskInfo

        time.sleep(1)
        counter += 1
Пример #26
0
def cloudinfo(argv,param):
	'''Get cloud information include storage space information;
	'''
	result=[('key','value')]
	generalInfo=requestTo(param[0],param[1],'/cloud/getInfo')
	dom = minidom.parseString(generalInfo)
	result+=[('UUID',getValue(dom,'UUID')) ]
	result+=[('name',getValue(dom,'name')) ]
	result+=[('network ID',getValue(dom,'network','id')) ]
	result+=[('netmask',getValue(dom,'network','mask')) ]
	result+=[('default route',getValue(dom,'network','defaultRoute')) ]
	key='dns'
	if getValue(dom,'dns') not in [None,'']:
		for element in getValue(dom,'dns').split(','):
			result+=[(key,element)]
			key=''
	else:
		result+=[(key,'None')]
		key=''

	simpleIPList=network.getIPPoolStringList(getValue(dom,'guest').split(','))
	key='guest IP Pool'
	for element in simpleIPList:
		result+=[(key,element) ]
		key=''
	
	result+=[('auto mode',converter.autoMode[getValue(dom,'autoMode')]) ]

	storageInfo=requestTo(param[0],param[1],'/cloud/getStorageInfo')
	dom = minidom.parseString(storageInfo)
	capacity=getValue(dom,'capacity')
	free=getValue(dom,'free')
	percent= (float(capacity)-float(free))*100.0/float(capacity)
	result+=[('storage usage','%s/%s (%.2f%%)'%(int(capacity)-int(free),capacity,percent))]
	
	hostInfo=requestTo(param[0],param[1],'/host/getInfo')
	dom = minidom.parseString(hostInfo)
	hostList=dom.getElementsByTagName('host')
	activeCount=0
	for element in hostList:
		if getValue(element,'status')=='1':
			activeCount+=1
	result+=[('active Host','%d/%d'%(activeCount,len(hostList)))]

	guestInfo=requestTo(param[0],param[1],'/guest/getState')
	dom = minidom.parseString(guestInfo)
	guestList=dom.getElementsByTagName('guest')
	activeCount=0
	for element in guestList:
		if getValue(element,'status')=='1':
			activeCount+=1
	result+=[('active Guest','%d/%d'%(activeCount,len(guestList)))]
	
	print getTable(result)
Пример #27
0
def guestmonitor(argv,param):
	'''Show current status of a specific guest;
	Usage
		guestmonitor GUEST_ID
	'''
	if len(argv)==1:
		try:
			guestID=int(argv[0])
		except:
			print "guestID must be integer"
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	panel=MonitorPanel()
	
	firstRound=True
	while True:
		guestInfo=requestTo(param[0],param[1],'/guest/getCustomizedInfo?guestIDs=%s&cpu=1&memory=1&network=1&io=1'%(str(guestID)))
		dom = minidom.parseString(guestInfo)
		if firstRound:
			if getValue(dom,'guest','guestID')==None:
				print "Guest not found"
				return
			elif getValue(dom,'guest','polling')=='error':
				print "Guest is not running"
				return
			PressKeyThread().start()
			firstRound=False

		result=[('guest ID: '+getValue(dom,'guest','guestID'),' '*30)]
		result+=[('CPU Usage',getValue(dom,'average')+'%')]
		result+=[('CPU Time',getValue(dom,'cpuTime')+'ns')]

		memTotal=int(getValue(dom,'memTotal'))
		memUse=int(getValue(dom,'memUse'))
		result+=[('used memory space','%d/%d %.2f%%'%(memUse,memTotal,memUse*100.0/memTotal))]
		
		networkDom=dom.getElementsByTagName('networkInfo')[0]
		result+=[('network transmit rate',getValue(networkDom,'tx')+' bps')]
		result+=[('network recieve rate',getValue(networkDom,'rx')+' bps')]
		
		ioDom=dom.getElementsByTagName('ioInfo')[0]
		result+=[('io read rate',getValue(ioDom,'rx')+' bps')]
		result+=[('io write rate',getValue(ioDom,'wx')+' bps')]	
		
		panel.update(getTable(result))

		if len(threading.enumerate())==1:
			break
		
		time.sleep(1)
	
	print ''
Пример #28
0
def guestinfo(argv,param):
	'''Show information of a specific guest;
	Usage
		guestinfo GUEST_ID
	'''
	if len(argv)==1:
		try:
			guestID=int(argv[0])
		except:
			print "guestID must be integer."
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	guestInfo=requestTo(param[0],param[1],'/guest/getInfo?guestID=%s'%(str(guestID)))
	guestState=requestTo(param[0],param[1],'/guest/getState?guestID=%s'%(str(guestID)))
	dom = minidom.parseString(guestInfo)

	if getValue(dom,'guest','guestID')==None:
		print 'Guest not found.'
		return

	result=[('key','value')]
	result+=[
		('guest ID',getValue(dom,'guest','guestID')),
		('lastest host ID',getValue(dom,'lastHostID')),
		('guest name',getValue(dom,'guest','guestName')),
		('MAC Address',getValue(dom,'MAC')),
		('IP Address',getValue(dom,'IP')),
		('template ID',getValue(dom,'templateID')),
		('memory size',getValue(dom,'memory')),
		('virtual CPU core',getValue(dom,'vCPU')),
		('inboundBandwidth',getValue(dom,'inbound')),
		('outboundBandwidth',getValue(dom,'outbound'))
	]
	dom = minidom.parseString(guestState)
	result+=[
		('status',converter.getSimpleGuestStatus(getValue(dom,'status'),getValue(dom,'runningState'))),
		('activity',converter.guestActivity[getValue(dom,'activity')])
	]
	print getTable(result)
Пример #29
0
def hostlist(argv,param):
	'''List ID, name and status of all host;
	Usage:
		hostlist [OPTIONS]
	Options:
		-a for activity
		-i for IP address
		-s for service that host provide	
	'''
	optionList=tuple()
	for option in argv:
		if option=='-a':
			optionList+=('activity',)
		elif option=='-i':
			optionList+=('IP',)
		elif option=='-s':
			optionList+=('service',)
		else:
			print param[3][getMyFunctionName()].__doc__
			return

	hostInfo=requestTo(param[0],param[1],'/host/getInfo')
	dom = minidom.parseString(hostInfo)
	hostList=dom.getElementsByTagName('host')
	
	if len(hostList)==0:
		print "Error, host not found"
		return

	result=[('ID','host name','status')+optionList]
	
	for element in hostList:
		currentTuple=(
			getValue(element,'host','hostID'),
			getValue(element,'host','hostName'),
			converter.hostStatus[getValue(element,'status')],
		)
		if '-a' in argv:
			currentTuple+=(converter.hostActivity[getValue(element,'activity')],)
		if '-i' in argv:
			currentTuple+=(getValue(element,'IP'),)
		
		if '-s' in argv:
			#get list of string that make many line
			allFunction=[]
			
			if getValue(element,'isGlobalController')!='0':
				allFunction.append(converter.hostFunction[getValue(element,'isGlobalController')]+' Global Controller')
			if getValue(element,'isInformationServer')!='0':
				allFunction.append(converter.hostFunction[getValue(element,'isInformationServer')]+' Information Server')
			if getValue(element,'isNFSServer')!='0':
				allFunction.append(converter.hostFunction[getValue(element,'isNFSServer')]+' NFS Server')
			if getValue(element,'isCA')!='0':
				allFunction.append(converter.hostFunction[getValue(element,'isCA')]+' CA')

			if allFunction==[]:
				allFunction.append('None')
					
			currentTuple+=(allFunction[0],)
			result.append(currentTuple)
			
			if len(allFunction)>1:	#must add next line
				allFunction.remove(allFunction[0])
				for eachFunction in allFunction:
					result.append(('',)*(len(result[0])-1) + (eachFunction,))
				
		else:
			result.append(currentTuple)
		
	print getTable(result)
Пример #30
0
def hostinfo(argv,param):
	'''Show information of a specific host;
	Usage
		hostinfo HOST_ID
	'''
	if len(argv)==1:
		try:
			hostID=int(argv[0])
		except:
			print "hostID must be integer."
			return
	else:
		print param[3][getMyFunctionName()].__doc__
		return
	
	hostInfo=requestTo(param[0],param[1],'/host/getInfo?hostID=%s'%(str(hostID)))
	dom = minidom.parseString(hostInfo)
	
	if getValue(dom,'host','hostID')==None:
		print "Host not found."
		return

	result=[('key','value')]
	result+=[
		('host ID',getValue(dom,'host','hostID')),
		('host name',getValue(dom,'host','hostName')),
		('status',converter.hostStatus[getValue(dom,'status')]),
		('activity',converter.hostActivity[getValue(dom,'activity')]),
		('MAC Address',getValue(dom,'MAC')),
		('IP Address',getValue(dom,'IP')),
		('Memory size',getValue(dom,'size')),
		('CPU model',getValue(dom,'model')),
		('CPU core',getValue(dom,'number')),
		('CPU speed(MHz)',getValue(dom,'frequency')),
		('Guest Holder',converter.hostIsHost[getValue(dom,'isHost')]),
		('Global Controller',converter.hostFunction[getValue(dom,'isGlobalController')]),
		('Information Server',converter.hostFunction[getValue(dom,'isInformationServer')]),
		('NFS Server',converter.hostFunction[getValue(dom,'isNFSServer')]),
		('CA Server',converter.hostFunction[getValue(dom,'isCA')])
	]
	print getTable(result)