import xml, xmlrpclib
import errno, time, traceback
import urllib2
+import urllib
import threading, popen2
import array, struct
#from socket import *
ret = s.recv(count, socket.MSG_DONTWAIT)
except socket.error, e:
if e[0] == errno.EAGAIN:
- return Exception(e[1])
+ raise Exception(e[1])
else:
# TODO: not other exceptions.
raise Exception(e)
s.close()
if e[0] == errno.ECONNREFUSED:
# cannot connect to remote host
- return Exception(e[1])
+ raise Exception(e[1])
else:
# TODO: what other conditions are there?
raise Exception(e)
s.send(self.format_msg("", 'O'))
ret = self.recv_noblock(s, 8)
print "Current status is '%s'" % ret
+
+ if ret == '':
+ raise Exception("Status returned 'another session already open' %s : %s" % (node_port, ret))
+
if node_port < len(ret):
status = ret[node_port]
if not dryrun:
- print "Pulsing %s" % node_port
if power_on:
+ print "Pulsing %s" % node_port
s.send(self.format_msg("%s" % node_port, 'P'))
else:
- # NOTE: turn power on before pulsing the port.
- print "power was off, so turning on then pulsing..."
+ # NOTE: turn power on ; do not pulse the port.
+ print "Power was off, so turning on ..."
s.send(self.format_msg("%s" % node_port, 'E'))
- s.send(self.format_msg("%s" % node_port, 'P'))
+ #s.send(self.format_msg("%s" % node_port, 'P'))
print "Receiving response."
ret = self.recv_noblock(s, 8)
# failing here means the User/passwd is wrong (hopefully)
raise ExceptionPassword("Incorrect username/password")
- # TODO: after verifying that the user/password is correct, we should
- # actually reboot the given node.
-
+ # NOTE: after verifying that the user/password is correct,
+ # actually reboot the given node.
if not dryrun:
- # add data to handler,
- # fetch url one more time on cmd.html, econtrol.html or whatever.
- pass
+ try:
+ data = urllib.urlencode({'P%d' % node_port : "r"})
+ req = urllib2.Request(self.url + "cmd.html")
+ req.add_header("Authorization", authheader)
+ # add data to handler,
+ f = urllib2.urlopen(req, data)
+ if self.verbose: print f.read()
+ except:
+ import traceback; traceback.print_exc()
- if self.verbose: print f.read()
+ # fetch url one more time on cmd.html, econtrol.html or whatever.
+ # pass
+ else:
+ if self.verbose: print f.read()
self.close()
return 0
try:
# DataProbe iPal (many sites)
- if continue_probe and values['model'].find("Dataprobe IP-41x/IP-81x") >= 0:
+ if continue_probe and values['model'].find("IP-41x_IP-81x") >= 0:
ipal = IPAL(values, verbose, ['23', '80', '9100'])
rb_ret = ipal.reboot(values[nodename], dryrun)
# APC Masterswitch (Berkeley)
- elif continue_probe and values['model'].find("APC AP79xx/Masterswitch") >= 0:
+ elif continue_probe and ( values['model'].find("AP79xx") >= 0 or \
+ values['model'].find("Masterswitch") >= 0 ):
print values
# TODO: make a more robust version of APC
rb_ret = apc.reboot(values[nodename], dryrun)
# BayTech DS4-RPC
- elif continue_probe and values['model'].find("Baytech DS4-RPC") >= 0:
+ elif continue_probe and values['model'].find("DS4-RPC") >= 0:
if values['pcu_id'] in [1237,1052,1209,1002,1008,1041,1013,1022]:
# These require a 'ctrl-c' to be sent...
baytech = BayTechCtrlC(values, verbose, ['22', '23'])
rb_ret = baytech.reboot(values[nodename], dryrun)
# iLO
- elif continue_probe and values['model'].find("HP iLO") >= 0:
+ elif continue_probe and values['model'].find("ilo") >= 0:
try:
hpilo = HPiLO(values, verbose, ['22'])
rb_ret = hpilo.reboot(0, dryrun)
rb_ret = hpilo.reboot(0, dryrun)
# DRAC ssh
- elif continue_probe and values['model'].find("Dell RAC") >= 0:
+ elif continue_probe and values['model'].find("DRAC") >= 0:
# TODO: I don't think DRACRacAdm will throw an exception for the
# default method to catch...
try:
wti = WTIIPS4(values, verbose, ['23'])
rb_ret = wti.reboot(values[nodename], dryrun)
- elif continue_probe and values['model'].find("Intel AMT") >= 0:
+ elif continue_probe and values['model'].find("AMT") >= 0:
amt = IntelAMT(values, verbose, ['16992'])
rb_ret = amt.reboot(values[nodename], dryrun)
# BlackBox PSExxx-xx (e.g. PSE505-FR)
- elif continue_probe and \
- (values['model'].find("BlackBox PS5xx") >= 0 or
- values['model'].find("ePowerSwitch 1/4/8x") >=0 ):
-
+ elif continue_probe and values['model'].find("ePowerSwitch") >=0:
# TODO: allow a different port than http 80.
if values['pcu_id'] in [1089, 1071, 1046, 1035, 1118]:
eps = ePowerSwitchGood(values, verbose, ['80'])
elif values['pcu_id'] in [1003]:
+ # OLD EPOWER
+ print "OLD EPOWER"
eps = ePowerSwitch(values, verbose, ['80'])
else:
eps = ePowerSwitchGood(values, verbose, ['80'])