move pcucontrol package into pcucontrol module.
[pcucontrol.git] / pcucontrol / models / HPiLO.py
1 from pcucontrol.reboot import *
2 from distutils.sysconfig import get_python_lib; 
3
4 class HPiLO(PCUControl):
5         supported_ports = [22,443]
6         def run(self, node_port, dryrun):
7                 if self.type == Transport.SSH:
8                         return self.run_ssh(node_port, dryrun)
9                 elif self.type == Transport.HTTP or self.type == Transport.HTTPS:
10                         return self.run_https(node_port, dryrun)
11                 else:
12                         raise ExceptionNoTransport("Unimplemented Transport for HPiLO %s" % self.type)
13
14         def run_ssh(self, node_port, dryrun):
15
16                 self.transport.open(self.host, self.username)
17                 self.transport.sendPassword(self.password)
18
19                 # </>hpiLO-> 
20                 self.transport.ifThenSend("</>hpiLO->", "cd system1")
21
22                 # Reboot Outlet  N        (Y/N)?
23                 if dryrun:
24                         self.transport.ifThenSend("</system1>hpiLO->", "POWER")
25                 else:
26                         # Reset this machine
27                         self.transport.ifThenSend("</system1>hpiLO->", "reset")
28
29                 self.transport.ifThenSend("</system1>hpiLO->", "exit")
30
31                 self.transport.close()
32                 return 0
33                 
34         def run_https(self, node_port, dryrun):
35
36                 locfg = command.CMD()
37
38                 cmd_str = get_python_lib(1) + "/pcucontrol/models/hpilo/"
39                 
40                 cmd = cmd_str + "locfg.pl -s %s -f %s -u %s -p '%s' | grep 'MESSAGE' | grep -v 'No error'" % (
41                                         self.host, cmd_str+"iloxml/Get_Network.xml", 
42                                         self.username, self.password)
43                 sout, serr = locfg.run_noexcept(cmd)
44
45                 if sout.strip() != "" or serr.strip() != "":
46                         print "sout: %s" % sout.strip()
47                         return sout.strip() + serr.strip()
48
49                 if not dryrun:
50                         locfg = command.CMD()
51                         cmd = cmd_str + "locfg.pl -s %s -f %s -u %s -p '%s' | grep 'MESSAGE' | grep -v 'No error'" % (
52                                                 self.host, cmd_str+"iloxml/Reset_Server.xml", 
53                                                 self.username, self.password)
54                         sout, serr = locfg.run_noexcept(cmd)
55
56                         if sout.strip() != "":
57                                 print "sout: %s" % sout.strip()
58                                 #return sout.strip()
59
60                 return 0