Bug 2218 - la mise à jour de simpatix51 a échoué (ClusterConfigurator)

- Correction : bug introduit récemment lors du refactoring
This commit is contained in:
Guillaume Raffy 2018-04-12 14:27:41 +00:00
parent 7e8edeab20
commit 05d21bc427
1 changed files with 92 additions and 58 deletions

150
Util.py
View File

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