+++ /dev/null
-from pcucontrol.reboot import *
-
-class BayTechRPC3NC(PCUControl):
- supported_ports = [22,23]
- def run_telnet(self, node_port, dryrun):
- return self.run_ssh(node_port, dryrun)
-
- def run_ssh(self, node_port, dryrun):
- self.transport.open(self.host, self.username, None, "Enter user name:")
- self.transport.sendPassword(self.password, "Enter Password:")
-
- #self.transport.ifThenSend("RPC-16>", "Status")
- self.transport.ifThenSend("RPC3-NC>", "Reboot %d" % node_port)
-
- # Reboot Outlet N (Y/N)?
- if dryrun:
- self.transport.ifThenSend("(Y/N)?", "N")
- else:
- self.transport.ifThenSend("(Y/N)?", "Y")
- self.transport.ifThenSend("RPC3-NC>", "")
-
- self.transport.close()
- return 0
-
-class BayTechGeorgeTown(PCUControl):
- supported_ports = [22,23]
- def run_telnet(self, node_port, dryrun):
- return self.run_ssh(node_port, dryrun)
- def run_ssh(self, node_port, dryrun):
- # NOTE: The georgetown pcu always drops the first connection,
- self.transport.open(self.host, self.username, None, "Enter")
- self.transport.close()
- time.sleep(1)
- self.transport.open(self.host, self.username, None, "Enter user name:")
- self.transport.sendPassword(self.password, "Enter Password:")
-
- self.transport.ifThenSend("RPC-16>", "Reboot %d" % node_port)
-
- # Reboot Outlet N (Y/N)?
- if dryrun:
- self.transport.ifThenSend("(Y/N)?", "N")
- else:
- self.transport.ifThenSend("(Y/N)?", "Y")
- self.transport.ifThenSend("RPC-16>", "")
-
- self.transport.close()
- return 0
-
-
-class BayTechRPC16(PCUControl):
- supported_ports = [22,23]
- def run_telnet(self, node_port, dryrun):
- return self.run_ssh(node_port, dryrun)
- def run_ssh(self, node_port, dryrun):
- self.transport.open(self.host, self.username, None, "Enter user name:")
- self.transport.sendPassword(self.password, "Enter Password:")
-
- #self.transport.ifThenSend("RPC-16>", "Status")
-
- self.transport.ifThenSend("RPC-16>", "Reboot %d" % node_port)
-
- # Reboot Outlet N (Y/N)?
- if dryrun:
- self.transport.ifThenSend("(Y/N)?", "N")
- else:
- self.transport.ifThenSend("(Y/N)?", "Y")
- self.transport.ifThenSend("RPC-16>", "")
-
- self.transport.close()
- return 0
-
-class BayTechCtrlCUnibe(PCUControl):
- """
- For some reason, these units let you log in fine, but they hang
- indefinitely, unless you send a Ctrl-C after the password. No idea
- why.
- """
- supported_ports = [22]
- def run_ssh(self, node_port, dryrun):
- print "BayTechCtrlC %s" % self.host
-
- ssh_options="-o StrictHostKeyChecking=no -o PasswordAuthentication=yes -o PubkeyAuthentication=no"
- s = pxssh.pxssh()
- if not s.login(self.host, self.username, self.password, ssh_options):
- raise ExceptionPassword("Invalid Password")
- # Otherwise, the login succeeded.
-
- # Send a ctrl-c to the remote process.
- print "sending ctrl-c"
- s.send(chr(3))
-
- # Control Outlets (5 ,1).........5
- try:
- #index = s.expect("Enter Request")
- index = s.expect(["Enter Request :"])
-
- if index == 0:
- print "3"
- s.send("3\r\n")
- time.sleep(5)
- index = s.expect(["DS-RPC>", "Enter user name:"])
- if index == 1:
- s.send(self.username + "\r\n")
- time.sleep(5)
- index = s.expect(["DS-RPC>"])
-
- if index == 0:
- print "Reboot %d" % node_port
- time.sleep(5)
- s.send("Reboot %d\r\n" % node_port)
-
- time.sleep(5)
- index = s.expect(["\(Y/N\)\?", "Port in use", "DS-RPC>"])
- if index == 0:
- if dryrun:
- print "sending N"
- s.send("N\r\n")
- else:
- print "sending Y"
- s.send("Y\r\n")
- elif index == 1:
- raise ExceptionPrompt("PCU Reported 'Port in use.'")
- elif index == 2:
- raise ExceptionSequence("Issued command 'Reboot' failed.")
-
- time.sleep(5)
- index = s.expect(["DS-RPC>"])
- #print "got prompt back"
-
- s.close()
-
- except pexpect.EOF:
- raise ExceptionPrompt("EOF before expected Prompt")
- except pexpect.TIMEOUT:
- raise ExceptionPrompt("Timeout before expected Prompt")
-
- return 0
-
-class BayTechCtrlC(PCUControl):
- """
- For some reason, these units let you log in fine, but they hang
- indefinitely, unless you send a Ctrl-C after the password. No idea
- why.
- """
- supported_ports = [22]
- def run_ssh(self, node_port, dryrun):
- print "BayTechCtrlC %s" % self.host
-
- ssh_options="-o StrictHostKeyChecking=no -o PasswordAuthentication=yes -o PubkeyAuthentication=no"
- s = pxssh.pxssh()
- try:
- if not s.login(self.host, self.username, self.password, ssh_options):
- raise ExceptionPassword("Invalid Password")
- except pexpect.EOF:
- raise ExceptionNoTransport("No Connection Possible")
-
-
- # Otherwise, the login succeeded.
-
- # Send a ctrl-c to the remote process.
- print "SENDING ctrl-c"
- s.send(chr(3))
-
- # Control Outlets (5 ,1).........5
- try:
- print "EXPECTING: ", "Enter Request :"
- index = s.expect(["Enter Request :"])
-
- if index == 0:
- print "SENDING: 5"
- s.send("5\r\n")
- print "EXPECTING: ", "DS-RPC>"
- index = s.expect(["DS-RPC>", "Enter user name:", "Port in use."])
- if index == 1:
- print "sending username"
- s.send(self.username + "\r\n")
- index = s.expect(["DS-RPC>"])
- elif index == 2:
- raise ExceptionPrompt("PCU Reported 'Port in use.'")
-
- if index == 0:
- print "SENDING: Reboot %d" % node_port
- s.send("Reboot %d\r\n" % node_port)
-
- print "SLEEPING: 5"
- time.sleep(5)
- print "EXPECTING: ", "Y/N?"
- index = s.expect(["\(Y/N\)\?", "Port in use", "DS-RPC>"])
- if index == 0:
- if dryrun:
- print "sending N"
- s.send("N\r\n")
- else:
- print "SENDING: Y"
- s.send("Y\r\n")
- elif index == 1:
- raise ExceptionPrompt("PCU Reported 'Port in use.'")
- elif index == 2:
- raise ExceptionSequence("Issued command 'Reboot' failed.")
-
- # NOTE: for some reason, the script times out with the
- # following line. In manual tests, it works correctly, but
- # with automated tests, evidently it fails.
- print "SLEEPING: 5"
- time.sleep(5)
- #print "TOTAL--", s.allstr, "--EOT"
- index = s.expect(["DS-RPC>"])
- print "got prompt back"
-
- s.close()
-
- except pexpect.EOF:
- raise ExceptionPrompt("EOF before 'Enter Request' Prompt")
- except pexpect.TIMEOUT:
- raise ExceptionPrompt("Timeout before Prompt")
-
- return 0
-
-
-class BayTech5CtrlC(PCUControl):
- """
- For some reason, these units let you log in fine, but they hang
- indefinitely, unless you send a Ctrl-C after the password. No idea
- why.
- """
- supported_ports = [22]
- def run_ssh(self, node_port, dryrun):
- print "BayTech5CtrlC %s" % self.host
-
- ssh_options="-o StrictHostKeyChecking=no -o PasswordAuthentication=yes -o PubkeyAuthentication=no"
- s = pxssh.pxssh()
- try:
- if not s.login(self.host, self.username, self.password, ssh_options):
- raise ExceptionPassword("Invalid Password")
- except pexpect.EOF:
- raise ExceptionNoTransport("No Connection Possible")
-
-
- # Otherwise, the login succeeded.
- # Control Outlets (5 ,1).........5
- try:
- print "EXPECTING: ", "Enter Request :"
- s.send("\r\n")
- time.sleep(2)
- index = s.expect(["Enter Request"])
-
- if index == 0:
- print "SENDING: 5"
- s.send("5\r\n")
- print "EXPECTING: ", "DS-RPC>"
- time.sleep(3)
- # Send a ctrl-c to the remote process.
- #print "SENDING ctrl-c"
- #s.send(chr(3))
-
- index = s.expect(["DS-RPC>", "Enter user name:", "Port in use."])
- if index == 1:
- print "sending username"
- s.send(self.username + "\r\n")
- index = s.expect(["DS-RPC>"])
- elif index == 2:
- raise ExceptionPrompt("PCU Reported 'Port in use.'")
-
- if index == 0:
- print "SENDING: Reboot %d" % node_port
- #s.send("Reboot %d\r\n" % node_port)
- s.send("Reboot %d\r" % node_port)
-
- print "SLEEPING: 5"
- time.sleep(5)
- print "EXPECTING: ", "Y/N?"
- index = s.expect(["\(Y/N\)\?", "Port in use", "DS-RPC>"])
- if index == 0:
- if dryrun:
- print "sending N"
- s.send("N\r\n")
- else:
- print "SENDING: Y"
- s.send("Y\r\n")
- elif index == 1:
- raise ExceptionPrompt("PCU Reported 'Port in use.'")
- elif index == 2:
- raise ExceptionSequence("Issued command 'Reboot' failed.")
-
- # NOTE: for some reason, the script times out with the
- # following line. In manual tests, it works correctly, but
- # with automated tests, evidently it fails.
- print "SLEEPING: 5"
- time.sleep(5)
- #print "TOTAL--", s.allstr, "--EOT"
- index = s.expect(["DS-RPC>"])
- print "got prompt back"
-
- s.close()
-
- except pexpect.EOF:
- raise ExceptionPrompt("EOF before 'Enter Request' Prompt")
- except pexpect.TIMEOUT:
- raise ExceptionPrompt("Timeout before Prompt")
-
- return 0
-
-class BayTech(PCUControl):
- supported_ports = [22,23]
-
- def run_telnet(self, node_port, dryrun):
- return self.run_ssh(node_port, dryrun)
-
- def run_ssh(self, node_port, dryrun):
- self.transport.open(self.host, self.username)
- self.transport.sendPassword(self.password)
-
- # Control Outlets (5 ,1).........5
- self.transport.ifThenSend("Enter Request :", "5")
-
- # Reboot N
- try:
- self.transport.ifThenSend("DS-RPC>", "Reboot %d" % node_port, ExceptionNotFound)
- except ExceptionNotFound, msg:
- # one machine is configured to ask for a username,
- # even after login...
- print "msg: %s" % msg
- self.transport.write(self.username + "\r\n")
- time.sleep(5)
- self.transport.ifThenSend("DS-RPC>", "Reboot %d" % node_port)
-
- # Reboot Outlet N (Y/N)?
- if dryrun:
- self.transport.ifThenSend("(Y/N)?", "N")
- else:
- self.transport.ifThenSend("(Y/N)?", "Y")
- time.sleep(5)
- self.transport.ifThenSend("DS-RPC>", "")
-
- self.transport.close()
- return 0