#!/usr/bin/python from SOAPpy import WSDL from SOAPpy import Config import os import sys import string import pprint #Config.debug = 1 soap = WSDL.Proxy('https://www.ovh.com/soapi/soapi-re-1.3.wsdl') #login nic = '###OVHNIC###-ovh' password = '###PASSWORD###' language = 'it' multisession = 'false' def shexec(comando): (fi,foe)=os.popen4(comando,'t') a=foe.read() fi.close() foe.close() if a[-1:] == '\n': a = a[:-1] return a # il nome del nodo come (hostname della macchina) nodename = shexec('uname -n') # l'ip hardware dell'RPS, quello su cui va fatta l'assegnazione del failover. hwip = shexec('ip addr show label eth0 | sed -n \'3p\' | awk \'{ print $2 }\' | cut -f 1 -d "/"') rpsfo = shexec('hostname -i') def usage(): print "USO: "+sys.argv[0]+" [alternativehost]" print print "Esempio: # "+sys.argv[0]+" XXX.XXX.XX.XX rXXXXX.ovh.net" sys.exit() if (len(sys.argv) < 2): usage() if rpsfo == sys.argv[1]: print "l'IP richiesto e' l'ip di failover dell'RPS. Aggiornarlo significherebbe perdere l'accesso al disco." sys.exit() try: session = soap.login( nic, password, language, multisession ) print "login successfull" except: print "Error login" def dedicatedList(): result = soap.dedicatedList( session ); if result: return result['item'] else: raise Error, "Nessun dedicato trovato" # your code here ... def updateFailOver(host,node,routeTo): print "UPDATING "+host+"|"+node+"|"+routeTo try: result = soap.dedicatedFailoverUpdate( session, node, host, routeTo); print result print "IP Succesfully updated!" return True except: print "error updating IP Failover" return False def getFailOver(host,node): #dedicatedFailoverList try: print "searching " + node + " / " + host result = soap.dedicatedFailoverList( session, node ); #print "dedicatedFailoverList successfull for " + node; found = False if result: #print result func = getattr(result['item'],'__iter__',None); if func: arr = result['item'] else: r = result['item'] arr = []; arr.append(r); for ipf in arr: if ipf['ip'] == host: found = True if ipf['routedTo'] == hwip: print "tutto a posto" return True else: print "ip routed on " + ipf['routedTo'] + ", updated required to route to " + hwip return updateFailOver(host,node,hwip) if not found: print "IP Failover non trovato" return False # your code here ... except: print "Error 1 dedicatedFailoverList", sys.exc_info() if not getFailOver(sys.argv[1],nodename): if len(sys.argv) > 2: getFailOver(sys.argv[1],sys.argv[2]) else: dedlist = dedicatedList(); print "IP non trovato sull'host attuale, cerco gli altri dedicati "+string.join(dedlist,',') if dedlist: found = False for ded in dedlist: if ded == nodename: print "salto il nodo "+nodename+" controllato in precedenza" else: found = getFailOver(sys.argv[1],ded) if found: break if not found: print "Non trovato" #logout try: result = soap.logout( session ) print "logout successfull" except: print "Error logout"