iLO-manager first main commitgit status
This commit is contained in:
1 parent
e6f4cc04ca
commit
599d8da562
3271 files changed
+550655
No files matched your search
@@ -0,0 +1,61 @@
|
||||
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
|
||||
Reference in new issue
Block a user