X-Git-Url: http://git.onelab.eu/?p=pcucontrol.git;a=blobdiff_plain;f=pcucontrol%2Fmodels%2FHPiLO.py;h=0f00f55199db25cc4ef4729c4a25f76114584b76;hp=78ceb0ac2d4b96167d1bea53ec732dbde040a7cb;hb=2c5c07d7e0ea8bcf34a2b0de61d1fed47432b82e;hpb=00bb1a3f4f210815cd928f6fb5df7902d5ebad20 diff --git a/pcucontrol/models/HPiLO.py b/pcucontrol/models/HPiLO.py index 78ceb0a..0f00f55 100644 --- a/pcucontrol/models/HPiLO.py +++ b/pcucontrol/models/HPiLO.py @@ -1,60 +1,63 @@ from pcucontrol.reboot import * from distutils.sysconfig import get_python_lib; +import subprocess class HPiLO(PCUControl): - supported_ports = [22,443] - def run(self, node_port, dryrun): - if self.type == Transport.SSH: - return self.run_ssh(node_port, dryrun) - elif self.type == Transport.HTTP or self.type == Transport.HTTPS: - return self.run_https(node_port, dryrun) - else: - raise ExceptionNoTransport("Unimplemented Transport for HPiLO %s" % self.type) - - def run_ssh(self, node_port, dryrun): - - self.transport.open(self.host, self.username) - self.transport.sendPassword(self.password) - - # hpiLO-> - self.transport.ifThenSend("hpiLO->", "cd system1") - - # Reboot Outlet N (Y/N)? - if dryrun: - self.transport.ifThenSend("hpiLO->", "POWER") - else: - # Reset this machine - self.transport.ifThenSend("hpiLO->", "reset") - - self.transport.ifThenSend("hpiLO->", "exit") - - self.transport.close() - return 0 - - def run_https(self, node_port, dryrun): - - locfg = command.CMD() - - cmd_str = get_python_lib(1) + "/pcucontrol/models/hpilo/" - - cmd = cmd_str + "locfg.pl -s %s -f %s -u %s -p '%s' | grep 'MESSAGE' | grep -v 'No error'" % ( - self.host, cmd_str+"iloxml/Get_Network.xml", - self.username, self.password) - sout, serr = locfg.run_noexcept(cmd) - - if sout.strip() != "" or serr.strip() != "": - print "sout: %s" % sout.strip() - return sout.strip() + serr.strip() - - if not dryrun: - locfg = command.CMD() - cmd = cmd_str + "locfg.pl -s %s -f %s -u %s -p '%s' | grep 'MESSAGE' | grep -v 'No error'" % ( - self.host, cmd_str+"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 0 + supported_ports = [22,443] + def run(self, node_port, dryrun): + if self.type == Transport.SSH: + return self.run_ssh(node_port, dryrun) + elif self.type == Transport.HTTP or self.type == Transport.HTTPS: + return self.run_https(node_port, dryrun) + else: + raise ExceptionNoTransport("Unimplemented Transport for HPiLO %s" % self.type) + + def run_ssh(self, node_port, dryrun): + + self.transport.open(self.host, self.username) + self.transport.sendPassword(self.password) + + # hpiLO-> + self.transport.ifThenSend("hpiLO->", "cd system1") + + # Reboot Outlet N (Y/N)? + if dryrun: + self.transport.ifThenSend("hpiLO->", "POWER") + else: + # Reset this machine + self.transport.ifThenSend("hpiLO->", "reset") + + self.transport.ifThenSend("hpiLO->", "exit") + + self.transport.close() + + # NOTE: if an error occurs earlier, an exception should be thrown + return 0 + + def run_https(self, node_port, dryrun): + + locfg = command.CMD() + + cmd_str = get_python_lib(1) + "/pcucontrol/models/hpilo/" + + cmd = cmd_str + "locfg.pl -s %s -f %s -u %s -p '%s' " % ( + self.host, cmd_str+"iloxml/Get_Network.xml", + self.username, self.password) + cmd_out, cmd_err = locfg.run_noexcept(cmd) + + if locfg.s.returncode != 0: + return cmd_out.strip() + cmd_err.strip() + + cmd = "grep 'MESSAGE' | grep -v 'No error'" + p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, close_fds=True) + (grep_in, grep_out ) = (p.stdin, p.stdout) + grep_in.write(cmd_out) + grep_in.close() # close so read does not block + output = grep_out.read() + if output.strip() != "": + print "grep_out: %s" % output.strip() + return output.strip() + + # NOTE: if an error occurs earlier, an exception should be thrown + return 0