Files

62 lines
1.8 KiB
Python

from __future__ import absolute_import
from telnetlib import Telnet
class IloDebugger(object):
DEBUG_PORT = 8
def __init__(self, hostname, timeout=10):
"""Initialize an iLO debugger instance.
:param hostname: hostname of the iLO server
:param timeout: connection timeout, in seconds
"""
self.hostname = hostname
self.timeout = timeout
self.tn = None
self.prompt = '\r\n>'
def open(self):
"""Connect to the iLO debugger."""
self.tn = Telnet(self.hostname, self.DEBUG_PORT, self.timeout)
# wait until the debugger is ready and clear initial output
self.read_until(self.prompt)
def close(self):
"""Close the connection."""
if self.tn:
self.tn.close()
self.tn = None
def __enter__(self):
self.open()
return self
def __exit__(self, exc_type, exc_value, traceback):
self.close()
def read(self):
"""Read all available output without blocking I/O."""
output = self.tn.read_very_eager()
# debugger occasionally outputs CRLFs with double CRs - just convert all to LFs
output = output.replace('\r', '')
return output
def read_until(self, expected, timeout=10):
"""Read until an expected string is encountered or the timeout, in seconds, has been reached."""
output = self.tn.read_until(expected, timeout)
output = output.replace('\r', '')
return output
def writeline(self, line):
"""Write a line to the iLO debugger."""
self.tn.write(line + '\n')
def run(self, cmd_line):
"""Run an iLO debugger command and capture output."""
self.read() # clear any previous output
self.writeline(cmd_line)
output = self.read_until(self.prompt)
return output