Bug 2218 - la mise à jour de simpatix51 a échoué (ClusterConfigurator)
- Correction : bug introduit récemment lors du refactoring
This commit is contained in:
		
							parent
							
								
									7e8edeab20
								
							
						
					
					
						commit
						05d21bc427
					
				
							
								
								
									
										150
									
								
								Util.py
								
								
								
								
							
							
						
						
									
										150
									
								
								Util.py
								
								
								
								
							| 
						 | 
					@ -1,81 +1,115 @@
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
import subprocess
 | 
					import subprocess
 | 
				
			||||||
import StringIO
 | 
					# import StringIO
 | 
				
			||||||
import re
 | 
					import re
 | 
				
			||||||
from wol import *
 | 
					# from wol import *
 | 
				
			||||||
import os
 | 
					# import os
 | 
				
			||||||
import signal
 | 
					# import signal
 | 
				
			||||||
import smtplib
 | 
					import smtplib
 | 
				
			||||||
from email.MIMEText import MIMEText
 | 
					from email.MIMEText import MIMEText
 | 
				
			||||||
 | 
					from HTMLParser import HTMLParser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def sendTextMail(strFrom, to, strSubject, text ):
 | 
					
 | 
				
			||||||
    #from = "SimpaCluster <guillaume.raffy@univ-rennes1.fr>"
 | 
					def sendTextMail(strFrom, to, strSubject, text):
 | 
				
			||||||
 | 
					    # from = "SimpaCluster <guillaume.raffy@univ-rennes1.fr>"
 | 
				
			||||||
    mail = MIMEText(text)
 | 
					    mail = MIMEText(text)
 | 
				
			||||||
    mail['From'] = strFrom
 | 
					    mail['From'] = strFrom
 | 
				
			||||||
    mail['Subject'] = strSubject
 | 
					    mail['Subject'] = strSubject
 | 
				
			||||||
    mail['To'] = to
 | 
					    mail['To'] = to
 | 
				
			||||||
    smtp = smtplib.SMTP('smtp.univ-rennes1.fr', 25)
 | 
					    smtp = smtplib.SMTP('smtp.univ-rennes1.fr', 25)
 | 
				
			||||||
    #smtp.connect()
 | 
					    # smtp.connect()
 | 
				
			||||||
    #smtp.login('guillaume.raffy@univ-rennes1.fr', 'password') 
 | 
					    # smtp.login('guillaume.raffy@univ-rennes1.fr', 'password')
 | 
				
			||||||
    smtp.sendmail(strFrom, [to], mail.as_string())
 | 
					    smtp.sendmail(strFrom, [to], mail.as_string())
 | 
				
			||||||
    smtp.close()
 | 
					    smtp.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Error( Exception ):
 | 
					
 | 
				
			||||||
	def __init__( self, strMessage ):
 | 
					class Error(Exception):
 | 
				
			||||||
		self.m_strMessage = strMessage
 | 
					    def __init__(self, strMessage):
 | 
				
			||||||
	
 | 
					        self.m_strMessage = strMessage
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def getHostName():
 | 
					def getHostName():
 | 
				
			||||||
	(returnCode, stdout, stderr) = executeProgram(['hostname', '-s'])
 | 
					    (returnCode, stdout, stderr) = executeProgram(['hostname', '-s'])
 | 
				
			||||||
	if returnCode != 0:
 | 
					    if returnCode != 0:
 | 
				
			||||||
		raise Error(stderr)
 | 
					        raise Error(stderr)
 | 
				
			||||||
	strHostName = re.sub(r"\n", "", stdout)
 | 
					    strHostName = re.sub(r"\n", "", stdout)
 | 
				
			||||||
	return strHostName
 | 
					    return strHostName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def log( message ):
 | 
					 | 
				
			||||||
	print time.asctime(time.localtime())+' : '+ message
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
def executeProgram( astrArguments ):
 | 
					def log(message):
 | 
				
			||||||
	
 | 
					    print time.asctime(time.localtime()) + ' : ' + message
 | 
				
			||||||
	#log('executeProgram : program [%s]' % (','.join(astrArguments)))
 | 
					 | 
				
			||||||
	popen = subprocess.Popen( astrArguments, bufsize=1, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) # bufsize=1 seems to prevent deadlocks that happen 50% the time
 | 
					 | 
				
			||||||
	stdout, stderr = popen.communicate()
 | 
					 | 
				
			||||||
	#popen.wait()
 | 
					 | 
				
			||||||
	result = (popen.returncode, stdout, stderr)
 | 
					 | 
				
			||||||
	#log('executeProgram : command %s popen.pid = %d' % (astrArguments[0], popen.pid))
 | 
					 | 
				
			||||||
	#os.kill(popen.pid, signal.SIGTERM)
 | 
					 | 
				
			||||||
	return result
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
def executeCommand( command ):
 | 
					
 | 
				
			||||||
	"""
 | 
					def executeProgram(astrArguments):
 | 
				
			||||||
		executes the shell command such as 'set x=1; myprog $x'
 | 
					    # log('executeProgram : program [%s]' % (','.join(astrArguments)))
 | 
				
			||||||
	"""
 | 
					    popen = subprocess.Popen( astrArguments, bufsize=1, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)  # bufsize=1 seems to prevent deadlocks that happen 50% the time
 | 
				
			||||||
	popen = subprocess.Popen( [ command ], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, executable = '/bin/bash' ) # bufsize=1 seems to prevent deadlocks that happen 50% the time
 | 
					    stdout, stderr = popen.communicate()
 | 
				
			||||||
	# if we don't specify the optional executable argument, then the default non interactive shell will be used. On debian, the default non-interactive shell is dash, which doesn't understand the keyword 'source' that we use in many places
 | 
					    # popen.wait()
 | 
				
			||||||
	stdout, stderr = popen.communicate()
 | 
					    result = (popen.returncode, stdout, stderr)
 | 
				
			||||||
	#popen.wait()
 | 
					    # log('executeProgram : command %s popen.pid = %d' % (astrArguments[0], popen.pid))
 | 
				
			||||||
	result = (popen.returncode, stdout, stderr)
 | 
					    # os.kill(popen.pid, signal.SIGTERM)
 | 
				
			||||||
	return result
 | 
					    return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def executeCommand(command):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					        executes the shell command such as 'set x=1; myprog $x'
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    popen = subprocess.Popen( [command], bufsize=1, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, executable='/bin/bash')  # bufsize=1 seems to prevent deadlocks that happen 50% the time
 | 
				
			||||||
 | 
					    # if we don't specify the optional executable argument, then the default non interactive shell will be used. On debian, the default non-interactive shell is dash, which doesn't understand the keyword 'source' that we use in many places
 | 
				
			||||||
 | 
					    stdout, stderr = popen.communicate()
 | 
				
			||||||
 | 
					    # popen.wait()
 | 
				
			||||||
 | 
					    result = (popen.returncode, stdout, stderr)
 | 
				
			||||||
 | 
					    return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def executeCommandOn(strTargetMachineName, strCommand):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    execute command on a local or remote machine (using ssh then)
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    # print("comparing %s and %s" % (Lib.Util.getHostName(), strTargetMachineName))
 | 
				
			||||||
 | 
					    if getHostName() == strTargetMachineName:
 | 
				
			||||||
 | 
					        return executeCommand(strCommand)
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        return executeProgram(['ssh', strTargetMachineName, "%s" % strCommand])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def getUpsStatus():
 | 
					def getUpsStatus():
 | 
				
			||||||
	try:
 | 
					    
 | 
				
			||||||
		url = 'http://Net Vision:public@129.20.27.119/PageMonComprehensive.html'
 | 
					    class MyHTMLParser(HTMLParser):
 | 
				
			||||||
		f = urllib.urlopen(url)
 | 
					        def __init__(self):
 | 
				
			||||||
		res = f.read()
 | 
					            HTMLParser.__init__(self)
 | 
				
			||||||
		f.close()
 | 
					            self.TokenList = []
 | 
				
			||||||
	except:
 | 
					            
 | 
				
			||||||
		print "bad read"
 | 
					        def handle_data( self, data):
 | 
				
			||||||
		return
 | 
					            data = data.strip()
 | 
				
			||||||
 	h = MyHTMLParser()
 | 
					            if data and len(data) > 0:
 | 
				
			||||||
	h.feed(res)
 | 
					                self.TokenList.append(data)
 | 
				
			||||||
	tokensList = h.GetTokenList()
 | 
					                # print data
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					        def GetTokenList(self):
 | 
				
			||||||
 | 
					            return self.TokenList
 | 
				
			||||||
 | 
					    import urllib2
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        url = 'http://Net Vision:public@129.20.27.119/PageMonComprehensive.html'
 | 
				
			||||||
 | 
					        f = urllib2.urlopen(url)
 | 
				
			||||||
 | 
					        res = f.read()
 | 
				
			||||||
 | 
					        f.close()
 | 
				
			||||||
 | 
					    except:
 | 
				
			||||||
 | 
					        print "bad read"
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    h = MyHTMLParser()
 | 
				
			||||||
 | 
					    h.feed(res)
 | 
				
			||||||
 | 
					    tokensList = h.GetTokenList()  # @UnusedVariable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == '__main__':
 | 
					if __name__ == '__main__':
 | 
				
			||||||
	"""
 | 
					    from SimpaDbUtil import wakeUp
 | 
				
			||||||
	for i in range(30):
 | 
					    """
 | 
				
			||||||
		machineName = 'simpatix%d' % (i+10)
 | 
					    for i in range(30):
 | 
				
			||||||
		print 'lom ip of %s is %s' % (machineName, getLightOutManagementIpAddress(machineName))
 | 
					        machineName = 'simpatix%d' % (i+10)
 | 
				
			||||||
	"""
 | 
					        print 'lom ip of %s is %s' % (machineName, getLightOutManagementIpAddress(machineName))
 | 
				
			||||||
	wakeUp('simpatix21')
 | 
					    """
 | 
				
			||||||
	#print putToSleep('simpatix13')
 | 
					    wakeUp('simpatix21')
 | 
				
			||||||
	#print isNonRespondingMachineSleeping('simpatix13')
 | 
					    # print putToSleep('simpatix13')
 | 
				
			||||||
 | 
					    # print isNonRespondingMachineSleeping('simpatix13')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue