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')
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')
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
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')
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')
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')
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')
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')
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')
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
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')
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
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