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