blob: 4f18c2e62a76df4fb29c33cb65e90c3d8af348b6 [file] [log] [blame]
Matt Hart1306d822013-08-09 12:08:22 +01001import pexpect
2import sys
3import os
4from apcdrivers import apc8959
5from apcdrivers import apc7952
6
7class PDUEngine():
8 connection = None
9 pdu_commands = {"off":"olOff","on":"olOn","reboot":"olReboot","delayed":"olDlyReboot"}
10 prompt = 0
11 driver = None
12
13 def __init__(self, pdu_hostname, pdu_telnetport = 23):
14 self.connection = pexpect.spawn("/usr/bin/telnet %s %d" % (pdu_hostname, pdu_telnetport))
15 #self.connection.logfile_read = sys.stdout
16 self._pdu_login("apc","apc")
17 if self.prompt == 0:
18 print("Found a v5 prompt")
19 self.driver = apc8959(self.connection)
20 elif self.prompt == 1:
21 print("Found a v3 prompt")
22 self.driver = apc7952(self.connection)
23 else:
24 print("Unknown prompt!")
25
26 def is_busy(self):
27 if os.path.exists("/proc/%i" % self.connection.pid):
28 return True
29 return False
30
31 def close(self):
32 self.driver._pdu_logout()
33 self.connection.close(True)
34
35 def _pdu_login(self, username, password):
36 print("attempting login with username %s, password %s" % (username,password))
37 self.connection.send("\r")
38 self.connection.expect ("User Name :")
39 self.connection.send("apc\r")
40 self.connection.expect("Password :")
41 self.connection.send("apc\r")
42 self.prompt = self.connection.expect(["apc>", ">"])
43 #print("prompt: %s" % self.prompt)
44
45
46if __name__ == "__main__":
47 pe1 = PDUEngine("pdu15")
48 pe1.driver.port_off(22)
49 pe1.driver.port_on(22)
50 pe1.close()
51 pe2 = PDUEngine("pdu14")
52 pe2.driver.port_off(6)
53 pe2.driver.port_on(6)
54 pe2.close()
55 pe3 = PDUEngine("pdu01")
56 pe3.driver.port_reboot(1)
57 pe3.driver.port_off(1)
58 pe3.driver.port_on(1)
59 pe3.close()
60 pe4 = PDUEngine("pdu02")
61 pe4.driver.port_reboot(8)
62 pe4.driver.port_off(8)
63 pe4.driver.port_on(8)
64 pe4.close()
65