diff --git a/.gitignore b/.gitignore index faf057bff4ad..3d3848b05e19 100644 --- a/.gitignore +++ b/.gitignore @@ -147,6 +147,7 @@ src/sonic-daemon-base/build src/sonic-daemon-base/sonic_daemon_base.egg-info src/sonic-py-common/**/*.pyc +src/sonic-py-common/.eggs/ src/sonic-py-common/build src/sonic-py-common/dist src/sonic-py-common/sonic_py_common.egg-info diff --git a/device/accton/x86_64-accton_as7116_54x-r0/sonic_platform/chassis.py b/device/accton/x86_64-accton_as7116_54x-r0/sonic_platform/chassis.py index 6d5ed915812e..e737dae1c3cf 100644 --- a/device/accton/x86_64-accton_as7116_54x-r0/sonic_platform/chassis.py +++ b/device/accton/x86_64-accton_as7116_54x-r0/sonic_platform/chassis.py @@ -14,7 +14,7 @@ import json import syslog from sonic_platform_base.chassis_base import ChassisBase - from sonic_daemon_base.daemon_base import Logger + from sonic_py_common.logger import Logger from sonic_platform.fan import Fan from sonic_platform.psu import Psu from sonic_platform.component import Component diff --git a/device/accton/x86_64-accton_as7116_54x-r0/sonic_platform/sfp.py b/device/accton/x86_64-accton_as7116_54x-r0/sonic_platform/sfp.py index 2871172755a9..5033c2adf9c5 100644 --- a/device/accton/x86_64-accton_as7116_54x-r0/sonic_platform/sfp.py +++ b/device/accton/x86_64-accton_as7116_54x-r0/sonic_platform/sfp.py @@ -8,7 +8,6 @@ import os import time import subprocess - import sonic_device_util import syslog from ctypes import create_string_buffer from sonic_platform_base.sfp_base import SfpBase @@ -18,7 +17,7 @@ from sonic_platform_base.sonic_sfp.sff8436 import sff8436Dom from sonic_platform_base.sonic_sfp.sff8436 import sff8436InterfaceId from sonic_platform_base.sonic_sfp.sfputilhelper import SfpUtilHelper - from sonic_daemon_base.daemon_base import Logger + from sonic_py_common.logger import Logger except ImportError as e: raise ImportError(str(e) + "- required module not found") diff --git a/device/celestica/x86_64-cel_e1031-r0/sonic_platform/sfp.py b/device/celestica/x86_64-cel_e1031-r0/sonic_platform/sfp.py index 83ac8b2bfe68..5932b30c326e 100644 --- a/device/celestica/x86_64-cel_e1031-r0/sonic_platform/sfp.py +++ b/device/celestica/x86_64-cel_e1031-r0/sonic_platform/sfp.py @@ -11,7 +11,6 @@ import os import time import subprocess -import sonic_device_util from ctypes import create_string_buffer try: diff --git a/device/celestica/x86_64-cel_seastone-r0/sonic_platform/sfp.py b/device/celestica/x86_64-cel_seastone-r0/sonic_platform/sfp.py index 73ea26a0b01e..09c965a9b925 100644 --- a/device/celestica/x86_64-cel_seastone-r0/sonic_platform/sfp.py +++ b/device/celestica/x86_64-cel_seastone-r0/sonic_platform/sfp.py @@ -11,7 +11,6 @@ import os import time import subprocess -import sonic_device_util from ctypes import create_string_buffer try: diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py index c9ae1a335421..fbfe0d99ae71 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py @@ -21,7 +21,7 @@ from cStringIO import StringIO from sonic_eeprom import eeprom_base from sonic_eeprom import eeprom_tlvinfo - from sonic_device_util import get_machine_info + from sonic_py_common.device_info import get_machine_info import subprocess except ImportError, e: raise ImportError (str(e) + "- required module not found") diff --git a/files/image_config/process-reboot-cause/process-reboot-cause b/files/image_config/process-reboot-cause/process-reboot-cause index c9d57fd77b0a..7762250ae648 100755 --- a/files/image_config/process-reboot-cause/process-reboot-cause +++ b/files/image_config/process-reboot-cause/process-reboot-cause @@ -13,7 +13,7 @@ try: import syslog import re - import sonic_device_util + from sonic_py_common import device_info except ImportError as err: raise ImportError("%s - required module not found" % str(err)) @@ -85,7 +85,7 @@ def find_software_reboot_cause(): if os.path.isfile(FIRST_BOOT_PLATFORM_FILE): if software_reboot_cause == REBOOT_CAUSE_UNKNOWN: - version_info = sonic_device_util.get_sonic_version_info() + version_info = device_info.get_sonic_version_info() build_version = version_info['build_version'] if version_info else "unknown" software_reboot_cause += " (First boot of SONiC version {})".format(build_version) os.remove(FIRST_BOOT_PLATFORM_FILE) diff --git a/platform/broadcom/sonic-platform-modules-inventec/d7054q28b/sonic_platform/sfp.py b/platform/broadcom/sonic-platform-modules-inventec/d7054q28b/sonic_platform/sfp.py index 4d71424ccf6f..760aa179c256 100644 --- a/platform/broadcom/sonic-platform-modules-inventec/d7054q28b/sonic_platform/sfp.py +++ b/platform/broadcom/sonic-platform-modules-inventec/d7054q28b/sonic_platform/sfp.py @@ -11,7 +11,6 @@ import os import time import subprocess -import sonic_device_util from ctypes import create_string_buffer try: diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index 8986b1dbc2e8..d67f8be14188 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -11,8 +11,8 @@ try: from sonic_platform_base.chassis_base import ChassisBase from sonic_platform_base.component_base import ComponentBase - from sonic_device_util import get_machine_info - from sonic_daemon_base.daemon_base import Logger + from sonic_py_common import device_info + from sonic_py_common.logger import Logger from os import listdir from os.path import isfile, join from glob import glob @@ -66,7 +66,7 @@ def __init__(self): # Initialize SKU name and Platform name self.sku_name = self._get_sku_name() self.platform_name = self._get_platform_name() - mi = get_machine_info() + mi = device_info.get_machine_info() if mi is not None: self.name = mi['onie_platform'] else: diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/psu.py b/platform/mellanox/mlnx-platform-api/sonic_platform/psu.py index 9652fcab627f..bce17731222c 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/psu.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/psu.py @@ -11,7 +11,7 @@ try: import os.path from sonic_platform_base.psu_base import PsuBase - from sonic_daemon_base.daemon_base import Logger + from sonic_py_common.logger import Logger from sonic_platform.fan import Fan except ImportError as e: raise ImportError (str(e) + "- required module not found") diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py index aa9d18d04f84..67d8b6331ae3 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py @@ -21,7 +21,7 @@ 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_daemon_base.daemon_base import Logger + from sonic_py_common.logger import Logger from python_sdk_api.sxd_api import * from python_sdk_api.sx_api import * diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py index 859e411fb00a..29f2aee64de8 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp_event.py @@ -9,7 +9,7 @@ import time import select from python_sdk_api.sx_api import * -from sonic_daemon_base.daemon_base import Logger +from sonic_py_common.logger import Logger # SFP status from PMAOS register # 0x1 plug in diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal.py b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal.py index f1ad5d86e3c9..1a7d7b8a5c31 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/thermal.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/thermal.py @@ -10,7 +10,7 @@ try: from sonic_platform_base.thermal_base import ThermalBase - from sonic_daemon_base.daemon_base import Logger + from sonic_py_common.logger import Logger from os import listdir from os.path import isfile, join import io diff --git a/rules/sonic-config.mk b/rules/sonic-config.mk index 854b577b3362..3adb460f58d8 100644 --- a/rules/sonic-config.mk +++ b/rules/sonic-config.mk @@ -2,6 +2,6 @@ SONIC_CONFIG_ENGINE = sonic_config_engine-1.0-py2-none-any.whl $(SONIC_CONFIG_ENGINE)_SRC_PATH = $(SRC_PATH)/sonic-config-engine -$(SONIC_CONFIG_ENGINE)_DEPENDS += $(SWSSSDK_PY2) +$(SONIC_CONFIG_ENGINE)_DEPENDS += $(SWSSSDK_PY2) $(SONIC_PY_COMMON_PY2) $(SONIC_CONFIG_ENGINE)_PYTHON_VERSION = 2 SONIC_PYTHON_WHEELS += $(SONIC_CONFIG_ENGINE) diff --git a/rules/sonic-ledd.mk b/rules/sonic-ledd.mk index 056f0f6c9bd8..c9d66b113de2 100644 --- a/rules/sonic-ledd.mk +++ b/rules/sonic-ledd.mk @@ -2,4 +2,5 @@ SONIC_LEDD = python-sonic-ledd_1.1-1_all.deb $(SONIC_LEDD)_SRC_PATH = $(SRC_PATH)/sonic-platform-daemons/sonic-ledd +$(SONIC_LEDD)_WHEEL_DEPENDS = $(SONIC_PY_COMMON_PY2) SONIC_PYTHON_STDEB_DEBS += $(SONIC_LEDD) diff --git a/rules/sonic-psud.mk b/rules/sonic-psud.mk index 0249115359f3..404b18d2fe7b 100644 --- a/rules/sonic-psud.mk +++ b/rules/sonic-psud.mk @@ -2,4 +2,5 @@ SONIC_PSUD = python-sonic-psud_1.0-1_all.deb $(SONIC_PSUD)_SRC_PATH = $(SRC_PATH)/sonic-platform-daemons/sonic-psud +$(SONIC_PSUD)_WHEEL_DEPENDS = $(SONIC_PY_COMMON_PY2) SONIC_PYTHON_STDEB_DEBS += $(SONIC_PSUD) diff --git a/rules/sonic-py-common.mk b/rules/sonic-py-common.mk index b730ef55857b..bf42559376dc 100644 --- a/rules/sonic-py-common.mk +++ b/rules/sonic-py-common.mk @@ -11,5 +11,8 @@ SONIC_PYTHON_WHEELS += $(SONIC_PY_COMMON_PY2) SONIC_PY_COMMON_PY3 = sonic_py_common-1.0-py3-none-any.whl $(SONIC_PY_COMMON_PY3)_SRC_PATH = $(SRC_PATH)/sonic-py-common $(SONIC_PY_COMMON_PY3)_DEPENDS += $(SWSSSDK_PY3) +# Synthetic dependency to avoid building the Python 2 and 3 packages +# # simultaneously and any potential conflicts which may arise +$(SONIC_PY_COMMON_PY3)_DEPENDS += $(SONIC_PY_COMMON_PY2) $(SONIC_PY_COMMON_PY3)_PYTHON_VERSION = 3 SONIC_PYTHON_WHEELS += $(SONIC_PY_COMMON_PY3) diff --git a/rules/sonic-syseepromd.mk b/rules/sonic-syseepromd.mk index 8f7a6e5e902f..b8c68179571d 100644 --- a/rules/sonic-syseepromd.mk +++ b/rules/sonic-syseepromd.mk @@ -2,4 +2,5 @@ SONIC_SYSEEPROMD = python-sonic-syseepromd_1.0-1_all.deb $(SONIC_SYSEEPROMD)_SRC_PATH = $(SRC_PATH)/sonic-platform-daemons/sonic-syseepromd +$(SONIC_SYSEEPROMD)_WHEEL_DEPENDS = $(SONIC_PY_COMMON_PY2) SONIC_PYTHON_STDEB_DEBS += $(SONIC_SYSEEPROMD) diff --git a/rules/sonic-utilities.mk b/rules/sonic-utilities.mk index eba618d051dc..d6d2b5f4772f 100644 --- a/rules/sonic-utilities.mk +++ b/rules/sonic-utilities.mk @@ -12,5 +12,5 @@ SONIC_UTILS = python-sonic-utilities_1.2-1_all.deb $(SONIC_UTILS)_SRC_PATH = $(SRC_PATH)/sonic-utilities -$(SONIC_UTILS)_WHEEL_DEPENDS = $(SONIC_CONFIG_ENGINE) +$(SONIC_UTILS)_WHEEL_DEPENDS = $(SONIC_PY_COMMON_PY2) $(SONIC_CONFIG_ENGINE) SONIC_PYTHON_STDEB_DEBS += $(SONIC_UTILS) diff --git a/rules/sonic-xcvrd.mk b/rules/sonic-xcvrd.mk index b97f8dd11b79..c4b6016f1a86 100644 --- a/rules/sonic-xcvrd.mk +++ b/rules/sonic-xcvrd.mk @@ -2,4 +2,5 @@ SONIC_XCVRD = python-sonic-xcvrd_1.0-1_all.deb $(SONIC_XCVRD)_SRC_PATH = $(SRC_PATH)/sonic-platform-daemons/sonic-xcvrd +$(SONIC_XCVRD)_WHEEL_DEPENDS = $(SONIC_PY_COMMON_PY2) SONIC_PYTHON_STDEB_DEBS += $(SONIC_XCVRD) diff --git a/rules/sonic_bgpcfgd.mk b/rules/sonic_bgpcfgd.mk index 650874b619c9..32abbd5af948 100644 --- a/rules/sonic_bgpcfgd.mk +++ b/rules/sonic_bgpcfgd.mk @@ -2,6 +2,10 @@ SONIC_BGPCFGD = sonic_bgpcfgd-1.0-py2-none-any.whl $(SONIC_BGPCFGD)_SRC_PATH = $(SRC_PATH)/sonic-bgpcfgd -$(SONIC_BGPCFGD)_DEPENDS += $(SWSSSDK_PY2) +# These dependencies are only needed becuase they are dependencies +# of sonic-config-engine and bgpcfgd explicitly calls sonic-cfggen +# as part of its unit tests. +# TODO: Refactor unit tests so that these dependencies are not needed +$(SONIC_BGPCFGD)_DEPENDS += $(SWSSSDK_PY2) $(SONIC_PY_COMMON_PY2) $(SONIC_BGPCFGD)_PYTHON_VERSION = 2 SONIC_PYTHON_WHEELS += $(SONIC_BGPCFGD) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index 6d4ea6a1ad65..b2fb836ddcba 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -14,7 +14,7 @@ from lxml.etree import QName from portconfig import get_port_config -from sonic_device_util import get_npu_id_from_name +from sonic_py_common.device_info import get_npu_id_from_name """minigraph.py version_added: "1.9" diff --git a/src/sonic-config-engine/setup.py b/src/sonic-config-engine/setup.py index c75a5b5a03a6..f08577234c45 100755 --- a/src/sonic-config-engine/setup.py +++ b/src/sonic-config-engine/setup.py @@ -18,7 +18,15 @@ def get_test_suite(): url='https://github.com/Azure/sonic-buildimage', py_modules=['portconfig', 'minigraph', 'openconfig_acl', 'sonic_device_util', 'config_samples', 'redis_bcc', 'lazy_re'], scripts=['sonic-cfggen'], - install_requires=['lxml', 'jinja2>=2.10', 'netaddr', 'ipaddr', 'pyyaml', 'pyangbind==0.6.0'], + install_requires=[ + 'ipaddr', + 'jinja2>=2.10', + 'lxml', + 'netaddr', + 'pyyaml', + 'pyangbind==0.6.0', + 'sonic-py-common' + ], test_suite='setup.get_test_suite', data_files=[ ('/usr/share/sonic/templates', glob.glob('data/*')), diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index 0a94b810a189..b8e63e32ca88 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -41,12 +41,8 @@ from minigraph import parse_xml from minigraph import parse_device_desc_xml from minigraph import parse_asic_sub_role from portconfig import get_port_config -from sonic_device_util import get_machine_info -from sonic_device_util import get_platform_info -from sonic_device_util import get_system_mac -from sonic_device_util import get_npu_id_from_name -from sonic_device_util import get_npu_device_id -from sonic_device_util import is_multi_npu +from sonic_py_common.device_info import get_platform, get_system_mac +from sonic_py_common.device_info import get_npu_id_from_name, get_npu_device_id, is_multi_npu from config_samples import generate_sample_config from config_samples import get_available_config from swsssdk import SonicV2Connector, ConfigDBConnector, SonicDBConfig @@ -231,7 +227,7 @@ def main(): group.add_argument("-K", "--key", help="Lookup for a specific key") args = parser.parse_args() - platform = get_platform_info(get_machine_info()) + platform = get_platform() db_kwargs = {} if args.redis_unix_sock_file != None: diff --git a/src/sonic-py-common/sonic_py_common/device_info.py b/src/sonic-py-common/sonic_py_common/device_info.py index a1645182a84c..2598f15ef473 100644 --- a/src/sonic-py-common/sonic_py_common/device_info.py +++ b/src/sonic-py-common/sonic_py_common/device_info.py @@ -218,6 +218,31 @@ def get_npu_id_from_name(npu_name): return None +def get_npu_device_id(npu_id): + platform = get_platform_info(get_machine_info()) + if not platform: + return None + + asic_conf_file_path = os.path.join(SONIC_DEVICE_PATH, platform, ASIC_CONF_FILENAME) + if not os.path.isfile(asic_conf_file_path): + return None + + # In a multi-npu device we need to have the file "asic.conf" updated with the asic instance + # and the corresponding device id which could be pci_id. Below is an eg: for a 2 ASIC platform/sku. + # DEV_ID_ASIC_0=03:00.0 + # DEV_ID_ASIC_1=04:00.0 + device_str = "DEV_ID_ASIC_{}".format(npu_id) + + with open(asic_conf_file_path) as asic_conf_file: + for line in asic_conf_file: + tokens = line.split('=') + if len(tokens) < 2: + continue + if tokens[0] == device_str: + device_id = tokens[1].strip() + return device_id + + def get_namespaces(): """ In a multi NPU platform, each NPU is in a Linux Namespace.