#!/usr/bin/env python3 r""" This module contains functions which pertain to firmware. """ import bmc_ssh_utils as bsu import var_funcs as vf def get_hard_disk_info(device="/dev/sdb"): r""" Get firmware information for the given device on the OS and return it as a dictionary. Description of argument(s): device The device to be passed to the hdparm and lsblk commands (e.g. "/dev/sdb"). Example result: sda_info: [model_number]: MTFDDAK1T9TCB 00LY461 00LY570XXX [serial_number]: 179C413F [firmware_revision]: MJ06 [transport]: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0 [used]: unknown (minor revision code 0x006d) [supported]: enhanced erase [likely_used]: 10 [lba_user_addressable_sectors]: 268435455 [lba48_user_addressable_sectors]: 3750748848 [logical_sector_size]: 512 bytes [physical_sector_size]: 4096 bytes [logical_sector-0_offset]: 0 bytes [device_size_with_m_=_1024*1024]: 1831420 MBytes [device_size_with_m_=_1000*1000]: 1920383 MBytes (1920 GB) [form_factor]: 2.5 inch [nominal_media_rotation_rate]: Solid State Device [queue_depth]: 32 [standby_timer_values]: spec'd by Standard, with device specific minimum [r/w_multiple_sector_transfer]: Max = 16 Current = 16 [advanced_power_management_level]: 254 [dma]: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 [cycle_time]: no flow control=120ns IORDY flow control=120ns [pio]: pio0 pio1 pio2 pio3 pio4 [security]: [not_expired]: security count [logical_unit_wwn_device_identifier]: 500a0751179c413f [naa]: 5 [ieee_oui]: 00a075 [unique_id]: 1179c413f [checksum]: correct [name]: sda1 [maj:min]: 8:1 [rm]: 1 [size]: 4M [ro]: 0 [type]: part [mountpoint]: """ cmd_buf = ( "hdparm -I " + device + ' | egrep ":.+" | sed -re' + ' "s/[ \t]+/ /g"' ) stdout, stderr, rc = bsu.os_execute_command(cmd_buf) firmware_dict = vf.key_value_outbuf_to_dict(stdout) cmd_buf = "lsblk -P " + device + " | sed -re 's/\" /\"\\n/g'" stdout, stderr, rc = bsu.os_execute_command(cmd_buf) firmware_dict.update( vf.key_value_outbuf_to_dict(stdout, delim="=", strip=' "') ) return firmware_dict