in platform/pddf/i2c/utils/pddf_s3ip.py [0:0]
def create_s3ip_psu_sysfs():
print("Creating the System PSU sysfs ..")
log_os_system('sudo mkdir -p -m 777 /sys_switch/psu', 1)
num_psus = pddf_api.data['PLATFORM']['num_psus'] if 'num_psus' in pddf_api.data['PLATFORM'] else 0
cmd = 'sudo echo "{}" > /sys_switch/psu/number'.format(num_psus)
log_os_system(cmd, 1)
for p in range(1, num_psus+1):
cmd = 'sudo mkdir -p -m 777 /sys_switch/psu/psu{}'.format(p)
log_os_system(cmd, 1)
# model name
try:
model = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_model_name'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
model = ''.join(c for c in output if 0 < ord(c) < 127)
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/model_name'.format(model, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/model_name'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/model_name'.format(model, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/model_name'.format(model, p)
log_os_system(cmd, 1)
# hardware_version
hw_rev = 'NA'
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/hardware_version'.format(hw_rev, p)
log_os_system(cmd, 1)
# serial_number
try:
serial = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_serial_num'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
serial = ''.join(c for c in output if 0 < ord(c) < 127)
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/serial_number'.format(serial, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/serial_number'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/serial_number'.format(serial, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/serial_number'.format(serial, p)
log_os_system(cmd, 1)
# part_number ?? same as model name ??
part_num = 'NA'
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/part_number'.format(part_num, p)
log_os_system(cmd, 1)
# type (AC or DC. Fixing it to AC for now)
psutype = 1 # for AC
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/type'.format(psutype, p)
log_os_system(cmd, 1)
# in_curr (input current in milli amps)
try:
in_curr = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_i_in'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
if output.replace('.', '', 1).isdigit():
in_curr = float(output)
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_curr'.format(in_curr, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/in_curr'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_curr'.format(in_curr, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_curr'.format(in_curr, p)
log_os_system(cmd, 1)
# in_vol (input current in milli volts)
try:
in_vol = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_v_in'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
if output.replace('.', '', 1).isdigit():
in_vol = float(output)
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_vol'.format(in_vol, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/in_vol'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_vol'.format(in_vol, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_vol'.format(in_vol, p)
log_os_system(cmd, 1)
# in_power (input current in micro watts)
try:
in_power = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_p_in'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
if output.replace('.', '', 1).isdigit():
in_power = float(output)
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_power'.format(in_power, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/in_power'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_power'.format(in_power, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_power'.format(in_power, p)
log_os_system(cmd, 1)
# out_max_power (input current in micro watts)
try:
out_max_power = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_p_out_max'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
if output.replace('.', '', 1).isdigit():
out_max_power = float(output)
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_max_power'.format(out_max_power, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/out_max_power'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_max_power'.format(out_max_power, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_max_power'.format(out_max_power, p)
log_os_system(cmd, 1)
# out_curr (input current in milli amps)
try:
out_curr = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_i_in'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
if output.replace('.', '', 1).isdigit():
out_curr = float(output)
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_curr'.format(out_curr, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/out_curr'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_curr'.format(out_curr, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_curr'.format(out_curr, p)
log_os_system(cmd, 1)
# out_vol (input current in milli volts)
try:
out_vol = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_v_in'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
if output.replace('.', '', 1).isdigit():
out_vol = float(output)
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_vol'.format(out_vol, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/out_vol'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_vol'.format(out_vol, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_vol'.format(out_vol, p)
log_os_system(cmd, 1)
# number of temps
ntemps = 1 # fixing it for now
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/num_temp_sensors'.format(ntemps, p)
log_os_system(cmd, 1)
for t in range(1, ntemps+1):
cmd = 'sudo mkdir -p -m 777 /sys_switch/psu/psu{}/temp{}'.format(p, t)
log_os_system(cmd, 1)
# Add PSU temperature sensors attributes
# number of power sensors
npowers = 1
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/num_power_sensors'.format(npowers, p)
log_os_system(cmd, 1)
for power in range(1, npowers+1):
cmd = 'sudo mkdir -p -m 777 /sys_switch/psu/psu{}/power_sensor{}'.format(p, power)
log_os_system(cmd, 1)
# Add PSU power sensors attributes here
# present
try:
pres = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_present'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
pres = output
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/present'.format(pres, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/present'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/present'.format(pres, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/present'.format(pres, p)
log_os_system(cmd, 1)
# out_status
try:
status = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_power_good'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
status = output
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_status'.format(status, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/out_status'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_status'.format(status, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/out_status'.format(status, p)
log_os_system(cmd, 1)
# in_status
in_status = 'NA'
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/in_status'.format(in_status, p)
log_os_system(cmd, 1)
# fan_speed
try:
fan_speed = 'NA'
dev = 'PSU{}'.format(p)
attr = 'psu_fan1_speed_rpm'
bmc_attr = pddf_api.check_bmc_based_attr(dev, attr)
if bmc_attr is not None and bmc_attr!={}:
output = pddf_api.bmc_get_cmd(bmc_attr)
output = output.rstrip()
if output.replace('.', '', 1).isdigit():
fan_speed = int(float(output))
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/fan_speed'.format(fan_speed, p)
else:
# I2C based attribute
node = pddf_api.get_path(dev, attr)
if node:
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/fan_speed'.format(node, p)
else:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/fan_speed'.format(fan_speed, p)
except Exception as err:
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/fan_speed'.format(fan_speed, p)
log_os_system(cmd, 1)
# fan_ratio
fan_ratio = 'NA'
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/fan_ratio'.format(fan_ratio, p)
log_os_system(cmd, 1)
# led_status
result, output = pddf_api.get_system_led_color("PSU{}_LED".format(p))
if result:
node = "/sys/kernel/{}/psu{}_led".format(pddf_api.get_led_cur_state_path(), p)
cmd = 'sudo ln -s {} /sys_switch/psu/psu{}/led_status'.format(node, p)
else:
led_status = 'NA'
cmd = 'sudo echo "{}" > /sys_switch/psu/psu{}/led_status'.format(led_status, p)
log_os_system(cmd, 1)
print("Completed PSU sysfs creation")