Matt Hart | 1306d82 | 2013-08-09 12:08:22 +0100 | [diff] [blame] | 1 | import pexpect |
| 2 | import sys |
| 3 | import os |
| 4 | from apcdrivers import apc8959 |
| 5 | from apcdrivers import apc7952 |
Matt Hart | 63ed911 | 2013-08-20 13:31:50 +0100 | [diff] [blame^] | 6 | import logging |
Matt Hart | 1306d82 | 2013-08-09 12:08:22 +0100 | [diff] [blame] | 7 | |
| 8 | class 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 Hart | 63ed911 | 2013-08-20 13:31:50 +0100 | [diff] [blame^] | 19 | logging.debug("Found a v5 prompt") |
Matt Hart | 1306d82 | 2013-08-09 12:08:22 +0100 | [diff] [blame] | 20 | self.driver = apc8959(self.connection) |
| 21 | elif self.prompt == 1: |
Matt Hart | 63ed911 | 2013-08-20 13:31:50 +0100 | [diff] [blame^] | 22 | logging.debug("Found a v3 prompt") |
Matt Hart | 1306d82 | 2013-08-09 12:08:22 +0100 | [diff] [blame] | 23 | self.driver = apc7952(self.connection) |
| 24 | else: |
Matt Hart | 63ed911 | 2013-08-20 13:31:50 +0100 | [diff] [blame^] | 25 | logging.debug("Unknown prompt!") |
Matt Hart | 1306d82 | 2013-08-09 12:08:22 +0100 | [diff] [blame] | 26 | |
| 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 Hart | 63ed911 | 2013-08-20 13:31:50 +0100 | [diff] [blame^] | 37 | logging.debug("attempting login with username %s, password %s" % (username,password)) |
Matt Hart | 1306d82 | 2013-08-09 12:08:22 +0100 | [diff] [blame] | 38 | 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 | |
| 47 | if __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 | |