[mellanox] Implement PSU related APIs based on the new platform API (#2460)
* Implement part of PSU related APIs including get_status(), get_presence() Signed-off-by: Kevin Wang <kevinw@mellanox.com>
This commit is contained in:
parent
4d2cd3cf49
commit
a9d2bf37e1
7
platform/mellanox/mlnx-platform-api.mk
Normal file
7
platform/mellanox/mlnx-platform-api.mk
Normal file
@ -0,0 +1,7 @@
|
||||
# SONIC_PLATFORM_API_PY2 package
|
||||
|
||||
SONIC_PLATFORM_API_PY2 = mlnx_platform_api-1.0-py2-none-any.whl
|
||||
$(SONIC_PLATFORM_API_PY2)_SRC_PATH = $(PLATFORM_PATH)/mlnx-platform-api
|
||||
$(SONIC_PLATFORM_API_PY2)_PYTHON_VERSION = 2
|
||||
SONIC_PYTHON_WHEELS += $(SONIC_PLATFORM_API_PY2)
|
||||
|
30
platform/mellanox/mlnx-platform-api/setup.py
Normal file
30
platform/mellanox/mlnx-platform-api/setup.py
Normal file
@ -0,0 +1,30 @@
|
||||
from setuptools import setup
|
||||
|
||||
setup(
|
||||
name='mlnx-platform-api',
|
||||
version='1.0',
|
||||
description='SONiC platform API implementation on Mellanox platform',
|
||||
license='Apache 2.0',
|
||||
author='SONiC Team',
|
||||
author_email='linuxnetdev@microsoft.com',
|
||||
url='https://github.com/Azure/sonic-buildimage',
|
||||
maintainer='Kevin Wang',
|
||||
maintainer_email='kevinw@mellanox.com',
|
||||
packages=[
|
||||
'sonic_platform_api',
|
||||
],
|
||||
classifiers=[
|
||||
'Development Status :: 3 - Alpha',
|
||||
'Environment :: Plugins',
|
||||
'Intended Audience :: Developers',
|
||||
'Intended Audience :: Information Technology',
|
||||
'Intended Audience :: System Administrators',
|
||||
'License :: OSI Approved :: Apache Software License',
|
||||
'Natural Language :: English',
|
||||
'Operating System :: POSIX :: Linux',
|
||||
'Programming Language :: Python :: 2.7',
|
||||
'Topic :: Utilities',
|
||||
],
|
||||
keywords='sonic SONiC platform-api PLATFORM-API',
|
||||
)
|
||||
|
@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#############################################################################
|
||||
# Mellanox
|
||||
#
|
||||
# Module contains an implementation of SONiC Platform Base API and
|
||||
# provides the Chassis information which are available in the platform
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
import sys
|
||||
|
||||
try:
|
||||
from sonic_platform_base.chassis_base import ChassisBase
|
||||
from sonic_platform_api.psu import Psu
|
||||
except ImportError as e:
|
||||
raise ImportError (str(e) + "- required module not found")
|
||||
|
||||
MLNX_NUM_PSU = 2
|
||||
|
||||
class Chassis(ChassisBase):
|
||||
"""Platform-specific Chassis class"""
|
||||
def __init__(self):
|
||||
ChassisBase.__init__(self)
|
||||
for index in range(MLNX_NUM_PSU):
|
||||
psu = Psu(index)
|
||||
self._psu_list.append(psu)
|
||||
|
@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#############################################################################
|
||||
# Mellanox
|
||||
#
|
||||
# Module contains an implementation of SONiC Platform Base API and
|
||||
# provides the PSUs status which are available in the platform
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
import os.path
|
||||
|
||||
try:
|
||||
from sonic_platform_base.psu_base import PsuBase
|
||||
except ImportError as e:
|
||||
raise ImportError (str(e) + "- required module not found")
|
||||
|
||||
psu_list = []
|
||||
|
||||
class Psu(PsuBase):
|
||||
"""Platform-specific Psu class"""
|
||||
def __init__(self, psu_index):
|
||||
global psu_list
|
||||
PsuBase.__init__(self)
|
||||
# PSU is 1-based on Mellanox platform
|
||||
self.index = psu_index + 1
|
||||
psu_list.append(psu_index)
|
||||
self.psu_path = "/var/run/hw-management/thermal/"
|
||||
self.psu_oper_status = "psu{}_pwr_status".format(self.index)
|
||||
self.psu_presence = "psu{}_status".format(self.index)
|
||||
if os.path.exists(os.path.join(self.psu_path, self.psu_presence)):
|
||||
self.presence_file_exists = True
|
||||
else:
|
||||
self.presence_file_exists = False
|
||||
|
||||
def get_status(self):
|
||||
"""
|
||||
Retrieves the operational status of power supply unit (PSU) defined
|
||||
|
||||
Returns:
|
||||
bool: True if PSU is operating properly, False if not
|
||||
"""
|
||||
status = 0
|
||||
try:
|
||||
with open(os.path.join(self.psu_path, self.psu_oper_status), 'r') as power_status:
|
||||
status = int(power_status.read())
|
||||
except (ValueError, IOError):
|
||||
status = 0
|
||||
|
||||
return status == 1
|
||||
|
||||
def get_presence(self):
|
||||
"""
|
||||
Retrieves the presence status of power supply unit (PSU) defined
|
||||
|
||||
Returns:
|
||||
bool: True if PSU is present, False if not
|
||||
"""
|
||||
status = 0
|
||||
if self.presence_file_exists:
|
||||
try:
|
||||
with open(os.path.join(self.psu_path, self.psu_presence), 'r') as presence_status:
|
||||
status = int(presence_status.read())
|
||||
except (ValueError, IOError):
|
||||
status = 0
|
||||
else:
|
||||
status = self.index in psu_list
|
||||
|
||||
return status == 1
|
||||
|
@ -3,6 +3,7 @@ include $(PLATFORM_PATH)/fw.mk
|
||||
include $(PLATFORM_PATH)/mft.mk
|
||||
include $(PLATFORM_PATH)/mlnx-sai.mk
|
||||
include $(PLATFORM_PATH)/hw-management.mk
|
||||
include $(PLATFORM_PATH)/mlnx-platform-api.mk
|
||||
include $(PLATFORM_PATH)/docker-syncd-mlnx.mk
|
||||
include $(PLATFORM_PATH)/docker-syncd-mlnx-rpc.mk
|
||||
include $(PLATFORM_PATH)/docker-orchagent-mlnx.mk
|
||||
|
@ -6,6 +6,7 @@ $(DOCKER_PLATFORM_MONITOR)_DEPENDS += $(LIBSWSSCOMMON) $(PYTHON_SWSSCOMMON)
|
||||
$(DOCKER_PLATFORM_MONITOR)_PYTHON_DEBS += $(SONIC_LEDD) $(SONIC_XCVRD) $(SONIC_PSUD)
|
||||
$(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SONIC_PLATFORM_COMMON_PY2)
|
||||
$(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SWSSSDK_PY2)
|
||||
$(DOCKER_PLATFORM_MONITOR)_PYTHON_WHEELS += $(SONIC_PLATFORM_API_PY2)
|
||||
$(DOCKER_PLATFORM_MONITOR)_LOAD_DOCKERS = $(DOCKER_CONFIG_ENGINE)
|
||||
|
||||
SONIC_DOCKER_IMAGES += $(DOCKER_PLATFORM_MONITOR)
|
||||
|
Reference in New Issue
Block a user