From 5df03f9a9c82c33d7b0335a402ea7e1d971bd666 Mon Sep 17 00:00:00 2001 From: maipbui Date: Mon, 29 Aug 2022 04:32:13 +0000 Subject: [PATCH 01/13] Mitigate security in subprocess Signed-off-by: maipbui --- .../quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py index 0b2027afdda4..bf2da30ef120 100755 --- a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py +++ b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py @@ -7,6 +7,7 @@ import os.path import subprocess import logging +from shlex import split try: from sonic_psu.psu_base import PsuBase @@ -25,7 +26,7 @@ def show_log(txt): def exec_cmd(cmd, show): logging.info('Run :'+cmd) try: - output = subprocess.check_output(cmd, shell=True, universal_newlines=True) + output = subprocess.run(split(cmd), universal_newlines=True, capture_output=True).stdout show_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info("Failed :"+cmd) @@ -45,7 +46,7 @@ def log_os_system(cmd, show): status = 1 output = "" try: - output = subprocess.check_output(cmd, shell=True, universal_newlines=True) + output = subprocess.run(split(cmd), universal_newlines=True, capture_output=True).stdout my_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info('Failed :'+cmd) From a2a94a610c4875887b5c71d8476de9484d5271e5 Mon Sep 17 00:00:00 2001 From: maipbui Date: Mon, 29 Aug 2022 17:14:46 +0000 Subject: [PATCH 02/13] Add more arguments Signed-off-by: maipbui --- device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py index bf2da30ef120..3eb81919d327 100755 --- a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py +++ b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py @@ -26,7 +26,7 @@ def show_log(txt): def exec_cmd(cmd, show): logging.info('Run :'+cmd) try: - output = subprocess.run(split(cmd), universal_newlines=True, capture_output=True).stdout + output = subprocess.run(split(cmd), universal_newlines=True, capture_output=True, check=True).stdout show_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info("Failed :"+cmd) @@ -46,7 +46,7 @@ def log_os_system(cmd, show): status = 1 output = "" try: - output = subprocess.run(split(cmd), universal_newlines=True, capture_output=True).stdout + output = subprocess.run(split(cmd), universal_newlines=True, capture_output=True, check=True).stdout my_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info('Failed :'+cmd) From ab31cfe2697ab60f5a9835d5342c90fc85826fad Mon Sep 17 00:00:00 2001 From: maipbui Date: Tue, 30 Aug 2022 16:33:18 +0000 Subject: [PATCH 03/13] Fix args to make subprocess work Signed-off-by: maipbui --- .../plugins/psuutil.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py index 3eb81919d327..306f6b0cebbd 100755 --- a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py +++ b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py @@ -25,9 +25,12 @@ def show_log(txt): def exec_cmd(cmd, show): logging.info('Run :'+cmd) + in_cmd = cmd.split('>')[0] + out_file = cmd.split('>')[1].strip() try: - output = subprocess.run(split(cmd), universal_newlines=True, capture_output=True, check=True).stdout - show_log(cmd + "output:"+str(output)) + with open(out_file, 'w') as f: + output = subprocess.run(split(in_cmd), universal_newlines=True, check=True).stdout + show_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info("Failed :"+cmd) if show: @@ -45,8 +48,15 @@ def log_os_system(cmd, show): logging.info('Run :'+cmd) status = 1 output = "" + cmd1 = split(cmd.split('|')[0].rstrip()) + cmd2 = split(cmd.split('|')[1].lstrip()) try: - output = subprocess.run(split(cmd), universal_newlines=True, capture_output=True, check=True).stdout + p1 = subprocess.Popen(cmd1, universal_newlines=True, stdout=subprocess.PIPE) + p2 = subprocess.Popen(cmd2, universal_newlines=True, stdin=p1.stdout, stdout=subprocess.PIPE) + p1.stdout.close() + output = p2.communicate()[0] + if p2.returncode == 1: + raise subprocess.CalledProcessError(returncode=p2.returncode, cmd=cmd, output=output) my_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info('Failed :'+cmd) From 78df48cfaed79e372a77a18364520b505028a829 Mon Sep 17 00:00:00 2001 From: maipbui Date: Tue, 30 Aug 2022 17:19:08 +0000 Subject: [PATCH 04/13] Add args Signed-off-by: maipbui --- device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py index 306f6b0cebbd..3e045c17c53d 100755 --- a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py +++ b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py @@ -29,7 +29,7 @@ def exec_cmd(cmd, show): out_file = cmd.split('>')[1].strip() try: with open(out_file, 'w') as f: - output = subprocess.run(split(in_cmd), universal_newlines=True, check=True).stdout + output = subprocess.run(split(in_cmd), stdout=f, universal_newlines=True, check=True).stdout show_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info("Failed :"+cmd) From 02c79f09b790d2b6796819a4fd26b938f2d8cb20 Mon Sep 17 00:00:00 2001 From: maipbui Date: Tue, 30 Aug 2022 20:22:43 +0000 Subject: [PATCH 05/13] Convert cmd string to cmd array Signed-off-by: maipbui --- .../plugins/psuutil.py | 41 +++++++++---------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py index 3e045c17c53d..fd2dae4b2a76 100755 --- a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py +++ b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py @@ -7,7 +7,6 @@ import os.path import subprocess import logging -from shlex import split try: from sonic_psu.psu_base import PsuBase @@ -23,13 +22,12 @@ def show_log(txt): return -def exec_cmd(cmd, show): +def exec_cmd(cmd_args, out_file, show): + cmd = ' '.join(cmd_args) + ' > ' + out_file logging.info('Run :'+cmd) - in_cmd = cmd.split('>')[0] - out_file = cmd.split('>')[1].strip() try: with open(out_file, 'w') as f: - output = subprocess.run(split(in_cmd), stdout=f, universal_newlines=True, check=True).stdout + output = subprocess.run(cmd_args, stdout=f, universal_newlines=True, check=True).stdout show_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info("Failed :"+cmd) @@ -44,15 +42,14 @@ def my_log(txt): return -def log_os_system(cmd, show): +def log_os_system(cmd1_args, cmd2_args, show): + cmd = ' '.join(cmd1_args) + ' | ' + ' '.join(cmd2_args) logging.info('Run :'+cmd) status = 1 output = "" - cmd1 = split(cmd.split('|')[0].rstrip()) - cmd2 = split(cmd.split('|')[1].lstrip()) try: - p1 = subprocess.Popen(cmd1, universal_newlines=True, stdout=subprocess.PIPE) - p2 = subprocess.Popen(cmd2, universal_newlines=True, stdin=p1.stdout, stdout=subprocess.PIPE) + p1 = subprocess.Popen(cmd1_args, universal_newlines=True, stdout=subprocess.PIPE) + p2 = subprocess.Popen(cmd2_args, universal_newlines=True, stdin=p1.stdout, stdout=subprocess.PIPE) p1.stdout.close() output = p2.communicate()[0] if p2.returncode == 1: @@ -66,28 +63,28 @@ def log_os_system(cmd, show): def gpio16_exist(): - ls = log_os_system("ls /sys/class/gpio/ | grep gpio16", 0) + ls = log_os_system(["ls", "/sys/class/gpio/"], ["rep", "gpio16"], 0) logging.info('mods:'+ls) if len(ls) == 0: return False def gpio17_exist(): - ls = log_os_system("ls /sys/class/gpio/ | grep gpio17", 0) + ls = log_os_system(["ls", "/sys/class/gpio/"], ["grep", "gpio17"], 0) logging.info('mods:'+ls) if len(ls) == 0: return False def gpio19_exist(): - ls = log_os_system("ls /sys/class/gpio/ | grep gpio19", 0) + ls = log_os_system(["ls", "/sys/class/gpio/"], ["grep", "gpio19"], 0) logging.info('mods:'+ls) if len(ls) == 0: return False def gpio20_exist(): - ls = log_os_system("ls /sys/class/gpio/ | grep gpio20", 0) + ls = log_os_system(["ls", "/sys/class/gpio/"], ["grep", "gpio20"], 0) logging.info('mods:'+ls) if len(ls) == 0: return False @@ -106,20 +103,20 @@ def __init__(self): PsuBase.__init__(self) if gpio16_exist() == False: - output = exec_cmd("echo 16 > /sys/class/gpio/export ", 1) - output = exec_cmd("echo in > /sys/class/gpio/gpio16/direction ", 1) + output = exec_cmd(["echo", "16"], "/sys/class/gpio/export", 1) + output = exec_cmd(["echo", "in"], "/sys/class/gpio/gpio16/direction", 1) if gpio17_exist() == False: - output = exec_cmd("echo 17 > /sys/class/gpio/export ", 1) - output = exec_cmd("echo in > /sys/class/gpio/gpio17/direction ", 1) + output = exec_cmd(["echo", "17"], "/sys/class/gpio/export", 1) + output = exec_cmd(["echo", "in"], "/sys/class/gpio/gpio17/direction", 1) if gpio19_exist() == False: - output = exec_cmd("echo 19 > /sys/class/gpio/export ", 1) - output = exec_cmd("echo in > /sys/class/gpio/gpio19/direction ", 1) + output = exec_cmd(["echo", "19"], "/sys/class/gpio/export", 1) + output = exec_cmd(["echo", "in"], "/sys/class/gpio/gpio19/direction", 1) if gpio20_exist() == False: - output = exec_cmd("echo 20 > /sys/class/gpio/export ", 1) - output = exec_cmd("echo in > /sys/class/gpio/gpio20/direction ", 1) + output = exec_cmd(["echo", "20"], "/sys/class/gpio/export", 1) + output = exec_cmd(["echo", "in"], "/sys/class/gpio/gpio20/direction", 1) # Get sysfs attribute def get_attr_value(self, attr_path): From 96488b40b5debd1758123a601f991cd5363fd71f Mon Sep 17 00:00:00 2001 From: maipbui Date: Thu, 1 Sep 2022 03:26:24 +0000 Subject: [PATCH 06/13] Use with Signed-off-by: maipbui --- .../plugins/psuutil.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py index fd2dae4b2a76..84691a1de6a7 100755 --- a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py +++ b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py @@ -48,13 +48,12 @@ def log_os_system(cmd1_args, cmd2_args, show): status = 1 output = "" try: - p1 = subprocess.Popen(cmd1_args, universal_newlines=True, stdout=subprocess.PIPE) - p2 = subprocess.Popen(cmd2_args, universal_newlines=True, stdin=p1.stdout, stdout=subprocess.PIPE) - p1.stdout.close() - output = p2.communicate()[0] - if p2.returncode == 1: - raise subprocess.CalledProcessError(returncode=p2.returncode, cmd=cmd, output=output) - my_log(cmd + "output:"+str(output)) + with subprocess.Popen(cmd1_args, universal_newlines=True, stdout=subprocess.PIPE) as p1: + with subprocess.Popen(cmd2_args, universal_newlines=True, stdin=p1.stdout, stdout=subprocess.PIPE) as p2: + output = p2.communicate()[0] + if p2.returncode == 1: + raise subprocess.CalledProcessError(returncode=p2.returncode, cmd=cmd, output=output) + my_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info('Failed :'+cmd) if show: @@ -63,7 +62,7 @@ def log_os_system(cmd1_args, cmd2_args, show): def gpio16_exist(): - ls = log_os_system(["ls", "/sys/class/gpio/"], ["rep", "gpio16"], 0) + ls = log_os_system(["ls", "/sys/class/gpio/"], ["grep", "gpio16"], 0) logging.info('mods:'+ls) if len(ls) == 0: return False From ddf291c5ecc342008d139bac59e3f8b5c57fd58c Mon Sep 17 00:00:00 2001 From: maipbui Date: Fri, 2 Sep 2022 22:42:55 +0000 Subject: [PATCH 07/13] Fix p2 returncode Signed-off-by: maipbui --- device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py index 84691a1de6a7..ad90e9fbb971 100755 --- a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py +++ b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py @@ -51,7 +51,7 @@ def log_os_system(cmd1_args, cmd2_args, show): with subprocess.Popen(cmd1_args, universal_newlines=True, stdout=subprocess.PIPE) as p1: with subprocess.Popen(cmd2_args, universal_newlines=True, stdin=p1.stdout, stdout=subprocess.PIPE) as p2: output = p2.communicate()[0] - if p2.returncode == 1: + if p2.returncode != 0: raise subprocess.CalledProcessError(returncode=p2.returncode, cmd=cmd, output=output) my_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: From 85cd030a45da058580805fa3cee0f94f6f6acd73 Mon Sep 17 00:00:00 2001 From: maipbui Date: Wed, 7 Sep 2022 22:11:21 +0000 Subject: [PATCH 08/13] Add p1 returncode Signed-off-by: maipbui --- device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py index ad90e9fbb971..a6888b33e1c9 100755 --- a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py +++ b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py @@ -51,7 +51,8 @@ def log_os_system(cmd1_args, cmd2_args, show): with subprocess.Popen(cmd1_args, universal_newlines=True, stdout=subprocess.PIPE) as p1: with subprocess.Popen(cmd2_args, universal_newlines=True, stdin=p1.stdout, stdout=subprocess.PIPE) as p2: output = p2.communicate()[0] - if p2.returncode != 0: + p1.wait() + if p1.returncode != 0 and p2.returncode != 0: raise subprocess.CalledProcessError(returncode=p2.returncode, cmd=cmd, output=output) my_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: From b2f432bb2b61dc1a7b9a4a8908d48dbdbb2e36da Mon Sep 17 00:00:00 2001 From: maipbui Date: Mon, 19 Sep 2022 16:48:37 +0000 Subject: [PATCH 09/13] Replace unsafe funcs in platform Signed-off-by: maipbui --- .../ix1b-32x/utils/quanta_ix1b_util.py | 39 +++++++++---------- .../ix7-32x/sonic_platform/component.py | 29 ++++++++++---- .../ix7-32x/sonic_platform/sfp.py | 28 +++++-------- .../ix7-32x/utils/quanta_ix7_util.py | 11 +++--- .../ix7-bwde-32x/sonic_platform/component.py | 33 +++++++++++----- .../ix7-bwde-32x/sonic_platform/sfp.py | 18 ++++----- .../utils/quanta_ix7_bwde_util.py | 11 +++--- .../ix8-56x/sonic_platform/component.py | 29 ++++++++++---- .../ix8-56x/sonic_platform/sfp.py | 18 ++++----- .../ix8-56x/utils/quanta_ix8_util.py | 11 +++--- .../ix8a-bwde-56x/sonic_platform/component.py | 33 +++++++++++----- .../ix8a-bwde-56x/sonic_platform/sfp.py | 18 ++++----- .../utils/quanta_ix8a_bwde_util.py | 11 +++--- .../ix8c-56x/sonic_platform/component.py | 35 ++++++++++++----- .../ix8c-56x/sonic_platform/sfp.py | 16 ++++---- .../ix8c-56x/utils/quanta_ix8c_util.py | 11 +++--- .../ix9-32x/sonic_platform/component.py | 33 +++++++++++----- .../ix9-32x/sonic_platform/sfp.py | 24 ++++++------ .../ix9-32x/utils/quanta_ix9_util.py | 11 +++--- 19 files changed, 252 insertions(+), 167 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix1b-32x/utils/quanta_ix1b_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix1b-32x/utils/quanta_ix1b_util.py index 2135932938eb..d22d419dd3ec 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix1b-32x/utils/quanta_ix1b_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix1b-32x/utils/quanta_ix1b_util.py @@ -27,22 +27,19 @@ clean : uninstall drivers and remove related sysfs nodes """ -import os import commands import sys, getopt import logging -import re import time -from collections import namedtuple DEBUG = False args = [] FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG == True: - print sys.argv[0] - print 'ARGV :', sys.argv[1:] +if DEBUG is True: + print(sys.argv[0]) + print('ARGV :', sys.argv[1:]) def main(): global DEBUG @@ -56,10 +53,10 @@ def main(): 'debug', 'force', ]) - if DEBUG == True: - print options - print args - print len(sys.argv) + if DEBUG is True: + print(options) + print(args) + print(len(sys.argv)) for opt, arg in options: if opt in ('-h', '--help'): @@ -83,12 +80,12 @@ def main(): return 0 def show_help(): - print __doc__ % {'scriptName' : sys.argv[0].split("/")[-1]} + print(__doc__ % {'scriptName' : sys.argv[0].split("/")[-1]}) sys.exit(0) def show_log(txt): - if DEBUG == True: - print "[IX1B-32X]" + txt + if DEBUG is True: + print("[IX1B-32X]" + txt) return @@ -165,7 +162,7 @@ def system_install(): status, output = exec_cmd("modprobe " + drivers[i], 1) if status: - print output + print(output) if FORCE == 0: return status @@ -174,7 +171,7 @@ def system_install(): status, output = exec_cmd(instantiate[i], 1) if status: - print output + print(output) if FORCE == 0: return status @@ -184,7 +181,9 @@ def system_install(): #QSFP for 1~32 port for port_number in range(1, 33): bus_number = port_number + 31 - os.system("echo %d >/sys/bus/i2c/devices/%d-0050/port_name" % (port_number, bus_number)) + file = "/sys/bus/i2c/devices/%d-0050/port_name" % bus_number + with open(file, 'w') as f: + f.write(str(port_number) + '\n') #Set system LED to green status, output = exec_cmd("echo 1 > /sys/class/leds/sysled_green/brightness", 1) @@ -199,14 +198,14 @@ def system_ready(): def install(): if not device_found(): - print "No device, installing...." + print("No device, installing....") status = system_install() if status: if FORCE == 0: return status else: - print " ix1b driver already installed...." + print(" ix1b driver already installed....") return @@ -215,10 +214,10 @@ def uninstall(): #uninstall drivers for i in range(len(drivers) - 1, -1, -1): - status, output = exec_cmd("rmmod " + drivers[i], 1) + status, output = exec_cmd("rmmod " + drivers[i], 1) if status: - print output + print(output) if FORCE == 0: return status diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/component.py index 9f5f69f422a9..6be1a8797770 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/component.py @@ -14,6 +14,7 @@ import subprocess from sonic_platform_base.component_base import ComponentBase from collections import namedtuple + from sonic_py_common.general import getstatusoutput_noshell_pipe except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -47,7 +48,7 @@ def _get_command_result(cmdline): try: proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, - shell=True, stderr=subprocess.STDOUT, + stderr=subprocess.STDOUT, universal_newlines=True) stdout = proc.communicate()[0] rc = proc.wait() @@ -60,12 +61,24 @@ def _get_command_result(cmdline): return result + @staticmethod + def _get_command_result_pipe(cmd1, cmd2): + try: + rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) + if rc != 0: + raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) + + except OSError as e: + raise RuntimeError("Failed to execute command {} {} due to {}".format(cmd1, cmd2, repr(e))) + + return result + class ComponentBIOS(Component): COMPONENT_NAME = 'BIOS' COMPONENT_DESCRIPTION = 'BIOS - Basic Input/Output System' - BIOS_QUERY_VERSION_COMMAND = "dmidecode -s bios-version" + BIOS_QUERY_VERSION_COMMAND = ["dmidecode", "-s", "bios-version"] def __init__(self): super(ComponentBIOS, self).__init__() @@ -90,7 +103,8 @@ def get_firmware_version(self): class ComponentBMC(Component): COMPONENT_NAME = 'BMC' COMPONENT_DESCRIPTION = 'BMC - Board Management Controller' - BMC_QUERY_VERSION_COMMAND = "ipmitool mc info | grep 'Firmware Revision'" + BMC_QUERY_VERSION_COMMAND1 = ["ipmitool", "mc", "info"] + BMC_QUERY_VERSION_COMMAND2 = ["grep", 'Firmware Revision'] def __init__(self): super(ComponentBMC, self).__init__() @@ -105,7 +119,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - bmc_ver = self._get_command_result(self.BMC_QUERY_VERSION_COMMAND) + bmc_ver = self._get_command_result_pipe(self.BMC_QUERY_VERSION_COMMAND1, self.BMC_QUERY_VERSION_COMMAND2) if not bmc_ver: return 'ERR' else: @@ -159,7 +173,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - res = self._get_command_result("ipmitool raw 0x32 0xff 0x02 {}".format(self.cplds[self.index].cmd_index)) + res = self._get_command_result(["ipmitool", "raw", "0x32", "0xff", "0x02", str(self.cplds[self.index].cmd_index)]) if not res: return 'ERR' else: @@ -179,7 +193,8 @@ def get_component_list(cls): class ComponentPCIE(Component): COMPONENT_NAME = 'PCIe' COMPONENT_DESCRIPTION = 'ASIC PCIe Firmware' - PCIE_QUERY_VERSION_COMMAND = "bcmcmd 'pciephy fw version' | grep 'FW version'" + PCIE_QUERY_VERSION_COMMAND1 = ["bcmcmd", 'pciephy fw version'] + PCIE_QUERY_VERSION_COMMAND2 = ["grep" 'FW version'] def __init__(self): super(ComponentPCIE, self).__init__() @@ -194,7 +209,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - version = self._get_command_result(self.PCIE_QUERY_VERSION_COMMAND) + version = self._get_command_result_pipe(self.PCIE_QUERY_VERSION_COMMAND1, self.PCIE_QUERY_VERSION_COMMAND2) if not version: return 'ERR' else: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py index c8336473051e..ab3aa2aed281 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py @@ -1,24 +1,14 @@ -#!/usr/bin/env python - -############################################################################# -# Quanta -# -# Sfp contains an implementation of SONiC Platform Base API and -# provides the sfp device status which are available in the platform -# -############################################################################# - -import os import time +import subprocess from ctypes import create_string_buffer try: - from sonic_platform_base.sfp_base import SfpBase - from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId - from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom - from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId - from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom - from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper + from sonic_platform_base.sfp_base import SfpBase + from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId + from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom + from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId + from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom + from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -163,7 +153,7 @@ class Sfp(SfpBase): # Path to QSFP sysfs PLATFORM_ROOT_PATH = "/usr/share/sonic/device" PMON_HWSKU_PATH = "/usr/share/sonic/hwsku" - HOST_CHK_CMD = "docker > /dev/null 2>&1" + HOST_CHK_CMD = ["docker"] PLATFORM = "x86_64-quanta_ix7_rglbmc-r0" HWSKU = "Quanta-IX7-32X" @@ -259,7 +249,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return os.system(self.HOST_CHK_CMD) == 0 + return subprocess.run(self.HOST_CHK_CMD).returncode == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/utils/quanta_ix7_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/utils/quanta_ix7_util.py index 4196e24f4625..a3d4c380be95 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/utils/quanta_ix7_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/utils/quanta_ix7_util.py @@ -27,7 +27,6 @@ clean : uninstall drivers and remove related sysfs nodes """ -import os import subprocess import sys, getopt import logging @@ -38,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG == True: +if DEBUG is True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) @@ -54,7 +53,7 @@ def main(): 'debug', 'force', ]) - if DEBUG == True: + if DEBUG is True: print(options) print(args) print(len(sys.argv)) @@ -84,7 +83,7 @@ def show_help(): sys.exit(0) def show_log(txt): - if DEBUG == True: + if DEBUG is True: print("[IX7-32X]" + txt) return @@ -204,7 +203,9 @@ def system_install(): #QSFP for 1~32 port for port_number in range(1, 33): bus_number = port_number + 16 - os.system("echo %d >/sys/bus/i2c/devices/%d-0050/port_name" % (port_number, bus_number)) + file = "/sys/bus/i2c/devices/%d-0050/port_name" % bus_number + with open(file, 'w') as f: + f.write(str(port_number) + '\n') return diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/component.py index ae0c25228930..b941ff4f21f7 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/component.py @@ -14,6 +14,7 @@ import subprocess from sonic_platform_base.component_base import ComponentBase from collections import namedtuple + from sonic_py_common.general import getstatusoutput_noshell_pipe except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -47,7 +48,7 @@ def _get_command_result(cmdline): try: proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, - shell=True, stderr=subprocess.STDOUT, + stderr=subprocess.STDOUT, universal_newlines=True) stdout = proc.communicate()[0] rc = proc.wait() @@ -60,12 +61,24 @@ def _get_command_result(cmdline): return result + @staticmethod + def _get_command_result_pipe(cmd1, cmd2): + try: + rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) + if rc != 0: + raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) + + except OSError as e: + raise RuntimeError("Failed to execute command {} {} due to {}".format(cmd1, cmd2, repr(e))) + + return result + class ComponentBIOS(Component): COMPONENT_NAME = 'BIOS' COMPONENT_DESCRIPTION = 'BIOS - Basic Input/Output System' - BIOS_QUERY_VERSION_COMMAND = "dmidecode -s bios-version" + BIOS_QUERY_VERSION_COMMAND = ["dmidecode", "-s", "bios-version"] def __init__(self): super(ComponentBIOS, self).__init__() @@ -90,7 +103,8 @@ def get_firmware_version(self): class ComponentBMC(Component): COMPONENT_NAME = 'BMC' COMPONENT_DESCRIPTION = 'BMC - Board Management Controller' - BMC_QUERY_VERSION_COMMAND = "ipmitool mc info | grep 'Firmware Revision'" + BMC_QUERY_VERSION_COMMAND1 = ["ipmitool", "mc", "info"] + BMC_QUERY_VERSION_COMMAND2 = ["grep", 'Firmware Revision'] def __init__(self): super(ComponentBMC, self).__init__() @@ -105,7 +119,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - bmc_ver = self._get_command_result(self.BMC_QUERY_VERSION_COMMAND) + bmc_ver = self._get_command_result_pipe(self.BMC_QUERY_VERSION_COMMAND1, self.BMC_QUERY_VERSION_COMMAND2) if not bmc_ver: return 'ERR' else: @@ -158,9 +172,9 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - self._get_command_result("ipmitool raw 0x30 0xe0 0xd0 0x01 0x01") - res = self._get_command_result("ipmitool raw 0x32 0xff 0x02 {}".format(self.cplds[self.index].cmd_index)) - self._get_command_result("ipmitool raw 0x30 0xe0 0xd0 0x01 0x00") + self._get_command_result(["ipmitool", "raw", "0x30", "0xe0", "0xd0", "0x01", "0x01"]) + res = self._get_command_result(["ipmitool", "raw", "0x32", "0xff", "0x02", str(self.cplds[self.index].cmd_index)]) + self._get_command_result(["ipmitool", "raw", "0x30", "0xe0", "0xd0", "0x01", "0x00"]) if not res: return 'ERR' else: @@ -180,7 +194,8 @@ def get_component_list(cls): class ComponentPCIE(Component): COMPONENT_NAME = 'PCIe' COMPONENT_DESCRIPTION = 'ASIC PCIe Firmware' - PCIE_QUERY_VERSION_COMMAND = "bcmcmd 'pciephy fw version' | grep 'FW version'" + PCIE_QUERY_VERSION_COMMAND1 = ["bcmcmd", 'pciephy fw version'] + PCIE_QUERY_VERSION_COMMAND2 = ["grep", 'FW version'] def __init__(self): super(ComponentPCIE, self).__init__() @@ -195,7 +210,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - version = self._get_command_result(self.PCIE_QUERY_VERSION_COMMAND) + version = self._get_command_result_pipe(self.PCIE_QUERY_VERSION_COMMAND1, self.PCIE_QUERY_VERSION_COMMAND2) if not version: return 'ERR' else: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/sfp.py index 1faf552c7b56..997703be7c78 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/sfp.py @@ -8,17 +8,17 @@ # ############################################################################# -import os import time +import subprocess from ctypes import create_string_buffer try: - from sonic_platform_base.sfp_base import SfpBase - from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId - from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom - from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId - from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom - from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper + from sonic_platform_base.sfp_base import SfpBase + from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId + from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom + from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId + from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom + from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -163,7 +163,7 @@ class Sfp(SfpBase): # Path to QSFP sysfs PLATFORM_ROOT_PATH = "/usr/share/sonic/device" PMON_HWSKU_PATH = "/usr/share/sonic/hwsku" - HOST_CHK_CMD = "docker > /dev/null 2>&1" + HOST_CHK_CMD = ["docker"] PLATFORM = "x86_64-quanta_ix7_bwde-r0" HWSKU = "Quanta-IX7-BWDE-32X" @@ -259,7 +259,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return os.system(self.HOST_CHK_CMD) == 0 + return subprocess.run(self.HOST_CHK_CMD).returncode == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/utils/quanta_ix7_bwde_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/utils/quanta_ix7_bwde_util.py index a20aa33828e4..35f5b6eb5937 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/utils/quanta_ix7_bwde_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/utils/quanta_ix7_bwde_util.py @@ -27,7 +27,6 @@ clean : uninstall drivers and remove related sysfs nodes """ -import os import subprocess import sys, getopt import logging @@ -38,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG == True: +if DEBUG is True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) @@ -54,7 +53,7 @@ def main(): 'debug', 'force', ]) - if DEBUG == True: + if DEBUG is True: print(options) print(args) print(len(sys.argv)) @@ -84,7 +83,7 @@ def show_help(): sys.exit(0) def show_log(txt): - if DEBUG == True: + if DEBUG is True: print("[IX7-BWDE-32X]"+txt) return @@ -203,7 +202,9 @@ def system_install(): #QSFP for 1~32 port for port_number in range(1, 33): bus_number = port_number + 12 - os.system("echo %d >/sys/bus/i2c/devices/%d-0050/port_name" % (port_number, bus_number)) + file = "/sys/bus/i2c/devices/%d-0050/port_name" % bus_number + with open(file, 'w') as f: + f.write(str(port_number) + '\n') status, output = exec_cmd("pip3 install /usr/share/sonic/device/x86_64-quanta_ix7_bwde-r0/sonic_platform-1.0-py3-none-any.whl",1) if status: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/component.py index 95f275014f5b..ef845010893a 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/component.py @@ -14,6 +14,7 @@ import subprocess from sonic_platform_base.component_base import ComponentBase from collections import namedtuple + from sonic_py_common.general import getstatusoutput_noshell_pipe except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -47,7 +48,7 @@ def _get_command_result(cmdline): try: proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, - shell=True, stderr=subprocess.STDOUT, + stderr=subprocess.STDOUT, universal_newlines=True) stdout = proc.communicate()[0] rc = proc.wait() @@ -60,12 +61,24 @@ def _get_command_result(cmdline): return result + @staticmethod + def _get_command_result_pipe(cmd1, cmd2): + try: + rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) + if rc != 0: + raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) + + except OSError as e: + raise RuntimeError("Failed to execute command {} {} due to {}".format(cmd1, cmd2, repr(e))) + + return result + class ComponentBIOS(Component): COMPONENT_NAME = 'BIOS' COMPONENT_DESCRIPTION = 'BIOS - Basic Input/Output System' - BIOS_QUERY_VERSION_COMMAND = "dmidecode -s bios-version" + BIOS_QUERY_VERSION_COMMAND = ["dmidecode", "-s", "bios-version"] def __init__(self): super(ComponentBIOS, self).__init__() @@ -90,7 +103,8 @@ def get_firmware_version(self): class ComponentBMC(Component): COMPONENT_NAME = 'BMC' COMPONENT_DESCRIPTION = 'BMC - Board Management Controller' - BMC_QUERY_VERSION_COMMAND = "ipmitool mc info | grep 'Firmware Revision'" + BMC_QUERY_VERSION_COMMAND1 = ["ipmitool", "mc", "info"] + BMC_QUERY_VERSION_COMMAND2 = ["grep", 'Firmware Revision'] def __init__(self): super(ComponentBMC, self).__init__() @@ -105,7 +119,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - bmc_ver = self._get_command_result(self.BMC_QUERY_VERSION_COMMAND) + bmc_ver = self._get_command_result_pipe(self.BMC_QUERY_VERSION_COMMAND1, self.BMC_QUERY_VERSION_COMMAND2) if not bmc_ver: return 'ERR' else: @@ -160,7 +174,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - res = self._get_command_result("ipmitool raw 0x32 0xff 0x02 {}".format(self.cplds[self.index].cmd_index)) + res = self._get_command_result(["ipmitool", "raw", "0x32", "0xff", "0x02", str(self.cplds[self.index].cmd_index)]) if not res: return 'ERR' else: @@ -180,7 +194,8 @@ def get_component_list(cls): class ComponentPCIE(Component): COMPONENT_NAME = 'PCIe' COMPONENT_DESCRIPTION = 'ASIC PCIe Firmware' - PCIE_QUERY_VERSION_COMMAND = "bcmcmd 'pciephy fw version' | grep 'FW version'" + PCIE_QUERY_VERSION_COMMAND1 = ["bcmcmd", 'pciephy fw version'] + PCIE_QUERY_VERSION_COMMAND2 = ["grep", 'FW version'] def __init__(self): super(ComponentPCIE, self).__init__() @@ -195,7 +210,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - version = self._get_command_result(self.PCIE_QUERY_VERSION_COMMAND) + version = self._get_command_result_pipe(self.PCIE_QUERY_VERSION_COMMAND1, self.PCIE_QUERY_VERSION_COMMAND2) if not version: return 'ERR' else: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/sfp.py index f7a9a105a5c7..bdbf0d242068 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/sfp.py @@ -8,17 +8,17 @@ # ############################################################################# -import os import time +import subprocess from ctypes import create_string_buffer try: - from sonic_platform_base.sfp_base import SfpBase - from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId - from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom - from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId - from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom - from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper + from sonic_platform_base.sfp_base import SfpBase + from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId + from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom + from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId + from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom + from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -163,7 +163,7 @@ class Sfp(SfpBase): # Path to QSFP sysfs PLATFORM_ROOT_PATH = "/usr/share/sonic/device" PMON_HWSKU_PATH = "/usr/share/sonic/hwsku" - HOST_CHK_CMD = "docker > /dev/null 2>&1" + HOST_CHK_CMD = ["docker"] PLATFORM = "x86_64-quanta_ix8_rglbmc-r0" HWSKU = "Quanta-IX8-56X" @@ -281,7 +281,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return os.system(self.HOST_CHK_CMD) == 0 + return subprocess.run(self.HOST_CHK_CMD).returncode == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/utils/quanta_ix8_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/utils/quanta_ix8_util.py index 833bfe27c420..794be4061c09 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/utils/quanta_ix8_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/utils/quanta_ix8_util.py @@ -27,7 +27,6 @@ clean : uninstall drivers and remove related sysfs nodes """ -import os import subprocess import sys, getopt import logging @@ -38,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG == True: +if DEBUG is True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) @@ -54,7 +53,7 @@ def main(): 'debug', 'force', ]) - if DEBUG == True: + if DEBUG is True: print(options) print(args) print(len(sys.argv)) @@ -84,7 +83,7 @@ def show_help(): sys.exit(0) def show_log(txt): - if DEBUG == True: + if DEBUG is True: print("[IX8-56X]" + txt) return @@ -301,7 +300,9 @@ def system_install(): #QSFP for 1~56 port for port_number in range(1, 57): bus_number = port_number + 16 - os.system("echo %d >/sys/bus/i2c/devices/%d-0050/port_name" % (port_number, bus_number)) + file = "/sys/bus/i2c/devices/%d-0050/port_name" % bus_number + with open(file, 'w') as f: + f.write(str(port_number) + '\n') status, output = exec_cmd("pip3 install /usr/share/sonic/device/x86_64-quanta_ix8_rglbmc-r0/sonic_platform-1.0-py3-none-any.whl",1) if status: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/component.py index f697f9bbe53b..280d226166ab 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/component.py @@ -14,6 +14,7 @@ import subprocess from sonic_platform_base.component_base import ComponentBase from collections import namedtuple + from sonic_py_common.general import getstatusoutput_noshell_pipe except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -47,7 +48,7 @@ def _get_command_result(cmdline): try: proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, - shell=True, stderr=subprocess.STDOUT, + stderr=subprocess.STDOUT, universal_newlines=True) stdout = proc.communicate()[0] rc = proc.wait() @@ -60,12 +61,24 @@ def _get_command_result(cmdline): return result + @staticmethod + def _get_command_result_pipe(cmd1, cmd2): + try: + rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) + if rc != 0: + raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) + + except OSError as e: + raise RuntimeError("Failed to execute command {} {} due to {}".format(cmd1, cmd2, repr(e))) + + return result + class ComponentBIOS(Component): COMPONENT_NAME = 'BIOS' COMPONENT_DESCRIPTION = 'BIOS - Basic Input/Output System' - BIOS_QUERY_VERSION_COMMAND = "dmidecode -s bios-version" + BIOS_QUERY_VERSION_COMMAND = ["dmidecode", "-s", "bios-version"] def __init__(self): super(ComponentBIOS, self).__init__() @@ -90,7 +103,8 @@ def get_firmware_version(self): class ComponentBMC(Component): COMPONENT_NAME = 'BMC' COMPONENT_DESCRIPTION = 'BMC - Board Management Controller' - BMC_QUERY_VERSION_COMMAND = "ipmitool mc info | grep 'Firmware Revision'" + BMC_QUERY_VERSION_COMMAND1 = ["ipmitool", "mc", "info"] + BMC_QUERY_VERSION_COMMAND2 = ["grep", 'Firmware Revision'] def __init__(self): super(ComponentBMC, self).__init__() @@ -105,7 +119,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - bmc_ver = self._get_command_result(self.BMC_QUERY_VERSION_COMMAND) + bmc_ver = self._get_command_result_pipe(self.BMC_QUERY_VERSION_COMMAND1, self.BMC_QUERY_VERSION_COMMAND2) if not bmc_ver: return 'ERR' else: @@ -159,9 +173,9 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - self._get_command_result("ipmitool raw 0x30 0xe0 0xd0 0x01 0x01") - res = self._get_command_result("ipmitool raw 0x32 0xff 0x02 {}".format(self.cplds[self.index].cmd_index)) - self._get_command_result("ipmitool raw 0x30 0xe0 0xd0 0x01 0x00") + self._get_command_result(["ipmitool", "raw", "0x30", "0xe0", "0xd0", "0x01", "0x01"]) + res = self._get_command_result(["ipmitool", "raw", "0x32", "0xff", "0x02", str(self.cplds[self.index].cmd_index)]) + self._get_command_result(["ipmitool", "raw", "0x30", "0xe0", "0xd0", "0x01", "0x00"]) if not res: return 'ERR' else: @@ -181,7 +195,8 @@ def get_component_list(cls): class ComponentPCIE(Component): COMPONENT_NAME = 'PCIe' COMPONENT_DESCRIPTION = 'ASIC PCIe Firmware' - PCIE_QUERY_VERSION_COMMAND = "bcmcmd 'pciephy fw version' | grep 'FW version'" + PCIE_QUERY_VERSION_COMMAND1 = ["bcmcmd", 'pciephy fw version'] + PCIE_QUERY_VERSION_COMMAND2 = ["grep", 'FW version'] def __init__(self): super(ComponentPCIE, self).__init__() @@ -196,7 +211,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - version = self._get_command_result(self.PCIE_QUERY_VERSION_COMMAND) + version = self._get_command_result_pipe(self.PCIE_QUERY_VERSION_COMMAND1, self.PCIE_QUERY_VERSION_COMMAND2) if not version: return 'ERR' else: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/sfp.py index abbebb03434a..5a2385e7abd0 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/sfp.py @@ -8,17 +8,17 @@ # ############################################################################# -import os import time +import subprocess from ctypes import create_string_buffer try: - from sonic_platform_base.sfp_base import SfpBase - from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId - from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom - from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId - from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom - from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper + from sonic_platform_base.sfp_base import SfpBase + from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId + from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom + from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId + from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom + from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -163,7 +163,7 @@ class Sfp(SfpBase): # Path to QSFP sysfs PLATFORM_ROOT_PATH = "/usr/share/sonic/device" PMON_HWSKU_PATH = "/usr/share/sonic/hwsku" - HOST_CHK_CMD = "docker > /dev/null 2>&1" + HOST_CHK_CMD = ["docker"] PLATFORM = "x86_64-quanta_ix8a_bwde-r0" HWSKU = "Quanta-IX8A-BWDE-56X" @@ -281,7 +281,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return os.system(self.HOST_CHK_CMD) == 0 + return subprocess.run(self.HOST_CHK_CMD).returncode == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/utils/quanta_ix8a_bwde_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/utils/quanta_ix8a_bwde_util.py index c23824779373..05a5cbff2ec0 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/utils/quanta_ix8a_bwde_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/utils/quanta_ix8a_bwde_util.py @@ -27,7 +27,6 @@ clean : uninstall drivers and remove related sysfs nodes """ -import os import subprocess import sys, getopt import logging @@ -38,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG == True: +if DEBUG is True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) @@ -54,7 +53,7 @@ def main(): 'debug', 'force', ]) - if DEBUG == True: + if DEBUG is True: print(options) print(args) print(len(sys.argv)) @@ -84,7 +83,7 @@ def show_help(): sys.exit(0) def show_log(txt): - if DEBUG == True: + if DEBUG is True: print("[IX8A-BWDE-56X]" + txt) return @@ -301,7 +300,9 @@ def system_install(): #QSFP for 1~56 port for port_number in range(1, 57): bus_number = port_number + 12 - os.system("echo %d >/sys/bus/i2c/devices/%d-0050/port_name" % (port_number, bus_number)) + file = "/sys/bus/i2c/devices/%d-0050/port_name" % bus_number + with open(file, 'w') as f: + f.write(str(port_number) + '\n') #Enable front-ports LED decoding exec_cmd('echo 1 > /sys/class/cpld-led/CPLDLED-1/led_decode', 1) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/component.py index 75066275d2c3..efbe0a7c509e 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/component.py @@ -14,6 +14,7 @@ import subprocess from sonic_platform_base.component_base import ComponentBase from collections import namedtuple + from sonic_py_common.general import getstatusoutput_noshell_pipe except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -47,7 +48,7 @@ def _get_command_result(cmdline): try: proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, - shell=True, stderr=subprocess.STDOUT, + stderr=subprocess.STDOUT, universal_newlines=True) stdout = proc.communicate()[0] rc = proc.wait() @@ -60,12 +61,24 @@ def _get_command_result(cmdline): return result + @staticmethod + def _get_command_result_pipe(cmd1, cmd2): + try: + rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) + if rc != 0: + raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) + + except OSError as e: + raise RuntimeError("Failed to execute command {} {} due to {}".format(cmd1, cmd2, repr(e))) + + return result + class ComponentBIOS(Component): COMPONENT_NAME = 'BIOS' COMPONENT_DESCRIPTION = 'BIOS - Basic Input/Output System' - BIOS_QUERY_VERSION_COMMAND = "dmidecode -s bios-version" + BIOS_QUERY_VERSION_COMMAND = ["dmidecode", "-s", "bios-version"] def __init__(self): super(ComponentBIOS, self).__init__() @@ -90,7 +103,8 @@ def get_firmware_version(self): class ComponentBMC(Component): COMPONENT_NAME = 'BMC' COMPONENT_DESCRIPTION = 'BMC - Board Management Controller' - BMC_QUERY_VERSION_COMMAND = "ipmitool mc info | grep 'Firmware Revision'" + BMC_QUERY_VERSION_COMMAND1 = ["ipmitool", "mc", "info"] + BMC_QUERY_VERSION_COMMAND2 = ["grep", 'Firmware Revision'] def __init__(self): super(ComponentBMC, self).__init__() @@ -105,7 +119,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - bmc_ver = self._get_command_result(self.BMC_QUERY_VERSION_COMMAND) + bmc_ver = self._get_command_result_pipe(self.BMC_QUERY_VERSION_COMMAND1, self.BMC_QUERY_VERSION_COMMAND2) if not bmc_ver: return 'ERR' else: @@ -158,10 +172,10 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component - """ - self._get_command_result("ipmitool raw 0x30 0xe0 0xd0 0x01 0x01") - res = self._get_command_result("ipmitool raw 0x32 0xff 0x02 {}".format(self.cplds[self.index].cmd_index)) - self._get_command_result("ipmitool raw 0x30 0xe0 0xd0 0x01 0x00") + """ + self._get_command_result(["ipmitool", "raw", "0x30", "0xe0", "0xd0", "0x01", "0x01"]) + res = self._get_command_result(["ipmitool", "raw", "0x32", "0xff", "0x02", str(self.cplds[self.index].cmd_index)]) + self._get_command_result(["ipmitool", "raw", "0x30", "0xe0", "0xd0", "0x01", "0x00"]) if not res: return 'ERR' else: @@ -181,7 +195,8 @@ def get_component_list(cls): class ComponentPCIE(Component): COMPONENT_NAME = 'PCIe' COMPONENT_DESCRIPTION = 'ASIC PCIe Firmware' - PCIE_QUERY_VERSION_COMMAND = "bcmcmd 'pciephy fw version' | grep 'FW version'" + PCIE_QUERY_VERSION_COMMAND1 = ["bcmcmd", 'pciephy fw version'] + PCIE_QUERY_VERSION_COMMAND2 = ["grep", 'FW version'] def __init__(self): super(ComponentPCIE, self).__init__() @@ -196,7 +211,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - version = self._get_command_result(self.PCIE_QUERY_VERSION_COMMAND) + version = self._get_command_result_pipe(self.PCIE_QUERY_VERSION_COMMAND1, self.PCIE_QUERY_VERSION_COMMAND2) if not version: return 'ERR' else: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/sfp.py index 305d78aba4cc..d6c953285b01 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/sfp.py @@ -8,17 +8,17 @@ # ############################################################################# -import os +import subprocess import time from ctypes import create_string_buffer try: - from sonic_platform_base.sfp_base import SfpBase - from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId - from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom - from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId - from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom - from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper + from sonic_platform_base.sfp_base import SfpBase + from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId + from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom + from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId + from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom + from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -281,7 +281,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return os.system(self.HOST_CHK_CMD) == 0 + return subprocess.run(self.HOST_CHK_CMD).returncode == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/utils/quanta_ix8c_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/utils/quanta_ix8c_util.py index a7e50d908fe4..24826dfd5f00 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/utils/quanta_ix8c_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/utils/quanta_ix8c_util.py @@ -27,7 +27,6 @@ clean : uninstall drivers and remove related sysfs nodes """ -import os import subprocess import sys, getopt import logging @@ -38,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG == True: +if DEBUG is True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) @@ -54,7 +53,7 @@ def main(): 'debug', 'force', ]) - if DEBUG == True: + if DEBUG is True: print(options) print(args) print(len(sys.argv)) @@ -84,7 +83,7 @@ def show_help(): sys.exit(0) def show_log(txt): - if DEBUG == True: + if DEBUG is True: print("[IX8C-56X]" + txt) return @@ -297,7 +296,9 @@ def system_install(): #QSFP for 1~56 port for port_number in range(1, 57): bus_number = port_number + 12 - os.system("echo %d >/sys/bus/i2c/devices/%d-0050/port_name" % (port_number, bus_number)) + file = "/sys/bus/i2c/devices/%d-0050/port_name" % bus_number + with open(file, 'w') as f: + f.write(str(port_number) + '\n') return diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/component.py index 49d25f31cbcc..ea64c20879bb 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/component.py @@ -14,6 +14,7 @@ import subprocess from sonic_platform_base.component_base import ComponentBase from collections import namedtuple + from sonic_py_common.general import getstatusoutput_noshell_pipe except ImportError as e: raise ImportError(str(e) + "- required module not found") @@ -47,7 +48,7 @@ def _get_command_result(cmdline): try: proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, - shell=True, stderr=subprocess.STDOUT, + stderr=subprocess.STDOUT, universal_newlines=True) stdout = proc.communicate()[0] rc = proc.wait() @@ -60,12 +61,24 @@ def _get_command_result(cmdline): return result + @staticmethod + def _get_command_result_pipe(cmd1, cmd2): + try: + rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) + if rc != 0: + raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) + + except OSError as e: + raise RuntimeError("Failed to execute command {} {} due to {}".format(cmd1, cmd2, repr(e))) + + return result + class ComponentBIOS(Component): COMPONENT_NAME = 'BIOS' COMPONENT_DESCRIPTION = 'BIOS - Basic Input/Output System' - BIOS_QUERY_VERSION_COMMAND = "dmidecode -s bios-version" + BIOS_QUERY_VERSION_COMMAND = ["dmidecode", "-s", "bios-version"] def __init__(self): super(ComponentBIOS, self).__init__() @@ -90,7 +103,8 @@ def get_firmware_version(self): class ComponentBMC(Component): COMPONENT_NAME = 'BMC' COMPONENT_DESCRIPTION = 'BMC - Board Management Controller' - BMC_QUERY_VERSION_COMMAND = "ipmitool mc info | grep 'Firmware Revision'" + BMC_QUERY_VERSION_COMMAND1 = ["ipmitool", "mc", "info"] + BMC_QUERY_VERSION_COMMAND2 = ["grep", 'Firmware Revision'] def __init__(self): super(ComponentBMC, self).__init__() @@ -105,7 +119,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - bmc_ver = self._get_command_result(self.BMC_QUERY_VERSION_COMMAND) + bmc_ver = self._get_command_result_pipe(self.BMC_QUERY_VERSION_COMMAND1, self.BMC_QUERY_VERSION_COMMAND2) if not bmc_ver: return 'ERR' else: @@ -158,9 +172,9 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - self._get_command_result("ipmitool raw 0x30 0xe0 0xd0 0x01 0x01") - res = self._get_command_result("ipmitool raw 0x32 0xff 0x02 {}".format(self.cplds[self.index].cmd_index)) - self._get_command_result("ipmitool raw 0x30 0xe0 0xd0 0x01 0x00") + self._get_command_result(["ipmitool", "raw", "0x30", "0xe0", "0xd0", "0x01", "0x01"]) + res = self._get_command_result(["ipmitool", "raw", "0x32", "0xff", "0x02", str(self.cplds[self.index].cmd_index)]) + self._get_command_result(["ipmitool", "raw", "0x30", "0xe0", "0xd0", "0x01", "0x00"]) if not res: return 'ERR' else: @@ -180,7 +194,8 @@ def get_component_list(cls): class ComponentPCIE(Component): COMPONENT_NAME = 'PCIe' COMPONENT_DESCRIPTION = 'ASIC PCIe Firmware' - PCIE_QUERY_VERSION_COMMAND = "bcmcmd 'pciephy fw version' | grep 'FW version'" + PCIE_QUERY_VERSION_COMMAND1 = ["bcmcmd", 'pciephy fw version'] + PCIE_QUERY_VERSION_COMMAND2 = ["grep", 'FW version'] def __init__(self): super(ComponentPCIE, self).__init__() @@ -195,7 +210,7 @@ def get_firmware_version(self): Returns: A string containing the firmware version of the component """ - version = self._get_command_result(self.PCIE_QUERY_VERSION_COMMAND) + version = self._get_command_result_pipe(self.PCIE_QUERY_VERSION_COMMAND1, self.PCIE_QUERY_VERSION_COMMAND2) if not version: return 'ERR' else: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/sfp.py index 77176ad083f5..e40787e6108d 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/sfp.py @@ -8,21 +8,21 @@ # ############################################################################# -import os import time +import subprocess from ctypes import create_string_buffer try: - from sonic_platform_base.sfp_base import SfpBase - from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId - from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom - from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId - from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom - from sonic_platform_base.sonic_sfp.inf8628 import inf8628InterfaceId - from sonic_platform_base.sonic_sfp.qsfp_dd import qsfp_dd_InterfaceId - from sonic_platform_base.sonic_sfp.qsfp_dd import qsfp_dd_Dom - from sonic_py_common.logger import Logger - from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper + from sonic_platform_base.sfp_base import SfpBase + from sonic_platform_base.sonic_sfp.sff8472 import sff8472InterfaceId + from sonic_platform_base.sonic_sfp.sff8472 import sff8472Dom + from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId + from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom + from sonic_platform_base.sonic_sfp.inf8628 import inf8628InterfaceId + from sonic_platform_base.sonic_sfp.qsfp_dd import qsfp_dd_InterfaceId + from sonic_platform_base.sonic_sfp.qsfp_dd import qsfp_dd_Dom + from sonic_py_common.logger import Logger + from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper except ImportError as e: raise ImportError (str(e) + "- required module not found") @@ -354,7 +354,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return os.system(self.HOST_CHK_CMD) == 0 + return subprocess.run(self.HOST_CHK_CMD).returncode == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/utils/quanta_ix9_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/utils/quanta_ix9_util.py index ec14e10ad6d1..5f62307c4eb8 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/utils/quanta_ix9_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/utils/quanta_ix9_util.py @@ -27,7 +27,6 @@ clean : uninstall drivers and remove related sysfs nodes """ -import os import subprocess import sys, getopt import logging @@ -38,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG == True: +if DEBUG is True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) @@ -54,7 +53,7 @@ def main(): 'debug', 'force', ]) - if DEBUG == True: + if DEBUG is True: print(options) print(args) print(len(sys.argv)) @@ -84,7 +83,7 @@ def show_help(): sys.exit(0) def show_log(txt): - if DEBUG == True: + if DEBUG is True: print("[IX9-32X]" + txt) return @@ -237,7 +236,9 @@ def system_install(): #QSFPDD for 1~32 port for port_number in range(1, 33): bus_number = port_number + 12 - os.system("echo %d >/sys/bus/i2c/devices/%d-0050/port_name" % (port_number, bus_number)) + file = "/sys/bus/i2c/devices/%d-0050/port_name" % bus_number + with open(file, 'w') as f: + f.write(str(port_number) + '\n') return From a6453a5c68c84873fc7bd89c04d39e3a7723181a Mon Sep 17 00:00:00 2001 From: maipbui Date: Mon, 19 Sep 2022 21:34:32 +0000 Subject: [PATCH 10/13] Restore deleted text Signed-off-by: maipbui --- .../ix7-32x/sonic_platform/sfp.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py index ab3aa2aed281..eba5fb7c5fd6 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py @@ -1,3 +1,13 @@ +#!/usr/bin/env python + +############################################################################# +# Quanta +# +# Sfp contains an implementation of SONiC Platform Base API and +# provides the sfp device status which are available in the platform +# +############################################################################# + import time import subprocess from ctypes import create_string_buffer From ba7a4bec934d7c488dbe16dbbcbf7b92e98c76c8 Mon Sep 17 00:00:00 2001 From: maipbui Date: Wed, 5 Oct 2022 21:50:26 +0000 Subject: [PATCH 11/13] Change run to call and use common lib Signed-off-by: maipbui --- .../x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py | 12 ++++-------- .../ix7-32x/sonic_platform/sfp.py | 2 +- .../ix7-bwde-32x/sonic_platform/sfp.py | 2 +- .../ix8-56x/sonic_platform/sfp.py | 2 +- .../ix8a-bwde-56x/sonic_platform/sfp.py | 2 +- .../ix8c-56x/sonic_platform/sfp.py | 2 +- .../ix9-32x/sonic_platform/sfp.py | 2 +- 7 files changed, 10 insertions(+), 14 deletions(-) diff --git a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py index a6888b33e1c9..2cdcf10f8d41 100755 --- a/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py +++ b/device/quanta/x86_64-quanta_ix1b_rglbmc-r0/plugins/psuutil.py @@ -7,6 +7,7 @@ import os.path import subprocess import logging +from sonic_py_common.general import check_output_pipe try: from sonic_psu.psu_base import PsuBase @@ -27,7 +28,7 @@ def exec_cmd(cmd_args, out_file, show): logging.info('Run :'+cmd) try: with open(out_file, 'w') as f: - output = subprocess.run(cmd_args, stdout=f, universal_newlines=True, check=True).stdout + output = subprocess.check_output(cmd_args, stdout=f, universal_newlines=True) show_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info("Failed :"+cmd) @@ -48,13 +49,8 @@ def log_os_system(cmd1_args, cmd2_args, show): status = 1 output = "" try: - with subprocess.Popen(cmd1_args, universal_newlines=True, stdout=subprocess.PIPE) as p1: - with subprocess.Popen(cmd2_args, universal_newlines=True, stdin=p1.stdout, stdout=subprocess.PIPE) as p2: - output = p2.communicate()[0] - p1.wait() - if p1.returncode != 0 and p2.returncode != 0: - raise subprocess.CalledProcessError(returncode=p2.returncode, cmd=cmd, output=output) - my_log(cmd + "output:"+str(output)) + output = check_output_pipe(cmd1_args, cmd2_args) + my_log(cmd + "output:"+str(output)) except subprocess.CalledProcessError as e: logging.info('Failed :'+cmd) if show: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py index eba5fb7c5fd6..a2da83d290c5 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/sfp.py @@ -259,7 +259,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return subprocess.run(self.HOST_CHK_CMD).returncode == 0 + return subprocess.call(self.HOST_CHK_CMD) == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/sfp.py index 997703be7c78..942074bb7266 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/sfp.py @@ -259,7 +259,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return subprocess.run(self.HOST_CHK_CMD).returncode == 0 + return subprocess.call(self.HOST_CHK_CMD) == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/sfp.py index bdbf0d242068..45b14d64273c 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/sfp.py @@ -281,7 +281,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return subprocess.run(self.HOST_CHK_CMD).returncode == 0 + return subprocess.call(self.HOST_CHK_CMD) == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/sfp.py index 5a2385e7abd0..7d76740ca762 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/sfp.py @@ -281,7 +281,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return subprocess.run(self.HOST_CHK_CMD).returncode == 0 + return subprocess.call(self.HOST_CHK_CMD) == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/sfp.py index d6c953285b01..a9baef8eab36 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/sfp.py @@ -281,7 +281,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return subprocess.run(self.HOST_CHK_CMD).returncode == 0 + return subprocess.call(self.HOST_CHK_CMD) == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/sfp.py index e40787e6108d..30997115cb27 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/sfp.py @@ -354,7 +354,7 @@ def _convert_string_to_num(self, value_str): return 'N/A' def __is_host(self): - return subprocess.run(self.HOST_CHK_CMD).returncode == 0 + return subprocess.call(self.HOST_CHK_CMD) == 0 def __get_path_to_port_config_file(self): platform_path = "/".join([self.PLATFORM_ROOT_PATH, self.PLATFORM]) From 62c4237e615eb94dd09ec1ea704b66944ac41e8a Mon Sep 17 00:00:00 2001 From: maipbui Date: Mon, 17 Oct 2022 16:07:05 +0000 Subject: [PATCH 12/13] Fix lgtm Signed-off-by: maipbui --- .../ix1b-32x/utils/quanta_ix1b_util.py | 2 +- .../ix7-32x/utils/quanta_ix7_util.py | 2 +- .../ix7-bwde-32x/utils/quanta_ix7_bwde_util.py | 2 +- .../ix8-56x/utils/quanta_ix8_util.py | 2 +- .../ix8a-bwde-56x/utils/quanta_ix8a_bwde_util.py | 2 +- .../ix8c-56x/utils/quanta_ix8c_util.py | 2 +- .../ix9-32x/utils/quanta_ix9_util.py | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix1b-32x/utils/quanta_ix1b_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix1b-32x/utils/quanta_ix1b_util.py index d22d419dd3ec..b92c5cf828c2 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix1b-32x/utils/quanta_ix1b_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix1b-32x/utils/quanta_ix1b_util.py @@ -37,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG is True: +if DEBUG == True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/utils/quanta_ix7_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/utils/quanta_ix7_util.py index a3d4c380be95..9b679cacd916 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/utils/quanta_ix7_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/utils/quanta_ix7_util.py @@ -37,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG is True: +if DEBUG == True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/utils/quanta_ix7_bwde_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/utils/quanta_ix7_bwde_util.py index 35f5b6eb5937..8a3c896de5c0 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/utils/quanta_ix7_bwde_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/utils/quanta_ix7_bwde_util.py @@ -37,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG is True: +if DEBUG == True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/utils/quanta_ix8_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/utils/quanta_ix8_util.py index 794be4061c09..7875eec59a0e 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/utils/quanta_ix8_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/utils/quanta_ix8_util.py @@ -37,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG is True: +if DEBUG == True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/utils/quanta_ix8a_bwde_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/utils/quanta_ix8a_bwde_util.py index 05a5cbff2ec0..ff6141a51141 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/utils/quanta_ix8a_bwde_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/utils/quanta_ix8a_bwde_util.py @@ -37,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG is True: +if DEBUG == True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/utils/quanta_ix8c_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/utils/quanta_ix8c_util.py index 24826dfd5f00..ffa80e613a62 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/utils/quanta_ix8c_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/utils/quanta_ix8c_util.py @@ -37,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG is True: +if DEBUG == True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/utils/quanta_ix9_util.py b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/utils/quanta_ix9_util.py index 5f62307c4eb8..fa6466da3d33 100755 --- a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/utils/quanta_ix9_util.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/utils/quanta_ix9_util.py @@ -37,7 +37,7 @@ FORCE = 0 i2c_prefix = '/sys/bus/i2c/devices/' -if DEBUG is True: +if DEBUG == True: print(sys.argv[0]) print('ARGV :', sys.argv[1:]) From e521b22ed7bcf4ce66391690d33be87294c5d660 Mon Sep 17 00:00:00 2001 From: maipbui Date: Tue, 18 Oct 2022 14:16:03 +0000 Subject: [PATCH 13/13] Fix PR comments Signed-off-by: maipbui --- .../ix7-32x/sonic_platform/component.py | 4 ++-- .../ix7-bwde-32x/sonic_platform/component.py | 2 +- .../ix8-56x/sonic_platform/component.py | 2 +- .../ix8a-bwde-56x/sonic_platform/component.py | 2 +- .../ix8c-56x/sonic_platform/component.py | 2 +- .../ix9-32x/sonic_platform/component.py | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/component.py index 6be1a8797770..bbaf23533f20 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-32x/sonic_platform/component.py @@ -65,7 +65,7 @@ def _get_command_result(cmdline): def _get_command_result_pipe(cmd1, cmd2): try: rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) - if rc != 0: + if rc != [0, 0]: raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) except OSError as e: @@ -194,7 +194,7 @@ class ComponentPCIE(Component): COMPONENT_NAME = 'PCIe' COMPONENT_DESCRIPTION = 'ASIC PCIe Firmware' PCIE_QUERY_VERSION_COMMAND1 = ["bcmcmd", 'pciephy fw version'] - PCIE_QUERY_VERSION_COMMAND2 = ["grep" 'FW version'] + PCIE_QUERY_VERSION_COMMAND2 = ["grep", 'FW version'] def __init__(self): super(ComponentPCIE, self).__init__() diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/component.py index b941ff4f21f7..e5228829f5e2 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix7-bwde-32x/sonic_platform/component.py @@ -65,7 +65,7 @@ def _get_command_result(cmdline): def _get_command_result_pipe(cmd1, cmd2): try: rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) - if rc != 0: + if rc != [0, 0]: raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) except OSError as e: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/component.py index ef845010893a..03b2b1c1745c 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8-56x/sonic_platform/component.py @@ -65,7 +65,7 @@ def _get_command_result(cmdline): def _get_command_result_pipe(cmd1, cmd2): try: rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) - if rc != 0: + if rc != [0, 0]: raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) except OSError as e: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/component.py index 280d226166ab..414512fbf1bb 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8a-bwde-56x/sonic_platform/component.py @@ -65,7 +65,7 @@ def _get_command_result(cmdline): def _get_command_result_pipe(cmd1, cmd2): try: rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) - if rc != 0: + if rc != [0, 0]: raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) except OSError as e: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/component.py index efbe0a7c509e..15076314b3f2 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix8c-56x/sonic_platform/component.py @@ -65,7 +65,7 @@ def _get_command_result(cmdline): def _get_command_result_pipe(cmd1, cmd2): try: rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) - if rc != 0: + if rc != [0, 0]: raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) except OSError as e: diff --git a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/component.py b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/component.py index ea64c20879bb..c1b94b62d31a 100644 --- a/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/component.py +++ b/platform/broadcom/sonic-platform-modules-quanta/ix9-32x/sonic_platform/component.py @@ -65,7 +65,7 @@ def _get_command_result(cmdline): def _get_command_result_pipe(cmd1, cmd2): try: rc, result = getstatusoutput_noshell_pipe(cmd1, cmd2) - if rc != 0: + if rc != [0, 0]: raise RuntimeError("Failed to execute command {} {}, return code {}, {}".format(cmd1, cmd2, rc, result)) except OSError as e: