text: #!/usr/bin/env python
  
  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
  