black: re-format
black and isort are enabled in the openbmc-build-scripts on Python files
to have a consistent formatting. Re-run the formatter on the whole
repository.
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: I944f1915ece753f72a3fa654902d445a9749d0f9
diff --git a/ffdc/lib/ssh_utility.py b/ffdc/lib/ssh_utility.py
index 01b39dd..fb44121 100644
--- a/ffdc/lib/ssh_utility.py
+++ b/ffdc/lib/ssh_utility.py
@@ -1,17 +1,20 @@
#!/usr/bin/env python3
-import paramiko
-from paramiko.ssh_exception import AuthenticationException
-from paramiko.ssh_exception import NoValidConnectionsError
-from paramiko.ssh_exception import SSHException
-from paramiko.ssh_exception import BadHostKeyException
-from paramiko.buffered_pipe import PipeTimeout as PipeTimeout
-from scp import SCPClient, SCPException
-import time
-import socket
import logging
+import socket
+import time
from socket import timeout as SocketTimeout
+import paramiko
+from paramiko.buffered_pipe import PipeTimeout as PipeTimeout
+from paramiko.ssh_exception import (
+ AuthenticationException,
+ BadHostKeyException,
+ NoValidConnectionsError,
+ SSHException,
+)
+from scp import SCPClient, SCPException
+
class SSHRemoteclient:
r"""
@@ -20,7 +23,6 @@
"""
def __init__(self, hostname, username, password):
-
r"""
Description of argument(s):
@@ -38,7 +40,6 @@
self.password = password
def ssh_remoteclient_login(self):
-
r"""
Method to create a ssh connection to remote host.
"""
@@ -48,23 +49,31 @@
# SSHClient to make connections to the remote server
self.sshclient = paramiko.SSHClient()
# setting set_missing_host_key_policy() to allow any host
- self.sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ self.sshclient.set_missing_host_key_policy(
+ paramiko.AutoAddPolicy()
+ )
# Connect to the server
- self.sshclient.connect(hostname=self.hostname,
- username=self.username,
- password=self.password,
- banner_timeout=120,
- timeout=60,
- look_for_keys=False)
+ self.sshclient.connect(
+ hostname=self.hostname,
+ username=self.username,
+ password=self.password,
+ banner_timeout=120,
+ timeout=60,
+ look_for_keys=False,
+ )
- except (BadHostKeyException, AuthenticationException,
- SSHException, NoValidConnectionsError, socket.error) as e:
+ except (
+ BadHostKeyException,
+ AuthenticationException,
+ SSHException,
+ NoValidConnectionsError,
+ socket.error,
+ ) as e:
is_ssh_login = False
return is_ssh_login
def ssh_remoteclient_disconnect(self):
-
r"""
Clean up.
"""
@@ -75,8 +84,7 @@
if self.scpclient:
self.scpclient.close()
- def execute_command(self, command,
- default_timeout=60):
+ def execute_command(self, command, default_timeout=60):
"""
Execute command on the remote host.
@@ -85,25 +93,26 @@
"""
- empty = ''
+ empty = ""
cmd_start = time.time()
try:
- stdin, stdout, stderr = \
- self.sshclient.exec_command(command, timeout=default_timeout)
+ stdin, stdout, stderr = self.sshclient.exec_command(
+ command, timeout=default_timeout
+ )
start = time.time()
while time.time() < start + default_timeout:
# Need to do read/write operation to trigger
# paramiko exec_command timeout mechanism.
xresults = stderr.readlines()
- results = ''.join(xresults)
+ results = "".join(xresults)
time.sleep(1)
if stdout.channel.exit_status_ready():
break
cmd_exit_code = stdout.channel.recv_exit_status()
# Convert list of string to one string
- err = ''
- out = ''
+ err = ""
+ out = ""
for item in results:
err += item
for item in stdout.readlines():
@@ -111,30 +120,53 @@
return cmd_exit_code, err, out
- except (paramiko.AuthenticationException, paramiko.SSHException,
- paramiko.ChannelException, SocketTimeout) as e:
+ except (
+ paramiko.AuthenticationException,
+ paramiko.SSHException,
+ paramiko.ChannelException,
+ SocketTimeout,
+ ) as e:
# Log command with error. Return to caller for next command, if any.
- logging.error("\n\tERROR: Fail remote command %s %s" % (e.__class__, e))
- logging.error("\tCommand '%s' Elapsed Time %s" %
- (command, time.strftime("%H:%M:%S", time.gmtime(time.time() - cmd_start))))
+ logging.error(
+ "\n\tERROR: Fail remote command %s %s" % (e.__class__, e)
+ )
+ logging.error(
+ "\tCommand '%s' Elapsed Time %s"
+ % (
+ command,
+ time.strftime(
+ "%H:%M:%S", time.gmtime(time.time() - cmd_start)
+ ),
+ )
+ )
return 0, empty, empty
def scp_connection(self):
-
r"""
Create a scp connection for file transfer.
"""
try:
- self.scpclient = SCPClient(self.sshclient.get_transport(), sanitize=lambda x: x)
- logging.info("\n\t[Check] %s SCP transport established.\t [OK]" % self.hostname)
+ self.scpclient = SCPClient(
+ self.sshclient.get_transport(), sanitize=lambda x: x
+ )
+ logging.info(
+ "\n\t[Check] %s SCP transport established.\t [OK]"
+ % self.hostname
+ )
except (SCPException, SocketTimeout, PipeTimeout) as e:
self.scpclient = None
- logging.error("\n\tERROR: SCP get_transport has failed. %s %s" % (e.__class__, e))
- logging.info("\tScript continues generating FFDC on %s." % self.hostname)
- logging.info("\tCollected data will need to be manually offloaded.")
+ logging.error(
+ "\n\tERROR: SCP get_transport has failed. %s %s"
+ % (e.__class__, e)
+ )
+ logging.info(
+ "\tScript continues generating FFDC on %s." % self.hostname
+ )
+ logging.info(
+ "\tCollected data will need to be manually offloaded."
+ )
def scp_file_from_remote(self, remote_file, local_file):
-
r"""
scp file in remote system to local with date-prefixed filename.
@@ -151,7 +183,9 @@
except (SCPException, SocketTimeout, PipeTimeout, SSHException) as e:
# Log command with error. Return to caller for next file, if any.
logging.error(
- "\n\tERROR: Fail scp %s from remotehost %s %s\n\n" % (remote_file, e.__class__, e))
+ "\n\tERROR: Fail scp %s from remotehost %s %s\n\n"
+ % (remote_file, e.__class__, e)
+ )
# Pause for 2 seconds allowing Paramiko to finish error processing before next fetch.
# Without the delay after SCPException,
# next fetch will get 'paramiko.ssh_exception.SSHException'> Channel closed Error.
diff --git a/ffdc/lib/telnet_utility.py b/ffdc/lib/telnet_utility.py
index 08e4071..03f7983 100644
--- a/ffdc/lib/telnet_utility.py
+++ b/ffdc/lib/telnet_utility.py
@@ -1,21 +1,21 @@
#!/usr/bin/env python3
-import time
-import socket
import logging
+import socket
import telnetlib
+import time
from collections import deque
class TelnetRemoteclient:
-
r"""
Class to create telnet connection to remote host for command execution.
"""
- def __init__(self, hostname, username, password, port=23, read_timeout=None):
-
+ def __init__(
+ self, hostname, username, password, port=23, read_timeout=None
+ ):
r"""
Description of argument(s):
@@ -33,23 +33,35 @@
self.read_timeout = read_timeout
def tn_remoteclient_login(self):
-
is_telnet = True
try:
- self.tnclient = telnetlib.Telnet(self.hostname, self.port, timeout=15)
- if b'login:' in self.tnclient.read_until(b'login:', timeout=self.read_timeout):
- self.tnclient.write(self.username.encode('utf-8') + b"\n")
+ self.tnclient = telnetlib.Telnet(
+ self.hostname, self.port, timeout=15
+ )
+ if b"login:" in self.tnclient.read_until(
+ b"login:", timeout=self.read_timeout
+ ):
+ self.tnclient.write(self.username.encode("utf-8") + b"\n")
- if b'Password:' in self.tnclient.read_until(b'Password:', timeout=self.read_timeout):
- self.tnclient.write(self.password.encode('utf-8') + b"\n")
+ if b"Password:" in self.tnclient.read_until(
+ b"Password:", timeout=self.read_timeout
+ ):
+ self.tnclient.write(self.password.encode("utf-8") + b"\n")
- n, match, pre_match = \
- self.tnclient.expect(
- [b'Login incorrect', b'invalid login name or password.', br'\#', br'\$'],
- timeout=self.read_timeout)
+ n, match, pre_match = self.tnclient.expect(
+ [
+ b"Login incorrect",
+ b"invalid login name or password.",
+ rb"\#",
+ rb"\$",
+ ],
+ timeout=self.read_timeout,
+ )
if n == 0 or n == 1:
logging.error(
- "\n\tERROR: Telnet Authentication Failed. Check userid and password.\n\n")
+ "\n\tERROR: Telnet Authentication Failed. Check"
+ " userid and password.\n\n"
+ )
is_telnet = False
else:
# login successful
@@ -76,17 +88,15 @@
# the telnet object might not exist yet, so ignore this one
pass
- def execute_command(self, cmd,
- i_timeout=120):
+ def execute_command(self, cmd, i_timeout=120):
+ r"""
+ Executes commands on the remote host
- r'''
- Executes commands on the remote host
-
- Description of argument(s):
- cmd Command to run on remote host
- i_timeout Timeout for command output
- default is 120 seconds
- '''
+ Description of argument(s):
+ cmd Command to run on remote host
+ i_timeout Timeout for command output
+ default is 120 seconds
+ """
# Wait time for command execution before reading the output.
# Use user input wait time for command execution if one exists.
@@ -97,23 +107,22 @@
execution_time = 120
# Execute the command and read the command output.
- return_buffer = b''
+ return_buffer = b""
try:
-
# Do at least one non-blocking read.
# to flush whatever data is in the read buffer.
while self.tnclient.read_very_eager():
continue
# Execute the command
- self.tnclient.write(cmd.encode('utf-8') + b'\n')
+ self.tnclient.write(cmd.encode("utf-8") + b"\n")
time.sleep(execution_time)
- local_buffer = b''
+ local_buffer = b""
# Read the command output one block at a time.
return_buffer = self.tnclient.read_very_eager()
while return_buffer:
- local_buffer = b''.join([local_buffer, return_buffer])
+ local_buffer = b"".join([local_buffer, return_buffer])
time.sleep(3) # let the buffer fill up a bit
return_buffer = self.tnclient.read_very_eager()
except (socket.error, EOFError) as e:
@@ -129,4 +138,4 @@
logging.error("\t\t ERROR %s " % msg)
# Return ASCII string data with ending PROMPT stripped
- return local_buffer.decode('ascii', 'ignore').replace('$ ', '\n')
+ return local_buffer.decode("ascii", "ignore").replace("$ ", "\n")