1 from pcucontrol.reboot import *
2 from distutils.sysconfig import get_python_lib;
5 class HPiLO(PCUControl):
6 supported_ports = [22,443]
7 def run(self, node_port, dryrun):
8 if self.type == Transport.SSH:
9 return self.run_ssh(node_port, dryrun)
10 elif self.type == Transport.HTTP or self.type == Transport.HTTPS:
11 return self.run_https(node_port, dryrun)
13 raise ExceptionNoTransport("Unimplemented Transport for HPiLO %s" % self.type)
15 def run_ssh(self, node_port, dryrun):
17 self.transport.open(self.host, self.username)
18 self.transport.sendPassword(self.password)
21 self.transport.ifThenSend("</>hpiLO->", "cd system1")
23 # Reboot Outlet N (Y/N)?
25 self.transport.ifThenSend("</system1>hpiLO->", "POWER")
28 self.transport.ifThenSend("</system1>hpiLO->", "reset")
30 self.transport.ifThenSend("</system1>hpiLO->", "exit")
32 self.transport.close()
34 # NOTE: if an error occurs earlier, an exception should be thrown
37 def run_https(self, node_port, dryrun):
41 cmd_str = get_python_lib(1) + "/pcucontrol/models/hpilo/"
43 cmd = cmd_str + "locfg.pl -s %s -f %s -u %s -p '%s' " % (
44 self.host, cmd_str+"iloxml/Get_Network.xml",
45 self.username, self.password)
46 cmd_out, cmd_err = locfg.run_noexcept(cmd)
48 if locfg.s.returncode != 0:
49 return cmd_out.strip() + cmd_err.strip()
55 cmd = cmd_str + "locfg.pl -s %s -f %s -u %s -p '%s'" % (
56 self.host, cmd_str+"iloxml/PowerOn_Server.xml",
57 self.username, self.password)
58 cmd_out, cmd_err = locfg.run_noexcept(cmd)
61 cmd = cmd_str + "locfg.pl -s %s -f %s -u %s -p '%s'" % (
62 self.host, cmd_str+"iloxml/Reset_Server.xml",
63 self.username, self.password)
64 cmd_out, cmd_err = locfg.run_noexcept(cmd)
66 cmd = "grep 'MESSAGE' | grep -v 'No error'"
67 p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
68 stderr=subprocess.STDOUT, close_fds=True)
69 (grep_in, grep_out ) = (p.stdin, p.stdout)
70 grep_in.write(cmd_out)
71 grep_in.close() # close so read does not block
72 output = grep_out.read()
73 if output.strip() != "":
74 print "grep_out: %s" % output.strip()
77 # NOTE: if an error occurs earlier, an exception should be thrown