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 subprocess
 | 
			
		||||
import StringIO
 | 
			
		||||
# import StringIO
 | 
			
		||||
import re
 | 
			
		||||
from wol import *
 | 
			
		||||
import os
 | 
			
		||||
import signal
 | 
			
		||||
# from wol import *
 | 
			
		||||
# import os
 | 
			
		||||
# import signal
 | 
			
		||||
import smtplib
 | 
			
		||||
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['From'] = strFrom
 | 
			
		||||
    mail['Subject'] = strSubject
 | 
			
		||||
    mail['To'] = to
 | 
			
		||||
    smtp = smtplib.SMTP('smtp.univ-rennes1.fr', 25)
 | 
			
		||||
    #smtp.connect()
 | 
			
		||||
    #smtp.login('guillaume.raffy@univ-rennes1.fr', 'password') 
 | 
			
		||||
    # smtp.connect()
 | 
			
		||||
    # smtp.login('guillaume.raffy@univ-rennes1.fr', 'password')
 | 
			
		||||
    smtp.sendmail(strFrom, [to], mail.as_string())
 | 
			
		||||
    smtp.close()
 | 
			
		||||
 | 
			
		||||
class Error( Exception ):
 | 
			
		||||
	def __init__( self, strMessage ):
 | 
			
		||||
		self.m_strMessage = strMessage
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
class Error(Exception):
 | 
			
		||||
    def __init__(self, strMessage):
 | 
			
		||||
        self.m_strMessage = strMessage
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
def getHostName():
 | 
			
		||||
	(returnCode, stdout, stderr) = executeProgram(['hostname', '-s'])
 | 
			
		||||
	if returnCode != 0:
 | 
			
		||||
		raise Error(stderr)
 | 
			
		||||
	strHostName = re.sub(r"\n", "", stdout)
 | 
			
		||||
	return strHostName
 | 
			
		||||
    (returnCode, stdout, stderr) = executeProgram(['hostname', '-s'])
 | 
			
		||||
    if returnCode != 0:
 | 
			
		||||
        raise Error(stderr)
 | 
			
		||||
    strHostName = re.sub(r"\n", "", stdout)
 | 
			
		||||
    return strHostName
 | 
			
		||||
 | 
			
		||||
def log( message ):
 | 
			
		||||
	print time.asctime(time.localtime())+' : '+ message
 | 
			
		||||
 | 
			
		||||
def executeProgram( astrArguments ):
 | 
			
		||||
	
 | 
			
		||||
	#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 log(message):
 | 
			
		||||
    print time.asctime(time.localtime()) + ' : ' + message
 | 
			
		||||
 | 
			
		||||
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 executeProgram(astrArguments):
 | 
			
		||||
    # 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):
 | 
			
		||||
    """
 | 
			
		||||
        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():
 | 
			
		||||
	try:
 | 
			
		||||
		url = 'http://Net Vision:public@129.20.27.119/PageMonComprehensive.html'
 | 
			
		||||
		f = urllib.urlopen(url)
 | 
			
		||||
		res = f.read()
 | 
			
		||||
		f.close()
 | 
			
		||||
	except:
 | 
			
		||||
		print "bad read"
 | 
			
		||||
		return
 | 
			
		||||
 	h = MyHTMLParser()
 | 
			
		||||
	h.feed(res)
 | 
			
		||||
	tokensList = h.GetTokenList()
 | 
			
		||||
    
 | 
			
		||||
    class MyHTMLParser(HTMLParser):
 | 
			
		||||
        def __init__(self):
 | 
			
		||||
            HTMLParser.__init__(self)
 | 
			
		||||
            self.TokenList = []
 | 
			
		||||
            
 | 
			
		||||
        def handle_data( self, data):
 | 
			
		||||
            data = data.strip()
 | 
			
		||||
            if data and len(data) > 0:
 | 
			
		||||
                self.TokenList.append(data)
 | 
			
		||||
                # 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__':
 | 
			
		||||
	"""
 | 
			
		||||
	for i in range(30):
 | 
			
		||||
		machineName = 'simpatix%d' % (i+10)
 | 
			
		||||
		print 'lom ip of %s is %s' % (machineName, getLightOutManagementIpAddress(machineName))
 | 
			
		||||
	"""
 | 
			
		||||
	wakeUp('simpatix21')
 | 
			
		||||
	#print putToSleep('simpatix13')
 | 
			
		||||
	#print isNonRespondingMachineSleeping('simpatix13')
 | 
			
		||||
    from SimpaDbUtil import wakeUp
 | 
			
		||||
    """
 | 
			
		||||
    for i in range(30):
 | 
			
		||||
        machineName = 'simpatix%d' % (i+10)
 | 
			
		||||
        print 'lom ip of %s is %s' % (machineName, getLightOutManagementIpAddress(machineName))
 | 
			
		||||
    """
 | 
			
		||||
    wakeUp('simpatix21')
 | 
			
		||||
    # print putToSleep('simpatix13')
 | 
			
		||||
    # print isNonRespondingMachineSleeping('simpatix13')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue