type = Transport.HTTP
else:
raise ExceptionPort("Unsupported Port: No transport from open ports")
+ else:
+ raise Exception("No Portstatus: No transport because no open ports")
Transport.__init__(self, type, verbose)
def run(self, node_port, dryrun):
class APCMaster(PCUControl):
def run(self, node_port, dryrun):
+ print "Rebooting %s" % self.host
self.open(self.host, self.username)
self.sendPassword(self.password)
class HPiLOHttps(PCUControl):
def run(self, node_port, dryrun):
+ import soltesz
- cmd = "cmdhttps/locfg.pl -s %s -f %s -u %s -p %s" % (
+ locfg = soltesz.CMD()
+ cmd = "cmdhttps/locfg.pl -s %s -f %s -u %s -p '%s' | grep 'MESSAGE' | grep -v 'No error'" % (
self.host, "iloxml/Get_Network.xml",
self.username, self.password)
- p_ilo = Popen(cmd, stdout=PIPE, shell=True)
- cmd2 = "grep 'MESSAGE' | grep -v 'No error'"
- p_grep = Popen(cmd2, stdin=p_ilo.stdout, stdout=PIPE, stderr=PIPE, shell=True)
- sout, serr = p_grep.communicate()
+ sout, serr = locfg.run_noexcept(cmd)
- p_ilo.wait()
- p_grep.wait()
if sout.strip() != "":
print "sout: %s" % sout.strip()
return sout.strip()
if not dryrun:
- cmd = "cmdhttps/locfg.pl -s %s -f %s -u %s -p %s" % (
- self.host, "iloxml/Reset_Server.xml",
- self.username, self.password)
- print cmd
- p_ilo = Popen(cmd, stdin=PIPE, stdout=PIPE, shell=True)
- cmd2 = "grep 'MESSAGE' | grep -v 'No error'"
- p_grep = Popen(cmd2, stdin=p_ilo.stdout, stdout=PIPE, stderr=PIPE)
- sout, serr = p_grep.communicate()
- try: p_ilo.wait()
- except:
- print "p_ilo wait failed."
- pass
- try: p_grep.wait()
- except:
- print "p_grep wait failed."
- pass
+ locfg = soltesz.CMD()
+ cmd = "cmdhttps/locfg.pl -s %s -f %s -u %s -p '%s' | grep 'MESSAGE' | grep -v 'No error'" % (
+ self.host, "iloxml/Reset_Server.xml",
+ self.username, self.password)
+ sout, serr = locfg.run_noexcept(cmd)
if sout.strip() != "":
print "sout: %s" % sout.strip()
- return sout.strip()
-
+ #return sout.strip()
return 0
class BayTechAU(PCUControl):
print "sending Y"
s.send("Y\r\n")
- #index = s.expect(["DS-RPC>"])
+ index = s.expect(["DS-RPC>"])
#print "got prompt back"
s.close()
else:
return None
+import soltesz
+fb =soltesz.dbLoad("findbadpcus")
+
def get_pcu_values(pcu_id):
# TODO: obviously, this shouldn't be loaded each time...
- import soltesz
- fb =soltesz.dbLoad("findbadpcus")
try:
values = fb['nodes']["id_%s" % pcu_id]['values']
return values
-def check_open_port(values, port_list):
- ret = False
-
- if 'portstatus' in values:
- for port in port_list:
- if port in values['portstatus'] and \
- values['portstatus'][port] == "open":
-
- ret = True
-
- return ret
+def reboot(nodename):
+ return reboot_policy(nodename, True, False)
def reboot_policy(nodename, continue_probe, dryrun):
global verbose
+ print "this is a test of reboot_policy()"
pcu = plc.getpcu(nodename)
if not pcu:
+ logger.debug("no pcu for %s" % hostname)
+ print "no pcu for %s" % hostname
return False # "%s has no pcu" % nodename
values = get_pcu_values(pcu['pcu_id'])
if values == None:
+ logger.debug("No values for pcu probe %s" % hostname)
+ print "No values for pcu probe %s" % hostname
return False #"no info for pcu_id %s" % pcu['pcu_id']
# Try the PCU first
logger.debug("Trying PCU %s %s" % (pcu['hostname'], pcu['model']))
+ print "reboot_test"
ret = reboot_test(nodename, values, continue_probe, verbose, dryrun)
if ret != 0:
print ret
return False
else:
+ print "return true"
return True
def reboot_test(nodename, values, continue_probe, verbose, dryrun):
# APC Masterswitch (Berkeley)
elif continue_probe and values['model'].find("APC AP79xx/Masterswitch") >= 0:
+ print values
# TODO: make a more robust version of APC
if values['pcu_id'] in [1163,1055,1111,1231,1113,1127,1128,1148]:
logger.addHandler(ch)
try:
+ if "test" in sys.argv:
+ dryrun = True
+ else:
+ dryrun = False
+
for node in sys.argv[1:]:
+ if node == "test": continue
+
print "Rebooting %s" % node
- if reboot_policy(node, True, False):
+ if reboot_policy(node, True, dryrun):
print "success"
else:
print "failed"
except Exception, err:
+ import traceback; traceback.print_exc()
print err
if __name__ == '__main__':